STEP 3・Autograd(自動微分)

微分・勾配・局所勾配 ― 売上を1円動かすと利益はいくら動く?

記事で詰まったところ

「局所勾配」「微分」「勾配が大きい/小さい」と言われても、数式の話としてはピンとこない。

機械学習ではこう言う

勾配(微分)とは「入力を少し動かすと出力がどれだけ動くか」という感応度のこと。各演算ノードが持つ局所的な感応度を局所勾配と呼ぶ。

感応度分析(センシティビティ)

会計人が毎期やっている感応度分析そのもの。「売上を1円増やすと営業利益はいくら増えるか」を考える。

変動費率が30%なら、売上1円増は利益を0.70円増やす。この 0.70 が勾配。固定費はいくら売上が動いても変わらないので、固定費の勾配はゼロ=利益に効かない。

勾配が大きい変数=利益への効きが大きいレバー、勾配が小さい変数=動かしても効かない変数、と読み替えられる。

言葉の対応表

microGPT(機械学習)
会計・簿記の言葉
勾配(微分)
感応度(1単位動かしたときの効き)
局所勾配
各科目が利益に与える限界的な効き
勾配が0
固定費のように動かしても効かない

触って確かめる

売上を1万円増やすと利益は+0.70 万円これが勾配 = 1 − 変動費率 = 0.70
限界利益(利益に効く分)
70%
変動費(効かない分)
30%
現在の利益 = 売上 500 × 0.70 − 固定費 200 = 150 万円

固定費は売上が動いても変わらないので、勾配(効き)はゼロ。だから上のバーにも出てきません。

⚠️ あくまで直感の橋渡し。実際の勾配は多変数の偏微分で、ここは1変数の例示。

実際のコード(microgpt.py L30-37)

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

class Value:
    def __init__(self, data, children=(), local_grads=()):
        self.data = data                # 順方向で決まる数値(金額)
        self.grad = 0                   # 損失に対する効き=感応度
        self._children = children       # 上流ノード(計算グラフの子)
        self._local_grads = local_grads # 子への局所勾配

data が金額、grad が「1動かすと損益がいくら動くか」の感応度。順方向で data が、逆方向(backward)で grad が埋まる。

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