「.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(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
(リンゴの個数) (消費税)
順方向と逆向きに局所的な微分を乗算。
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 ──┘ dzz = x * y
dz ─ = y dx
dz ─ = x dy
x ──┐ dL
│y ─
│ dz
↓ z L
(+) <-------------(何らかの計算)<------
↑ dL dL
│ dL ─ ─
│x ─ dz dL
y ──┘ dzこれらの微分値は、
を表している。
100(1x) 200(2x) 220(2.2x)
(リンゴ)---->(*)------>(*)---->(支払い)
<----↑│ <------ ↑│<----
2.2 ││ 1.1 ││ 1.0
││ ││
2│↓110 1.1│↓200
(リンゴの個数)(消費税)
100 200 650 715
(リンゴ)--->(*)--------->(+)--->(*)--->(支払い)
<---↑│ <--------- ↑│<---↑│ <---
2.2 ││ 1.1 ││1.1 ││ 1
2│↓110 ││ ││
(リンゴの個数) ││ 1.1││650
││ │↓
150 450 ││ (消費税)
(みかん)--->(*)-----------┘│
<---↑│ <------------┘
3.3 ││ 1.1
3│↓165
(みかんの個数)
乗算レイヤ:MulLayer? 加算レイヤ:AddLayer?