「足し算の勾配は(1,1)」「掛け算の勾配は(b,a)」と書かれていて、記号の意味が分からない。
出力=a+b なら ∂out/∂a=1(加算の勾配は両方1)。出力=a×b なら ∂out/∂a=b(乗算の勾配は相手側の値)。
加算:売上合計=A店+B店。A店を1円増やせば合計も1円増える。だから勾配は1。当たり前のことを式で言っているだけ。
乗算:売上=単価×数量。単価を1円上げると、売上は「数量」の分だけ増える。だから単価の勾配は数量そのもの。逆に数量を1個増やすと売上は「単価」の分だけ増える。
ポイントは乗算では「相手側の値が自分の影響度になる」こと。数量が多い店ほど、単価を上げたときの効きが大きい。
乗算の勾配 (b, a)=相手側の値が自分の影響度。数量が多い店ほど、単価を上げたときの効きが大きい。
加算の勾配は (1, 1)。片方を1円増やせば合計も1円増える。当たり前のことを式で言っているだけ。
⚠️ 厳密には微分の積の規則。ここは数値で「相手の値が効き」になる感覚をつかむ例示。
この簿記アナロジーが、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 (本体は原文ママ、コメントのみ日本語に補足)