らんだむな記憶

blogというものを体験してみようか!的なー

誤差逆伝播法について再び考えてみる(1)

ニューラルネットワーク (4) 誤差逆伝播法 (1) - らんだむな記憶当時は紙に数式を書き出しながら検証したコレも今更見てもよく分からないんで。Udacityのud188を使ってもう一度考えてみる。(deep-learning-v2-pytorch/Part 3 - Training Neural Networks (Exercises).ipynb at master · udacity/deep-learning-v2-pytorch · GitHubが参考になる)
f:id:derwind:20190922003831p:plain:w174
forward propagation では

  • $L_1 = W_1 x + b_1$
  • $L_2 = S(L_1) = S(W_1 x + b_1)$
  • $\ell = W_2 L_2 + b_2 = W_2 S(L_1) + b_2 = W_2 S(W_1 x + b_1) + b_2$

であった。(ここで $S$ か活性化函数としての sigmoid 函数とする)

次に、「解析概論」の p.40 あたりを読みつつ・・・
$\ell = \ell (L_2, W_2, b_2)$ であり、これを $S$ の函数と見る場合 $S$ に依存するのは $L_2$ だけ、つまり、 $\ell = \ell (L_2(S))$ なので、 $\frac{\del \ell}{\del S} = \frac{\del \ell}{\del L_2} \frac{\del L_2}{\del S}$ となる。

次に、 $\ell$ を $L_1$ の函数と見て $L_1$ に関する $\ell$ の偏微分を計算したいが、 $\ell = \ell (L_2) = \ell (L_2(S(L_1)))$ なので、 $\frac{\del \ell}{\del L_1} = \frac{\del \ell}{\del L_2} \frac{\del L_2}{\del S} \frac{\del S}{\del L_1} = \frac{\del \ell}{\del S} \frac{\del S}{\del L_1}$ となる。

最後に、 $\ell$ を $W_1$ の函数と見て $W_1$ に関する $\ell$ の偏微分を計算したいが、 $\ell = \ell (L_2) = \ell (L_2(S(L_1))) = \ell (L_2(S(L_1(W_1, b_1))))$ である。ところで、 $b_1$ は $W_1$ に依存しないので、 結局 $\ell = \ell (L_2(S(L_1(W_1))))$ と見て良く、 $\frac{\del \ell}{\del W_1} = \frac{\del \ell}{\del L_2} \frac{\del L_2}{\del S} \frac{\del S}{\del L_1} \frac{\del L_1}{\del W_1} = \frac{\del \ell}{\del L_1} \frac{\del L_1}{\del W_1}$ となる。

こうやって、 $\frac{\del \ell}{\del L_2}$, $\frac{\del L_2}{\del S}$, $\frac{\del S}{\del L_1}$, $\frac{\del L_1}{\del W_1}$ を求めていくと、最終的に $\ell$ の各重みでの偏導函数が求まって勾配が計算できますよ、というお話・・・(だと思っている)

このことは後ほど誤差逆伝播法について再び考えてみる(4) - らんだむな記憶にて自分が理解しやすい程度に具体的かつ簡単なモデルで扱う。