いつ俺〜いつから俺ができないと錯覚していた?〜

社会人ブロガー。大手メーカーでソフトウェア開発をしている人。プログラミングは結構得意。

人工知能の基礎知識を非エンジニアでも分かるようにまとめた

 

最近、「人工知能」に関するニュースが何かと話題になりますね。特に「Deep Learning」という言葉は、IT系のエンジニアや研究者でなくても、よく耳にするようになりましたね。

 

さて、そんな人工知能ですが、みなさんどのくらい理解されているでしょうか?

ちゃんと理解されている方は少ないのではないかと思います。気になっているけど難しそうだし手が出ない、という人が多いでしょう。

 

そこで今回は、人工知能の基礎知識(エッセンス的な部分)について、広く浅く丁寧に説明していきたいと思います。 

 

 

人工知能ってそもそも何?

f:id:shun_prog0929:20160513024617p:plain

 

人工知能とは何か。実はこの話、そう単純ではないんです。少し哲学的な話にもなってきますが、お付き合いください。

 

人工知能(AI)は、人間の知能を持ったコンピュータと言われることが多いです。これは、半分合っていて半分間違っているといったところでしょう。完全な人工知能というのがあるのなら、これを指すのにふさわしいのでしょう。ですが、実際に研究成果が出ているのはこういったものではありません。

 

ここでは、人工知能の研究における「弱いAI」と「強いAI」という2つの議論について話をしたいと思います*1。まずはそこから説明していきます。

 

強いAI

強いAIは、人間と同等、もしくはそれ以上の知能を持ったコンピュータのことです。この考えのもとにAIが知能を獲得することを目指す研究が行われています。

 

つまり、人間が生活をしていく上で、あらゆる状況や問題についての判断を瞬時に下し、そして解決策を講じているのと同じことができるということです。少なくとも、人間くらいは万能なわけですね。

 

僕たちが昔からフィクションの世界で触れ合ってきた、ドラえもんやターミネーターなどは、この「強いAI」と言えます。「強いAI」は人工知能研究が元来から目指しているものであり、誰もが思い描く人工知能の理想の姿なのです。

 

ここで「強いAI」について、心や精神を持つかどうかの議論が度々おこります。心や精神というものが一種の情報処理であるとする考え方についての話ですね。この辺りの話は面白い部分であるとは思いますが、現在の人工知能脳技術を学ぶ上でさほど必要な話ではありませんので、ここでは割愛します。

 

弱いAI

「弱いAI」は、知的な課題を解くコンピュータのことです。もう少し詳しく言えば、コンピュータが知能をもつわけではないが、人間が知能を使って解くような特定の課題を、コンピュータが解くということですね。

 

万能ではないけど、ある程度知的なことができる、というように思ってくれればいいです。

 

チェス世界チャンピオンを打ち破ったIBMのディープ・ブルーや、アメリカのクイズ王を破ったワトソンなんかは、「弱いAI」に当たります*2。これらは、人工知能の歴史において偉大な成績を収めましたが、「チェス」や「クイズ」といった特定の課題を、アルゴリズムに従って解いているに過ぎないわけです。 そういった意味で、弱いAIなわけですね。

 

 

ここまで「強いAI」と「弱いAI」について、知能を持つ、持たないというわけ方をしました。ただ、知能を持つというのがどういうことなのか、疑問は残りますね。ここについて、少しお話をします。

 

知能を持つとはどういうことか。チューリングテストに合格すること?

チューリングテストは、コンピュータに知能があるのかを判定するためのテストです*3。チューリングテストの解釈もいくつかありますが、ここでは最も一般的な標準チューリングテスト(Standard Turing Test)で説明をします*4

 

f:id:shun_prog0929:20160513020153p:plain

 

このテストに参加するのは、判定する人が1人、それとは別の人が1人、そしてコンピュータが1台です。図のように、判定する人と、もう1人の人・コンピュータはそれぞれ違う部屋に入ります。判定する人は、それぞれに質問をしてその結果をディスプレイなどで見ます。判定する人が、どちらがコンピュータなのか見分けられなければ、そのコンピュータが知能を持つと判定される、といったものです。

 

