Pynote

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

Deep Learning - 逆伝播法の数式表現

記号の定義

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

入力が1つの場合

l 層のデルタ

l 層の N^{(l)} 個のデルタは以下のように計算できる。

\displaystyle
\begin{align}
    \delta_1^{(l)} &= \sum_{k = 1}^{N^{(l + 1)}} w_{k1}^{(l + 1)} \ \ \delta _k^{(l + 1)} \frac{\partial f_j^{(l)}}{\partial u_1^{(l)}}\\ 
    \delta_2^{(l)} &= \sum_{k = 1}^{N^{(l + 1)}} w_{k2}^{(l + 1)} \ \ \delta _k^{(l + 1)} \frac{\partial f_j^{(l)}}{\partial u_2^{(l)}}\\ 
    &\vdots\\ 
    \delta_{N^{(l)}}^{(l)} &= \sum_{k = 1}^{N^{(l + 1)}} w_{kN^{(l)}}^{(l + 1)} \ \ \delta _k^{(l + 1)} \frac{\partial f_{N^{(l)}}^{(l)}}{\partial u_{N^{(l)}}^{(l)}} 
\end{align}

ここで、

\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{\delta}^{(l)} = (\delta_1^{(l)}, \delta_2^{(l)}, \cdots, \delta_{N^{(l)}}^{(l)}\ )^T,\\
\frac{\partial \boldsymbol{f}^{(l)}}{\partial \boldsymbol{u}^{(l)}}
= (\frac{f_1^{(l)}}{u_1^{(l)}},
   \frac{f_2^{(l)}}{u_2^{(l)}},
   \cdots,
   \frac{f_{N^{(l)}}^{(l)}}{u_{N^{(l)}}^{(l)}})^T

とおくと、

\displaystyle
\begin{align}
\left(
\begin{array}{*{20}{c}}
    \delta_1^{(l)} \\
    \delta_2^{(l)} \\
    \vdots  \\ 
    \delta_{N^{(l)}}^{(l)}
\end{array}
\right)

&=

\left(
\begin{array}{*{20}{c}}
    w_{11}^{(l + 1)} & w_{21}^{(l + 1)} & \cdots & w_{N^{(l + 1)}\ \ \ \ 1}^{(l + 1)} \\
    w_{12}^{(l + 1)} & w_{22}^{(l + 1)} & \cdots & w_{N^{(l + 1)}\ \ \ \ 2}^{(l + 1)} \\
    \vdots & \vdots & \ddots & \vdots \\ 
    w_{1N^{(l)}}^{(l + 1)} & w_{2N^{(l)}}^{(l + 1)} & \cdots & w_{N^{(l + 1)}\ \ \ \ N^{(l)}}^{(l + 1)}
\end{array}
\right)

\left(
\begin{array}{*{20}{c}}
    \delta_1^{(l + 1)} \\ 
    \delta_2^{(l + 1)} \\ 
    \vdots \\ 
    \delta_{N^{(l + 1)}}^{(l + 1)} 
\end{array}
\right)

\odot

\left(
\begin{array}{*{20}{c}}
    \frac{\partial f_1^{(l)}}{\partial u_1^{(l)}} \\ 
    \frac{\partial f_2^{(l)}}{\partial u_2^{(l)}} \\ 
    \vdots \\ 
    \frac{\partial f_{N^{(l)}}^{(l)}}{\partial u_{N^{(l)}}^{(l)}} 
\end{array}
\right)\\

\underbrace{\boldsymbol{\delta}^{(l)}}_{N^{(l)} \ \ \times 1}
&=
\underbrace{{W^{(l + 1)}}^T}_{N^{(l)} \ \ \times N^{(l + 1)}}
\ \ \ \ 
\underbrace{\boldsymbol{\delta}^{(l + 1)}}_{N^{(l + 1)} \ \ \ \times 1}
\ \ 
\odot
\ \ 
\underbrace{\frac{\partial \boldsymbol{f}^{(l)}}{\partial \boldsymbol{u}^{(l)}}}_{N^{(l)} \ \ \ \times 1}
\end{align}

