無限不可能性ドライブ

『ニューラルネットワーク自作入門』に刺激されてExcelVBAでニューラルネットワークを作ってみたものの、やっぱり数学やらなきゃと思い少しずつやってきたのもあって、自分の知識の整理とかそういった感じです。

【数式編】(逆伝播)出力層の重みとバイアスを更新する 1-(1)

f:id:celaeno42:20180928230310p:plain

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

ニューラルネットワークが正しい出力を得るようになるには、重みやバイアスなどのパラメータを調整する必要があります。
誤差逆伝播バックプロパゲーション)という手法を使うことで、パラメータを調整することができます。
具体的には損失関数を調整したいパラメータで偏微分することで、調整値を求めていきます。
誤差逆伝播の詳しい説明については他のWebサイトや書籍を参照してください。)

重みの更新式

まずは出力層の1つめのユニット ユニットo11 の重み  w_{11}^4 を調整するための更新式を見ていきましょう。


 \displaystyle w_{11}^4 ← w_{11}^4 - \eta \nabla E

 \displaystyle \nabla E = \frac{\partial E}{\partial w_{11}^4}

(※\eta は学習率)


更新後の重みは、更新前の重みから損失関数の勾配(  \nabla E )に学習率を掛けた値を引くことで求めることができます。
(式の意味をわかりやすくするために ← で表現しています。)
学習率はある種の定数(ハイパーパラメータ)と考えてよいので、\nabla E を求めることができれば、重みを更新することができます。

損失関数の偏微分

 \nabla E は損失関数  E w_{11}^4偏微分することで求めることができます。
これは、連鎖率(チェインルール)によって、次の式で求めます。


 \displaystyle \nabla E =  \frac{\partial E}{\partial w_{11}^4} = \frac{\partial E}{\partial u_1^4} \frac{\partial u_1^4}{\partial w_{11}^4}


まずは \displaystyle \frac{\partial E}{\partial u_1^4} について見ていきましょう。

損失関数の式を再掲しておきます。


 \displaystyle E =  -\sum_{k=1}^3 t_k \log z_k^4 = -(t_1 \log z_1^4 + t_2 \log z_2^4 + t_3 \log z_3^4 )


この式を  u_1^4偏微分します。


 \displaystyle \frac{\partial E}{\partial u_1^4} = - \left( \frac{\partial}{\partial u_1^4} t_1 \log z_1^4 + \frac{\partial}{\partial u_1^4} t_2 \log z_2^4 + \frac{\partial}{\partial u_1^4} t_3 \log z_3^4 \right)


左から第1項め、第2項め、第3項めとしてひとつずつ見ていきます。

・第1項めについて

まずは  \displaystyle \frac{\partial}{\partial u_1^4} t_1 \log z_1^4 を見ていきます。


 \displaystyle z_1^4 = \frac{\exp(u_1^4)}{\exp(u_1^4) + \exp(u_2^4) + \exp(u_3^4)}


なので、


 \displaystyle \log z_1^4 = \log \left( \frac{\exp(u_1^4)}{\exp(u_1^4) + \exp(u_2^4) + \exp(u_3^4)} \right)


公式  \displaystyle \log \frac{x}{y} = \log x - \log y を利用して、


 \displaystyle = \log(\exp(u_1^4)) - \log(\exp(u_1^4) + \exp(u_2^4) + \exp(u_3^4))


よって、


 \displaystyle \begin{align}
\frac{\partial}{\partial u_1^4} t_1 \log z_1^4 &=  t_1 \times \frac{\partial}{\partial u_1^4} \log z_1^4 \\
\\
&= t_1 \times \left( \frac{\partial}{\partial u_1^4} \log(\exp(u_1^4)) - \frac{\partial}{\partial u_1^4} \log(\exp(u_1^4) + \exp(u_2^4) + \exp(u_3^4)) \right)
\end{align}


公式  \displaystyle (\log f(x))' = \frac{f'(x)}{f(x)} を利用すると


 \displaystyle \begin{align}
\frac{\partial}{\partial u_1^4} \log(\exp(u_1^4)) &= \frac{\frac{\partial}{\partial u_1^4} \exp(u_1^4)}{\exp(u_1^4)} \\
\\
&= \frac{\exp(u_1^4)}{\exp(u_1^4)} \\
\\
&= 1 \\
\\
\\
\frac{\partial}{\partial u_1^4} \log(\exp(u_1^4) + \exp(u_2^4) + \exp(u_3^4)) &= \frac{\frac{\partial}{\partial u_1^4}(\exp(u_1^4) + \exp(u_2^4) + \exp(u_3^4))}{\exp(u_1^4) + \exp(u_2^4) + \exp(u_3^4)} \\
\\
&= \frac{\exp(u_1^4)}{\exp(u_1^4) + \exp(u_2^4) + \exp(u_3^4)} \\
\\
&= z_1^4
\end{align}


