【ニューラルネット】多層パーセプトロン(MLP)の原理・計算式

ニューラルネットワーク(多層パーセプトロン・MLP)や特徴や原理、その計算方法についてまとめました。

スポンサーリンク

多層パーセプトロン(MLP)とは

多層パーセプトロン(MLP)とは、下図のように(単純)パーセプトロンを複数繋いで多層構造にしたニューラルネットです。

左から入力層、中間層(隠れ層)、出力層と呼ばれます。
この場合は3層構造なので「3層パーセプトロン」とも呼ばれます。
ユニット数や層数は決まっているわけではありません。
そのため、例えば入力層のユニット数を3以上に増やしたり、中間層の階層数を2つにして4層構造にすることも可能です。
作成するモデルによってユニット数や階層数を調整します。

ニューラルネットワークとは?基本原理と活性化関数、単純パーセプトロンについて徹底解説
ニューラルネットワークとは?基本原理と活性化関数、単純パーセプトロンについてまとめました。 ニューラルネットワークとは 脳内には、ニューロン(神経細胞)が無数にあります。ニューロン同士はシナプスで繋がっています。 入力される電気信号の電位が...
スポンサーリンク

確率的勾配降下法

多層パーセプトロンでは、「確率的勾配降下法」で重みを更新します。

(1)   \begin{eqnarray*} w_{ji, t+1}^{(l+1)}=w_{ji, t}^{(l)}-\epsilon \frac{\partial E_n}{\partial w_{ji, t}^{(l)}} \end{eqnarray*}

パラメータ 説明
w_{ji, t+1}^{(l)} l-1層目のi番目のユニットからl層目の j 番目のユニットへの重み(更新前の古い値)
w_{ji, t}^{(l)} l層目のi番目のユニットからl層目の j 番目のユニットへの重み(更新後の新しい値)
目的関数E_n 2乗誤差。目的関数が最小になるときの重みを求める。
\epsilon 学習率(重みの学習速度を決定するパラメータ)

誤差逆伝播により、\cfrac{\partial E_n}{\partial w_{ji}^{(l)}}を計算できます。

スポンサーリンク

出力層の重み更新

2乗誤差E_nを出力層の重みw_{ji}^{(l)} で偏微分すると次のようになります。

(2)   \begin{eqnarray*} \frac{\partial E_n}{\partial w_{ji}^{(l)}} &=& \frac{\partial}{\partial w_{ji}^{(l)}}\cfrac{1}{2}(t_j - g(u_{j}^{(l)}))^{2} \\ &=& (t_j - g(u_{j}^{(l)}))\cdot \frac{\partial}{\partial w_{ji}^{(l)}}(t_j - g(u_{j}^{(l)})) \\ &=& (t_j - g(u_{j}^{(l)}))\cdot \frac{\partial}{\partial u_{j}^{(l)}}(t_j - g(u_{j}^{(l)}))\cdot \frac{\partial u_{j}^{(l)}}{\partial w_{ji}^{(l)}} \\ \\ &=& (g(u_{j}^{(l)}) - t_j)\cdot g'(u_{j}^{(l)})\cdot g(u_{i}^{(l-1)}) \\ \\ &=& (g(u_{j}^{(l)}) - t_j)g(u_{j}^{(l)})(1 - g(u_{j}^{(l)}))g(u_{i}^{(l-1)}) \end{eqnarray*}

パラメータ 説明
t_j 教師データ。
活性化関数g(x)(シグモイド) g(x) = \cfrac{1}{1 + \exp(-x)}
活性化関数の微分 g'(x)=g(x)(1 - g(x))
スポンサーリンク

中間層の重み更新

2乗誤差 E_nを中間層の重み w_{ji}^{(l)}で偏微分すると次のようになります。

(3)   \begin{eqnarray*} \frac{\partial E_n}{\partial w_{ji}^{(l)}} &=& \frac{\partial E_n}{\partial u_{j}^{(l)}}\frac{\partial u_{j}^{(l)}}{\partial w_{ji}^{(l)}} = \delta_{j}^{(l)}\frac{\partial u_{j}^{(l)}}{\partial w_{ji}^{(l)}} \end{eqnarray*}

右辺第1項は次のようになります。

(4)   \begin{eqnarray*} \delta_{j}^{(l)} &=& \frac{\partial E_n}{\partial u_{j}^{(l)}} = \sum_{k}\frac{\partial E_n}{\partial u_{k}^{(l+1)}}\frac{\partial u_{k}^{(l+1)}}{\partial u_{j}^{(l)}} = \sum_{k}\delta_{k}^{(l+1)}w_{kj}^{(l+1)}g'(u_{j}^{(l)}) \\ &=& \Bigl(\sum_{k}\delta_{k}^{(l+1)}w_{kj}^{(l+1)}\Bigr)g(u_{j}^{(l)})(1 - g(u_{j}^{(l)})) \end{eqnarray*}

右辺第2項は次のようになります。

(5)   \begin{eqnarray*} \frac{\partial u_{j}^{(l)}}{\partial w_{ji}^{(l)}} = g(u_{i}^{(l-1)}) \end{eqnarray*}

よって

(6)   \begin{eqnarray*} \frac{\partial E_n}{\partial w_{ji}^{(l)}} = \delta_{j}^{(l)}\frac{\partial u_{j}^{(l)}}{\partial w_{ji}^{(l)}} = \Bigl(\sum_{k}\delta_{k}^{(l+1)}w_{kj}^{(l+1)}\Bigr)g(u_{j}^{(l)})(1 - g(u_{j}^{(l)}))g(u_{i}^{(l-1)}) \end{eqnarray*}

中間層lの重みを更新するときは、その次の層l+1\delta_{k}^{(l+1)}が必要となります.
出力層での\deltaは、出力値と教師の差から求まります。
これを出力層から入力層の方向に順番に伝播させることで中間層の重みを更新します。

スポンサーリンク

【活性化関数】中間層はReLU関数、出力層付近はソフトマックス関数

中間層 勾配消失問題が発生しくく、簡単なためReLU(ランプ関数)がよく用いられる。(以前は0~1に値を正規化するシグモイド関数が使われていたが、勾配消失問題が発生しやすいため現在はあまり使われない)
出力層付近 ソフトマックス関数がよく用いられる。
【機械学習入門】アルゴリズム&プログラミング
機械学習のアルゴリズム(原理)やプログラミング方法について入門者向けにまとめました。
機械学習
スポンサーリンク

コメント

  1. donaldkaoki より:

    ①確率的勾配降下法は自らの重みを変えることであり次の層の重みを変えるものではありません。
    ②パラメタの説明のuは上式には関係ありません。

    • 管理人 より:

      ※donaldkaoki様
      コメントありがとうございます。
      該当箇所を修正致しました。
      「確率的勾配降下法」において完全に勘違いしており、大変勉強になりました。