Skip to main content
ゼロから作る
Deep Learning
5章: 誤差逆伝播法
2018年5月11日(金)
泰岡研究室所属
B4 工藤豪
目次
1. 連鎖律
2. 誤差逆伝播法とは
3. 計算グラフ(順伝播、逆伝播)
4. 活性化関数レイヤ(ReLU, Sigmoid)
5. Affine/Softmaxレイヤ
6. 誤差逆伝播法の勾配確認
1.連鎖律
連鎖律
(𝑥, 𝑦)から(𝑢, 𝑣)が求まり、(𝑢, 𝑣)から𝒇を求められる時、
𝒇の 𝑥, 𝑦 での微分は以下のように求まる
𝑑𝒇
𝑑𝑥
=
𝑑𝒇
𝑑𝑢
𝑑𝑢
𝑑𝑥
𝑑𝒇
𝑑𝑦
=
𝑑𝒇
𝑑𝑣
𝑑𝑣
𝑑𝑦
後の計算グラフでの「連鎖律と逆伝播」で使います。
誤差逆伝播法とは
• ニューラルネットワークの学習手順
Step1 : 訓練データの中からランダムに一部のデータを選び出す
(ミニバッチ学習)
Step2 : 各重みパラメータに関する損失関数の勾配を求める。
(ここで今回のテーマである誤差逆伝播法を利用する)
Step3 : 重みパラメータを勾配方向に微小量だけ更新する
Step4 : Step1 ~ Step3 を loop
計算グラフ
「計算グラフ」とは?
• 計算の過程をグラフに表したもの
• 複数のノードやエッジで表されている
• ノードの中には演算子、または演算の内容を記す
• エッジの上に入力値、計算結果などを書く
• 左から右へ計算:順伝播
• 右から左へ計算:逆伝播
×5
2 10
簡単な例
• 教授はPUBで1杯500円(消費税込)のビールを2杯買いました。
支払った金額を求めなさい。ただし店員に支払い時チップを500円
渡していました。 A. 1500円
ビール🍺の値段
ビールの個数🍺🍺
チップ
×
500
2
1000
500
+
1500
計算グラフの特徴
• 局所的な計算を伝達することで全体を構成する複雑な計算の結果が得られ
る。
自動車等の製造過程に似ている
計算グラフの逆伝播
• 逆伝播の計算手順
信号 𝐸 に対してノードでの局所的微分値を掛けて、左方向へ伝
達していく。
局所的微分値:順伝播の𝑦 = 𝑓 𝑥 の微分値
𝐸
𝑓
𝑥 𝑦
𝐸
𝜕𝑦
𝜕𝑥
連鎖律と逆伝播
• 𝑧 = 𝑥 + 𝑦 2という式は以下2つの構成式で表される。
𝑧 = 𝑡2
𝑡 = 𝑥 + 𝑦
ここで、𝑧の𝑥での微分値は
𝜕𝑧
𝜕𝑥
=
𝜕𝑧
𝜕𝑡
𝜕𝑡
𝜕𝑥
と表せる。
これを計算グラフでの逆伝播で𝑧の𝑥での微分値は以下のように求められる。
𝑥
𝑦
𝑡 𝑧
𝐸
^2+
𝐸
𝜕𝑧
𝜕𝑡
𝐸
𝜕𝑧
𝜕𝑡
𝜕𝑡
𝜕𝑥
逆伝播の計算グラフ上のルール1
• 加算ノードの逆伝播
𝑧 = 𝑥 + 𝑦 という式の𝑥, 𝑦それぞれ微分値を考えると、
𝜕𝑧
𝜕𝑥
= 1,
𝜕𝑧
𝜕𝑦
= 1
どちらも1になる。つまり計算グラフ上では+のノードはそのまま1を掛けて左に流せば良
い。
𝑥
𝑧
𝑦
+
𝜕𝐿
𝜕𝑧
𝜕𝐿
𝜕𝑧
∙1
𝜕𝐿
𝜕𝑧
∙1
逆伝播の計算グラフ上のルール2
• 乗算ノードの逆伝播
𝑧 = 𝑥𝑦という式の𝑥, 𝑦それぞれの微分値を考えると以下のようになる。
𝜕𝑧
𝜕𝑥
= 𝑦,
𝜕𝑧
𝜕𝑥
= 𝑥
つまり、2入力の場合は他方の入力値を掛けて左へ流せば良い。
𝑥
𝑧
𝑦
× 𝜕𝐿
𝜕𝑧
𝜕𝐿
𝜕𝑧
∙ 𝑦
𝜕𝐿
𝜕𝑧
∙ 𝑥
計算グラフでの活性化関数レイヤ1
• ReLUレイヤ
𝑦 = ቊ
𝑥 𝑥 > 0
0 (𝑥 ≤ 0)
𝜕𝑦
𝜕𝑥
= ቊ
1 𝑥 > 0
0 (𝑥 ≤ 0)
𝑥に関する微分
𝜕𝐿
𝜕𝑦
ReLU
𝑥 𝑦
𝜕𝐿
𝜕𝑦
𝑥 𝑦
0
ReLU
𝑥 > 0の時 𝑥 ≤ 0の時
𝜕𝐿
𝜕𝑦
計算グラフでの活性化関数レイヤ2
• Sigmoidレイヤ
シグモイド関数:𝑦 =
1
1+exp −𝑥
これを計算グラフで表すと以下のようになる
𝑥 −𝑥 exp(−𝑥) 1 + exp(−𝑥)
1
1+exp −𝑥
= 𝑦
-1 1
× exp /+
• Sigmoid関数の逆伝播
Point 1
入力が𝑥の時、「/」ノードは𝑦 = 1/𝑥という出力を持つが、以下
のような変形ができる。
𝜕𝑦
𝜕𝑥
= −
1
𝑥2
= −𝑦2
よって逆伝播の時は上流の値に対して−𝑦2を掛けて左に流せばよ
い。
Point2
入力が𝑥の時、 𝑦 = exp(𝑥)の微分値はそのままexp(𝑥)である。つ
まり順伝播時の出力をそのまま掛ける。
• 以上を踏まえると、sigmoid関数の逆伝播は以下のようになる。
𝑥 −𝑥 exp(−𝑥) 1 + exp(−𝑥)
1
1+exp −𝑥
= 𝑦
-1 1
× exp /+
𝜕𝐿
𝜕𝑦−
𝜕𝐿
𝜕𝑦
𝑦2−
𝜕𝐿
𝜕𝑦
𝑦2−
𝜕𝐿
𝜕𝑦
𝑦2
exp(−𝑥)
𝜕𝐿
𝜕𝑦
𝑦2
exp(−𝑥)
• さらに、
𝜕𝐿
𝜕𝑦
𝑦2 exp −𝑥 は以下のように簡略化できる。
𝜕𝐿
𝜕𝑦
𝑦2
exp −𝑥 =
𝜕𝐿
𝜕𝑦
1
1 + exp −𝑥 2
exp −𝑥
=
𝜕𝐿
𝜕𝑦
1
1 + exp −𝑥
exp −𝑥
1 + exp −𝑥
=
𝜕𝐿
𝜕𝑦
𝑦 1 − 𝑦
𝜕𝐿
𝜕𝑦
sigmoid
𝑥 𝑦
𝜕𝐿
𝜕𝑦
𝑦 1 − 𝑦
Affineレイヤ
• ニューラルネットワークの順伝播での行列の積を計算するレイ
ヤ
• 𝑿(2, ) ∙ 𝑾(2,3) = 𝑶(3, )
• 計算グラフでは
𝑿(2, )
𝑾(2,3)
𝑿 ∙ 𝑾(3, ) 𝒀(3, )
𝑩
dot +
Affineレイヤでの逆伝播
• 行列の積を計算するノードでの逆伝播の場合、行列の要素ごと
に書き下すと以下のようになる。
①
𝜕𝐿
𝜕𝑿
=
𝜕𝐿
𝜕𝒀
∙ 𝑾T
②
𝜕𝐿
𝜕𝑾
= 𝑿T ∙
𝜕𝐿
𝜕𝒀
𝑿(2, )
𝑾(2,3)
𝑿 ∙ 𝑾(3, ) 𝒀(3, )
𝑩
dot +
②
①
𝜕𝐿
𝜕𝒀
∙
𝜕𝐿
𝜕𝒀
∙
Softmax-with-Loss レイヤ
• Softmax:ソフトマックス関数
入力された値を正規化し出力する。
𝑎𝑖: 入力値、𝑦𝑖:正規化した入力値、𝑡𝑖:教師データ
• Loss: 交差エントロピー誤差
𝑦𝑖と𝑡𝑖を受け取り、それらのデータから損失𝐿を出力
𝑎1
𝑎2
𝑎3
𝑦1
𝑦2
𝑦3
𝑡1
𝑡3
𝑡2
Soft
Max
Cross
Entropy
Error
𝐿
1
𝑦2 − 𝑡2
𝑦1 − 𝑡1
𝑦3 − 𝑡3
ニューラルネットワークの学習の全体
Step1 : 訓練データの中からランダムに一部のデータを選び出
す
Step2 : 各重みパラメータに関する損失関数の勾配を求める。
Step3 : 重みパラメータを勾配方向に微小量だけ更新する
Step4 : Step1 ~ Step3 を loop
誤差逆伝播法の勾配確認
• 4章で勾配を計算した「数値微分」は実装が簡単→ミスが起き
にくい
• よって誤差逆伝播法の結果と比較するために用いる。
まとめ
• 計算グラフという計算過程を可視化できる方法を学んだ。
• ニューラルネットワークの構成要素をレイヤと呼び、それぞれ
の損失関数の勾配を効率的に求める方法として誤差逆伝播法を
学んだ。
• 計算速度は速いがややこしい誤差逆伝播法の実装に誤りがない
ことを確認するために、数値微分法の結果と比較するとよい。
• ありがとうございました。