無限不可能性ドライブ

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

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

f:id:celaeno42:20181002231009p:plain

ユニットo12 の重みの更新式

今回は ユニットo12 の重み  w_{21}^4 の更新式を見ていきます。
以前求めた  w_{11}^4 の更新式を参考にすると…


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

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


となることがわかると思います。
今回は ユニットo12 を対象としているので、 u_2^4 となっていることに注意してください。
計算手順は ユニットo11 と同じですが、再度順を追って見ていくことにします。

損失関数の偏微分

まずは  \displaystyle \frac{\partial E}{\partial u_2^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_2^4偏微分します。


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


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

・第1項めについて

まずは  \displaystyle \frac{\partial}{\partial u_2^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_2^4} t_1 \log z_1^4 &=  t_1 \times \frac{\partial}{\partial u_2^4} \log z_1^4 \\
\\
&= t_1 \times \left( \frac{\partial}{\partial u_2^4} \log(\exp(u_1^4)) - \frac{\partial}{\partial u_2^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_2^4} \log(\exp(u_1^4)) &= \frac{\frac{\partial}{\partial u_2^4} \exp(u_1^4)}{\exp(u_1^4)} \\
\\
&= \frac{0}{\exp(u_1^4)} \\
\\
&= 0 \\
\\
\\
\frac{\partial}{\partial u_2^4} \log(\exp(u_1^4) + \exp(u_2^4) + \exp(u_3^4)) &= \frac{\frac{\partial}{\partial u_2^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_2^4)}{\exp(u_1^4) + \exp(u_2^4) + \exp(u_3^4)} \\
\\
&= z_2^4
\end{align}


以上より、


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


・第2項めについて

次に  \displaystyle \frac{\partial}{\partial u_2^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_2^4} t_2 \log z_2^4 &=  t_2 \times \frac{\partial}{\partial u_2^4} \log z_2^4 \\
\\
&= t_2 \times \left( \frac{\partial}{\partial u_2^4} \log(\exp(u_2^4)) - \frac{\partial}{\partial u_2^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_2^4} \log(\exp(u_2^4)) &= \frac{\frac{\partial}{\partial u_2^4} \exp(u_2^4)}{\exp(u_2^4)} \\
\\
&= \frac{\exp(u_2^4)}{\exp(u_2^4)} \\
\\
&= 1
\end{align}

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


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


以上より、


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


・第3項めについて

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

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


 \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_2^4} t_3 \log z_3^4 &=  t_3 \times \frac{\partial}{\partial u_2^4} \log z_3^4 \\
\\
&= t_3 \times \left( \frac{\partial}{\partial u_2^4} \log(\exp(u_3^4)) - \frac{\partial}{\partial u_2^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_2^4} \log(\exp(u_3^4)) &= \frac{\frac{\partial}{\partial u_2^4} \exp(u_3^4)}{\exp(u_3^4)} \\
\\
&= \frac{0}{\exp(u_3^4)} \\
\\
&= 0
\end{align}


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


以上より、


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


・まとめると…

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


を求めようとしていて、


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


とわかったので、


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

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


uの偏微分

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


\displaystyle u_2^4 = w_{21}^4 z_1^3 + w_{22}^4 z_2^3 + w_{23}^4 z_3^3 + w_{24}^4 z_4^3 + b_2^4


なので、


\displaystyle \begin{align}
 \frac{\partial u_2^4}{\partial w_{21}^4} &= \frac{\partial}{\partial w_{21}^4} (w_{21}^4 z_1^3 + w_{22}^4 z_2^3 + w_{23}^4 z_3^3 + w_{24}^4 z_4^3 + b_2^4) \\
\\
&= z_1^3  (2)
\end{align}


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

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


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

 \displaystyle \begin{align}
 \nabla E =  \frac{\partial E}{\partial w_{21}^4} &= \frac{\partial E}{\partial u_2^4} \frac{\partial u_2^4}{\partial w_{21}^4} \\
\\
&= (z_2^4 - t_2) \times z_1^3
\end{align}