ニューラルネットワークとはなんだ
天馬「それではやっと、ニューラルネットワークに入ろう。ディープラーニングが自己学習のような高度な機能を、どうやって実現しているかの仕組みだ。そのためには、ディープラーニングの基本となっている、ニューラルネットワークの説明から始める必要がある。
最初はニューラルネットワークの原型であるパーセプトロンの構造だ。マリリン図を出してくれ」
天馬「昨日の講義の最初の頃、脳神経ネットワークの図を見せただろう、思い出してくれ。このパーセプトロンは、その脳神経ネットワークをモデルにしている。脳神経細胞ニューロンに相当するのがノードだ。ニューロン同士を繋ぐシナプスには、信号が一定値を超えると、発火して隣のニューロンに信号を伝える機能がある。パーセプトロンは、これと同様に前段からの入力値の合計(入力×重みの和)が一定値を超えると、隣のノードに信号を伝えるようにできている」
天馬「左が、このモデルを数式で表したものだ。ノードの出力Yは、前のノードからの出力Xにエッジの重みWを掛けて足し合わせた後に、活性化関数を通して出力する。
入力×重みの和が小さければOFF(0)、大きければON(1)だ。活性化関数とは、入力値がある閾値を超えると急激に大きな値を出力する関数で、シグモイド関数やReLU関数などがある。つまり脳のシナプスの信号伝達方法を、そのまま数式で表現したものであることは、図を見れば理解できるだろう」
猿田くん「見たこともない数式が登場したけど、なんだ、神経の動作そのものなんだ」
天馬「そう、何度も言っているがニューラルネットワークを解説する際に、複雑で高度な数式を用いる場合が多い。しかしそれは、生物の動作を正確に表現しようとして、見慣れない関数を用いているのが理由だ。だからニューラルネットワークをコンピューターに実装しなければならないエンジニアでない限り、概念がわかればよい」
天馬「このノードを、左の図のように多数相互接続したものがニューラルネットワークとなる。入力層と出力層の間に隠れ層とよばれているネットワークがあるが、この隠れ層を多段にしたものが一般的にディープラーニングとか深層学習と呼ばれているものだ。本来ならディープ・ニューラルネットワーク(DNN)とよぶべきものだがね」
伴くん「これらの各ノードを、どうしてこのような接続方法にしたのですか?」
天馬「おっと、根源的な質問をしてくるね。実はこの接続方法は、結果としてこうなっただけだ。昨日の講義で単層パーセプトロンを開発したローゼンブラットの話を思い出してくれ。このパーセプトロンは生物の視覚野つまり視神経をモデルとしているが、当初はノードをどのように接続すれば眼のような機能を実現できるかがわからなかった。長期間、試行錯誤の実験を繰り返した結果が、この単層パーセプトロンとなった。このパーセプトロンを発表した後の騒動は、昨日話した通りだ」
愛さん「でも昨日の話では、単層パーセプトロンは『線形分離不可能』な問題が解けなかったから、その後見放されたのですよね」
天馬「まあそうだ。その後の20年にもわたる長い長い人工知能冬の時代は話さなかったな。しかしだいぶ後になってからだが、単層パーセプトロンにこの隠れ層を追加することで、やっと『線形分離不可能』な分類問題も解決できたのだ」
伴くん「では、ニューラルネットワークは理論というより、実験結果から生まれているのですね」
天馬「そうだ。とにかく生物が現実に実現している機能を、その仕組みから真似すれば実現するはず、というのがニューラルネットワークの基本にある考え方だ。その頃の主流派である理論からアプローチしていく記号主義的人工知能に対して、ニューラルネットワークの研究は理屈からではなく試行錯誤の実験から始まっていることが多い。」