3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[ 機械学習 ] 社内輪講 Week5 〜 ニューラルネットワーク: 誤差逆伝播法 〜

Last updated at Posted at 2019-09-25

はじめに

スタンフォード大学 Andrew Ng氏による機械学習の講義動画を各週社内メンバーで持ち回りで受講し、学んだことを発表、Qiitaで共有しています。

【機械学習】社内輪講はじめました -Qiita

第5週は以下の内容でした。

  • Neural Networks: Back Propagation

主に、誤差逆伝播法を説明していきます。

目次

  • アインシュタインの縮約記法

  • 記号等の説明

  • 数学的準備

    • 対数関数の微分
    • シグモイド関数の微分
    • 連鎖律
    • 行列の諸定義
  • 順伝播の復習

  • 損失関数

  • 誤差逆伝播法

アインシュタインの縮約

本項では、アインシュタインの縮約で記述します。

例えば
$$
\sum_{\mu=0}^{N} a_\mu = a_1 + a_2 + ... + a_N
$$
$$
\sum_{\nu=0}^{N} a_\nu b_\nu = a_1b_1 + a_2b_2 + ... + a_Nb_N
$$
$$
\sum_{\xi=0}^{N} a_\xi b^\xi = a_1b^1 + a_2b^2 + ... + a_Nb^N
$$
などを単に
$$
a_\mu
$$
$$
a_\nu b_\nu
$$
$$
a_\xi b^\xi
$$
とシグマを省略して記述します。

縮約の添え字は $ \mu , \nu, \xi $ を使用します。

これら三つの文字が出てきたら縮約されていると思ってください。

数学的準備

  • 対数関数の微分
    $$
    \frac{d}{dx}\log{x}=\frac{1}{x}
    $$
    これと、合成関数の微分法
    $$
    \frac{dy}{dt}=\frac{dy}{du}\frac{du}{dt}
    $$
    から
    $$
    \frac{d}{dx}\log{f(x)}=\frac{d}{df}\log{f}\frac{df}{dx}=\frac{f^{\prime}(x)}{f(x)}
    $$

  • シグモイド関数の微分
    $$
    \sigma(x)=\frac{1}{1+e^{-x}}
    $$
    $\frac{d}{dx}e^{-x}=-e^{-x}$ , $ \frac{d}{dx}\frac{1}{x}=-\frac{1}{x^2} $ であり合成関数の微分法から $ f(x)=1+e^{-x} $ とすると
    $$
    \frac{d}{dx}\frac{1}{f(x)}=\frac{d}{df}\frac{1}{f(x)}\frac{df}{dx}=
    -\frac{1}{f(x)^2} \times f^\prime(x)=
    -\frac{1}{(1+e^{-x})^2} \times (-e^{-x})=
    \frac{1}{1+e^{-x}} \times (1-\frac{1}{1+e^{-x}})
    $$

    すなわち
    $$
    \sigma^\prime(x)=\sigma(x)(1-\sigma(x))
    $$
    となります。

  • 連鎖律

    $f(x_1,x_2, ...)$ を $t$ で微分したいとき、が $x_1,x_2,...$ の全てが $t$ に依存しているならば
    $$
    \frac{\partial f}{\partial t} =
    \frac{\partial f}{\partial x_\mu}\frac{\partial x_\mu}{\partial t}
    $$
    $t$ が微小に動くとき $x_1,x_2,...$ の全てが微小に変化し、それら全てが$f$を微小に変化させる要因となるため、足し合わせる。といったイメージです。

  • 行列の諸定義

    • 行列の積

      $$
      A = (a_{ij})_{ij} ,,, B = (b_{ij})_{ij}
      $$

      とすると

      $$
      AB = (a_{i \mu}b_{\mu j})_{ij}
      $$

    • アダマール積
      $$
      A \circ B = (a_{ij}b_{ij})_{ij}
      $$

    • 転置
      $$
      A^T = (a_{ji})_{ij}
      $$

    上記はそれぞれベクトルへの自然な応用が出来ます。(ベクトルを行数または列数が1の行列と考える)

本項の設定

本項では以下の設定のニューラルネットワークで説明していきます。

  • 入力データ
    $$
    (x_1, x_2, \cdots)
    $$

  • ラベルデータ
    $$
    (t_1, t_2, \cdots),,,,, (t = 0 , or , 1)
    $$

  • 層の数は L 層 ( よって出力層は第 L 層 )

  • 出力層の活性化関数はシグモイド関数

    • $$
      \sigma^L(x)=\frac{1}{1+e^{-x}}
      $$

順伝播の復習

復習なので、ざっと進めます。

以下の図は

  • 第 l 層の上から i 番目のノードから
  • 第 l+1 層の上から j 番目のノードへの