ただし、\odot は要素ごとの積 (アダマール積) を表す。

重みに関する偏微分係数

l 層の N^{(l)} \times N^{(l - 1)} 個の \frac{\partial E}{\partial w_{ji}^{(l)}} は、\frac{\partial E}{\partial w_{ji}^{(l)}} = \delta_j^{(l)} y_i^{(l - 1)} であったから、デルタを利用して、以下のように計算できる。

\displaystyle
\begin{align}
\left(
\begin{array}{*{20}{c}}
   \frac{\partial E}{\partial w_{11}^{(l)}} &
   \frac{\partial E}{\partial w_{12}^{(l)}} &
   \cdots &
   \frac{\partial E}{\partial w_{1N^{(l - 1)}}^{(l)}} \\

   \frac{\partial E}{\partial w_{21}^{(l)}} &
   \frac{\partial E}{\partial w_{22}^{(l)}} &
   \cdots &
   \frac{\partial E}{\partial w_{2N^{(l - 1)}}^{(l)}} \\

   \vdots & \vdots & \ddots & \vdots \\ 

   \frac{\partial E}{\partial w_{N^{(l)}1}^{(l)}} &
   \frac{\partial E}{\partial w_{N^{(l)}2}^{(l)}} &
   \cdots &
   \frac{\partial E}{\partial w_{N^{(l)} N^{(l - 1)}}^{(l)}}
\end{array}
\right)

&=

\left(
\begin{array}{*{20}{c}}
    \delta_1^{(l)} \\
    \delta_2^{(l)} \\
    \vdots \\
    \delta_{N^{(l)}}^{(l)}
\end{array}
\right)

\left(
\begin{array}{*{20}{c}}
    y_1^{(l - 1)} & y_2^{(l - 1)} & \cdots & y_{N^{(l - 1)}}^{(l - 1)}
\end{array}
\ \ \ 
\right)\\

\underbrace{\partial W^{(l)}}_{N^{(l)} \ \ \times N^{(l - 1)}}
&=
\underbrace{\boldsymbol{\delta}^{(l)}}_{N^{(l)} \ \ \times 1}
\underbrace{{\boldsymbol{y}^{(l - 1)}}^T}_{1 \times N^{(l - 1)}}

\end{align}

バイアスに関する偏微分係数

l 層の N^{(l)} 個の \frac{\partial E}{\partial b_j^{(l)}} は、b_j^{(l)} = w_{j0}^{(l)}, y_0^{(l)} = 1 に注意すると、

\displaystyle
\frac{\partial E}{\partial b_j^{(l)}} = \frac{\partial E}{\partial w_{j0}^{(l)}} = \delta_j^{(l)} y_0^{(l - 1)} = \delta_j^{(l)}

であったから、デルタを利用して、以下のように計算できる。

\displaystyle
\begin{align}
\left(
\begin{array}{*{20}{c}}
    \frac{\partial E}{\partial b_1^{(l)}} \\
    \frac{\partial E}{\partial b_2^{(l)}} \\
    \vdots \\
    \frac{\partial E}{\partial b_{N^{(l)}}^{(l)}}
\end{array}
\right)
&=
\left(
\begin{array}{*{20}{c}}
    \delta_1^{(l)} \\
    \delta_2^{(l)} \\
    \vdots \\
    \delta_{N^{(l)}}^{(l)}
\end{array}
\right)\\

\underbrace{\partial \boldsymbol{b}^{(l)}}_{N^{(l)} \ \  \times 1}
&=
\underbrace {\boldsymbol{\delta}^{(l)}}_{N^{(l)} \ \  \times 1}

\end{align}

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

まず出力層の \boldsymbol{\delta}^{(L)} を計算する。

L 層:  \boldsymbol{\delta}^{(L)}
= (\delta_1^{(L)}, \delta_2^{(L)}, \cdots, \delta_{N^{(L)}}^{(L)}\ )^T
= (\frac{\partial E}{\partial u_1^{(L)}}\ \ , \frac{\partial E}{\partial u_2^{(L)}}\ \ , \cdots, \frac{\partial E}{\partial u_{N^{(l)}}^{(L)}})^T

