深層学習の誤差逆伝播法
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
「[[.NET 開発基盤部会 Wiki>http://dotnetdevelopmentinfras...
-[[戻る>深層学習(deep learning)]]
--[[パーセプトロン]]
--[[ニューラルネットワーク]]
---[[ニューラルネットワーク(推論)]]
---[[ニューラルネットワーク(学習)]]~
・深層学習の誤差逆伝播法~
・[[深層学習のテクニック]]
*目次 [#l5f09e41]
#contents
*概要 [#h7f1bb2c]
-多層ニューラルネットワークを効率よく学習させるアルゴリズム
-層がより深くなっても、学習できる仕組みとして注目される。
**[[誤差関数(損失関数)>ニューラルネットワーク(学習)#l...
-各層の重みを更新して誤差をゼロにしていく。
--最小=[[微分>DS:数学的基礎 - 微分・偏微分]]した値がゼ...
--重みのパラメタは複数あるので[[偏微分>DS:数学的基礎 - ...
-誤差の種類~
[[過学習>機械学習(machine learning)#l377f5cd]]にならな...
--訓練誤差:学習時の誤差
--汎化誤差:推論時の誤差
-損失関数のグラフの全容は実際には観測できない。
***パラメタ値の自動計算 [#udcbc3eb]
-多変数の合成関数を[[偏微分>DS:数学的基礎 - 微分・偏微分...
自動的に、各層を遡って勾配を計算し、重みを更新出来る。
-ポイント
--イテレーション~
最小の値を見つけるまで繰り返した計算の回数
--学習率
---パラメタ更新を行う際の更新幅([[パイパー・パラメタ>機...
---[[勾配>ニューラルネットワーク(学習)#e083729e]]に沿っ...
***[[見せかけの最適化を防ぐ>ニューラルネットワーク(学習...
**数式 or [[計算グラフ>#nb05eda0]] [#q3b34a43]
-[[勾配降下法>ニューラルネットワーク(学習)#v7a3cd9d]](...
計算に時間がかかるので、[[ニューラルネットワーク]]を学習...
-誤差逆伝播法は、[[数式>#wd81e6f3]] or [[計算グラフ>#g635...
***数式 [#wd81e6f3]
コチラが一般的であるが、
***[[計算グラフ>#nb05eda0]] [#g635c7bb]
ココでは、コチラを使用して視覚的に理解した上で実装する。
*計算グラフ [#nb05eda0]
-計算過程をデータ構造としてのグラフによって表す。
-データ構造としてのグラフは、複数の
--ノードと
--エッジ(ノードを結ぶ直線)
>によって表現される。
-利点
--中間の計算結果は保持される。
--局所的な計算で単純な計算に集中できる(単純化)。
--最大の利点は順伝播できる点。
---右(始点)から左(終点)に流れる。
---保持された計算結果と[[逆伝播>#r2e3f747]]で、微分を効率...
**計算グラフの例 [#b090418b]
***リンゴの例 [#s01fab91]
-100円のリンゴを2個買う(消費税10%が適用される)。
100 200 220
(リンゴ)--->(*2)--->(*1.1)--->(支払い)
-数値を外出にする(ノードは演算子だけ)。
100 200 220
(リンゴ)--->(*)--->(*)--->(支払い)
↑2 ↑1.1
(リンゴの個数)(消費税)
***リンゴとミカンの例 [#p6e466ec]
以下を購入(消費税10%が適用される。
-100円のリンゴを2個
-150円のミカンを3個
#ref(1.png,left,nowrap,1)
***局所的 [#z7ab7646]
-局所的な計算を伝播することによって、最終的な結果を得るこ...
-局所的な計算に集中できる。これによって問題に集中できる。
#ref(2.png,left,nowrap,2)
**演算ノード毎の逆伝播 [#cb2242eb]
***加算ノード [#zafaca23]
-式
z = x + y
-xで微分
dz
─ = 1
dx
-yで微分
dz
─ = 1
dy
-計算グラフ
x ──┐dL dL dz
│─ ─ ─
│dL dz dx
↓ z L
(+) <-------------(何らかの計算)<------
↑ dL dL
│dL dL dz ─ ─
│─ ─ ─ dz dL
y ──┘dL dz dx
-&color(red){なにもせず、次のノードに流す。};
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
***乗算ノード [#o8cb1675]
-式
z = x * y
-xで微分
dz
─ = y
dx
-yで微分
dz
─ = x
dy
-計算グラフ
x ──┐dL dL dz
│─ ─ ─
│dL dz dx
↓ z L
(*) <-------------(何らかの計算)<------
↑ dL dL
│dL dL dz ─ ─
│─ ─ ─ dz dL
y ──┘dL dz dx
-&color(red){倍率を乗算して次のノードに流す。};
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
**計算グラフの順伝播・逆伝播 [#r2e3f747]
-例えば、リンゴの値上がりが支払金額に、どう影響するか?を...
これは、=リンゴの値段に関する支払金額の微分を求めること...
-逆方向の伝播では、[[連鎖律>DS:数学的基礎 - 微分・偏微分...
***[[リンゴの例>#s01fab91]]の順伝播 [#s52d1a19]
y = 2.2x
-x = リンゴの値段
-y = 支払金額
100(1x) 200(2x) 220(2.2x)
(リンゴ)--->(*)---->(*)---->(支払い)
↑2 ↑1.1
(リンゴの個数) (消費税)
***[[リンゴの例>#s01fab91]]の逆伝播 [#rc32093f]
-dL~
─ = 2.2~
dx
100(1x) 200(2x) 220(2.2x)
(リンゴ)--->(*)---->(*)---->(支払い)
<--- ↑ <---- ↑ <----
2.2 │ 1.1 │ 1.0
│2 │1.1
(リンゴの個数) (消費税)
※ 2.2は(x =)リンゴの値段が1上がると最終値が幾ら上がる...
***計算グラフの逆伝播 [#a248e396]
順方向と逆向きに局所的な微分を乗算。
x y
---->(f)---->
<---- <----
dy
E ─ E
dx
*合成関数、計算グラフ、連鎖律 [#y13d4b28]
**合成関数を計算グラフで表現 [#mc94a092]
-z=(x+y)^2
-z=t^2
-t=x+y
**この計算グラフは連鎖律で微分可 [#e396491d]
***計算グラフ [#u5b60f81]
(合成関数だからね)
x t z
--------->(+)---->(^2)---->
<--------- ↑ <---- <----
dz dz dt │ dz dz dz
-- -- -- │ -- -- -- = 1
dz dt dx │ dz dt dz
│
y
***[[偏微分>DS:数学的基礎 - 微分・偏微分#z8297246]] [#ca...
dz dz dt
─ = 1, ─ = 2t, ─ = 1
dz dt dx
***[[連鎖律>DS:数学的基礎 - 微分・偏微分#w092a77a]] [#md...
x t z
--------->(+)---->(^2)---->
<--------- ↑ <---- <----
│
1*2t*1 │ 1*2t
= 2(x+y) │ = 2(x+y)
│
y
**逆伝播による勾配の自動計算 [#v7a9bf78]
計算グラフの逆伝播で得られる値は、
-[[連鎖律>#w092a77a]]で微分を乗算していって得られた値で、
-それぞれの値が1増えた時、その他の値に変更がない場合、~
最終結果に影響を与える大きさ ≒ 勾配になる。
***リンゴの例 [#td37075f]
100(1x) 200(2x) 220(2.2x)
(リンゴ)---->(*)------>(*)---->(支払い)
<----↑│ <------ ↑│<----
2.2 ││ 1.1 ││ 1.0
││ ││
2│↓110 1.1│↓200
(リンゴの個数)(消費税)
***リンゴとミカンの例 [#gf20d94c]
#ref(3.png,left,nowrap,3)
*ニューラルネットへの応用 [#i6289c9b]
以下の逆伝播が計算できれば、勾配が計算できるということに...
**中間層のアフィン変換 [#fb1a105e]
***入力&重みの[[ドット積>NumPy#l3b1be5b]] [#w0621ade]
順伝播で計算した[[ドット積>NumPy#l3b1be5b]]の行列を転置さ...
-np.dot(x, w)
--入力の場合は、dout 重みの行列を転置
np.dot(dout, w.T)
--重みの場合は、入力の行列を転置 dout
np.dot(x.T, dout)
***バイアスの加算 [#wcb80d88]
全パスの偏微分値を合計したものを加算
**中間層の活性化関数 [#c1955e8e]
***Sigmoid関数 [#v41eda9c]
***tanh関数 [#h4b30d94]
***ReLU関数 [#b2a77d11]
**出力層の活性化関数 [#o890bc64]
***恒等関数 [#z788581b]
***Sigmoid関数 [#sbbe8412]
***Softmax関数 [#td0b23e9]
**[[Python実装>E資格:試験対策#w08a5032]] [#e9e8988d]
*レイヤの実装 [#ec446ec7]
Wiki版はココで力尽きたので、あとは以下をご参照。
-https://1drv.ms/p/s!Amfs5caPP9r5jh-m6pIMwKgDln1N?e=dRS7uP
-https://github.com/OpenTouryoProject/DxCommon/blob/maste...
終了行:
「[[.NET 開発基盤部会 Wiki>http://dotnetdevelopmentinfras...
-[[戻る>深層学習(deep learning)]]
--[[パーセプトロン]]
--[[ニューラルネットワーク]]
---[[ニューラルネットワーク(推論)]]
---[[ニューラルネットワーク(学習)]]~
・深層学習の誤差逆伝播法~
・[[深層学習のテクニック]]
*目次 [#l5f09e41]
#contents
*概要 [#h7f1bb2c]
-多層ニューラルネットワークを効率よく学習させるアルゴリズム
-層がより深くなっても、学習できる仕組みとして注目される。
**[[誤差関数(損失関数)>ニューラルネットワーク(学習)#l...
-各層の重みを更新して誤差をゼロにしていく。
--最小=[[微分>DS:数学的基礎 - 微分・偏微分]]した値がゼ...
--重みのパラメタは複数あるので[[偏微分>DS:数学的基礎 - ...
-誤差の種類~
[[過学習>機械学習(machine learning)#l377f5cd]]にならな...
--訓練誤差:学習時の誤差
--汎化誤差:推論時の誤差
-損失関数のグラフの全容は実際には観測できない。
***パラメタ値の自動計算 [#udcbc3eb]
-多変数の合成関数を[[偏微分>DS:数学的基礎 - 微分・偏微分...
自動的に、各層を遡って勾配を計算し、重みを更新出来る。
-ポイント
--イテレーション~
最小の値を見つけるまで繰り返した計算の回数
--学習率
---パラメタ更新を行う際の更新幅([[パイパー・パラメタ>機...
---[[勾配>ニューラルネットワーク(学習)#e083729e]]に沿っ...
***[[見せかけの最適化を防ぐ>ニューラルネットワーク(学習...
**数式 or [[計算グラフ>#nb05eda0]] [#q3b34a43]
-[[勾配降下法>ニューラルネットワーク(学習)#v7a3cd9d]](...
計算に時間がかかるので、[[ニューラルネットワーク]]を学習...
-誤差逆伝播法は、[[数式>#wd81e6f3]] or [[計算グラフ>#g635...
***数式 [#wd81e6f3]
コチラが一般的であるが、
***[[計算グラフ>#nb05eda0]] [#g635c7bb]
ココでは、コチラを使用して視覚的に理解した上で実装する。
*計算グラフ [#nb05eda0]
-計算過程をデータ構造としてのグラフによって表す。
-データ構造としてのグラフは、複数の
--ノードと
--エッジ(ノードを結ぶ直線)
>によって表現される。
-利点
--中間の計算結果は保持される。
--局所的な計算で単純な計算に集中できる(単純化)。
--最大の利点は順伝播できる点。
---右(始点)から左(終点)に流れる。
---保持された計算結果と[[逆伝播>#r2e3f747]]で、微分を効率...
**計算グラフの例 [#b090418b]
***リンゴの例 [#s01fab91]
-100円のリンゴを2個買う(消費税10%が適用される)。
100 200 220
(リンゴ)--->(*2)--->(*1.1)--->(支払い)
-数値を外出にする(ノードは演算子だけ)。
100 200 220
(リンゴ)--->(*)--->(*)--->(支払い)
↑2 ↑1.1
(リンゴの個数)(消費税)
***リンゴとミカンの例 [#p6e466ec]
以下を購入(消費税10%が適用される。
-100円のリンゴを2個
-150円のミカンを3個
#ref(1.png,left,nowrap,1)
***局所的 [#z7ab7646]
-局所的な計算を伝播することによって、最終的な結果を得るこ...
-局所的な計算に集中できる。これによって問題に集中できる。
#ref(2.png,left,nowrap,2)
**演算ノード毎の逆伝播 [#cb2242eb]
***加算ノード [#zafaca23]
-式
z = x + y
-xで微分
dz
─ = 1
dx
-yで微分
dz
─ = 1
dy
-計算グラフ
x ──┐dL dL dz
│─ ─ ─
│dL dz dx
↓ z L
(+) <-------------(何らかの計算)<------
↑ dL dL
│dL dL dz ─ ─
│─ ─ ─ dz dL
y ──┘dL dz dx
-&color(red){なにもせず、次のノードに流す。};
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
***乗算ノード [#o8cb1675]
-式
z = x * y
-xで微分
dz
─ = y
dx
-yで微分
dz
─ = x
dy
-計算グラフ
x ──┐dL dL dz
│─ ─ ─
│dL dz dx
↓ z L
(*) <-------------(何らかの計算)<------
↑ dL dL
│dL dL dz ─ ─
│─ ─ ─ dz dL
y ──┘dL dz dx
-&color(red){倍率を乗算して次のノードに流す。};
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
**計算グラフの順伝播・逆伝播 [#r2e3f747]
-例えば、リンゴの値上がりが支払金額に、どう影響するか?を...
これは、=リンゴの値段に関する支払金額の微分を求めること...
-逆方向の伝播では、[[連鎖律>DS:数学的基礎 - 微分・偏微分...
***[[リンゴの例>#s01fab91]]の順伝播 [#s52d1a19]
y = 2.2x
-x = リンゴの値段
-y = 支払金額
100(1x) 200(2x) 220(2.2x)
(リンゴ)--->(*)---->(*)---->(支払い)
↑2 ↑1.1
(リンゴの個数) (消費税)
***[[リンゴの例>#s01fab91]]の逆伝播 [#rc32093f]
-dL~
─ = 2.2~
dx
100(1x) 200(2x) 220(2.2x)
(リンゴ)--->(*)---->(*)---->(支払い)
<--- ↑ <---- ↑ <----
2.2 │ 1.1 │ 1.0
│2 │1.1
(リンゴの個数) (消費税)
※ 2.2は(x =)リンゴの値段が1上がると最終値が幾ら上がる...
***計算グラフの逆伝播 [#a248e396]
順方向と逆向きに局所的な微分を乗算。
x y
---->(f)---->
<---- <----
dy
E ─ E
dx
*合成関数、計算グラフ、連鎖律 [#y13d4b28]
**合成関数を計算グラフで表現 [#mc94a092]
-z=(x+y)^2
-z=t^2
-t=x+y
**この計算グラフは連鎖律で微分可 [#e396491d]
***計算グラフ [#u5b60f81]
(合成関数だからね)
x t z
--------->(+)---->(^2)---->
<--------- ↑ <---- <----
dz dz dt │ dz dz dz
-- -- -- │ -- -- -- = 1
dz dt dx │ dz dt dz
│
y
***[[偏微分>DS:数学的基礎 - 微分・偏微分#z8297246]] [#ca...
dz dz dt
─ = 1, ─ = 2t, ─ = 1
dz dt dx
***[[連鎖律>DS:数学的基礎 - 微分・偏微分#w092a77a]] [#md...
x t z
--------->(+)---->(^2)---->
<--------- ↑ <---- <----
│
1*2t*1 │ 1*2t
= 2(x+y) │ = 2(x+y)
│
y
**逆伝播による勾配の自動計算 [#v7a9bf78]
計算グラフの逆伝播で得られる値は、
-[[連鎖律>#w092a77a]]で微分を乗算していって得られた値で、
-それぞれの値が1増えた時、その他の値に変更がない場合、~
最終結果に影響を与える大きさ ≒ 勾配になる。
***リンゴの例 [#td37075f]
100(1x) 200(2x) 220(2.2x)
(リンゴ)---->(*)------>(*)---->(支払い)
<----↑│ <------ ↑│<----
2.2 ││ 1.1 ││ 1.0
││ ││
2│↓110 1.1│↓200
(リンゴの個数)(消費税)
***リンゴとミカンの例 [#gf20d94c]
#ref(3.png,left,nowrap,3)
*ニューラルネットへの応用 [#i6289c9b]
以下の逆伝播が計算できれば、勾配が計算できるということに...
**中間層のアフィン変換 [#fb1a105e]
***入力&重みの[[ドット積>NumPy#l3b1be5b]] [#w0621ade]
順伝播で計算した[[ドット積>NumPy#l3b1be5b]]の行列を転置さ...
-np.dot(x, w)
--入力の場合は、dout 重みの行列を転置
np.dot(dout, w.T)
--重みの場合は、入力の行列を転置 dout
np.dot(x.T, dout)
***バイアスの加算 [#wcb80d88]
全パスの偏微分値を合計したものを加算
**中間層の活性化関数 [#c1955e8e]
***Sigmoid関数 [#v41eda9c]
***tanh関数 [#h4b30d94]
***ReLU関数 [#b2a77d11]
**出力層の活性化関数 [#o890bc64]
***恒等関数 [#z788581b]
***Sigmoid関数 [#sbbe8412]
***Softmax関数 [#td0b23e9]
**[[Python実装>E資格:試験対策#w08a5032]] [#e9e8988d]
*レイヤの実装 [#ec446ec7]
Wiki版はココで力尽きたので、あとは以下をご参照。
-https://1drv.ms/p/s!Amfs5caPP9r5jh-m6pIMwKgDln1N?e=dRS7uP
-https://github.com/OpenTouryoProject/DxCommon/blob/maste...
ページ名: