「.NET 開発基盤部会 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
損失関数の勾配を計算するための
数値微分は、計算に時間がかかるので、
「誤差逆伝播法」を使用して効率よく計算を行う。
「誤差逆伝播法」は、
によって理解する。
前者が一般的であるが、ここでは、
後者を使用して視覚的に理解した上で実装する。
によって表現される。
100 200 220 (リンゴ)--->(*2)--->(*1.1)--->(支払い)
100 200 220 (リンゴ)--->(*)--->(*)--->(支払い) ↑2 ↑1.1 (リンゴの個数)(消費税)
100 200 650 715 (リンゴ)--->(*)--------->(+)--->(*)--->(支払い) ↑2 ↑ ↑1.1 (リンゴの個数) │ (消費税) │ 150 450 │ (みかん)--->(*)-----------┘ ↑3 (みかんの個数)
100 200 4,200 4,620 (リンゴ)--->(*)------------->(+)--->(*)--->(支払い) ↑2 ↑ ↑1.1 (リンゴの個数) │ (消費税) │ │ (沢山の買い物)--->(複雑な計算)┘4000
100(x) 200(2x) 220(2.2x) (リンゴ)--->(*)---->(*)---->(支払い) ↑2 ↑1.1 (リンゴの個数) (消費税)
100(x) 200(2x) 220(2.2x) (リンゴ)--->(*)---->(*)---->(支払い) <--- ↑ <---- ↑ <---- 2.2 │ 1.1 │ 1.0 │2 │1.1 (リンゴの個数) (消費税)
順方向と逆向きに局所的な微分を乗算。
x y ---->(f)----> <---- <---- dy E ─ E dx
合成関数の微分についての性質。
「ある関数が、合成関数で表される場合、合成関数の微分は、
合成関数を構成する関数の微分の積で表すことが出来る。」
合成関数(関数Aと関数B)
2 z = t t = x + y
dz ─ = 2t dt
dt ─ = 1 dx
dz dz dt ─ = ─ ─ = 2t * 1 = 2t = 2( x + y) dx dt dx
連鎖率の計算を計算グラフで表現する。
x t z --------->(+)---->(^2)----> <--------- ↑ <---- <---- dz dt │ dz dz 1 ─ ─ │ 1 ─ ─ = 1 dt dx │ dt dz │ y
x t z ------------>(+)---->(^2)----> <------------ ↑ <---- <---- │ 1 * 2(x + y) │ 2t = 2(x + y) │ │ y
z = x + y
dz ─ = 1 dx
dz ─ = 1 dy
x ──┐ dL │1 ─ │ dz ↓ z L (+) <-------------(何らかの計算)<------ ↑ dL dL │ dL ─ ─ │1 ─ dz dL y ──┘ dz
z = x * y
dz ─ = y dx
dz ─ = x dy
x ──┐ dL │y ─ │ dz ↓ z L (+) <-------------(何らかの計算)<------ ↑ dL dL │ dL ─ ─ │x ─ dz dL y ──┘ dz
100(x) 200(2x) 220(2.2x) (リンゴ)---->(*)------>(*)---->(支払い) <----↑│ <------ ↑│<---- 2.2 ││ 1.1 ││ 1.0 ││ ││ 2│↓100 1.1│↓200 (リンゴの個数)(消費税)