L - 1 層から第 2 層まで次のように計算していき、デルタをすべて求める。

L - 1 層:  \boldsymbol{\delta}^{(L - 1)} = {W^{(L)}}^T
\boldsymbol{\delta}^{(L)}
\odot
\frac{\partial \boldsymbol{f}^{(L - 1)}}{\partial \boldsymbol{u}^{(L - 1)}}
L - 2 層:  \boldsymbol{\delta}^{(L - 2)} = {W^{(L - 1)}}^T
\boldsymbol{\delta}^{(L - 1)}
\odot
\frac{\partial \boldsymbol{f}^{(L - 2)}}{\partial \boldsymbol{u}^{(L - 2)}}
\vdots
2 層:  \boldsymbol{\delta}^{(2)} = {W^{(3)}}^T
\boldsymbol{\delta}^{(3)}
\odot
\frac{\partial \boldsymbol{f}^{(2)}}{\partial \boldsymbol{u}^{(2)}}

あとは求めた \delta を利用して、各偏微分係数を求める。

ミニバッチの場合

n 個のデータから成るミニバッチ X = (\boldsymbol{x}_1, \boldsymbol{x}_2, \cdots, \boldsymbol{x}_n) を使用する場合の式も導出しておく。
ミニバッチの損失関数は、各入力の損失関数の和 E(X) = \sum_{i = 0}^n E(x_i) とする。
(各入力の損失関数の平均 E(X) = \frac{1}{n} \sum_{i = 0}^n E(x_i) とするやり方もある。)

l 層のデルタ

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

\displaystyle
\Delta^{(l)} = (\boldsymbol{\delta}_1^{(l)}, \boldsymbol{\delta}_2^{(l)}, \cdots, \boldsymbol{\delta}_n^{(l)}\ ),\\
\frac{\partial \boldsymbol{f}^{(l)}}{\partial {U^{(l)}}}
= (
\frac{\partial \boldsymbol{f}^{(l)}}{\partial \boldsymbol{u}_1^{(l)}},
\frac{\partial \boldsymbol{f}^{(l)}}{\partial \boldsymbol{u}_2^{(l)}},
\cdots,
\frac{\partial \boldsymbol{f}^{(l)}}{\partial \boldsymbol{u}_n^{(l)}})

とおくと、

\displaystyle
\underbrace{{\Delta ^{(l)}}}_{{N^{(l)}} \ \ \times n}
=
\underbrace{{W^{(l + 1)}}^T}_{N^{(l)} \ \ \times N^{(l + 1)}}\ \ \ 
\underbrace{\Delta^{(l + 1)}}_{N^{(l + 1)} \times n}\ \ \ 
\odot \ \ 
\underbrace{\frac
    {\partial \boldsymbol{f}^{(l)}}
    {\partial U^{(l)}}}_{N^{(l)} \ \ \times n}

重みに関する偏微分係数

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

とおくと、

\displaystyle
\frac{\partial E}{{\partial w_{ij}^{(l)}}}
=
\frac{\partial}{\partial w_{ij}^{(l)}} \left(\sum_{k = 1}^n E_k\right)
=
\sum_{k = 1}^n \frac{\partial E_k}{\partial w_{ji}^{(l)}}
=
\sum_{k = 1}^n \delta_{ik}^{(l)} y_{jk}^{(l - 1)}

であるから、

\displaystyle
\begin{align}
&\left(
\begin{array}{*{20}{c}}
    \frac{\partial E}{\partial w_{11}^{(l)}} &
    \frac{\partial E}{\partial w_{12}^{(l)}} &
    \cdots &
    \frac{\partial E}{\partial w_{1N^{(l - 1)}}^{(l)}} \\ 
    \frac{\partial E}{\partial w_{21}^{(l)}} &
    \frac{\partial E}{\partial w_{22}^{(l)}} &
    \cdots &
    \frac{\partial E}{\partial w_{2N^{(l - 1)}}^{(l)}} \\ 
    \vdots &
    \vdots &
    \ddots &
    \vdots \\ 
    \frac{\partial E}{\partial w_{N^{(l)}1}^{(l)}} &
    \frac{\partial E}{\partial w_{N^{(l)}2}^{(l)}} &
    \cdots &
    \frac{\partial E}{\partial w_{N^{(l)} \ \ N^{(l - 1)}}^{(l)}}
\end{array}
\right)\\