ですが、これは「人間のような知能を持つ」というよりは「人間の出すような語彙のパターンを出している」というように思えます。これで、本当に知能を持つか判断できるの? というのが純粋に思うところでしょう*5

 

この例からだけでもわかるように、「知能を持つかどうか」については非常に難しい問題です。現在でも議論が続いている部分になります。

 

強いAIと弱いAIは結局何が違うの? 

f:id:shun_prog0929:20160513114858p:plain

 

知能を持つかどうかが判定できないので、確かに明確な分類をするのは難しいですね。しかし、両者が明らかに異なるものであるのは確かです

 

強いAI:「あらゆる状況や問題についての判断を瞬時に下し、解決するもの」

弱いAI:「あらかじめプログラムされたアルゴリズムに沿って、特定の問題を解くもの」

 

これらの境界が曖昧というだけで、同じものとは思えませんよね*6 *7。この境界についての見解が分かれているので、ざっくりとこのようなものだと分かっていればいいと思います。

 

重要なのは、これまでの研究で成果が出てきたのは「弱いAI」であるということです。そのことを正しく認識するためにも、ここからは現在までに人工知能研究で行われてきたことについて、いくつか触れていきたいと思います。

 

人工知能研究の紹介

人工知能研究で行われてきたことは数多くありますが、今回はその中の機械学習、及びその学習に用いられるニューラルネットワークの基礎的な部分、そして最近話題のDeep Learningについての話をします(何のことだか全然分からないって人も1から説明するので大丈夫です)。

 

機械学習(Machine Learning)

機械学習とは、「人がプログラムしなくてもコンピュータに学習する能力を与えること」です。少しわかりにくいので、例を挙げながら話をしますね。

 

まず、人間は様々なことを経験する中で、学び理解していきます。例えば、猫を何匹も見て、それを猫だと学べば、次から猫を見たときには「猫だな」と分かるわけです。

 

f:id:shun_prog0929:20160513145900p:plain

 

これをコンピュータにやらせようとしたときに、ナイーブに行うと「猫は耳がこうでヒゲがこうで、でもこういう猫もいて、・・・」のようにどれだけ知識を詰め込めばいいんだという話になります。しかし、これを全て人間がプログラムするには大変です。

 

そこで、コンピュータにも人のように学習できる能力を与えられたらいいんじゃない?」という発想から、研究が始まったわけです。そして、これを実際にできるようにしたのが機械学習というわけです。先ほど挙げた今までプログラムしていた「このような特徴があれば、それは猫だ」というルールを自動で獲得することが機械学習の目的と言えるでしょう(正確には教師あり学習であり、注目すべき特徴は与えなくてはならない*8*9)。

 

そうは言っても、それってすごく難しいのでは・・・。と思った方。その通りです。すごく難しい。ですが、これまでの研究で様々な学習方法が提案されてきました*10

 

今回は、その中でも「ニューラルネットワーク」というものについて話をしますね。

 

ニューラルネットワーク

ニューラルネットワークは、機械学習の学習法の中で、コンピュータ上に人間の神経回路を表現し、人間の脳みたいな働きをさせようとした研究です。 

 

そう言われてもよく分からないと思うので、順を追って見ていきます。

 

まず、人間の神経回路を表すということで、その神経細胞であるニューロンをどのように表現するかです*11。ニューロンは以下の図のような形になります。

 

f:id:shun_prog0929:20160513164355p:plain

 

さて、何がなんだかわかりませんね。そこで、分かりやすい例として、僕たちが結婚相手を選ぶことを考えてみましょう。すると以下の図のようになります。

 

f:id:shun_prog0929:20160513184557p:plain

 

それぞれ、上下の図で対応しています。まず、この例で考えたとき入力は、相手の容姿だとか、性格だとかに当たりますね。そして、重みは、それぞれの重要度になります。それらを掛け合わせた値が、閾値を越えると出力、つまりここで言う結婚につながるわけです。

 

どうでしょう、ニューロンに関してはなんとなくわかっていただけましたかね?

 

基本はこのニューロンを繋いでニューラルネットワークを作ります。一番単純なパーセプトロンと呼ばれるものを見てみましょう。

 

f:id:shun_prog0929:20160513183029p:plain

 

