順伝播型ネットワークについて解説!

多層パーセプトロンと順伝播型ネットワーク

ニューラルネットワークを紐解いていくほど最小構成の最もシンプルな形は以下のような形となっています。

f:id:electric-city:20200920142747p:plain:w300:h350
パーセプトロン

上記のネットワークを構築するユニットが、ニューラルネットワークを構成しています。
入力値にx1、x2とし、各入力xに重みw1、w2が付与されます。
ユニットが受け取る総入力はu、bはバイアスとします。

u=\sum_{i=1}^{2}w_{i}・x_{i} + b

この場合第1層ユニット数がi=1...I、第2層ユニット数がj=1...J、だけ存在すると以下のようになります。

u_{j}=\sum_{i=1}^{I}w_{ji}・x_{i} + b_{j}

上記の場合だとに二次元配列を用いた計算となりますので、行列の考え方が必要になってきます。

順伝播型ネットワークでは情報が入力側から出力側へ伝播します。

活性化関数

シグモイド関数

活性化関数を一言で説明すると、 「ユニットが受け取った総入力uを出力yに変換したい!」
もちろんそのまま返すわけにも行かず、fという活性化関数を介してyを出力します。

y=f(u)

有名どころだとロジスティック関数です。

f(u)=\frac{1}{1+e^{-u}}

f:id:electric-city:20200920144843p:plain:w300:h300
ロジスティック関数


他にも双曲線正接曲線などロジスティック関数に似た性質を持つ関数も存在します。
これらの総称をシグモイド関数と呼ぶようです。

勾配消失問題

しかしシグモイド関数には問題点があります。

後に説明する誤差逆伝播というニューラルネットワーク特有の手段があります。
これは順伝播型とは逆に情報が出力側から入力側へ伝播してフィードバックするイメージです。

シグモイド関数微分値は最大が0.25で、層を重ねると、
入力側へ到達するときの勾配が0に近づいてしまい、勾配が消失して学習が進まなくなるのです。
(0.25を何度も掛けると値は小さくなる)

yaju3d.hatenablog.jp

ReLu関数(rectified linear function)

じゃあどうするの?

ReLU関数ではz=uの線形関数のu<0の部分をu=0に置き換えた関数です。

f(u)=max(u,0)

この場合微分値は1なので、上記の勾配消失問題は発生しません。
しかもシンプルな関数ですので、誤差逆伝播の計算効率が高いです。

しかし100%完璧かと問われるとそうではないのです。
例えば入力が負の場合、微分値は0なので、パラメータ更新に反映されません。

活性化関数は用途によってどの関数を使うべきか使い分けています。
もちろんReLU関数は完璧でないので、PReLUやSeluなど新たな活性化関数も存在します。

恒等関数vsシグモイドvsソフトマックス

出力関数で結果を出力させます。

都合によって出力関数を使い分けます。

  • 回帰 → 具体的な数値【恒等関数】
  • 二値分類 → 0 or 1【シグモイド関数
  • 多クラス分類 → ラベルナンバー(0,1,2...n)【ソフトマックス関数】

重要なポイントは、出力関数の出力値yと教師データy`の近さを測定します。
この尺度を誤差関数とし、この誤差情報をもとにより精度の高い学習を進めていきます。

以下のサイトでは、活性化関数とその誤差関数についてまとめてくれています。

fresopiya.com