&=

\left(
\begin{array}{*{20}{c}}
    \delta_{11}^{(l)} &
    \delta_{12}^{(l)} &
    \cdots &
    \delta_{1n}^{(l)} \\ 
    \delta_{21}^{(l)} &
    \delta_{21}^{(l)} &
    \cdots &
    \delta_{2n}^{(l)} \\ 
    \vdots &
    \vdots &
    \ddots &
    \vdots \\ 
    \delta_{N^{(l)}1}^{(l)} &
    \delta_{N^{(l)}2}^{(l)} &
    \cdots &
    \delta_{N^{(l)}n}^{(l)}
\end{array}
\right)

\left(
\begin{array}{*{20}{c}}
    y_{11}^{(l - 1)} &
    y_{21}^{(l - 1)} &
    \cdots &
    y_{{N^{(l - 1)}}1}^{(l - 1)} \\
    y_{12}^{(l - 1)} &
    y_{22}^{(l - 1)} &
    \cdots &
    \delta_{N^{(l - 1)}2}^{(l)} \\
    \vdots &
    \vdots &
    \ddots &
    \vdots \\ 
    \delta_{1n}^{(l)} &
    \delta_{2n}^{(l)} & 
    \cdots &
    \delta_{N^{(l - 1)}n}^{(l)}
\end{array}
\right) \\

\underbrace{\partial W^{(l)}}_{N^{(l)} \times N^{(l – 1)}}
&=
\underbrace{\Delta^{(l)}}_{N^{(l)} \times n}
\underbrace{{\boldsymbol{Y}^{(l – 1)}}^T}_{n \times N^{(l – 1)}}

\end{align}

バイアスに関する偏微分係数

\displaystyle
\boldsymbol{1} = (1, 1, \cdots, 1)^T

とおくと、

\displaystyle
\frac{\partial E}{\partial b_j^{(l)}}
=
\frac{\partial}{\partial b_j^{(l)}}
\left(\sum_{k = 1}^n E_k\right)
=
\sum_{k = 1}^n \frac{\partial E_k}{\partial b_j^{(l)}}
=
\sum_{k = 1}^n \delta_k^{(l)}

であるから、

\displaystyle
\begin{align}
\left(
\begin{array}{*{20}{c}}
    \frac{\partial E}{\partial b_1^{(l)}} \\
    \frac{\partial E}{\partial b_2^{(l)}} \\
    \vdots \\
    \frac{\partial E}{\partial b_{N^{(l)}}^{(l)}}
\end{array}
\right)
&=
\left(
\begin{array}{*{20}{c}}
    \delta_{11}^{(l)} &
    \delta_{12}^{(l)} &
    \cdots &
    \delta_{1n}^{(l)} \\ 
    \delta_{21}^{(l)} &
    \delta_{21}^{(l)} &
    \cdots &
    \delta_{2n}^{(l)} \\ 
    \vdots &
    \vdots &
    \ddots &
    \vdots \\ 
    \delta_{N^{(l)}1}^{(l)} &
    \delta_{N^{(l)}2}^{(l)} &
    \cdots &
    \delta_{N^{(l)}n}^{(l)}
\end{array}
\right)

\left(
\begin{array}{*{20}{c}}
    1 \\
    1 \\
    \cdots \\
    1
\end{array}
\right)\\

\underbrace{\partial \boldsymbol{b}^{(l)}}_{N^{(l)} \times 1}
&=
\underbrace {\Delta ^{(l)}}_{N^{(l)} \ \ \times n}
\underbrace {\boldsymbol{1}}_{n \times 1}
\end{align}