LoginSignup
1
3

More than 1 year has passed since last update.

第7章 [誤差逆伝播法] P275~(中盤) 【Pythonで動かして学ぶ! あたらしい機械学習の教科書】

Last updated at Posted at 2019-12-30

誤差逆伝播法(バックプロパゲーション)

この誤差逆伝播法では、ネットワークの出力で生じる誤差(教師信号との差)の情報を使って、出力層の重み$v_{kj}$から中間層への重み$w_{ji}$へと入力法こと逆向きに重みを更新していくことから、この名前がつけられている。
しかし、この誤差逆伝播法は勾配法そのもので、勾配法をフィードフォワードニューラルネットに適用すると誤差逆伝播ほうが自然と導出される。

クラス分類をさせるので、誤差函数には式7-18の平均交差エントロピー誤差を考える(P266)
$$
E(w,v)=-\frac{1}{N}\sum_{n=0}^{N-1}\sum_{k=0}^{K-1}t_{nk}log(y_{nk})\hspace{40pt}(7-18)
$$

・ここでやりたいことは$\partial{E}/ \partial{w_{ji}}$(平均交差エントロピー誤差)を求めたい。
・データが1つの時の交差エントロピー$E_n$を考えたときに、その微分は$\partial{E_n} /
\partial{w_{ji}}$で求まるから、本命の$\partial{E}/ \partial{w_{ji}}$(平均交差エントロピー誤差)はデータの個数分の$\partial{E_n} / \partial{w_{ji}}$を求めてそれを平均すれば良い
ここでtはt=[0,0,1]とかで表していた、教師信号(なんのクラスを表すかの信号)

それが↓
$$
\frac{\partial{E}}{\partial{w_{ji}}}=\frac{\partial}{\partial{w_{ji}}}\frac{1}{N}
\sum_{n=0}^{N-1}E_n
=\frac{1}{N}\sum_{n=0}^{N-1}
\frac{\partial{E_n}}{\partial{w_{ji}}}
$$

今回はD=2,M=2,K=3の場合を考える。

D:入力値の個数
M:中間層の個数
K:出力の個数
w,v:重み

重みは、w,vの二つあるので、まず$E_n$を$v_{kj}$で偏微分した式を求める。その次に$E_n$を$w_{ji}$で偏微分した式を求める。(順番に特に意味はなさそう。誤差逆伝播法では、誤差を元に逆順に式展開が伝播するため逆から行っている。)

$
\frac{\partial{E}}{\partial{v_{kj}}}
$
の$E_n$の部分は7-22の$E_n(w,v)=-\sum_{k=0}^{K-1}t_{nk}log(y_{nk})$なので、$\frac{\partial{E}}{\partial{v_{kj}}}$これは連鎖律で偏微分を求めることができる。

連鎖律↓
$$
\frac{\partial{E}}{\partial{v_{kj}}}=
\frac{\partial{E}}{\partial{a_k}}\frac{\partial{a_k}}{\partial{v_{kj}}}
$$

$a_k$は入力値とダミー変数の総和

ここでは、まず左側の$\frac{\partial{E}}{\partial{a_k}}$から考える。
Eの部分は$E_n$が省略されているものなので、ここを式7-22で置き換えると、(k=0の場合で考える[データ数0個?])

$$
\frac{\partial{E}}{\partial{a_0}}= \
\frac{\partial}{\partial{a_0}}(-t_0logy_0-t_1logy_1-t_2logy_2)
$$

となる。
ここで対数の微分の公式を使うと
・説明にあるようにtは教師信号でyは入力総和の出力なので、$a_0$と関係があるため。
ここでtはt=[0,0,1]とかで表していた、教師信号(なんのクラスを表すかの信号)

対数の微分:
$
\begin{align*} (\log x)' = \frac{1}{x} \end{align*}
$

