Pynote

Python、機械学習、画像処理について

Deep Learning - 全結合型ニューラルネットワークの数式表現

記号の定義

L 層で構成されるニューラルネットワークについて、記号を以下で定義する。

入力が1つの場合

l 層の入力

l 層の N^{(l)} 個のニューロンの入力は以下のように計算できる。

\displaystyle
\begin{eqnarray}
   u_1^{(l)} &= \sum_{i=1}^{N^{(l-1)}} w_{1i}^{(l)} \ y_i^{(l-1)} + b_{1}^{(l)} \\
   u_2^{(l)} &= \sum_{i=1}^{N^{(l-1)}} w_{2i}^{(l)} \ y_i^{(l-1)} + b_{2}^{(l)} \\
   & \vdots \\
   u_{N^{(l)}}^{(l)} &= \sum_{i=1}^{N^{(l-1)}} w_{N^{(l)}i}^{(l)} \ y_i^{(l-1)} + b_{N^{(l)}}^{(l)} \\
\end{eqnarray}

ここで、

\displaystyle
W^{(l)} = \left( \begin{matrix}
    w_{11}^{(l)} & w_{12}^{(l)} & \cdots & w_{1 N^{(l-1)}}^{(l)} \\
    w_{21}^{(l)} & w_{22}^{(l)} & \cdots & w_{2 N^{(l-1)}}^{(l)} \\
    \vdots & \vdots & \ddots & \vdots \\
    w_{N^{(l)}1}^{(l)} & w_{N^{(l)}2}^{(l)} & \cdots & w_{N^{(l)} N^{(l-1)}}^{(l)} \\
\ \ \ \ 
\end{matrix} \right),\\
\boldsymbol{b}^{(l)} = (b_1^{(l)}, b_2^{(l)}, \cdots, b_{N^{(l)}}^{(l)}\ )^T,\\
\boldsymbol{u}^{(l)} = (u_1^{(l)}, u_2^{(l)}, \cdots, u_{N^{(l)}}^{(l)}\ )^T,

とおくと、

\displaystyle
\begin{align}
\left( \begin{matrix}
    u_1^{(l)} \\
    u_2^{(l)} \\
    \vdots \\
    u_{N^{(l)}}^{(l)} \\
\ \ 
\end{matrix} \right)
&=
\left( \begin{matrix}
    w_{11}^{(l)} & w_{12}^{(l)} & \cdots & w_{1 N^{(l-1)}}^{(l)} \\
    w_{21}^{(l)} & w_{22}^{(l)} & \cdots & w_{2 N^{(l-1)}}^{(l)} \\
    \vdots & \vdots & \ddots & \vdots \\
    w_{N^{(l)}1}^{(l)} & w_{N^{(l)}2}^{(l)} & \cdots & w_{N^{(l)} N^{(l-1)}}^{(l)} \\
\ \ \ \ 
\end{matrix} \right)
\left( \begin{matrix}
    y_1^{(l-1)} \\
    y_2^{(l-1)} \\
    \vdots \\
    y_{N^{(l-1)}}^{(l-1)} \\
\ \ \ \ 
\end{matrix} \right)
+
\left( \begin{matrix}
 b_1^{(l)} \\
 b_2^{(l)} \\
 \vdots \\
 b_{N^{(l)}}^{(l)} \\
\ \ 
\end{matrix} \right)\\
\boldsymbol{u}^{(l)} &= W^{(l)} \boldsymbol{y}^{(l - 1)} + \boldsymbol{b}^{(l)}
\end{align}

l 層の出力

l 層の N^{(l)} 個のニューロンの出力は以下のように計算できる。

\displaystyle
\begin{eqnarray}
   y_1^{(l)} &= f_1^{(l)}(u_1^{(l)}) \\
   y_2^{(l)} &= f_2^{(l)}(u_2^{(l)}) \\
   & \vdots \\
   y_{N^{(l)}}^{(l)} &= f_{N^{(l)}}^{(l)}(u_{N^{(l)}}^{(l)}) \\
\end{eqnarray}

ここで、

\displaystyle
f^{(l)}(\boldsymbol{u}) = (f_1^{(l)}(u_1^{(l)}), f_2^{(l)}(u_2^{(l)}), \cdots, f_{N^{(l)}}^{(l)}(u_{N^{(l)}}^{(l)})\ )^T,\\
\boldsymbol{y}^{(l)} = (y_1^{(l)}, y_2^{(l)}, \cdots, y_{N^{(l)}}^{(l)}\ )^T