これは、単純にニューロンを2層重ねただけの形になります。しかし、これだけでも学習能力を持ち、一時期はブームになりました。ただ、学習能力に限界があり、一瞬にしてブームは過ぎ去りました。

 

その後、ニューラルネットの改良(基本は層を増やしていく)の研究は続き、何度か日の目を見ることがありました*12。しかし、それもニューラルネットワークの層をさらに増やしていっても、学習能力が上がらず(むしろ落ちる)限界があるように思われていました。

 

深層学習(Deep Learning) 

そのような、限界とも思われていたニューラルネットワークの分野に現れたのが、Deep Learning です。 層を増やしてもうまく学習できる方法として開発されたんですね。そこには様々な工夫がなされました*13

 

この、層が深くなっても学習できるところから Deep Learning と呼ばれているわけです。層を増やすという表現ではなく、層を深くするという部分に、本質的なポイントがあるわけですが、少し話が複雑になりますので、後日お話することにしましょう。

 

ここでは、何がすごいのか、という点だけ話しますね。それは、人が特徴量(ニューラルネットにおける入力)を設定する必要がなくなったという点です。これまで、どの特徴量を用いるのかを人が決めなくてはならなりませんでしたが、Deep Learning ではそれを自動で行ってくれるのです。(直感で言うと、ニューラルネットの低層で教師なし学習のような特徴選定を行い、それを元に学習を進めています)

 

これによって、今までよりも遥かに高い予測精度を発揮しました。この特徴量を自動で設定できるという部分が、Deep Learning が技術的ブレークスルーを起こしたとされるポイントでしょう。

 

これで「強いAI」ができるのか

しかし、これで「強いAI」ができるかといえば、話はそう単純ではありません。Deep Learning は、結局はニューラルネットワークを多層化しただけのものであり、知能を持ったコンピュータというわけではないのです*14

 

実際に、Deep Learning が用いられているのも、まだまだ単純な課題に対してのみ、というのが現状だ。しかし、Deep Learning が優れた技術であることは確かであり、今後僕たちの生活の中で活躍していくこととなるでしょう。

 

まとめ

最近は、これで(完全な)人工知能ができる、という話が出てきますが、現実としてはそう単純な話ではないわけですね。ちょっとした基礎知識を学ぶだけで、そのようなことがわかります。

 

これを期に、人工知能についてもう少し考えてみてもいいかもしれませんね。

 

 

*1:人工知能の定義は専門家の中でも定まっていない。その中でも人工知能研究における「強いAI」と「弱いAI」は古くから行われてきた議論である。

*2:これらは非常に高い精度で高速に大量のデータを処理することができるために、各分野で良い成績を出している。しかし、特定の問題を解決できる(例えばディープ・ブルーは非常に高性能なヒューリスティック探索木の機械)だけ、ということには変わりない

*3:A. M. Turing (1950) Computing Machinery and Intelligence

*4:アラン・チューリングが説明に用いた模倣ゲームについての解釈で意見が対立している。Original Imitation Game Test と Standard Turing Test の立場がある。

*5:「中国語の部屋」が反論の例として有名(https://ja.wikipedia.org/wiki/中国語の部屋

*6:問題を解決するためのアルゴリズムが導出できるようになれば強いAIかという議論も考えられる。アルゴリズム(プログラム)の導出・合成については Program Synthesis のような研究も進んでいる

*7:Synthesizing Java Expressions from Free-Form Queries (2015) Tihomir Gvero, Viktor Kuncak

*8:機械学習は大きく分類すると教師あり学習と教師なし学習に分類できる。ここで説明したようなものは教師あり学習。

*9:従来全てプログラムしていたものを特徴量だけを与えれば、学習によってルールの獲得ができる

*10:決定木、サポートベクターマシン、ニューラルネットワーク、クラスタリング等

*11:ここでのニューロンはあくまで形式ニューロンであり、実際の脳の一部としてのニューロンとはかけ離れている

*12:バックプロパゲーションなどがこれに当たる。

*13:一層ずつの学習、オートエンコーダを用いる等

*14:元々Deep Learning 自体が人間の知能を再現しようという目的で作られたわけではない(そのような見方が一般的)。