病みつきエンジニアブログ

機械学習、iPhoneアプリ、Javascript,Ruby on Railsなどなど。

そろそろニューラルネットやディープラーニングを「人間の脳を模倣してる」というのをやめませんか?

最近(?)ニューラルネット(Neural Network)やらディープラーニング(Deep Learning; 深層学習)やらが流行ってきて、人工知能やらシンギュラリティやら言われるようになって、その中でよく言われるのが「ディープラーニングは人間の脳を模倣してる」とか「特徴量を選ばずに学習できる」とか、そんなことが言われるわけです。

けど、そういったキーワードが一人歩きして、「人工知能は危険だ」論とか、人工知能に対する過剰な期待論がはびこってしまっている気がする。そこで言いたいのが「ディープラーニングは人間の脳を模倣している」と言ってしまうのをやめましょう、という話。

ニューラルネットワークが「人間の脳を模倣」してる話

まず最初に、「ニューラルネットワークが人間の脳を模倣してる」論が、あながち間違ってないよ、ということを話しておきたい。あながち間違ってないんだけど、それでもやめたほうが良いよということを言いたい。

そもそも、ニューラルネットワークは、「Artificial Neural Network=人工ニューラルネットワーク」とか言われたりする。つまり、わざわざ「人工」という言葉をつけている。逆に「人工」じゃないものが何かというと、それはBiologicalなニューラルネットワークであって、つまり生物に備わる脳の話だ。

ニューラルネットワーク系に出現する用語も、明らかに脳の用語から出現するものがある。わかりやすいものだと「ニューロン」とかもそうだし、視覚野を模しているものもあると聞く。「細胞」という言葉が出てくることもある。

実際、PRMLにはこう書いてある(上巻5章 p.226)

ニューラルネットワーク」という語は、生体システムにおける情報処理を数学的に表現しようという試みにその起源がある(McCulloch and Pitts, 1943, Widrow and Hoff, 1960; Rumelhart et al., 1986)

「脳から学ぶ」という分野もあるし、生物から学ぶこと自体、とても価値のあることだと思う。

それでもなお、「ニューラルネットワークは人間の脳を模倣している」という表現は、かなりのミスリーディングを生んでいると思う。その話をしたい。

理由1:ニューラルネットワークは関数であって、「意識」ではない

そもそも、ニューラルネットワークは確定的な関数として表現されたりする。単純な例で、三層パーセプトロンの話を持ちだそう。

三層パーセプトロンは、次のような図式で表現される。多層パーセプトロンより引用

f:id:yamitzky:20160513011244j:plain

確かに、これではまるで脳に見えてくるかもしれない。しかし数式化するとこうなる。(PRML p.228より引用し、簡略化のためバイアス項を削除)

{ \displaystyle
y=\sigma \sum_{j=1}^{M}{w_{kj}^{( 2)} h \left ( \sum_{i=1}^{D}{w_{ji}^{( 1 )}x_{i}} \right )}
}

この式は、かなり乱暴に言えば「出力=係数2×(係数1×入力)」だ。ちなみに、「係数×入力」というのは、有名な「線形回帰」だ。つまり、かなり単純には線形回帰を2段階にしたもの、ということができる。「線形回帰」をもっと単純な話に言い換えると、中学だか高校の数学の「y = ax + b」だ。これを多段階にしただけで人間の「意識」と呼ぶのはさすがにおこがましいし、この三層パーセプトロンは入力に対して掛け算をしていくだけのものだ。途中でニューロンがプッツンすることはないし、アルツハイマーになることはない。

ニューラルネットワークのキーポイントの1つは、関数として目標と近似できる能力の高さではないかと思う。「意識」というものがあって、「人格」というものがあって、「考える」という能力があるような「人間シミュレーション」とは、現状は根本的に異なる。(そのうちぶつかるかもしれないけど)

ここにあげた例はかなり単純な例であるが、画像処理に使われる畳込みニューラルネットワークなども同様に、パラメータと入力に対して確定的に計算することになる。もちろんそこに確率的な枠組みを導入することはできるが、そうでなければ必ずしも精度が出ないということではない。ましてや、ここに意識という存在を考えるのは、さすがにバカバカしい。

理由2:脳を模倣するほど精度があがるわけではないし、必ずしも脳の模倣ではない

自然言語に対するニューラルネットワークの適用で言うと、LSTMというものが使われることがある。LSTMについてはわかるLSTM ~ 最近の動向と共に - Qiitaが詳しいが、その発展の仕方が興味深い。

もともとRNNのような構造があって、そこに「勾配消失問題」と呼ばれる課題があり、それによって精度が出ない類のタスクがあった(超深い層のNNを学習するようなものだった)。そこで、入力ゲート・出力ゲート・忘却ゲート、etc...みたいなものが提案され、精度が改善されて、、、という進化をたどっている。

そこで疑問なのは、果たして人間の脳はLSTMのような構造を持つだろうか? もしくは、生物の脳はLSTMのような進化を経ただろうか?

答えについては、自分は知らない(正しいか間違っているかわからない)。ひょっとしたら繋がりがあるかもしれないが、提案されている論文には「人間の脳がそういう風にできているから」という話は書いていない。

それよりもむしろ、提案者は「モデルとして現在勾配消失問題があって、それを解決するためにはどういう構造を提案すればよいか?」と考えているだろう。脳を模倣するという話は、1つのアイディアの起点でしかなくて、既存の課題を解決する構造は何か、という話の方がむしろ大事だと思う。

まとめ

言いたいのは、ニューラルネットは人間の脳とは全く関係がないだとか、脳を模倣することに意味はないだとかではなくて、「ニューラルネットが人間の脳を模倣している」ということによって、過剰な恐怖を煽ったり、過剰な期待を煽ったり、誤った認識を導いてたり、NNのブレイクスルーの本質を見誤ったりないですか?ということ。

そろそろ、ニューラルネットやディープラーニングを「人間の脳を模倣してる」というのをやめませんか?