STEP 3・Autograd(自動微分)

加算と乗算の勾配 ― なぜ (1,1) と (相手の値) になるのか

記事で詰まったところ

「足し算の勾配は(1,1)」「掛け算の勾配は(b,a)」と書かれていて、記号の意味が分からない。

機械学習ではこう言う

出力=a+b なら ∂out/∂a=1(加算の勾配は両方1)。出力=a×b なら ∂out/∂a=b(乗算の勾配は相手側の値)。

合計と「単価×数量」の感応度

加算:売上合計=A店+B店。A店を1円増やせば合計も1円増える。だから勾配は1。当たり前のことを式で言っているだけ。

乗算:売上=単価×数量。単価を1円上げると、売上は「数量」の分だけ増える。だから単価の勾配は数量そのもの。逆に数量を1個増やすと売上は「単価」の分だけ増える。

ポイントは乗算では「相手側の値が自分の影響度になる」こと。数量が多い店ほど、単価を上げたときの効きが大きい。

言葉の対応表

microGPT(機械学習)
会計・簿記の言葉
out=a+b, 勾配=(1,1)
合計=A店+B店。片方を1円増やせば合計も1円増
out=a×b, ∂out/∂a=b
売上=単価×数量。単価の効き=数量
out=a×b, ∂out/∂b=a
数量の効き=単価

触って確かめる

乗算:売上 = 単価 × 数量
100 × 12 = 1,200 円
単価を1円上げると売上は?+12 円= 相手(数量)の値
数量を1個増やすと売上は?+100 円= 相手(単価)の値

乗算の勾配 (b, a)=相手側の値が自分の影響度。数量が多い店ほど、単価を上げたときの効きが大きい。

加算:売上合計 = A店 + B店
A店を1円増やすと合計は?+1 円
B店を1円増やすと合計は?+1 円

加算の勾配は (1, 1)。片方を1円増やせば合計も1円増える。当たり前のことを式で言っているだけ。

⚠️ 厳密には微分の積の規則。ここは数値で「相手の値が効き」になる感覚をつかむ例示。

実際のコード(microgpt.py L39-45)

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

def __add__(self, other):
    other = other if isinstance(other, Value) else Value(other)
    return Value(self.data + other.data, (self, other), (1, 1))

def __mul__(self, other):
    other = other if isinstance(other, Value) else Value(other)
    return Value(self.data * other.data, (self, other), (other.data, self.data))

加算の局所勾配は (1, 1)、乗算は (other.data, self.data)=(b, a)。デモの addGrad/mulGrad と同じ式そのもの。

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