STEP 3・Autograd(自動微分)

連鎖律・バックプロパゲーション ― 差異を上流へ遡る

記事で詰まったところ

「誤差を逆伝播する」「連鎖律で勾配を掛けながら遡る」が、何をしているのか分からない。

機械学習ではこう言う

出力の誤差を、出力側→入力側へ各段の局所勾配を掛け合わせながら遡る手続き。末端の入力が最終出力にどれだけ効いたかを求める。

差異分析のドリルダウン

予実差異分析のドリルダウンそのもの。「営業利益が予算割れ → 売上総利益が割れ → 原価率が悪化 → 材料単価が高騰」と、上位の結果から原因を一段ずつ遡る。

各段の「効き」を掛け合わせると、末端の材料単価が最終利益にどれだけ影響したかが出る。これが連鎖律=局所勾配の積。

上から下へ原因を辿り、各段の寄与を掛け算でつないでいく。途中に「効きゼロ」の段があれば、そこで影響は遮断される。

言葉の対応表

microGPT(機械学習)
会計・簿記の言葉
誤差逆伝播
営業利益の差異を上位から原因へ遡る
各段の局所勾配を掛ける
各段の寄与(効き)を掛け合わせる
末端の入力勾配
材料単価が最終利益に与えた影響

触って確かめる

材料単価50 円/kg
製造原価500 円
売上総利益1,500 円
営業利益1,200 円
各段の効きを掛け算:+10 × -1 × +1 = -10
材料単価を1円/kg 上げると、営業利益は -10 円 動く。

これが連鎖律=バックプロパゲーション。差異分析のドリルダウン(営業利益→粗利→原価→材料単価)を逆にたどり、各段の寄与を掛け合わせて末端の影響を出している。

⚠️ 実際は多変数で勾配が枝分かれ・合流する。ここは一本道の連鎖に単純化した例示。

実際のコード(microgpt.py L69-72)

この簿記アナロジーが、Karpathy のオリジナル200行のどの行に当たるか。

self.grad = 1
for v in reversed(topo):
    for child, local_grad in zip(v._children, v._local_grads):
        child.grad += local_grad * v.grad

出力の grad=1 から逆順に、各段の local_grad を v.grad に掛けて子へ足し込む(+=)=連鎖律=差異ドリルダウン。

出典: karpathy / microgpt.py (本体は原文ママ、コメントのみ日本語に補足)