と表せる↓
$$
\frac{\partial{E}}{\partial{a_0}}=\
-t_0\frac{1}{y_0}\frac{\partial{y_0}}{\partial{a_0}}
-t_1\frac{1}{y_1}\frac{\partial{y_1}}{\partial{a_0}}
-t_2\frac{1}{y_2}\frac{\partial{y_2}}{\partial{a_0}}
\hspace{40pt}(7-27)
$$

第7章(前半)で説明したように$\partial{y_0} / \partial{a_0}$の部分ではソフトマックス関数が使用されている。
image.png

そこで、4-130で導いた、ソフトマックス関数の偏微分の公式通りにすると、
公式4-130:
$\frac{\partial{y_j}}{\partial{x_i}}=y_j(l_{ij}-y_i)$
・iは入力値の係数、jは出力値の係数
ここで、lは$i=j$のとき1、$i\neq{j}$の時0

式7-28のようになります。
$$
\frac{\partial{y_0}}{\partial{a_0}}=y_0(1-y_0)
$$
今回はダミー変数を含めるとM=K=3なのでlの部分は1

残りの二つは、入力値の係数と、出力値の係数が異なるのでそれぞれ
$$
\frac{\partial{y_1}}{\partial{a_0}}=-y_0y_1
$$
$$
\frac{\partial{y_2}}{\partial{a_0}}=-y_0y_2
$$
となる。

それぞれ3つを代入すると
よって、式7-27は以下のようになる(7-31):

\begin{align}
\frac{\partial{E}}{\partial{a_0}}&=
-t_0\frac{1}{y_0}\frac{\partial{y_0}}{\partial{a_0}}
-t_1\frac{1}{y_1}\frac{\partial{y_1}}{\partial{a_0}}
-t_2\frac{1}{y_2}\frac{\partial{y_2}}{\partial{a_0}}\\
&=-t_0(1-y_0)+t_1y_0+t_2y_0\\
&=(t_0+t_1+t_2)y_0-t_0\\
&=y_0-t_0
\end{align}

最後は$t_0+t_1+t_2=1$を使った。

$y_0$が1番目のノードのニューロンの出力で、$t_0$がそれに対する教師信号なので$y_0-t_0$は誤差を表している。

同じようにk番目のデータ(k=1,2)を考えると式(7-32)のようになる。

そして、式7-25の連鎖律の左側の部分は7-33のように表せる。(偏微分左側)

式7-25の $\partial{a_k} / \partial{v_kj}$ の部分を考える。
k=0の場合を考えると、総和の$a_0$は中間層の出力(z)と中間層から出力層への重みvの総和なので、
$$
a_0=v_{00}z_0+v_{01}z_1+v_{02}z_{02}
$$

なので、$a_0$をそれぞれのv($v_0,v_1,v_2$)について解くと7-37のようになる。

それで、7-37をまとめて書くと、7-38になる。

k=1,k=2の場合でも同様な結果が得られるので、全てまとめて式7-39のようになる
$$
\frac{\partial{a_k}}{\partial{v_{kj}}}=z_j\hspace{40pt}(7-39)
$$

これで偏微分の左側、右側が揃ったので、組み合わせると式7-40のようになる。

image.png

式7-41で言っていることは、今欲しい値は$v_{kj}$という適切な重みの値が欲しいので、その値を適切に調整する時の理論が図で表していること。
・zは(シグモイドを通しているから)0~1の値をとる確率で出力yと教師信号tの誤差分をなくすようなvになりたい分けだから、誤差($\delta_k^{(2)}$のぶんだけvの値を変更する。)
・誤差($\delta_k^{(2)}$)が0の場合 = 出力$y_k$と目標データ(教師信号)$t_k$ が一致していれば,($y_k-t_k=0$)変更分の$-\alpha\delta_k^{(2)}z_j$は0となる。

(重要)P281:

