Pythonと機械学習

Pythonも機械学習も初心者ですが、頑張ってこのブログで勉強してこうと思います。

多層パーセプトロン

目次

はじめに

3層パーセプトロン

  • 何層でもいけるようなものを実装しようと思ってますが、まずは3層で考えていきます。

  • n \times c^{(1)} の特徴量行列 \mathbf{\Phi}^{(1)} を入力とし、中間層の出力を n \times c^{(2)} の行列 \mathbf{\Phi}^{(2)} 、最終出力を n \times c^{(3)} の行列 \mathbf{\Phi}^{(3)} であらわします。


\displaystyle
\underset{n \times c^{(1)}}{\mathbf{\Phi}^{(1)}}
\xrightarrow{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
\underset{n \times c^{(2)}}{\mathbf{\Phi}^{(2)}}
\xrightarrow{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
\underset{n \times c^{(3)}}{\mathbf{\Phi}^{(3)}}

  • 層のインデックスがわかるように、右上に()書きしています。

  • n がサンプル数、 c^{(1)} が特徴量数、 c^{(3)} がクラス数になります。

  • 全結合と活性化関数の行列演算は以下の様になります。


\displaystyle
\underset{n \times c^{(2)}}{\mathbf{Z}^{(1)}} =
\underset{n \times c^{(1)}} {\mathbf{\Phi}^{(1)}}
\underset{c^{(1)} \times c^{(2)}} {\mathbf{W}^{(1)}}
+\underset{1 \times c^{(2)}}{\mathbf{b}^{(1)}}
\tag{1}


\displaystyle
\underset{n \times c^{(2)}}{\mathbf{\Phi}^{(2)}}
= f^{(1)}(\underset{n \times c^{(2)}}{\mathbf{Z}^{(1)}})
\tag{2}


\displaystyle
\underset{n \times c^{(3)}}{\mathbf{Z}^{(2)}} =
\underset{n \times c^{(2)}} {\mathbf{\Phi}^{(2)}}
\underset{c^{(2)} \times c^{(3)}} {\mathbf{W}^{(2)}}
+\underset{1 \times c^{(3)}}{\mathbf{b}^{(2)}}
\tag{3}


\displaystyle
\underset{n \times c^{(3)}}{\mathbf{\Phi}^{(3)}}
= f^{(2)}(\underset{n \times c^{(3)}}{\mathbf{Z}^{(2)}})
\tag{4}


\displaystyle
\begin{eqnarray*}
L &=& g(\mathbf{Y}, \mathbf{\Phi}^{(3)}) \\
 &=& -\sum_{i=1}^{n}\sum_{k=1}^{c^{(2)}}y_{ik}\log\varphi^{(3)}_{ik}
\end{eqnarray*}
\tag{5}

損失関数の重み勾配

  • 損失関数を重みと閾値の関数 L(\mathbf{W}^{(1)},\mathbf{b}^{(1)},\mathbf{W}^{(2)},\mathbf{b}^{(2)}) とみて、それぞれの微分を求めておきます。

  • いきなり行列で考えると訳が分からなくなるので要素で考え、後で行列形式に直します。(小文字で要素を表します。)

  • 先ずは、 \frac{\partial L}{\partial w^{(1)}_{jl}}


\displaystyle
\begin{eqnarray*}
\frac{\partial L}{\partial w^{(1)}_{jl}}
&=&
\sum_{i=1}^{n}\sum_{k=1}^{c^{(2)}}
\frac{\partial L}{\partial z^{(1)}_{ik}}
\frac{\partial z^{(1)}_{ik}}{\partial w^{(1)}_{jl}} \\
&=&
\sum_{i=1}^{n}\sum_{k=1}^{c^{(2)}}
\frac{\partial L}{\partial z^{(1)}_{ik}}
\sum_{p=1}^{c^{(1)}}
\frac{\partial (\varphi^{(1)}_{ip} w^{(1)}_{pk}+b^{(1)}_{k})}{\partial w^{(1)}_{jl}} \\
&=&
\sum_{i=1}^{n}
\frac{\partial L}{\partial z^{(1)}_{il}}
\varphi^{(1)}_{ij}
~ ~ ~ ~\small{(\because p=j,k=lの項のみが残る)}
\end{eqnarray*}
\tag{6}

  • \frac{\partial L}{\partial b^{(1)}_{l}} 。(6)式と同じように考えて、

\displaystyle
\frac{\partial L}{\partial b^{(1)}_{l}} =
\sum_{i=1}^{n}
\frac{\partial L}{\partial z^{(1)}_{il}}
\tag{7}

  • \frac{\partial L}{\partial w^{(2)}_{jl}} 。以下同様に、

\displaystyle
\frac{\partial L}{\partial w^{(2)}_{jl}}
=
\sum_{i=1}^{n}
\frac{\partial L}{\partial z^{(2)}_{il}}
\varphi^{(2)}_{ij}
\tag{8}

  • \frac{\partial L}{\partial b^{(2)}_{l}}

\displaystyle
\frac{\partial L}{\partial b^{(2)}_{l}} =
\sum_{i=1}^{n}
\frac{\partial L}{\partial z^{(2)}_{il}}
\tag{9}

バックプロパゲーション

  • (6)、(7)、(8)、(9)式において \frac{\partial L}{\partial z^{(2)}_{il}},\frac{\partial L}{\partial z^{(1)}_{il}} が求まれば、損失関数の重み・閾値の勾配は一気に求まるので、それぞれ求めていきましょう。
  • 先ずは下準備として \frac{\partial L}{\partial z^{(2)}_{il}} の下準備として、 \frac{\partial L}{\partial \varphi^{(3)}_{il}} を先に求めておきます。

\begin{eqnarray*}
\frac{\partial L}{\partial \varphi^{(3)}_{il}}
&=&
-\sum_{j=1}^{n}\sum_{k=1}^{c^{(3)}} \frac{\partial \left(y_{jk}\log\varphi^{(3)}_{jk}\right)}{\partial \varphi^{(3)}_{il}} \\
&=&
-\frac{y_{il}}{\varphi^{(3)}_{il}}
~ ~ ~ ~\small{(\because j=i ,k=lの項のみが残る)} \\
\end{eqnarray*}
\tag{10}

  • \frac{\partial L}{\partial z^{(2)}_{il}} を求めてみます。

\begin{eqnarray*}
\frac{\partial L}{\partial z^{(2)}_{il}}
&=&
\sum_{p=1}^{n}\sum_{q=1}^{c^{(3)}}
\frac{\partial L}{\partial \varphi^{(3)}_{pq}}
\frac{\partial \varphi^{(3)}_{pq}}{\partial z^{(2)}_{il}} \\
&=&
\sum_{q=1}^{c^{(3)}}
\frac{\partial L}{\partial \varphi^{(3)}_{iq}}
\varphi^{(3)}_{il}\left(\delta_{lq}-\varphi^{(3)}_{iq} \right)
~ ~ ~ ~\small{(\because p=jの項のみが残る)} \\
&=&
-\sum_{q=1}^{c^{(3)}}
\frac{y_{iq}}{\varphi^{(3)}_{iq}}
\varphi^{(3)}_{il}\left(\delta_{lq}-\varphi^{(3)}_{iq} \right)
~ ~ ~ ~\small{(\because (10)式より)} \\
&=&
-\left(
\sum_{q=1}^{c^{(3)}}
\frac{y_{iq}}{\varphi^{(3)}_{iq}}
\varphi^{(3)}_{il}\delta_{lq}
-\sum_{q=1}^{c^{(3)}}
\frac{y_{iq}}{\varphi^{(3)}_{iq}}
\varphi^{(3)}_{il}\varphi^{(3)}_{iq}
\right) \\
&=&
-\left(
\frac{y_{il}}{\varphi^{(3)}_{il}}
\varphi^{(3)}_{il}
-\sum_{q=1}^{c^{(3)}}
y_{iq}
\varphi^{(3)}_{il}
\right)
~ ~ ~ ~\small{(\because 第一項はq=lの項のみが残る)} \\
&=&
-\left(y_{il}
-\varphi^{(3)}_{il}
\sum_{q=1}^{c^{(3)}}
y_{iq}
\right)
\\
&=&
-\left(y_{il}
-\varphi^{(3)}_{il}
\times 1
\right)
~ ~ ~ ~\small{(\because 第二項のy_{iq}はonehotベクトルなのでqで和を取ると1)} \\
&=&
-\left(y_{il}
-\varphi^{(3)}_{il}
\right)
\\
\end{eqnarray*}
\tag{11}
  • 次に \frac{\partial L}{\partial z^{(1)}_{il}} を求めます。

\displaystyle
\begin{eqnarray*}
\frac{\partial L}{\partial z^{(1)}_{il}}
&=&
\sum_{j=1}^{n}\sum_{k=1}^{c^{(2)}}
\frac{\partial L}{\partial \varphi^{(2)}_{jk}}
\frac{\partial \varphi^{(2)}_{jk}}{\partial z^{(1)}_{il}} \\
&=&
\sum_{j=1}^{n}\sum_{k=1}^{c^{(2)}}
\frac{\partial L}{\partial \varphi^{(2)}_{jk}}
\frac{\partial f^{(1)}(z^{(1)}_{jk})}{\partial z^{(1)}_{il}} \\
&=&
\frac{\partial L}{\partial \varphi^{(2)}_{il}}
f^{(1)'}(z^{(1)}_{il})
~ ~ ~ ~\small{(\because j=i,k=lの項のみが残る)} \\
&=&
\sum_{j=1}^{n}\sum_{k=1}^{c^{(3)}}
\frac{\partial L}{\partial z^{(2)}_{jk}}
\frac{\partial z^{(2)}_{jk}}{\partial \varphi^{(2)}_{il}}
f^{(1)'}(z^{(1)}_{il}) \\
&=&
\sum_{j=1}^{n}\sum_{k=1}^{c^{(2)}}
\frac{\partial L}{\partial z^{(2)}_{jk}}
\sum_{p=1}^{c^{(2)}}
\frac{\partial (\varphi^{(2)}_{jp}w^{(2)}_{pk}+b^{(2)}_{k})}{\partial \varphi^{(2)}_{il}}
f^{(1)'}(z^{(1)}_{il}) \\
&=&
\sum_{k=1}^{c^{(3)}}
\frac{\partial L}{\partial z^{(2)}_{ik}}
w^{(2)}_{lk}
f^{(1)'}(z^{(1)}_{il})
~ ~ ~ ~\small{(\because j=i,p=lの項のみが残る)} \\
\end{eqnarray*}
\tag{12}


\displaystyle
\begin{eqnarray*}
f^{(1)'}(z^{(1)}_{il})
&=& \frac{\partial}{\partial z^{(1)}_{il}} \frac{1}{1+e^{-z^{(1)}_{il}}} \\
&=&
\frac{0 \times \left( 1+e^{-z^{(1)}_{il}} \right) - 1 \times \left( -e^{-z^{(1)}_{il}} \right)}{\left( 1+e^{-z^{(1)}_{il}} \right)^{2}} \\
&=&
\frac{e^{-z^{(1)}_{il}}}{\left( 1+e^{-z^{(1)}_{il}} \right)^{2}} \\
&=&
\frac{1}{1+e^{-z^{(1)}_{il}}}\left(1- \frac{1}{1+e^{-z^{(1)}_{il}}} \right) \\
&=& f^{(1)}(z^{(1)}_{il})\left(1-f^{(1)}(z^{(1)}_{il})\right)
\end{eqnarray*}
\tag{13}

  • (11)式より \frac{\partial L}{\partial z^{(2)}_{il}} が求まり、(12)、(13)式より \frac{\partial L}{\partial z^{(1)}_{il}} が求まり...というのを繰り返すと、(6)、(7)、(8)、(9)式より重み勾配を逐次的に求めることができます。これがバックプロパゲーションです。

行列表記

  • numpyで書きやすいように行列表記しておきます。求める順番に書いていきます。

  • \frac{\partial L}{\partial \mathbf{Z}^{(2)}} 。(11)式の i を縦、 l を横に並べます。


\displaystyle
\begin{eqnarray*}
\frac{\partial L}{\partial \mathbf{Z}^{(2)}}
&=&
- \left(\mathbf{Y} - \mathbf{\Phi}^{(3)}\right)
\end{eqnarray*}
\tag{14}

  • \frac{\partial L}{\partial \mathbf{Z}^{(2)}} が求まったので、 \frac{\partial L}{\partial \mathbf{W}^{(2)}}, \frac{\partial L}{\partial \mathbf{b}^{(2)}} が求まります。

  • \frac{\partial L}{\partial \mathbf{W}^{(2)}} 。(8)式の j を縦、 l を横に並べます。


\displaystyle
\begin{eqnarray*}
\frac{\partial L}{\partial \mathbf{W}^{(2)}}
&=&
\left[
    \begin{array}{ccc}
        \varphi^{(2)}_{11} & \cdots & \varphi^{(2)}_{n1}\\
        \vdots & \ddots & \vdots \\
        \varphi^{(2)}_{1c^{(2)}} & \cdots & \varphi^{(2)}_{nc^{(2)}} \\
    \end{array}
\right]
\left[
    \begin{array}{ccc}
        \frac{\partial L}{\partial z^{(2)}_{11}} & \cdots &  \frac{\partial L}{\partial z^{(2)}_{1c^{(3)}}}\\
        \vdots & \ddots & \vdots \\
        \frac{\partial L}{\partial z^{(2)}_{n1}} & \cdots &  \frac{\partial L}{\partial z^{(2)}_{nc^{(3)}}} \\
    \end{array}
\right] \\
&=&
\mathbf{\Phi}^{(2)T}\frac{\partial L}{\partial \mathbf{Z}^{(2)}}
\end{eqnarray*}
\tag{15}

  • \frac{\partial L}{\partial \mathbf{b}^{(2)}} 。同様に(9)式より、

\displaystyle
\begin{eqnarray*}
\frac{\partial L}{\partial \mathbf{b}^{(2)}}
&=&
\underbrace{
\left[
    \begin{array}{ccc}
        1 & \cdots & 1 \\
    \end{array}
\right]
}_{1 \times n}
\left[
    \begin{array}{ccc}
        \frac{\partial L}{\partial z^{(2)}_{11}} & \cdots &  \frac{\partial L}{\partial z^{(2)}_{1c^{(3)}}}\\
        \vdots & \ddots & \vdots \\
        \frac{\partial L}{\partial z^{(2)}_{n1}} & \cdots &  \frac{\partial L}{\partial z^{(2)}_{nc^{(3)}}} \\
    \end{array}
\right] \\
&=&
\underbrace{
\left[
    \begin{array}{ccc}
        1 & \cdots & 1 \\
    \end{array}
\right]
}_{1 \times n}
\frac{\partial L}{\partial \mathbf{Z}^{(2)}}
\end{eqnarray*}
\tag{16}

  • (11)式の \frac{\partial L}{\partial \mathbf{Z}^{(2)}} より、 (12)式の \frac{\partial L}{\partial \mathbf{Z}^{(1)}} が求まります 。(12)式の i を縦、 l を横に並べます。

\displaystyle
\begin{eqnarray*}
\frac{\partial L}{\partial \mathbf{Z}^{(1)}}
&=&
\left[
    \begin{array}{ccc}
        \sum_{k=1}^{c^{(2)}}\frac{\partial L}{\partial z^{(2)}_{1k}}w^{(2)}_{1k}f^{(1)'}(z^{(1)}_{11}) & \cdots & \sum_{k=1}^{c^{(2)}}\frac{\partial L}{\partial z^{(2)}_{1k}}w^{(2)}_{c^{(0)}k}f^{(1)'}(z^{(1)}_{1c^{(1)}}) \\
        \vdots & \ddots & \vdots \\
        \sum_{k=1}^{c^{(2)}}\frac{\partial L}{\partial z^{(2)}_{nk}}w^{(2)}_{1k}f^{(1)'}(z^{(1)}_{n1}) & \cdots & \sum_{k=1}^{c^{(2)}}\frac{\partial L}{\partial z^{(2)}_{nk}}w^{(2)}_{c^{(0)}k}f^{(1)'}(z^{(1)}_{nc^{(1)}}) \\
    \end{array}
\right] \\
&=&
\left[
    \begin{array}{ccc}
        \sum_{k=1}^{c^{(2)}}\frac{\partial L}{\partial z^{(2)}_{1k}}w^{(2)}_{1k} & \cdots & \sum_{k=1}^{c^{(2)}}\frac{\partial L}{\partial z^{(2)}_{1k}}w^{(2)}_{c^{(1)}k} \\
        \vdots & \ddots & \vdots \\
        \sum_{k=1}^{c^{(2)}}\frac{\partial L}{\partial z^{(2)}_{nk}}w^{(2)}_{1k} & \cdots & \sum_{k=1}^{c^{(2)}}\frac{\partial L}{\partial z^{(2)}_{nk}}w^{(2)}_{c^{(1)}k} \\
    \end{array}
\right] \circ
\left[
    \begin{array}{ccc}
        f^{(1)'}(z^{(1)}_{11}) & \cdots & f^{(1)'}(z^{(1)}_{1c^{(1)}}) \\
        \vdots & \ddots & \vdots \\
        f^{(1)'}(z^{(1)}_{n1}) & \cdots & f^{(1)'}(z^{(1)}_{nc^{(1)}}) \\
    \end{array}
\right] \\
&=&
\left[
    \left[
        \begin{array}{ccc}
            \frac{\partial L}{\partial z^{(2)}_{11}} & \cdots & \frac{\partial L}{\partial z^{(2)}_{1c^{(2)}}} \\
            \vdots & \ddots & \vdots \\
            \frac{\partial L}{\partial z^{(2)}_{n1}} & \cdots & \frac{\partial L}{\partial z^{(2)}_{nc^{(2)}}}  \\
        \end{array}
    \right]
    \left[
        \begin{array}{ccc}
            w^{(2)}_{11} & \cdots & w^{(2)}_{c^{(1)}1} \\
            \vdots & \ddots & \vdots \\
            w^{(2)}_{1c^{(2)}} & \cdots & w^{(2)}_{c^{(1)}c^{(2)}} \\
        \end{array}
    \right]
\right] \circ
\left[
    \begin{array}{ccc}
        f^{(1)'}(z^{(1)}_{11}) & \cdots & f^{(1)'}(z^{(1)}_{1c^{(1)}}) \\
        \vdots & \ddots & \vdots \\
        f^{(1)'}(z^{(1)}_{n1}) & \cdots & f^{(1)'}(z^{(1)}_{nc^{(1)}}) \\
    \end{array}
\right] \\
&=&
\left(
\frac{\partial L}{\partial \mathbf{Z}^{(2)}}\mathbf{W}^{(2)T}
\right)
\circ
f^{(1)'}(\mathbf{Z}^{(1)})
\end{eqnarray*}
\tag{17}


\displaystyle
\frac{\partial L}{\partial \mathbf{Z}^{(1)}} =
\left(
\frac{\partial L}{\partial \mathbf{Z}^{(2)}}\mathbf{W}^{(2)T}
\right)
\circ
f^{(1)}(\mathbf{Z}^{(1)}) \circ\left(\mathbf{1}-f^{(1)}(\mathbf{Z}^{(1)})\right)
\tag{18}

  • (17)、(18)式の \circ は、アダマール積を表しており、行列の同じ成分同士を掛け算する記号です。要するにnp.arrayの積です。

  • (18)式の \mathbf{1} は、全要素が1の行列です。

  • \frac{\partial L}{\partial \mathbf{Z}^{(1)}} が求まったので \frac{\partial L}{\partial \mathbf{W}^{(1)}} が求まります。(6)式の j を縦に並べ、 l を横に並べます。


\displaystyle
\begin{eqnarray*}
\frac{\partial L}{\partial \mathbf{W}^{(1)}}
&=&
\left[
    \begin{array}{ccc}
        \sum_{i=1}^{n}\frac{\partial L}{\partial z^{(1)}_{i1}}\varphi^{(1)}_{i1} & \cdots & \sum_{i=1}^{n}\frac{\partial L}{\partial z^{(1)}_{ic^{(2)}}}\varphi^{(1)}_{i1} \\
        \vdots & \ddots & \vdots \\
        \sum_{i=1}^{n}\frac{\partial L}{\partial z^{(1)}_{i1}}\varphi^{(1)}_{ic^{(1)}} & \cdots & \sum_{i=1}^{n}\frac{\partial L}{\partial z^{(1)}_{ic^{(2)}}}\varphi^{(1)}_{ic^{(1)}} \\
    \end{array}
\right] \\
&=&
\left[
    \begin{array}{ccc}
        \varphi^{(1)}_{11} & \cdots & \varphi^{(1)}_{n1}\\
        \vdots & \ddots & \vdots \\
        \varphi^{(1)}_{1c^{(1)}} & \cdots & \varphi^{(1)}_{nc^{(1)}} \\
    \end{array}
\right]
\left[
    \begin{array}{ccc}
        \frac{\partial L}{\partial z^{(1)}_{11}} & \cdots &  \frac{\partial L}{\partial z^{(1)}_{1c^{(2)}}}\\
        \vdots & \ddots & \vdots \\
        \frac{\partial L}{\partial z^{(1)}_{n1}} & \cdots &  \frac{\partial L}{\partial z^{(1)}_{nc^{(2)}}} \\
    \end{array}
\right] \\
&=&
\mathbf{\Phi}^{(1)T}\frac{\partial L}{\partial \mathbf{Z}^{(1)}}
\end{eqnarray*}
\tag{19}

  • 同様に \frac{\partial L}{\partial \mathbf{b}^{(1)}} です。(7)式の j を縦に並べ、 l を横に並べます。

\displaystyle
\begin{eqnarray*}
\frac{\partial L}{\partial \mathbf{b}^{(1)}}
&=&
\underbrace{
\left[
    \begin{array}{ccc}
        1 & \cdots & 1 \\
    \end{array}
\right]
}_{1 \times n}
\left[
    \begin{array}{ccc}
        \frac{\partial L}{\partial z^{(1)}_{11}} & \cdots &  \frac{\partial L}{\partial z^{(1)}_{1c^{(2)}}}\\
        \vdots & \ddots & \vdots \\
        \frac{\partial L}{\partial z^{(1)}_{n1}} & \cdots &  \frac{\partial L}{\partial z^{(1)}_{nc^{(2)}}} \\
    \end{array}
\right] \\
&=&
\underbrace{
\left[
    \begin{array}{ccc}
        1 & \cdots & 1 \\
    \end{array}
\right]
}_{1 \times n}
\frac{\partial L}{\partial \mathbf{Z}^{(1)}}
\end{eqnarray*}
\tag{20}

多層パーセプトロン

順伝搬

  • n :サンプル数。 c^{(1)} :特徴量数。 c^{(\lambda)} :中間層のユニット数。 c^{(\Lambda)} :クラス数。 \mathbf{X} :特徴量行列。 \mathbf{Y} :目標値(教師データ)行列とします。

\underset{n \times c^{(1)}}{\mathbf{X}} \colon =
\underset{n \times c^{(1)}}{\mathbf{\Phi}^{(1)}}
\xrightarrow{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
\underset{n \times c^{(\lambda)}}{\mathbf{\Phi}^{(\lambda)}}
\xrightarrow{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
\underset{n \times c^{(\Lambda)}}{\mathbf{\Phi}^{(\Lambda)}}

全結合


\displaystyle
\underset{n \times c^{(\lambda+1)}}{\mathbf{Z}^{(\lambda)}} =
\underset{n \times c^{(\lambda)}} {\mathbf{\Phi}^{(\lambda)}}
\underset{c^{(\lambda)} \times c^{(\lambda+1)}} {\mathbf{W}^{(\lambda)}}
+\underset{1 \times c^{(\lambda+1)}}{\mathbf{b}^{(\lambda)}}
\tag{21}

活性化関数


\displaystyle
\underset{n \times c^{(\lambda+1)}}{\mathbf{\Phi}^{(\lambda+1)}}
= f^{(\lambda)}(\underset{n \times c^{(\lambda+1)}}{\mathbf{Z}^{(\lambda)}})
\tag{22}

損失関数(交差エントロピー)


\displaystyle
\begin{eqnarray*}
\underset{1 \times 1}{L}
&=& g(\underset{n \times c^{(\Lambda)}}{\mathbf{Y}}, \underset{n \times c^{(\Lambda)}}{\mathbf{\Phi}^{(\Lambda)}} ) \\
&=& -
\underset{1 \times n}{
    \left[
        \begin{array}{c}
            1 & \cdots & 1
        \end{array}
    \right]
    }
\left(
\underset{n \times c^{(\Lambda)}}{
    \mathbf{Y}
    }
\circ
\underset{n \times c^{(\Lambda)}}{
    \log\mathbf{\Phi}^{(\Lambda)}
    }
\right)
\underset{c^{(\Lambda)} \times 1}{
    \left[
        \begin{array}{ccc}
            1 \\
            \vdots\\
            1\\
        \end{array}
    \right]
    }
\end{eqnarray*}
\tag{23}

逆伝搬

  • 以下 \mathbf{\Delta}^{(\lambda)}\equiv\frac{\partial L}{\partial \mathbf{Z}^{(\lambda)}} として記述します。

誤差計算

  • (14)式より、

\displaystyle
\begin{eqnarray*}
\underset{n \times c^{(\Lambda-1)}}{\mathbf{\Delta}^{(\Lambda-1)}}
&=&
- \left(
\underset{n \times c^{(\Lambda)}}{\mathbf{Y}}
-
\underset{n \times c^{(\Lambda)}}{\mathbf{\Phi}^{(\Lambda)}}
\right)
\end{eqnarray*}
\tag{24}

バックプロパゲーション

  • (17)式より、

\displaystyle
\underset{n \times c^{(\lambda+1)}}{\mathbf{\Delta}^{(\lambda)}} =
\left(
\underset{n \times c^{(\lambda+2)}}{\mathbf{\Delta}^{(\lambda+1)}}
\underset{c^{(\lambda+2)} \times c^{(\lambda+1)}}{\mathbf{W}^{(\lambda+1)T}}
\right)
\circ
\underset{n \times c^{(\lambda+1)}}{
f^{(\lambda)'}(\mathbf{Z}^{(\lambda)})}
\tag{25}

損失関数の重み・閾値勾配

  • (19)、(20)式より、

\displaystyle
\underset{c^{(\lambda)} \times c^{(\lambda+1)}}{
\frac{\partial L}{\partial \mathbf{W}^{(\lambda)}}} =
\underset{c^{(\lambda)} \times n}{
\mathbf{\Phi}^{(\lambda)T}}
\underset{n \times c^{(\lambda+1)}}{
\mathbf{\Delta}^{(\lambda)}}
\tag{26}


\displaystyle
\underset{1 \times c^{(\lambda+1)}}{
\frac{\partial L}{\partial \mathbf{b}^{(\lambda)}}}
=
\underset{1 \times n}{
\left[
    \begin{array}{ccc}
        1 & \cdots & 1 \\
    \end{array}
\right]
}
\underset{n \times c^{(\lambda+1)}}{
\mathbf{\Delta}^{(\lambda)}}
\tag{27}

  • \lambda1 になるまで(25)~(27)式の操作を繰り返します。

  • (24)式の誤差 \mathbf{\Delta}^{(\Lambda-1)} が(25)式の様に、各層を逐次的に逆伝搬していくので誤差逆伝搬というわけです。

  • 全ての重み・閾値の勾配が求まったら、学習率をかけて重み・閾値をアップデートします。

追記

  • (25)式ですが以下のようにも展開することができます。

\begin{eqnarray*}
\mathbf{\Delta}^{(\lambda)}
&\equiv&
\frac{\partial L}{\partial \mathbf{Z}^{(\lambda)}} \\
&=&
\frac{\partial L}{\partial \mathbf{\Phi}^{(\lambda+1)}}
\circ
\frac{\partial \mathbf{\Phi}^{(\lambda+1)}}{\partial \mathbf{Z}^{(\lambda)}} \\
&=&
\frac{\partial L}{\partial \mathbf{\Phi}^{(\lambda+1)}}
\circ
f^{(\lambda)'}(\mathbf{Z}^{(\lambda)})
\end{eqnarray*}
\tag{26}

  • (25)式と(26)式を比べてみると、以下のような関係になっている事が分かります。

\begin{eqnarray*}
\frac{\partial L}{\partial \mathbf{\Phi}^{(\lambda+1)}}
&=&
\mathbf{\Delta}^{(\lambda+1)}\mathbf{W}^{(\lambda+1)T}
\end{eqnarray*}
\tag{27}


\frac{\partial L}{\partial \mathbf{\Phi}^{(\lambda)}}
=
\left(
\frac{\partial L}{\partial \mathbf{\Phi}^{(\lambda+1)}}
\circ
f^{(\lambda)'}(\mathbf{Z}^{(\lambda)})
\right)
\mathbf{W}^{(\lambda)T}
\tag{28}