とおくと、

\displaystyle
\begin{align}
\left( \begin{matrix}
    y_{1}^{(l)} \\
    y_{2}^{(l)} \\
    \vdots \\
    y_{{N^{(l)}}}^{(l)} \\
\end{matrix} \right)
&=
\left( \begin{matrix}
    f_1^{(l)}(u_{1}^{(l)}) \\
    f_2^{(l)}(u_{2}^{(l)}) \\
    \vdots \\
    f_{N^{(l)}}^{(l)}(u_{N^{(l)}}^{(l)}) \\
\end{matrix} \right)\\
\boldsymbol{y}^{(l)} &= f^{(l)}(\boldsymbol{u}^{(l)})
\end{align}

ニューラルネットワーク全体の式

まず入力層は外部から受け取った入力 \boldsymbol{x} をそのまま第 2 層に渡す。

第1層:  \boldsymbol{y}^{(1)} = \boldsymbol{x}

2 層から第 L 層まで次のように計算していき、最終的に出力層から出力 \boldsymbol{y}^{(L)} が得られる。

第2層:  \boldsymbol{y}^{(2)} = f^{(2)}(W^{(2)} \boldsymbol{y}^{(1)} + \boldsymbol{b}^{(2)})
第3層:  \boldsymbol{y}^{(3)} = f^{(3)}(W^{(3)} \boldsymbol{y}^{(2)} + \boldsymbol{b}^{(3)})
\vdots
第L層:  \boldsymbol{y}^{(L)} = f^{(L)}(W^{(L)} \boldsymbol{y}^{(L - 1)} + \boldsymbol{b}^{(L)})


ミニバッチの場合

n 個のデータから成るミニバッチ X = (\boldsymbol{x}_1, \boldsymbol{x}_2, \cdots, \boldsymbol{x}_n) を使用する場合の式も導出しておく。

l 層の入力

入力が \boldsymbol{x}_i のとき、第 l 層の入力を \boldsymbol{u}_i^{(l)} 、出力を \boldsymbol{y}_i^{(l)} とする。
このとき、

\displaystyle
U^{(l)} = (\boldsymbol{u}_1^{(l)}, \boldsymbol{u}_2^{(l)}, \cdots, \boldsymbol{u}_n^{(l)}\ )^T,\\
\boldsymbol{1} = (1, 1, \cdots, 1)^T

とおくと、

\displaystyle
U^{(l)}
=
\underbrace{W^{(l)}}_{N^{(l)} \;\; \times N^{(l - 1)}} \ \ \ \ 
\underbrace{Y^{(l - 1)}}_{N^{(l - 1)} \;\; \times n} \ \ \ \ 
+
\underbrace{\mathbf{b}^{(l)}}_{{N^{(l)}} \;\; \times 1} \ \ \ \ 
\underbrace{\mathbf{1}^T}_{1 \times n}

l 層の出力

\displaystyle
Y^{(l)} = (\boldsymbol{y}_1^{(l)}, \boldsymbol{y}_2^{(l)}, \cdots, \boldsymbol{y}_n^{(l)}\ )^T,\\
f^{(l)}(U) = (f^{(l)}(\boldsymbol{u}_1), f^{(l)}(\boldsymbol{u}_2), \cdots, f^{(l)}(\boldsymbol{u}_n))

とおくと、

\displaystyle
Y^{(l)} = f^{(l)}(U^{(l)})

ニューラルネットワーク全体の式

ミニバッチ X が与えられたとき、各入力に対する出力 Y^{(L)} は次のように計算していくことで得られる。

第1層:  Y^{(1)} = X
第2層:  Y^{(2)} = f^{(2)}(W^{(2)} Y^{(1)} + \boldsymbol{b}^{(2)} \boldsymbol{1}^T)
第3層:  Y^{(3)} = f^{(3)}(W^{(3)} Y^{(2)} + \boldsymbol{b}^{(3)} \boldsymbol{1}^T)
\vdots
第L層:  Y^{(L)} = f^{(L)}(W^{(L)} Y^{(L - 1)} + \boldsymbol{b}^{(L)} \boldsymbol{1}^T)