Sideswipe

情報工学、計算論的神経科学など、真面目なこと書くブログ。お仕事の話は Twitter: @kazoo04 にお願いします。

ニューラルネットワークとパーセプトロン

これは 人工知能アドベントカレンダー の15日目の記事です。

今回はニューラルネットワークについて扱います。ニューラルネットワークはかなり歴史が古く、流行ったり廃れたりを繰り返しながら少しずつ進歩を遂げてきました。今日では、Deep Learningによって幅広い層にその存在を知られるようになり、一躍最新のアルゴリズムへと進化しました。ここではそんなニューラルネットワークについて見ていきましょう。

なお、この内容は 人工知能は Deep Learning によって成されるのか? - Sideswipe でも触れているので、かなり重複していますが興味があれば併せて御覧ください。

形式ニューロン

脳が神経細胞のネットワークによって成り立っていることから、これを模倣することで高度な情報処理ができるのではないかと予想するのは自然な流れといえます。マッカロック(McCulloch)とピッツ(Pitts)は、1943年に以下のような形式ニューロン(formal neuron)を提案しました*1*2

f:id:kazoo04:20151007195948p:plain

この図の見方は簡単で、ここでは入力が3つあり、それぞれの入力に対して重みが掛け算されて、その値が閾値を超えていれば出力は1、そうでなければ出力は0となります。
たとえば、入力が1,2,3、重みが0.5, 0.7, 0.9だとすると、1*0.5 + 2*0.7 + 3*0.9 = 4.6 を計算して、閾値と比較するわけです。やっていることは掛けて足して比較するというだけの簡単なモデルです*3

実際の神経細胞は以下のようになっています。

f:id:kazoo04:20151117001007p:plain

いくつかの樹状突起(入力)が細胞体に入っていき、細胞体から1本の軸索(出力)があるという意味では両者はよく似ているといえますが、言うまでもなく神経細胞をかなり簡略化したもので、生理学的な根拠は大幅に削られています。ちなみに出力はコンピュータに扱いやすい0か1かのどちらかです。

f:id:kazoo04:20151117001033p:plain

実際の神経細胞は ニューロンの概要とそのモデル でも触れたように、もっと複雑な挙動をしますが、発火するかしないか(全か無か)の2パターンの振る舞いをするという意味ではやはり似ています。

パーセプトロン

f:id:kazoo04:20151007200055p:plain

こんな足し算と掛け算しかできないものがなんの役に立つのかと思われるかもしれませんが、形式ニューロンは非常に優れており、1958年に Rosenblatt が提案したパーセプトロンは形式ニューロンをいくつか並列に組み合わせてから出力ニューロンで束ねるという2層の構造をとることで、入力と出力のペアを学習することを示しました。

たとえば、2つの入力と1つの出力があるとします。パーセプトロンに対して、入力として1と2を、出力として両者を足した3を与えて、これを満たすように重みを変更します。次に、入力にまた適当な数、たとえば3と5、出力に両者を足した8を与えて学習させます。これを色々な数で学習させたあとに、学習に使わなかった数、たとえば1と5を入力すると、6を出力するようになるのです。つまり、「足し算」を学習したことになります。もちろん掛け算もできるし、平方根を計算することもできます。出力も2つにして、一方は足し算の結果が、もう片方は引き算の結果が出てくるような学習だってできます*4。これはまさに教師あり学習のことです。

パーセプトロンの終焉と復活

パーセプトロンはいかにも「なんでも学習できる」という万能感がありそうな感じで、ものすごく優れた方法に思えます。実際にパーセプトロンはとても流行したのですが、すぐにパーセプトロンでは理論的に学習できない問題が存在することがわかり、しかも悪いことに世の中の解きたい問題は大抵パーセプトロンでは解けないタイプの問題であることもわかりました。具体的には、教師あり学習の項で触れた、「線形分離可能な問題」しか解けなかったのです。そんなわけで期待していたほどの活躍ができないパーセプトロンの研究はすっかり廃れてしまいました。

f:id:kazoo04:20151007200113p:plain

