バックプロパゲーション(誤差逆伝搬)の更新式の導出

誤差逆伝搬を説明するために以下のようなシンプルなニューラルネットワークを使います。

順伝搬

まず順伝搬について復習しておきます。

中間層のノード\(h_j\)の出力は

$$\begin{aligned} h_j = \sigma (\sum^{n}_{i=1}v_{i, j}x_i – \theta) \end{aligned}$$

\(x_0=-1\)、\(v_{0j}=0\)とし、\(\theta = x_0 v_{0j}\)とすると、

$$\begin{aligned} h_j = \sigma (\sum^{n}_{i=0}v_{i, j}x_i) \end{aligned}$$

ここでは、\(\sigma \)はシグモイド関数とします。つまり、

$$\begin{aligned}
\sigma(a) = \frac{1}{1+e^{-a}}
\end{aligned}$$

出力層の出力は、

$$\begin{aligned} y_k = \sigma \bigl( (\sum^{l}_{j=1}w_{jk}h_j)-\theta \bigr) \end{aligned}$$

\(h_0=-1\)、\(w_{0j}=0\)とすると $$\begin{aligned} y_k &= \sigma (\sum^{l}_{j=0}w_{jk}h_j) \\ &= \sigma \bigl(\sum^{l}_{j=0}w_{jk}\sigma (\sum^{n}_{i=0}v_{i, j}x_i)\bigr) \\ \end{aligned}$$

誤差逆伝搬とは

では、誤差逆伝搬を説明します。

誤差逆伝搬とは、ニューラルネットワークの出力と正解との誤差を小さくするよう出力層から入力層向けて順々にパラメータを更新する方法です。


出力\(y_k\)と正解データ\(t_k\)の二乗誤差\(E\)は

$$\begin{aligned}
E = \frac{1}{2}\sum^{m}_{k=1}(t_k -y_k)^2
\end{aligned}$$

となります。

誤差逆伝搬では、この二乗誤差の勾配を求めて、二乗誤差を小さくするようにパラメータを更新します。

先にパラメータの更新式を紹介しておきます。その後に更新式の導出をします。

中間層と出力層の重みの更新式

$$\begin{aligned}
w_{jk} &\leftarrow w_{jk} + \Delta w_{jk} \\
&= w_{jk}+ \alpha \cdot (d_k-y_k) \cdot y_k \cdot (1-y_k)\cdot h_j \\
&= w_{jk}+\alpha \delta_{1k} \cdot h_j
\end{aligned}$$

入力層と出力層

$$\begin{aligned}
v_{jk} &\leftarrow v_{jk} + \Delta v_{jk} \\
&= v_{jk} + \beta \sum^{m}_{k=1} \delta_{1k} \cdot w_k \cdot h_j(1-h_j) \cdot x_i
\end{aligned}$$

誤差逆伝搬の更新式の導出

では、先程の更新式と導出していきます。

中間層と出力層の重みの更新式の導出

先程の式

$$\begin{aligned}
w_{jk} &\leftarrow w_{jk} + \Delta w_{jk} \end{aligned}$$

\(\Delta w_{jk}\)が変化量になります。

この変化量を展開していきます。

出力層と正解との二乗誤差\(E\)のリンクの重み\(w_{jk}\)に対する勾配\(\frac{\partial E}{\partial w_{jk}}\)を求めて、二乗誤差\(E\)が小さくなるように更新します。

なので、変化量は

$$\begin{aligned}
\Delta w_{jk} = – \alpha \frac{\partial E}{\partial w_{jk}}
\end{aligned}$$

\(\alpha\)が学習率と呼ばれ、どれだけ修正するかを決定するパラメータです。

以下では変化量\(\Delta w_{jk}\)をどのように計算するか見ていきます。

