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

スポンサーリンク

Deep Learningを勉強すると、とにかく分からないバックプロパゲーション。

やっていることは、入力の値に重みやバイアスを掛けて構築されるニューラルネットワークの出力値が目標値に近づくように重みやバイアスを調整するいわゆる学習の工程ですが、行列の計算式や∑がつらつら出てくるので、ぜんぜん理解できない。。

しかし、下図のよく出てくるニューラルネットワークの図を見ていると、yの値は入力値xの値と未知数のw、bの値からなっており、出力値と目標値の差の二乗の合計の値が最小になるようにw,bの値を求めてやればいい。

Deep Learning backpropagation

この出力値と目標値の差の二乗の合計の値が最小になるにっていう響き、何か聞いたことがあるぞ!  そう最小二乗法!!

最小二乗法では二乗誤差の合計が最小となるように、二乗誤差の合計の式に関して

 未知数の偏微分 = 0

として、未知数を求めますが、同じようなノリで、二乗誤差の合計の式に関して未知数の偏微分の値が0に近づくように未知数を更新してやる処理がバックプロパゲーションとなります。(この説明だけでは、バック感が無いのですが、バック感が出てくるのは最後のほうの説明で。)

未知数の偏微分の値を0にするのが最小二乗法ですが、未知数の偏微分の値が小さくなるように未知数を更新しながら誤差を小さくする手法が勾配降下法となります。

Deep Learning backpropagation

ここからが本題です。

通常の最小二乗法と比べ、未知数が多く、特に中間層の重み(w)やバイアス(b)を求める方法が私にはなかなか理解できなかったのですが、基本はやはり二乗誤差の合計が最小となるように二乗誤差の合計を未知数で偏微分し、誤差が最小になるように未知数を更新します。

$$w\leftarrow w-\eta \frac { \partial E }{ \partial w } $$

$$b\leftarrow b-\eta \frac { \partial E }{ \partial b } $$

$$\eta は学習率で0.01など$$

ここで、各層の重みやバイアス、活性化関数を表現できるように、定番のニューラルネットワークの図を下図のように書き換えます。

Deep Learning backpropagation

上図の記号の意味は

Deep Learning backpropagation

のように、記号の右上にカッコ付きで層番号、右下に入力ノード番号、出力ノード番号を表します。

aは入力値と重みを掛けて合計した値で、例えば、

$${ a }_{ 1 }^{ (1) }=1 { b }_{ 0,1 }^{ (1) }+{ x }_{ 1 } { w }_{ 1,1 }^{ (1) }+{ x }_{ 2 } { w }_{ 2,1 }^{ (1) }+{ x }_{ 3 } { w }_{ 3,1 }^{ (1) }+{ x }_{ 4 } { w }_{ 4,1 }^{ (1) }$$

$${ a }_{ 1 }^{ (2) }=1 { b }_{ 0,1 }^{ (2) }+{ f }^{ (1) }\left( { a }_{ 1 }^{ (1) } \right)  { w }_{ 1,1 }^{ (2) }+{ f }^{ (1) }\left( { a }_{ 2 }^{ (1) } \right) \ { w }_{ 2,1 }^{ (2) }+{ f }^{ (1) }\left( { a }_{ 2 }^{ (1) } \right)  { w }_{ 3,1 }^{ (2) }$$

その他の記号は

b:バイアス

w:重み

f:各層の活性化関数

とします。

順伝播

順伝播を少々面倒ですが、すべて書き出してみます。

第1層

$${ a }_{ 1 }^{ (1) }=1 { b }_{ 0,1 }^{ (1) }+{ x }_{ 1 } { w }_{ 1,1 }^{ (1) }+{ x }_{ 2 } { w }_{ 2,1 }^{ (1) }+{ x }_{ 3 } { w }_{ 3,1 }^{ (1) }+{ x }_{ 4 } { w }_{ 4,1 }^{ (1) }$$

$${ a }_{ 2 }^{ (1) }=1 { b }_{ 0,2 }^{ (1) }+{ x }_{ 2 } { w }_{ 1,2 }^{ (1) }+{ x }_{ 2 } { w }_{ 2,2 }^{ (1) }+{ x }_{ 3 } { w }_{ 3,2 }^{ (1) }+{ x }_{ 4 } { w }_{ 4,2 }^{ (1) }$$

$${ a }_{ 3 }^{ (1) }=1 { b }_{ 0,3 }^{ (1) }+{ x }_{ 2 } { w }_{ 1,3 }^{ (1) }+{ x }_{ 2 } { w }_{ 2,3 }^{ (1) }+{ x }_{ 3 } { w }_{ 3,3 }^{ (1) }+{ x }_{ 4 } { w }_{ 4,3 }^{ (1) }$$

活性化関数後は

$${ f }^{ (1) }\left( { a }_{ 1 }^{ (1) } \right)$$

$${ f }^{ (1) }\left( { a }_{ 2 }^{ (1) } \right)$$

