ディープラーニングについてディープにラーニング。

思いっきり、自分が学んだことのアウトプットしていきますが、何分初心者。もし何かアドバイス等頂けましたら幸いです!

今日もオーライリー

今日もオーライリー

f:id:kawam0t0:20191214170937p:plain

第5章まで進んだ。
とうとう来たか。
誤差逆伝播法。

僕の先生からはゼロから始めるディープラーニングは3章、4章、7章だけ抑えてたらいいよーと
アドバイスいただいたが、自分の場合、理論度スルー出来たので、
勉強のためにも、進みます。

誤差逆伝播

これは、よくforward(順伝播)の反対として使われるbackward(逆伝播)からきている。
まずは、順伝播についての理解から始める。

順伝播について

順伝播とは、普段我々が数式を計算するときに左から右へ計算を行うと思うが、
まるっきりあれ。
一応図に乗せる。

f:id:kawam0t0:20191217222820p:plain

右から左へと計算が伝播されている。
図の説明で行くと、
100円のリンゴが2個で200円。消費税が加わって、220円になったよって図。

これが順伝播。

逆伝播は下の図。

f:id:kawam0t0:20191217223152p:plain
ん?
って一瞬あせったけど、なんてことない。
これが逆伝播での微分計算。
つまり、1の時のふり幅を表現している。

1の時のふり幅、というのが個人的にはとても理解しやすくて、
1の時のふり幅ってことは、もちろん逆伝播するとき、初めに入力されるのは1の値である、ということ。

そこから、こんな計算のアルゴリズムで求められる。
図の数字でそのまま表すと、
①まず入力値は1
②つぎに、入力値1に対して、200分の220を掛け算。 → 1.1
③入力値1 × 200分の220 ×100分の200 → 2.2

それぞれ、1円上がれば、1.1円並びに2.2円増えるってことを表現している。
これが、微分である。
その瞬間の増え幅って感じかな。

文献には、加算ノードの逆伝播と、乗算ノードの逆伝播について記載があったので
そこもまとめとく。

加算ノード

加算ノードは簡単。上流から下ってきた値をそのまま、下流に流していくだけ。

f:id:kawam0t0:20191217223956p:plain

こんな感じ。

乗算ノード

乗算ノードはちょっとややこい。
上流の値に順伝播の入力信号をひっくり返した値を乗算して下流に流す。
図を見たほうがわかりやすい。
f:id:kawam0t0:20191217224135p:plain

入力値が今回は1.3と仮定。
そうすると、
xへの逆伝播の値は、 1.3 × 5(yの順伝播の入力値) → 6.5
yへの逆伝播の値は、 1.3 × 10(xの順伝播の入力値) → 13

になる。

んで、文献での問題がこれ。
これわかったら、ここまでは一旦OK。

f:id:kawam0t0:20191217224513p:plain

コードは書いたけど、
どっちかっていうと、コードよりも数式で理解していたほうが今回はいい気がした。


では、また。