$$\begin{aligned}
\Delta w_{jk} &= – \alpha \frac{\partial E}{\partial w_{jk}} \\
&= – \alpha \frac{\partial E}{\color{red}{\partial o_k}} \cdot \frac{\color{red}{\partial o_k}}{\partial w_{jk}} & \scriptstyle{o_k = \sum^{l}_{j=0}w_{jk}h_j}\\
&= – \alpha \underbrace{\frac{\partial E}{\color{blue}{\partial y_k}}}_{-(d_k -y_k)} \cdot \underbrace{\frac{\color{blue}{\partial y_k}}{\color{red}{\partial o_k}}}_{y_k(1-y_k)} \cdot \frac{\color{red}{\partial o_k}}{\partial w_{jk}}
\end{aligned}$$

$$\begin{aligned}
&= – \alpha \cdot (-(d_k-y_k)) \cdot y_k \cdot (1-y_k)\cdot h_j \\
&= \alpha \cdot \underbrace{(d_k-y_k) \cdot y_k \cdot (1-y_k)}_{\delta_{1k}}\cdot h_j \\
&= \alpha \delta_{1k} \cdot h_j
\end{aligned}$$

入力層と中間層の重みの更新式の導出

同様に入力層と隠れ層の結合重み\(v_{ij}\)の更新量を導出していきます。

$$\begin{aligned}
\Delta v_{ij} &= -\beta \cdot \frac{\partial E}{\partial v_{ij}} \\
&= -\beta \cdot \frac{\partial E}{\color{red}{\partial p_j}}\cdot \frac{\color{red}{\partial p_j}}{\partial v_{ij}} & \scriptstyle{p_j = \sum^{n}_{i=0}v_{ij}x_i}\\
&= -\beta \cdot \frac{\partial E}{\color{blue}{\partial h_j}} \cdot\frac{\color{blue}{\partial h_j}}{\color{red}{\partial p_j}} \cdot \frac{\color{red}{\partial p_j}}{\partial v_{ij}}\\
\end{aligned}$$

ここで、\(\beta\)は学習率です。また、

$$\begin{aligned}
\frac{\partial E}{\partial h_j} &= \frac{\partial E}{\partial y_k} \cdot \frac{\partial y_k}{\partial o_k} \cdot \frac{\partial o_k}{\partial h_j} \\
&= \frac{\partial}{\partial y_k}(\frac{1}{2}\sum^{m}_{k=1}(d_k-y_k)^2) \cdot \frac{\partial y_k}{\partial o_k} \cdot \frac{\partial o_k}{\partial h_j} \\
\end{aligned}$$

から

$$\begin{aligned}
\Delta v_{ij} &= -\beta \frac{\partial}{\partial y_k}(\frac{1}{2}\sum^{m}_{k=1}(d_k-y_k)^2) \cdot \frac{\partial y_k}{\partial o_k} \cdot  \frac{\partial o_k}{\partial h_j} \cdot \frac{\partial h_j}{\partial p_j} \cdot \frac{\partial p_j}{\partial v_{ij}}
\end{aligned}$$

各項は

$$\begin{aligned}
\Delta v_{ij} &= -\beta \underbrace{\frac{\partial}{\partial y_k}(\frac{1}{2}\sum^{m}_{k=1}(d_k-y_k)^2)}_{-\sum^{m}_{k=1}(d_k-y_k)} \cdot \underbrace{\frac{\partial y_k}{\partial o_k}}_{y_k\cdot(1-y_k)} \cdot \underbrace{\frac{\partial o_k}{\partial h_j}}_{w_k}\cdot \underbrace{\frac{\partial h_j}{\partial p_j}}_{h_j(1-h_j)} \cdot \underbrace{\frac{\partial p_j}{\partial v_{ij}}}_{x_i} \\
&= \beta \sum^{m}_{k=1} \underbrace{{(d_k-y_k)} \cdot y_k(1-y_k)}_{\delta_{1k}}\cdot w_k \cdot h_j(1-h_j) \cdot x_i \\
&= \beta \sum^{m}_{k=1} \delta_{1k} \cdot w_k \cdot h_j(1-h_j) \cdot x_i
\end{aligned}$$

コメント

タイトルとURLをコピーしました