以上より、


 \displaystyle \begin{align}
\frac{\partial}{\partial u_1^4} t_1 \log z_1^4 &=  t_1 \times \frac{\partial}{\partial u_1^4} \log z_1^4 \\
\\
&= t_1 \times \left( \frac{\partial}{\partial u_1^4} \log(\exp(u_1^4)) - \frac{\partial}{\partial u_1^4} \log(\exp(u_1^4) + \exp(u_2^4) + \exp(u_3^4)) \right) \\
\\
&= t_1 \times ( 1 - z_1^4 )
\end{align}


・第2項めについて

次に  \displaystyle \frac{\partial}{\partial u_1^4} t_2 \log z_2^4 を見ていきます。

第1項めと同様に、


 \displaystyle z_2^4 = \frac{\exp(u_2^4)}{\exp(u_1^4) + \exp(u_2^4) + \exp(u_3^4)}


なので、


 \displaystyle \begin{align}
\log z_2^4 &= \log \left( \frac{\exp(u_2^4)}{\exp(u_1^4) + \exp(u_2^4) + \exp(u_3^4)} \right) \\
\\
&= \log(\exp(u_2^4)) - \log(\exp(u_1^4) + \exp(u_2^4) + \exp(u_3^4))
\end{align}


よって、


 \displaystyle \begin{align}
\frac{\partial}{\partial u_1^4} t_2 \log z_2^4 &=  t_2 \times \frac{\partial}{\partial u_1^4} \log z_2^4 \\
\\
&= t_2 \times \left( \frac{\partial}{\partial u_1^4} \log(\exp(u_2^4)) - \frac{\partial}{\partial u_1^4} \log(\exp(u_1^4) + \exp(u_2^4) + \exp(u_3^4)) \right)
\end{align}


公式  \displaystyle (\log f(x))' = \frac{f'(x)}{f(x)} を利用して


 \displaystyle \begin{align}
\frac{\partial}{\partial u_1^4} \log(\exp(u_2^4)) &= \frac{\frac{\partial}{\partial u_1^4} \exp(u_2^4)}{\exp(u_2^4)} \\
\\
&= \frac{0}{\exp(u_2^4)} \\
\\
&= 0
\end{align}

 \displaystyle \frac{\partial}{\partial u_1^4} \log(\exp(u_1^4) + \exp(u_2^4) + \exp(u_3^4)) は先ほど求めたので、


 \displaystyle \frac{\partial}{\partial u_1^4} \log(\exp(u_1^4) + \exp(u_2^4) + \exp(u_3^4)) = z_1^4


以上より、


 \displaystyle \begin{align}
\frac{\partial}{\partial u_1^4} t_2 \log z_2^4 &=  t_2 \times \frac{\partial}{\partial u_1^4} \log z_2^4 \\
\\
&= t_2 \times \left( \frac{\partial}{\partial u_1^4} \log(\exp(u_2^4)) - \frac{\partial}{\partial u_1^4} \log(\exp(u_1^4) + \exp(u_2^4) + \exp(u_3^4)) \right) \\
\\
&= t_2 \times ( 0 - z_1^4 ) \\
\\
&= t_2 \times -z_1^4
\end{align}


・第3項めについて

最後に  \displaystyle \frac{\partial}{\partial u_1^4} t_3 \log z_3^4 を見ていきます。

内容は第2項めとほとんど同じです。


 \displaystyle z_3^4 = \frac{\exp(u_3^4)}{\exp(u_1^4) + \exp(u_2^4) + \exp(u_3^4)}


なので、


 \displaystyle \begin{align}
\log z_3^4 &= \log \left( \frac{\exp(u_3^4)}{\exp(u_1^4) + \exp(u_2^4) + \exp(u_3^4)} \right) \\
\\
&= \log(\exp(u_3^4)) - \log(\exp(u_1^4) + \exp(u_2^4) + \exp(u_3^4))
\end{align}


よって、


 \displaystyle \begin{align}
\frac{\partial}{\partial u_1^4} t_3 \log z_3^4 &=  t_3 \times \frac{\partial}{\partial u_1^4} \log z_3^4 \\
\\
&= t_3 \times \left( \frac{\partial}{\partial u_1^4} \log(\exp(u_3^4)) - \frac{\partial}{\partial u_1^4} \log(\exp(u_1^4) + \exp(u_2^4) + \exp(u_3^4)) \right)
\end{align}