$${ f }^{ (1) }\left( { a }_{ 3 }^{ (1) } \right)$$

第2層

$${ a }_{ 1 }^{ (2) }=1{ b }_{ 0,1 }^{ (2) }+{ f }^{ (1) }\left( { a }_{ 1 }^{ (1) } \right) { w }_{ 1,1 }^{ (2) }+{ f }^{ (1) }\left( { a }_{ 2 }^{ (1) } \right) { w }_{ 2,1 }^{ (2) }+{ f }^{ (1) }\left( { a }_{ 3 }^{ (1) } \right) { w }_{ 3,1 }^{ (2) }$$

$${ a }_{ 2 }^{ (2) }=1{ b }_{ 0,2 }^{ (2) }+{ f }^{ (1) }\left( { a }_{ 1 }^{ (1) } \right) { w }_{ 1,2 }^{ (2) }+{ f }^{ (1) }\left( { a }_{ 2 }^{ (1) } \right) { w }_{ 2,2 }^{ (2) }+{ f }^{ (1) }\left( { a }_{ 3 }^{ (1) } \right) { w }_{ 3,2 }^{ (2) }$$

活性化関数後は

$${ f }^{ (2) }\left( { a }_{ 1 }^{ (2) } \right)$$

$${ f }^{ (2) }\left( { a }_{ 2 }^{ (2) } \right)$$

第3層

$${ a }_{ 1 }^{ (3) }=1{ b }_{ 0,1 }^{ (3) }+{ f }^{ (2) }\left( { a }_{ 1 }^{ (2) } \right) { w }_{ 1,1 }^{ (3) }+{ f }^{ (2) }\left( { a }_{ 2 }^{ (2) } \right) { w }_{ 2,1 }^{ (3) }$$

$${ a }_{ 2 }^{ (3) }=1{ b }_{ 0,2 }^{ (3) }+{ f }^{ (2) }\left( { a }_{ 1 }^{ (2) } \right) { w }_{ 1,2 }^{ (3) }+{ f }^{ (2) }\left( { a }_{ 2 }^{ (2) } \right) { w }_{ 2,2 }^{ (3) }$$

活性化関数後は

$${ f }^{ (3) }\left( { a }_{ 1 }^{ (3) } \right)$$

$${ f }^{ (3) }\left( { a }_{ 2 }^{ (3) } \right)$$

逆伝播

逆伝播に関しては誤差の関数

$$E=\frac { 1 }{ 2 } \sum _{ i }^{ }{ { ({ y }_{ i }-{ t }_{ i }) }^{ 2 } } $$

について、未知数であるwやbで偏微分を行い、次の式のように値を更新すればよいので、未知数の偏微分が求まれば、値も勾配降下法で求めることができます。

$$w\leftarrow w-\eta \frac { \partial E }{ \partial w } $$

$$b\leftarrow b-\eta \frac { \partial E }{ \partial b } $$

第3層

とりあえずEを未知数の \({ w }_{ 1,1 }^{ (3) }\) で偏微分してみたいと思います。

Eを\({ w }_{ 1,1 }^{ (3) }\)で偏微分するという事は、Eの式中の\({ w }_{ 1,1 }^{ (3) }\)が含まれる項に関してだけ微分すればよいので、下図の赤い部分に関してだけ偏微分していきます。

Deep Learning backpropagation

Deep Learning backpropagation

同様にバイアスの \({ b }_{ 0,1 }^{ (3) }\) で偏微分してみます。

Deep Learning backpropagation

他の未知数もまとめると

Deep Learning backpropagation

となります。

第2層

2層目の未知数 \({ w }_{ 1,1 }^{ (2) }\) に関して偏微分するには \({ w }_{ 1,1 }^{ (2) }\) に関連する項は下図の赤い部分となり、少し広範囲になります。

Deep Learning backpropagation

Deep Learning backpropagation

バイアスも同様に偏微分すると

Deep Learning backpropagation

となり、まとめると

Deep Learning backpropagation

となります。

第1層は??

もう大変なので、ここではやめておきます。

今回は計算を理解するためにベタに偏微分を解いてみたのですが、ゴチャゴチャしてよくわからないので、行列を使った表記で少し整理します。

順伝播の行列表記

順伝播を下図の雰囲気に合わせて行列で表現したいと思います。

Deep Learning backpropagation

第1層

