Convergence Lab. の木村です。
今回はニューラルネットワークのアルゴリズムについて見ていきましょう。ニューラルネットワークは人間や動物の神経回路を模した機械学習アルゴリズムです。まずは、動物の神経回路と比較し、その後、ニューラルネットワークのアルゴリズムについて見ていきましょう。
ニューロンの仕組み

神経細胞(ニューロン)
上の図は一つの神経細胞(ニューロン)を表しています。左側の細胞体の先に樹状突起とよばれる枝がついています。ニューロンには他に軸索というものがあり軸先の先、軸先末端は樹状突起のようになっています。樹状突起が神経細胞への入力、軸索が出力を担当します。樹状突起と軸索末端にはシナプスがあります。

シナプス
軸索末端では他の神経細胞の樹状突起と僅かな隙間(シナプス間隙)を隔ててつながっています。シナプスの間では、化学物質のやり取りを行っています。この物質のことを神経伝達物質と呼びます。シナプスには興奮性シナプスと抑制性シナプスが存在します。しかしここでは、興奮性シナプスだけを例にとって説明します。

ニューロンの膜の電位のことを活動電位と呼びます。シナプスから一定以上神経伝達物質が取り込まれるさると、スパイク状の電位が発生します。このことを脱分極とよびます。
脱分極が起こると、樹状突起から次のニューロンに向けて神経伝達物質が放出されます。神経細胞ではこのようにして情報のやり取りが行われています。
シナプス間で頻繁に神経伝達物質がやり取りされると、シナプス間の神経伝達物質の伝達効率が上昇します。これをシナプス可塑性と呼びます。シナプス可塑性は学習や記憶に関わっているとされます。
単純パーセプトロン
ここでは、最も単純な人工のニューラルネットワークである、単純パーセプトロンについて説明します。単純パーセプトロンはいかのような構成になっています。

左側がパーセプトロンへの入力で、ニューロンにおける樹状突起に対応しています。右側が出力で、ニューロンにおける軸索末端に対応します。右上のグラフが活動電位を模した活性化関数です。ここでは、シグモイド関数で説明します。入力の丸と出力の丸の間は結合重みという値を持っています。
出力は、図の右下の式によって計算されます。fは活性化関数を示しています。
シグモイド関数は 0から1の間で変化する関数です。入力が小さい間は0に近い値を示し、入力された信号の重み付き和がある程度大きくなると、徐々にスイッチが切り替わるように1へと変化します。これは脱分極を模しています。
結合重みの大きさは、入力された信号をどの程度伝えるかをしめしており、シナプス間隙の伝達効率を表しています。単純パーセプトロンでは、シナプス可塑性のように、結合重みを調整して学習を行います。

学習のプロセスについて見ていきましょう。単純パーセプトロンに図の右表Tのよう出力をするように学習サせたいとします。この出力は、論理和(AND)になっていますね。
はじめに、結合重みをランダムに初期化します。

すると、右表のように出力 y の値が求まります。理想とする出力からは大きく離れているようです。出力が理想の値とどの程度離れているかを表すために、以下のような損失(Loss) L を計算します。ここでは、損失として、誤差の自乗の平均を用いることにします。このような誤差をMSE(Mean Squared Error) と呼びます。

誤差が 0 になれば、y は t と一致します。つまり、誤差を小さくするように 結合重みの値を決めればよいわけです。
損失をグラフに書いたときに、以下のようになるとします。これは模式図で実際にの形になるというわけではありません。

誤差が 0 の場所は、このグラフで一番そこになっている部分です。はじめ、誤差の値が右の緑色の丸だった場合、左の丸の位置に移動すれば誤差が小さくなっているはずです。ここで、右の丸の位置での傾きを計算します。傾きはその位置での微分で与えられます。左の丸の位置に移動するには、傾きの逆方向に移動すればよいです。

そこで、結合重み を上の式のように変更します。これは、微分して求められた傾きに小さな値 αをかけたものを現在の重みから引くことを表しています。この小さな値αのことを学習率(learning rate) と呼びます。上の式を繰り返し行い、wの値が変わらなくなるまで繰り返せば、誤差は0に近づきます。このような学習法を最急降下法と呼びます。
多層パーセプトロン、ニューラルネットワークとディープラーニング

単純パーセプトロンを上の図のように積み重ねたのがニューラルネットワークです。真ん中の層のことを隠れ層と呼びます。隠れ層が一つかニつの場合、多層パーセプトロン(MLP : Multi Layer Perceptrom)と呼びます。隠れ層の数が多くなったものがディープニューラルネットワーク(DNN: Deep Neural Network)と呼びます。ディープニューラルネットワークを用いる機械学習のことをディープラーニング(Deep Learning)と呼びます。
さて、上図のようなディープニューラルネットワークを学習するためにはどうすればよいでしょうか?一度に最急降下法を適用するのは難しそうです。

上図の緑の部分にだけ着目すると、単純パーセプトロンになっていることがわかります。そこで、出力層から順番に最急降下法を適応して順繰りに結合重みの大きさを決めていくことにします。

これを逐次的に繰り返せば、最終的に出力と理想の値の誤差は小さくなります。このようなアルゴリズムを誤差逆伝播法(バックプロパゲーション)とよびます。これはラメルハートとジェフリー・ヒントンによって、1986年に考え出されました。
理論的には、バックプロパゲーションで何層のニューラルネットワークでも学習することができます。しかし、ディープラーニングの発明は2006年まで待たなければなりませんでした。バックプロパゲーションの発明からディープラーニングの発明まで30年もかかったのはなぜでしょうか。それが、勾配消失問題(グラディエントバニッシングプロブレム)です。

さて、バックプロパゲーションに従うと、1層目の傾きは上図の式のように表されます。この式に問題は隠れています。シグモイド関数の傾きは最大でも 0.25 です。そのため n層あると傾きの大きさは最大でも0.25の n乗になります。

このため、4層のニューラルネットワークの学習は難しく、5層以上になると学習することはほぼ不可能でした。
勾配消失問題を解決したのはバックプロパゲーションの発明者の一人である、ジェフリー・ヒントンでした。解決してしまえば簡単なことで、シグモイド関数を使うことが問題であったのです。

そこで、考え出されたのが右のReLU(正規化線形関数)です。ReLUは max(0, x) で表される関数です。傾きがある部分では、傾きは常に 1 です。このため、傾きがある部分では、何層重ねても勾配は消失しません。
このようにして、ディープラーニングの勾配消失問題は解決しました。