ニューラルネット-ニューロンモデル-

 生物の神経細胞の動きを模倣したアルゴリズムにニューラルネットというものがあります。ニューラルネットでは、神経細胞を層状に並べてつなげることで情報処理を自動でできるようになります。最近、深層学習(ディープラーニング)の発達により、かなり深い階層のニューラルネットを構築できるようになってきました。ここでは、ニューラルネットのアルゴリズムについて学びます。

ニューロンモデル

 では、神経細胞の数理モデルについて学びます。神経細胞は以下のように入力信号と出力信号にわけて考えることができます。

神経

ここで、x_{i},i=1,2,\cdots,nが入力信号で、w_{i}結合係数だとか重みと呼ばれるものです。学習によりこの重みを微調整するというわけです。入力Xは式で

 \displaystyle X=\sum_{i}^{n}w_{i}x_{i}

と記述することができます。

 ニューロンは入力に対して線形に応答するとは限らないので

 z=f(X)

と入力を変えます。この関数f(X)を応答関数と呼びます。応答関数には様々な種類があります。以下に主要な応答関数を列挙します。

閾値型

 閾値hを超えたら1、そうでないなら0とした関数です。

 f(X)=\left\{\begin{array}{ll}1,&(X\geq h)\\0,&(X<h)\end{array}\right.

神経細胞は興奮系で記述できるので、閾値型は生体に比較的近いと思います。閾値を設定していますが、

 \displaystyle X=\sum_{i=1}^{n}w_{i}x_{i}-h

として、閾値をXに入れても同じことです。この場合は

 f(X)=\left\{\begin{array}{ll}1,&(X\geq 0)\\0,&(X<0)\end{array}\right.

を使うことになります。式をもう少しきれいにまとめるために

 w_{0}=-h

とおき、入力は1とし

 \displaystyle X=\sum_{i=1}^{n}w_{i}x_{i}+w_{0}1\\=\sum_{i=0}^{n}w_{i}x_{i}

とします。

シグモイド型

 閾値型をより滑らかにしたものにシグモイド型があります。

 \displaystyle f(X)=\frac{1}{1+\exp(-(X-h))}

線形型

 線形型は単純に

 f(X)=X

とします。

学習

 ヒトは体験することで、様々なことを学びます。この学習というプロセスは「試行してみて、うまくいったら神経細胞の重みが強化される」ことによって起こるという仮説があります。この仮説をシナプス強化則と呼びます。

 学習には、入力と正しい答えをセットにした教師あり学習と、入力だけを与える教師なし学習があります。ここでは教師あり学習を学びます。

標準デルタ則

 教師あり学習では

  1. 答えと神経の出力の差が大きいほど重みの修正値を大きくする
  2. 入力値が大きいほど重みの修正値を大きくする

という考えを用いて学習を行います。上記の考えを定式化します。まず、入力としてx_{i}^{(p)},p=1,2,\cdots,Pが与えられたとします。そして、正しい答えをz_{p}^{\prime}として与えます。すると、神経細胞が出す出力は

 \displaystyle X_{p}=\sum_{i=0}^{n}w_{i}x_{i}^{(p)},\\z_{p}=f(X_{p})

となります。そして、答えと出力の二乗誤差は

 \displaystyle E=\frac{1}{2}\sum_{p=1}^{P}(z_{p}^{\prime}-z_{p})^{2}

となります。あとは、この誤差を最小にするようなw_{i}を探すことになります。

最急降下法

 では誤差関数の最小値を求めるための方法である最急降下法について説明します。といっても簡単で、現状における傾きを調べて、誤差関数が小さくなる方向へ進むだけです。

 まず、誤差関数を偏微分して傾きを計算します。すると

 \displaystyle\frac{\partial E}{\partial w_{i}}=\sum_{p=1}^{P}\frac{\partial E_{p}}{\partial z_{p}}\cdot\frac{\partial z_{p}}{\partial X_{p}}\cdot\frac{\partial X_{p}}{\partial w_{i}}\\=-\sum_{p=1}^{P}(z_{p}^{\prime}-z_{p})f^{\prime}(X_{p})x_{i}^{(p)}

が得られます。このベクトルが示す方向に進むと誤差関数が増加します。ですから、-\etaをかけた分だけ移動させます。ここで\etaは移動量を示し、小さいほうが収束しやすくなります。しかし、小さすぎると進みが悪いので、収束までの時間がかかります。

 以上のことから、変数w_{i}

 \displaystyle w_{i}+\eta\sum_{p=1}^{P}(z_{p}^{\prime}-z_{p})f^{\prime}(X_{p})x_{i}^{(p)}

とすればいいことになります。あとはこれを繰り返して誤差関数を最小化します。

結局何をやっているのか

 上記のことで何をやっているのかを説明します。まず、以下のように2つの軸において、グループ\Omega_{1},\Omega_{2}があったとします。いま、データとしてx_{i}^{p},p=1,2,\cdots,Pと出力z_{p}が与えられています。ここで出力は\Omega_{1},\Omega_{2}のどちらかです。

学習

 ここで学習をして重みを決めると以下のような直線を決定できます。

学習結果

あとは、神経細胞に入力をいれれば、\Omega_{1},\Omega_{2}のどちらかを出力してくれます。つまり学習で直線を決めていたということができます。

 しかし、直線ではうまく分けられない場合は結構あります。例えば、以下の場合です。

we

このケースのような場合に対応するにはどうするかというと、神経細胞の数を増やすのです。すると上記のような複雑なものも分類できるようになります。このお話は次回お話します。

著者:安井 真人(やすい まさと)