目標データ$t_k$が0なのに、出力$y_k$が0よりも大きかった場合、誤差$\delta_k^{(2)}=(y_k-t_k)$は正の値となります。$z_j$は常に正のですから、結果、$-\alpha\delta_k^{(2)}z_j$は負の数となり、$v_{kj}$は減る方向へ修正される。つまり、出力が大きすぎて誤差が生じたので、ニューロン$z_j$からの影響を絞る方向へ重みが変更されると解釈できます。また、入力$z_j$が大きかったら、その結合からの出力への寄与が大きかったことになるので、$v_{kj}$の変更量もその分大きくするようになっていると解釈できます。

ここの部分が非常に重要で、ここで言っていることは、
・目的データtよりも出力データyの方が大きければ、vの変更はその出力yを減らす方に変化する(v=0.2とかになるのかな?)
・そして、誤差(y-t=0)がなければ、vは変わらない
・また、入力値z(これは確率を表す)が大きければvの変更量もその分大きくなる

Eのwで微分を求める。

$\partial{E}/\partial{w_{ji}}$を求める

・式7-43は7-34と同じ
・式7-44は7-39と同じ
・なので、同様に式7-45は7-41と同じ
として処理できる。

$\delta_{j}^{(1)}$をとりあえずとしておいたで、それが何かを求める。

image.png

まず、最初に7-43の式を連鎖律で偏微分すると:
$$
\delta_j^{(1)}=\frac{\partial{E}}{\partial{b_j}}=
\biggl(
\sum_{k=0}^{K-1}\frac{\partial{E}}{\partial{a_k}}
\frac{\partial{a_k}}{\partial{z_j}}
\biggr)
\frac{\partial{z_j}}{\partial{b_j}}
$$
なるのを理解するのに、以下を理解する必要がある。image.png

・ここでは、$g_0$と$g_1$が$w_0$とw_1$の関数で、fがg_0$とg_1$の関数となっている場合となっているので、これを置き換える。

$$
E(a_k(z_0,z_1))
$$
(k=0~2の3つ)

なので、(4-62)が適用できる。
という関数になる。
$$
\frac{\partial}{\partial{z_j}}E(a_0(z_0,z_1),a_1(z_0,z_1),a_2(z_0,z_1))=\sum_{k=0}^{K-1}\frac{\partial{E}}{\partial{a_k}}\frac{\partial{a_k}}{\partial{z_j}}
$$
となる。

これを組み合わせると、式7-46のように展開できる。

式7-47がなぜ$v_{kj}$になるかわかりませんが、P283で説明している通り、$\delta_{j}^{(1)}$は以下のようになる
・式7-47では、$z_j$について偏微分しろと言っているので、それ以外のvは定数とおく、z=1として残るところのvだけ定数も残るので、$v_{kj}$が残る。

それらを合わせると↓

$$
\delta_{j}^{(1)}=h'(b_j)\sum_{k=0}^{K-1}v_{kj}\delta_{k}^{(2)}
$$

P284~ 誤差逆伝播法まとめ

誤差逆伝播法で行いたいことは、w,vなどの重みパラメータの最適化であり、逆向きに伝播させることでそれを可能にしている。

・最初の$h'(b_j)$は、シグモイド関数で変換されたものなので、$b_j$は0~1の値をとっている、そのため、この値は常に正の値をとる。
・$\frac{\partial{E}}{\partial{a_k}}=
\delta_{k}^{(2)}=
(y_k-t_k)h'(a_k)$なので、出力層の出力yに重みvをかけて集めてきているものです。(出力層での誤差が大きければ、v*(大きい値)となり、vが大きく働く。) 

①では、まず、適当にw,vを設定して、出力yを得る。
②教師信号のtがあるので、そのtとyを比較する。
③今まで導出した式を用いて誤差を逆向きに伝播する。具体的には全ての誤差(y-t)と重みv(2層目)をかけて総和をとり、それを中間層のシグモイド関数を通した総和$h'(b_0)$をかける。(それが③の図の式)
④誤差が0になるようにw,vを更新する。(誤差がわかったので、その分が0になるようにする。)

image.png
image.png

 誤差逆伝播法式まとめ

image.png

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3