$${ \begin{pmatrix} 1 \\ { x }_{ 1 } \\ { x }_{ 2 } \\ { x }_{ 3 } \\ { x }_{ 4 } \end{pmatrix} }^{ T }\begin{pmatrix} { b }_{ 0,1 }^{ (1) } & { b }_{ 0,2 }^{ (1) } & { b }_{ 0,3 }^{ (1) } \\ { w }_{ 1,1 }^{ (1) } & { w }_{ 1,2 }^{ (1) } & { w }_{ 1,3 }^{ (1) } \\ { w }_{ 2,1 }^{ (1) } & { w }_{ 2,2 }^{ (1) } & { w }_{ 2,3 }^{ (1) } \\ { w }_{ 3,1 }^{ (1) } & { w }_{ 3,2 }^{ (1) } & { w }_{ 3,3 }^{ (1) } \\ { w }_{ 4,1 }^{ (1) } & { w }_{ 4,2 }^{ (1) } & { w }_{ 4,3 }^{ (1) } \end{pmatrix}=\begin{pmatrix} { a }_{ 1 }^{ (1) } \\ { a }_{ 2 }^{ (1) } \\ { a }_{ 3 }^{ (1) } \end{pmatrix}^{ T }\quad \rightarrow \quad \begin{pmatrix} { f }^{ (1) }\left( { a }_{ 1 }^{ (1) } \right) \\ { f }^{ (1) }\left( { a }_{ 2 }^{ (1) } \right) \\ { f }^{ (1) }\left( { a }_{ 3 }^{ (1) } \right) \end{pmatrix}^{ T }$$

第2層

$${ \begin{pmatrix} 1 \\ { f }^{ (1) }\left( { a }_{ 1 }^{ (1) } \right) \\ { f }^{ (1) }\left( { a }_{ 2 }^{ (1) } \right) \\ { f }^{ (1) }\left( { a }_{ 2 }^{ (1) } \right) \end{pmatrix} }^{ T }\begin{pmatrix} { b }_{ 0,1 }^{ (2) } & { b }_{ 0,2 }^{ (2) } \\ { w }_{ 1,1 }^{ (2) } & { w }_{ 1,2 }^{ (2) } \\ { w }_{ 2,1 }^{ (2) } & { w }_{ 2,2 }^{ (2) } \\ { w }_{ 3,1 }^{ (2) } & { w }_{ 3,2 }^{ (2) } \end{pmatrix}=\begin{pmatrix} { a }_{ 1 }^{ (2) } \\ { a }_{ 2 }^{ (2) } \end{pmatrix}^{ T }\quad \rightarrow \quad \begin{pmatrix} { f }^{ (2) }\left( { a }_{ 1 }^{ (2) } \right) \\ { f }^{ (2) }\left( { a }_{ 2 }^{ (2) } \right) \end{pmatrix}^{ T }$$

第3層

$${ \begin{pmatrix} 1 \\ { f }^{ (2) }\left( { a }_{ 1 }^{ (2) } \right) \\ { f }^{ (2) }\left( { a }_{ 2 }^{ (2) } \right) \end{pmatrix} }^{ T }\begin{pmatrix} { b }_{ 0,1 }^{ (3) } & { b }_{ 0,2 }^{ (3) } \\ { w }_{ 1,1 }^{ (3) } & { w }_{ 1,2 }^{ (3) } \\ { w }_{ 2,1 }^{ (3) } & { w }_{ 2,2 }^{ (3) } \end{pmatrix}=\begin{pmatrix} { a }_{ 1 }^{ (3) } \\ { a }_{ 2 }^{ (3) } \end{pmatrix}^{ T }\quad \rightarrow \quad \begin{pmatrix} { f }^{ (3) }\left( { a }_{ 1 }^{ (3) } \right) \\ { f }^{ (3) }\left( { a }_{ 2 }^{ (3) } \right) \end{pmatrix}^{ T }$$

()T は転置行列で、行と列を入れ替えます。

転置行列を使っていますが、図の感じと合わせるだけなので、覚えやすいでしょうか??

逆伝播の行列表記

Deep Learning backpropagation

行列で逆伝播を書くと最初の誤差\(\begin{pmatrix} { y }_{ 1 }-{ t }_{ 1 } \\ { y }_{ 2 }-{ t }_{ 2 } \end{pmatrix}\)が層が一つ戻るたびに重みと活性化関数の微分の値が付加され逆へと伝播されていく、最初の言ったバック感が感じられると思います。

補足説明

行列の演算で使用した記号の補足です。

アダマール積

行列の要素同士を掛け合わせます。

$$\begin{pmatrix} a & b \\ c & d \end{pmatrix}\circ \begin{pmatrix} e & f \\ g & h \end{pmatrix}=\begin{pmatrix} ae & bf \\ cg & dh \end{pmatrix}$$

転置行列

行列の行と列を入れ替えます。

$${ \begin{pmatrix} a & b \\ c & d \\ e & f \end{pmatrix} }^{ T }=\begin{pmatrix} a & c & e \\ b & d & f \end{pmatrix}$$

シグモイド関数

$$f\left( x \right) =\frac { 1 }{ 1+{ e }^{ -x } } $$

シグモイド関数の微分

$$f’\left( x \right) =(1-f\left( x \right) )f\left( x \right) $$

スポンサーリンク

シェアお願いします

  • このエントリーをはてなブックマークに追加
関連記事

関連記事

関連記事