順伝播です。

画像1.png

第 $l$ 層の $i$ 番目以外のノードの伝播も考慮して
$$
y_j^l = w_{\mu j}^l , z_\mu^{l-1}
$$
$$
z_j^l = \sigma^l(y_j^l)
$$
になります。

損失関数

損失関数は対数尤度関数を用います。
$$
E=E(z_1^L, z_2^L,\cdots) = -(,t_\nu\log{z_\nu^L} + (1 - t_\nu)\log(1-z_\nu^L),)
$$
[ 式の意味 ]

出力層のj番目の出力
$$
z_j^L
$$
はシグモイド関数により活性化されるので
$$
z_j^L \in (0,1)
$$
であり、これは確率として解釈できます。

つまり出力が $t_j$ である確率は
$$
{z_j^{L}}^{t_j},(1-z_j^{L})^{1-{t_j}}
$$
となります。全出力層のノードを掛け合わせると
$$
\prod_j {z_j^{L}}^{t_j},(1-z_j^{L})^{1-{t_j}}
$$
これの対数を取り、整理します。(足し算の方が扱いやすく、かつ対数だと微分ができるので)
$$
t_\nu\log{z_\nu^L} + (1 - t_\nu)\log(1-z_\nu^L)
$$
この式は分類がうまくいっている指標になります。

今回は、損失関数(分類がうまくいっていない指標)として扱うので$ -1 $ をかけて上記結果となります。

##誤差逆伝播法

損失関数が小さくなる方向に、重み $w$ を修正します。つまり
$$
\Delta w_{ij}^l = -\frac{\partial E}{\partial w_{ij}^l} \times学習率
$$
で $w_{ij}^l$ の修正分 $\Delta w_{ij}^k$ を求めます。学習率は、どの程度の大きさで修正するかを決めるハイパーパラメータです。

学習率を一定とすると、$\frac{\partial E}{\partial w_{ij}^l}$ は修正分を表しています。また
$$
\frac{\partial E}{\partial w_{ij}^l}=\frac{\partial E}{\partial y_{j}^l} \frac{\partial y_j^l}{\partial w_{ij}^l}
$$
であり、
$$
\frac{\partial y_j^l}{\partial w_{ij}^l} = z_i^{l-1}
$$
なので $\frac{\partial E}{\partial y_{j}^l}=\delta_j^l$とすると
$$
\frac{\partial E}{\partial w_{ij}^l}=\delta_j^l , z_i^{l-1}
$$
と表現できます。

次に$\delta_j^l$ について考えます。以下のように、漸化式が求まります。
$$
\delta_j^l =
\frac{\partial E}{\partial y_{j}^l}=
\frac{\partial E}{\partial z_{j}^l}\frac{{\partial z_{j}^l}}{{\partial y_{j}^l}}=
\frac{\partial E}{\partial y_{\xi}^{l+1}}\frac{\partial y_{\xi}^{l+1}}{\partial z_{j}^{l}}\frac{{\partial z_{j}^l}}{{\partial y_{j}^l}}=
\delta_j^{l+1},w_{j\xi}^{l+1},\sigma^{l,\prime}(y_j^l)
$$
ここでは偏微分の連鎖律を用いました。また、
$$
\delta_j^L =
\frac{\partial E}{\partial y_{j}^L}=
\frac{\partial E}{\partial z_{j}^L}\frac{{\partial z_{j}^L}}{{\partial y_{j}^L}}=
-(\frac{t_j}{z_j^L} - \frac{1 - t_j}{1 - z_j^L}) \times z_j^L(1 - z_j^L)=z_j^L - t_j
$$
よって上記二式より任意の $\delta_j^l$ を求めることが出来る。

まとめると、
$$
\Delta w_{ij}^l = \delta_j^{l+1},w_{j\xi}^{l+1},\sigma^{l,\prime}(y_j^l) \times学習率
\
\delta_j^L = z_j^L - t_j
\
\delta_j^l = \delta_j^{l+1},w_{j\xi}^{l+1},\sigma^{l,\prime}(y_j^l)
$$
また、行列やベクトルで表記すると
$$
\Delta W^l = z^{l-1} , (\delta^l)^T \times学習率
\
\delta^L = z^L - t
\
\delta^l = (W^{l+1}\delta^{l+1}) \circ \sigma^{l,\prime}(y^l)
$$
ただし
$$
\Delta W^l = (\Delta w_{ij}^l)_{ij}
$$
$$
y^{l}=(y_j)_j ,,, z^{l}=(z_j)_j
$$
$$
\delta^{l}=(\delta_j^l)_j
$$
とします。

以上になります。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?