深層学習

行列の積和と順伝播

投稿日:


順伝搬(forward)はNumpyの積和計算を使って超絶簡単に記述できる。

行列の積和計算

何はともあれNumpyで行列の積を計算する方法について。
この仕組みがあるから、forなどの制御構造を使わずに行列の積を実現できる。
\begin{eqnarray}
A &=& \begin{pmatrix}
a_{11} & a_{21} \\
a_{12} & a_{22}
\end{pmatrix} \\
B &=& \begin{pmatrix}
b_{11} & b_{21} \\
b_{12} & b_{22}
\end{pmatrix} \\
A \cdot B &=& \begin{pmatrix}
a_{11} b_{11} + a_{21} b_{12} && a_{11} b_{21} + a_{21} b_{22} \\
a_{12} b_{11} + a_{22} b_{12} && a_{12} b_{21} + a_{22} b_{22}
\end{pmatrix}
\end{eqnarray}

積はNumpyのdot関数で一発。
左行列と右行列の"対応する行"は一致している必要がある。
つまり\(N_1 \times M_1 \cdot N_2 \times M_2\)という積計算において\(M_1 = N_2\)である必要がある。

和はNumpyの+オペレータで一発。
\begin{eqnarray}
A &=& \begin{pmatrix}
a_{11} & a_{21} \\
a_{12} & a_{22}
\end{pmatrix}
C &=& \begin{pmatrix}
c_{1} \\
c_{2}
\end{pmatrix}
\end{eqnarray}

\begin{eqnarray}
A+C &=& \begin{pmatrix}
a_{11} + c_1 & a_{21} + c_1 \\
a_{12} + c_1 & a_{22} + c_2
\end{pmatrix}
\end{eqnarray}

各層における信号伝達の実装

Numpyで積和が簡単にかける。
すなわち、各層における伝達が積和で表されるとすると、
入力層から各層における信号伝達の実装を簡単にかける。

左側の層が\(X=\begin{pmatrix}x_1 x_2\end{pmatrix}\)、重みが\(W=\begin{pmatrix}w_{11} & w_{21} \\ w_{12} & w_{22} \end{pmatrix}\)、
右側の層が\(A=\begin{pmatrix} a_{11} & a_{21} \end{pmatrix}\)とする。

すると、右層と左層の関係は以下の通り。
\begin{eqnarray}
A &=& XW \\
\begin{pmatrix} a_{11} & a_{21} \end{pmatrix} &=& \begin{pmatrix}x_1 x_2\end{pmatrix} \begin{pmatrix}w_{11} & w_{21} \\ w_{12} & w_{22} \end{pmatrix} \\
&=& \begin{pmatrix} w_{11}x_1 + w_{21} x_2 \\ w_{12}x_1 + w_{22}x_2\end{pmatrix}
\end{eqnarray}

左層にバイアス\(B=\begin{pmatrix}b_1 \\ b_1 \end{pmatrix}\)があった場合、線形和で表現できる。
行と列がどちらの方向に対応するかに注意。
1つの層に\(N\)個のノードが存在することを\(N\times 1\)の行列で表現する。
\begin{eqnarray}
A &=& XW + B \\
\begin{pmatrix} a_{11} & a_{21} \end{pmatrix} &=& \begin{pmatrix}x_1 x_2\end{pmatrix} \begin{pmatrix}w_{11} & w_{21} \\ w_{12} & w_{22} \end{pmatrix} + \begin{pmatrix}b_1 \\b_1 \end{pmatrix} \\
&=& \begin{pmatrix} w_{11}x_1 + w_{21} x_2 + b_1 \\ w_{12}x_1 + w_{22}x_2 + b_1\end{pmatrix}
\end{eqnarray}

順伝播

入力層から出力層まで上記のような計算を繰り返していく。これを"順伝播"とか言う。
順伝"搬"ではなく、順伝"播"。ネットワークが多層になったとしても全く同様。
以下みたいにNumpyの積和計算を繰り返すだけで出来る。

-深層学習
-

Copyright© ikuty.com , 2019 AllRights Reserved Powered by AFFINGER4.