「.NET 開発基盤部会 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
コチラが一般的であるが、
ココでは、コチラを使用して視覚的に理解した上で実装する。
によって表現される。
100 200 220 (リンゴ)--->(*2)--->(*1.1)--->(支払い)
100 200 220 (リンゴ)--->(*)--->(*)--->(支払い) ↑2 ↑1.1 (リンゴの個数)(消費税)
以下を購入(消費税10%が適用される。
z = x + y
dz ─ = 1 dx
dz ─ = 1 dy
x ──┐dL dL dz │─ ─ ─ │dL dz dx ↓ z L (+) <-------------(何らかの計算)<------ ↑ dL dL │dL dL dz ─ ─ │─ ─ ─ dz dL y ──┘dL dz dx
dL dL dL dz dL dL ─ = ─ ─ ─ = 1 ─ 1 = ─ dx dL dz dx dz dz dL dL dL dz dL dL ─ = ─ ─ ─ = 1 ─ 1 = ─ dy dL dz dy dz dz
z = x * y
dz ─ = y dx
dz ─ = x dy
x ──┐dL dL dz │─ ─ ─ │dL dz dx ↓ z L (*) <-------------(何らかの計算)<------ ↑ dL dL │dL dL dz ─ ─ │─ ─ ─ dz dL y ──┘dL dz dx
dL dL dL dz dL dL ─ = ─ ─ ─ = 1 ─ x = ─ x dx dL dz dx dz dz dL dL dL dz dL dL ─ = ─ ─ ─ = 1 ─ y = ─ y dy dL dz dy dz dz
y = 2.2x
100(1x) 200(2x) 220(2.2x) (リンゴ)--->(*)---->(*)---->(支払い) ↑2 ↑1.1 (リンゴの個数) (消費税)
100(1x) 200(2x) 220(2.2x) (リンゴ)--->(*)---->(*)---->(支払い) <--- ↑ <---- ↑ <---- 2.2 │ 1.1 │ 1.0 │2 │1.1 (リンゴの個数) (消費税)
※ 2.2は(x =)リンゴの値段が1上がると最終値が幾ら上がるか?を表している。
順方向と逆向きに局所的な微分を乗算。
x y ---->(f)----> <---- <---- dy E ─ E dx
(合成関数だからね)
x t z --------->(+)---->(^2)----> <--------- ↑ <---- <---- dz dz dt │ dz dz dz -- -- -- │ -- -- -- = 1 dz dt dx │ dz dt dz │ y
dz dz dt ─ = 1, ─ = 2t, ─ = 1 dz dt dx
x t z --------->(+)---->(^2)----> <--------- ↑ <---- <---- │ 1*2t*1 │ 1*2t = 2(x+y) │ = 2(x+y) │ y
計算グラフの逆伝播で得られる値は、
100(1x) 200(2x) 220(2.2x) (リンゴ)---->(*)------>(*)---->(支払い) <----↑│ <------ ↑│<---- 2.2 ││ 1.1 ││ 1.0 ││ ││ 2│↓110 1.1│↓200 (リンゴの個数)(消費税)
以下の逆伝播が計算できれば、勾配が計算できるということになる。
Wiki版はココで力尽きたので、あとは以下をご参照。