約30年後の1986年、今度はラメルハート(Rumelhart)によってパーセプトロンを改良したバックプロパゲーション(Backpropagation, BP)が発表されました*5。これは上図のように、2つのパーセプトロンを合体したような形になっており、新しく出来た真ん中の層を隠れ層(hidden layer)と呼びます。

実はこれだけで先ほどの「線形分離可能な問題しか解けない」という制限を突破して、非線形分離可能なモデルになります。パーセプトロンは重みを調整しなければならないところが1層だけなので簡単にどれくらい調整すればよいかが求まるのですが、この場合は2層あるのでそれぞれの層でどれくらい値を調整すればいいのか決めるのが難しという問題がありました。BPはこの問題に対して誤差逆伝搬と呼ばれる方法を使ってうまく良い重み調整方法を手に入れたため、3層構造でも学習可能になったのです*6

さらなる進化

形式ニューロンを組み合わせることでパーセプトロンが登場し、ある種の問題が学習可能になりました。
パーセプトロンではできなかった問題については、パーセプトロンを組み合わせて3層構造にしたBPでパーセプトロンの制限を超えて様々な問題が学習可能になりました*7

それでは、そのBPをさらに組み合わせて多層にしたら、もっともっと複雑な問題が解けるようになるのではないでしょうか*8

f:id:kazoo04:20151007200341p:plain

ところがこのような複雑なネットワークはうまく学習するのがとても難しいことがわかり*9、理論的に優れた性能が発揮できるということはわかっていても、そもそも学習ができないのでした。

この問題は、Deep Learningの登場まで解決できないまま、ニューラルネットワーク自体が次第に忘れ去られていきます*10

*1:Warren S. McCulloch; Walter Pitts (December 1943). "A logical calculus of the ideas immanent in nervous activity". The bulletin of mathematical biophysics (Kluwer Academic Publishers) 5 (4): 115–133.

*2:マッカロックは神経生理学者、ピッツは数学者であり、異業種のコラボによって生まれたのが形式ニューロンである

*3:形式ニューロンの場合、普通は入力も0,1で、出力も0, 1、出力と閾値は実数であるが、以後紹介するニューラルネットワークでは入出力も実数であることが多いのでそのように紹介した。形式ニューロンの入出力を0と1に固定した理由は、ニューロンの発火モデル(発火するかしないかのどちらかの振る舞いしかしない)を導入したかったためであろう

*4:ここでは任意の自然数を与えているかのように書いているが、実際はパーセプトロンの場合0以上1以下の値しか与えられないので、適当に正規化する必要がある

*5:実はパーセプトロンは完全に廃れたわけではなく、今でもパーセプトロンに似たアルゴリズムが現役で活躍している。というのも、ある種のデータは線形分類器でも十分な精度が出ることがわかったり、線形分類器は過学習しにくいことや、学習が早く簡単なこと、カーネルトリックによって非線形分離可能にすることができるなど色々な応用例が出てきたためである

*6:この説明は簡略化した要約で、かなり正確さが犠牲になっている。バックプロパゲーションアルゴリズムについては様々な解説があるので、興味のある方はぜひ調べてみていただきたい

*7:色々な条件があるが、ざっくり言うと任意の連続な関数が任意の精度で近似可能になった。もっと簡単にいえば、世の中の大抵の問題が学習可能になった

*8:理論的には、3層構造のネットワークでも、中間層が十分な数だけあれば問題がない。ただし、ある種の問題に関しては、層を増やすことでより少ないニューロンで同じ問題を学習できる、言い換えるとより小さいネットワークで複雑な問題が解けることはわかっていました

*9:いろいろな理由があるが、主な壁はVanishing Gradient Problem という、重みを調整したくても適切な重み調整量がネットワーク中に拡散してしまって重みがほとんど変わらなくなってしまう問題があった

*10:とはいっても、SVMニューラルネットワークで表現できるし、Passive Aggressive や AROW, SCW のような、パーセプトロンを改良した(が、もはやニューラルネットワークとはみなされない)アルゴリズムが誕生し、それらは今でも用いられているので、正確には多層のBPを上手く学習するというアプローチが諦められていた、と言ったほうがいいかもしれない