公式  \displaystyle (\log f(x))' = \frac{f'(x)}{f(x)} を利用して


 \displaystyle \begin{align}
\frac{\partial}{\partial u_1^4} \log(\exp(u_3^4)) &= \frac{\frac{\partial}{\partial u_1^4} \exp(u_3^4)}{\exp(u_3^4)} \\
\\
&= \frac{0}{\exp(u_3^4)} \\
\\
&= 0
\end{align}


 \displaystyle \frac{\partial}{\partial u_1^4} \log(\exp(u_1^4) + \exp(u_2^4) + \exp(u_3^4)) = z_1^4


以上より、


 \displaystyle \begin{align}
\frac{\partial}{\partial u_1^4} t_3 \log z_3^4 &=  t_3 \times \frac{\partial}{\partial u_1^4} \log z_3^4 \\
\\
&= t_3 \times \left( \frac{\partial}{\partial u_1^4} \log(\exp(u_3^4)) - \frac{\partial}{\partial u_1^4} \log(\exp(u_1^4) + \exp(u_2^4) + \exp(u_3^4)) \right) \\
\\
&= t_3 \times ( 0 - z_1^4 ) \\
\\
&= t_3 \times -z_1^4
\end{align}


・まとめると…

 \displaystyle \frac{\partial E}{\partial u_1^4} = - \left( \frac{\partial}{\partial u_1^4} t_1 \log z_1^4 + \frac{\partial}{\partial u_1^4} t_2 \log z_2^4 + \frac{\partial}{\partial u_1^4} t_3 \log z_3^4 \right)


を求めようとしていて、


 \displaystyle \begin{align}
\frac{\partial}{\partial u_1^4} t_1 \log z_1^4 &= t_1 \times (1 - z_1^4) \\
\\
\frac{\partial}{\partial u_1^4} t_2 \log z_2^4 &= t_2 \times -z_1^4 \\
\\
\frac{\partial}{\partial u_1^4} t_3 \log z_2^4 &= t_3 \times -z_1^4
\end{align}


とわかったので、


 \displaystyle \begin{align}
\frac{\partial E}{\partial u_1^4} &= - \left( \frac{\partial}{\partial u_1^4} t_1 \log z_1^4 + \frac{\partial}{\partial u_1^4} t_2 \log z_2^4 + \frac{\partial}{\partial u_1^4} t_3 \log z_3^4 \right) \\
\\
&= - \left( (t_1 \times (1 - z_1^4)) + (t_2 \times -z_1^4) + (t_3 \times -z_1^4) \right) \\
\\
&= - (t_1 - t_1 \cdot z_1^4 - t_2 \cdot z_1^4 - t_3 \cdot z_1^4) \\
\\
&= - (t_1 - z_1^4 (t_1 + t_2 + t_3) )   ※ \\
\\
&= - (t_1 - z_1^4) \\
\\
&= z_1^4 - t_1  (1)
\end{align}

(※ 教師データは one-hot 表現としているため、 t_1 + t_2 + t_3 = 1

uの偏微分

では残りの \displaystyle \frac{\partial u_1^4}{\partial w_{11}^4} について見ていきましょう。

【数式編】(順伝播)出力層のユニットの出力を求める - 無限不可能性ドライブ で求めたように


\displaystyle u_1^4 = w_{11}^4 z_1^3 + w_{12}^4 z_2^3 + w_{13}^4 z_3^3 + w_{14}^4 z_4^3 + b_1^4


なので、


\displaystyle \begin{align}
 \frac{\partial u_1^4}{\partial w_{11}^4} &= \frac{\partial}{\partial w_{11}^4} (w_{11}^4 z_1^3 + w_{12}^4 z_2^3 + w_{13}^4 z_3^3 + w_{14}^4 z_4^3 + b_1^4) \\
\\
&= z_1^3  (2)
\end{align}


まとめ: w_{11}^4 の更新式

以上((1)、(2))から、 w_{11}^4 を調整するための具体的な更新式は以下のようになります。(※  \eta は学習率)


 \displaystyle w_{11}^4 ← w_{11}^4 - \eta \nabla E

 \displaystyle \begin{align}
 \nabla E =  \frac{\partial E}{\partial w_{11}^4} &= \frac{\partial E}{\partial u_1^4} \frac{\partial u_1^4}{\partial w_{11}^4} \\
\\
&= (z_1^4 - t_1) \times z_1^3
\end{align}


「(そのユニットの出力 - 該当する教師データ) × その重みに関係した入力値」になっていることがわかります。