入門:教養としての人工知能

人工知能とは何か? 機械学習、深層学習の違いとは?

9月13日に開催された新学術領域研究「人工知能と脳科学」キックオフシンポジウム。脳科学と人工知能のコラボを目指す

 人工知能という言葉の分からなさの原因は、この言葉が魅力的すぎることにあると思う。何しろ「人工の知能」だ。惹きつけられない人はいない。そして、正しく説明できる人もいない。「人工」は簡単だが、「知能」とは何なのか、説明できる人はいないからだ。

 最近は、さまざまなレベルの情報技術に「人工知能」という言葉が使われており、むしろデフレ気味になっているが、改めて人工知能とは何なのか考えてみよう。

人工知能とは何なのか

 人工知能とは、まず基本的には知能を実現しようとしている研究分野のことだ。そして、そこで研究開発されている技術、アルゴリズム、ツールなどのことだ。つまり、知的と考えられるような処理、すなわち記号論理処理やパターン認識、分類、推論、統計解析、予測などを実行するさまざまな情報技術の集合体が人工知能だ。単一の技術ではない。

 前述のように言葉自体の定義が不明確なので、そもそも人工知能とは何なのかという問いに答えるのは根本的に難しい。例えば、最近刊行された『人工知能とは(近代科学社)』という本がある。この本は、人工知能学会が会誌「人工知能」で連載した記事をまとめたもので、「人工知能とは何か」という問いかけに対して、日本を代表する13人の研究者が、それぞれの立場から端的に答えようとしている。

 人工知能学会の錚々たる研究者たちが「人工知能とは何か?」という問いかけに対して答えているのである。権威ある人たちが、自分たちが研究している対象に対して「何ですか」と聞かれて答えているのだから、ある程度は一致していると思うのが普通だが、これが、答えがみんなそれぞれ異なるのだ。

 まるっきりトートロジーのような答えがあったり、まるで禅問答のようなやりとりがあったり、それに別の先生が突っ込んでいたりと、本としては大変面白いのだが、それだけ、人工知能なるものの定義は明確ではなく、色々な考え方があることを示している。また、それがこの分野独自の特徴だと、この本にも書かれている。

 歴史的な背景もある。技術トレンドが変わるに従って、人工知能とは、論理的な記号処理のことだったり、パターン認識のことであったり、統計処理のことであったりと、意味が変わってきた。その度に、あれが人工知能だとか、これは人工知能ではないといったやりとりが繰り返されてきたのである。いわゆる大御所といわれるような人工知能の研究者の方の講演を聴く時には、そのような事情も少し頭の隅に置いておくと、より面白い。

 要は、知能についての仮説を立てて、その知能を作り上げようとすることで、知能とは何なのか、きちんと説明できるようになるための研究が、人工知能という研究分野の目的(の1つ)だということだ。

 何にしても「知能とは何か」ということを自然言語で説明できるほど、まだ我々は知能について理解していない。本当の意味で共有されている概念もない。

ビジネス用語としての「人工知能」

Microsoft Azure の活用事例

 そのくらいぼんやりしている「人工知能」だが、研究の事情は分かったとして、「興味があるのは、今ビジネスでどんな意味で『人工知能』という言葉が使われているかのかだ」という読者の方も少なくないと思う。

 マーケティング上、人工知能がどういう意味で使われているかについては、前回触れたような事例を見てみるほうが早い。さまざまな事例をざっと見て共通点をあげていくと、

  1. 人には扱いが不可能な大規模データを使って、これまで発見できなかった相関関係を見い出す
  2. 定義が一様ではないデータを分類して、ラベル付けし、そのルールを獲得する
  3. 入力データに対して反応して、出力を変える
  4. 既存データからルールを獲得して、未知のデータを予測する

 といったような特徴があるようだ。

現場の今を捉えるNECの画像解析ソリューション

 単なる1対1、あるいは場合分け、if thenではないルールで応答を返す、あるいは応答しなければならない状況や、また、単なる過去のデータからの事実抽出だけではなく、先読みに適用できるようなツールが「人工知能」と呼ばれている、と見なして良さそうだ。

 もっとも、ブーム到来の昨今においては、もっと単純な仕組みの技術も人工知能と呼ばれてしまっているようだが、一般に人工知能と呼ばれる技術には、知的な振る舞いが期待されている。

人工知能 Hitachi AI Technology

機械学習とはデータからモデルを獲得させること

今日から始められる、機械学習! Amazon Machine Learningのご紹介

 ビジネスで必要なのはソリューションなので、上記のような機能は、複数の技術を組み合わせて実現されている。色々な技術があり、それぞれに歴史があるが、とりあえず昨今のビジネスワードとして気になるのは、「機械学習(マシンラーニング)」、「深層学習(ディープラーニング)」だろう。

 簡単にいうと、機械学習とはコンピュータにルールを学ばせる仕組みのことであり、データ分析の手法である。入力データからルール、パターン、規則性を発見し、それに基づいて新たなデータの分類や認識をさせる仕組み・手法の1つである。そして、深層学習はそのまた一部である。深層学習は機械学習の一種だ。

 もう少しだけ詳しくいうと、機械学習とは、訓練データからルールを発見し、モデルを獲得させて、それを使って認識や分類、予測を行なうアルゴリズムだ。例えば、「分類する」という作業を考えてみよう。そのためのルールを人が全て書き下すのではなく、機械自体に分け方、あるいはどこで区別ができそうかというルールを見つけさせて、それに基づいて分けさせる。それが機械学習だ。

 身近なところでは、メールソフトのSPAMフィルタや検索エンジンのリコメンドなどに使われている。最近は、機械学習を使って機械の故障を事前に検知させたり、商品の需要を予測させようという試みも盛んで、よくニュースになっている。ただ、試みは盛んだが、必ずしも十分に活用されているわけでもない。ニュースになっているのは、活用が始まっている段階だからだ。これから、まだまだ広がる余地がある。むしろ技術が普及して、サービスが本格的に始まると、ニュースにもならなくなるかもしれない。この辺りはどの技術でも同じだ。

 さて、機械学習の考え方にもいくつかの種類がある。よくある分け方は以下の3つだ。

  1. 教師あり学習
  2. 教師なし学習
  3. 強化学習

 「教師」というのはお手本、正解例のことだ。ラベルのついた正解例、すなわち「お手本」があるのが「教師あり学習」。入力データ間の繋がりや関連から、似たものをまとめるモデルを作るのが「教師なし学習」。そして、とりあえず出した結果と環境から帰ってくる報酬(プラス評価)を使って、徐々に正解へ近づく方法が「強化学習」だ。

 さらに分析手法にも、ラベルに基づいてとりあえず分けるだけの手法(分けるときのカテゴリの決め方に、また色々な種類がある)と、そうではなくて、分け方自体に特徴があって、どう分けたか分かる方法もある。また、データ間の関係を確率的に表現する手法もある。

 データは分析手法によって、それぞれ異なる形で構造化されるので、そもそも「どういう形でどんな情報を取り出したいのか」、「何をしたいのか」によって、さまざまな手法を使い分ける必要がある。各手法がどのような仕組みでモデルを作っているのか、一長一短を理解し、データから顧客が欲しい価値のある情報を引き出せる人たちが、いわゆる「データサイエンティスト」と呼ばれる仕事の人たちだ。

 要するに、機械学習にも色々な方法があり、それぞれ特性があるということだ。詳細は筆者如きの手には余るので、さらに詳しく知りたい人は、専門の書籍をめくってみることをおすすめしたい。ちなみに強化学習は、未知の環境でとりあえず正解に近いものを探索するときに使われる方法として、人間を始めとした動物も使っていると考えられている。

MATLABによる機械学習

ニューラルネットワーク

 では、画像認識や音声認識にパワーを発揮するという「深層学習」とはなんだろうか。機械学習の手法の1つに「ニューラルネットワーク」がある。まだ人工知能という言葉が誕生していなかった時代から、動物の神経系を人工的に模擬できないかという考え方はあった。その中で、一定の閾値を超えた入力を受けると発火する、人工ニューロン(ノード)と、それを繋げたニューラルネットワークが考案された。

 ニューラルネットワークを構成するノード間は、シナプスで繋がっている。各ニューロンは、樹状突起で一定数の入力を受けると、発火して情報を出力し、次のニューロンへと情報を流す。つまりニューロンは、複数のニューロンから入力を受けないと発火しない。多入力1出力だ。

 1つ1つのニューロンは異なったパラメータを持った関数であり、これを繋げたニューラルネットワークは、さまざまな関数を足し合わせた複雑な関数を表現している。要は、ニューラルネットワークはさまざまな関数を近似表現できるのだ。

 順伝播型と言われる、もっとも単純な構造のニューラルネットワークでは、データは入力層から入ってきて、中間層を経て、出力層から出る。ニューロンとニューロンをつなげるシナプスの結合強度は、閾値を超えた入力を受けたニューロンが発火する(出力する)たびに、その結びつき(重み付け)が強くなる。これを何度も繰り返すと、だんだん重み付けが最適化されて、特定の処理を行なうネットワークができる(収束する)。これがニューラルネットワークの学習能力だ。

Neural Networksの基礎

発想は以前からあった「階層型多層神経回路網」

 この中間層を何層にも重ねたのが、深層学習(ディープラーニング)である。なお、「ディープラーニング」とまとめて呼ばれているが、これは多階層のニューラルネットワークの総称で、これにもまたネットワーク構造や最適化の方法に色々な種類がある。それぞれ「ディープ○○」といった呼び名で呼ばれているが、「○○」の部分だけで呼ばれていることも多い。

 とりあえず、教師あり学習にはこっち、教師なし学習だとあっち、強化学習だとこちらの手法という形で、目的に応じて使い分けられているということだけ、知っておいて欲しい。

 層を重ねて大規模にすると、表現が豊かになるのではないか、という案は以前からあった。例えば、今、画像認識でもはや定番として使われているのは、「CNN(Convolutional Neural Network: 畳み込みニューラルネットワーク)」という方法だ。

 CNNはニューロンの結合に工夫があり、全部のニューロンが繋がっているわけではない。そして、異なる種類の処理を行なう層が積み重ねられた構造になっている。

 具体的には、局所的に特徴抽出を行なう「畳み込み」という層と、特徴を刈り込んで絞り込む「プーリング」という層が繰り返された(ディープな)構造だ。これによって、さまざまな形の物の中でも変わらない、つまり、認識に使うべき不変の特徴を絞り込んで、上位層に渡していくことができる。この時に、徐々にノード数を減らしてやると、より抽象化された情報の抽出を行なうことができる。こういう働きを次元圧縮という。

 次元圧縮とは、直感的な言い方で言い換えると、物事を認識するときに、全部の情報をそのまま見るのではなく、見るべき場所だけに着目すると、識別効率が良くなる。特徴を抽出するわけだ。

 問題は、見るべき場所、識別するのに有効な特徴とはなんなのかといったことを、人間がいちいち書くのは大変だということである。深層学習が注目されているのはここで、人間が特徴量を設計しなくても、ネットワークが特徴抽出とパラメータ学習を一緒にやってしまうのである。

アルテラ FPGA による OpenCL を使用した畳み込みニューラル・ネットワーク(CNN)の実装

 CNNの元々の原型は、日本の福島邦彦氏によるパターン認識ネットワーク「ネオコグニトロン(Neocognitron、1979年)」である。ネオコグニトロンは、大脳視覚野の単純型細胞に似たS細胞層と、複雑型細胞に似たC細胞層とを交互に階層的に配置した多層神経回路だ。学習が終わると、S細胞が特徴抽出細胞として働く。学習方法は違うが、中間層を重ねるという発想自体は以前からあったのだ。

 ではなぜもっと早く実用化されなかったのか。課題があったからだ。深層学習全般の問題として、出力した結果と目標出力との誤差を入力層方向に反映させていって、ノードの重みを再度変える、「誤差逆伝搬」という手法が、上手く情報が伝わらなくて働かないといった課題や、学習が進みすぎてしまって、逆に間違える「過学習」の問題があったのである。計算も大変だった。2000年ごろには、ニューラルネットワークという研究分野自体が冬の時代を迎えていたという。

ネオコグニトロン

深層学習がブレイクしたきっかけ

Geoffrey Everest Hinton氏によるDeep Learningに関する講演

 今回のブームにおいて、深層学習へ熱い注目が集まるようになったきっかけは、2012年の「ImageNet Large-scale Visual Recognition Challenge(ILSVRC)」という、画像を使った一般物体認識の大会で、トロント大学のジェフリー・ヒントンらのチーム「AlexNet」が、2位に10%以上のエラー率の差をつけて勝利したことだ。この圧勝で、その後、ほかのチームも彼らの方法を真似た。

 なおヒントンらは、2006年に深層学習における課題に対して、教師なし学習で重み付けを層ごと初期化する「プレトレーニング」と、教師あり学習で最後に全体を最適化する「ファインチューニング」というやり方が有効であることを示していた。「オートエンコーダ(自己符号化器)」という、入力と同じものを出力するように自分自身の次の層を決めて、学習をさせるニューラルネットワークの構造を使う。入力と出力が同じになるような中間層を求めて、それをまた次の層に入力として渡して計算していくのだ。

 プレトレーニングは、これらを上手く組み合わせてニューロンのパラメータを初期化し、最後に再学習させることで、多層化したネットワークでも過学習を防ぎ、誤差逆伝搬が上手く行き渡るようになるというテクニックだった。

AutoEncoderでの教師なし特徴抽出

 これがそのまま使われているわけではないが、深層学習は、こういったテクニックを積み重ねることで、データの特徴を自動的に抽出することができるようになった。人間が把握してなかった特徴量を見出してくれることも期待されている。今では、深層学習を使った画像認識では、エラー率では人間よりも低くなっているという。

 もう1つ、深層学習が一般にも広く知られるようになったのは、同時期に行なわれた、グーグルによる「猫」の自動認識だろう。Youtube動画から取り出した、1,000万枚の色々な画像を使い、16コアのPC 1,000台からなるPCクラスタを3日間回すことで、「猫とは何か」という特徴を教えなかったにもかかわらず、猫の特徴を自動抽出して猫画像を認識できるようになったというものだ。

 深層学習は今、大いに活用され始めている。再帰的構造を持つ「RNN(Recurrent Neural Network: リカレントニューラルネットワーク)」とCNNを組み合わせることで、自然言語など、時系列に関わる情報を扱ったりする試みも盛んだ。

 ただし、精度を上げるためには、層の数やニューロン数を上げるだけではなく、ネットワークの積み重ね方など、ネットワークアーキテクチャ自体をいじることも必要であるらしい。まるで職人芸のような技が必要なくなったわけではなさそうだ。だが、やがてこれらの問題も解決(自動取得)されるようになるのかもしれない。

Andrew Ng氏による講演「Deep Learning, Self-Taught Learning and Unsupervised Feature Learning」

今後はどうなる

 今回のブームにおいて、深層学習が成功した理由については、以下の3つが挙げられることが多い。

 1つは、ニューラルネットワークの処理を高速に行なうためのアルゴリズムの開発。これは可能性を諦めなかった研究者たちの賜物だ。

 2つ目は、行列演算を高速にこなすGPUの登場によって、実用的かつ高速な計算機資源が実際に利用できる時代になったこと。「ムーアの法則」のおかげ、と言っても良いかもしれない。

 3つ目が、いわゆるビッグデータで、ImageNetのような大規模かつ良質なデータセットが公開され、それを教師データとして食わせることができるようになったことだ。

 どれも、これまでは不可能だった。だが、ついに時が満ちたというわけだ。

NVIDIAによる、GPUが深層学習に使われる理由の解説動画

 深層学習は、教師なし学習をさせて特徴量を設計させ、そのあとに教師あり学習を行なうといった方法を取ることもできる。自分自身で学ばせることもできるわけだ。このような特徴から、じわじわと発展してきた他の人工知能の技術とは一線を画するものだという研究者もいる。

 深層学習を推す彼らによれば、この発展によって、計算機が認識力を持てるようになったからで、この山を越えたあとの発展は早い、という話になる。研究も活発で、多くの試行錯誤が続いている。生成系でも発展があるようだ。もしかしたら、特化AIの組み合わせから、夢の汎用AIができるのかもしれない。そんな期待さえ湧いてくる。一方、過熱しすぎだという声もある。

 どちらが未来なのか。素人なりに色々考えてはいるが、率直に言って筆者にはよくわからない。それぞれの研究者は、とりあえず自らの仮説を信じて前へ進んでいるのだろう。

【SoftBank World 2016】人工知能は人間を超えるか 松尾豊氏

 深層学習は、グーグルが提供している「TensorFlow」、Preferred Networksによる「Chainer」といったフレームワークがあって、それらを使うと、比較的簡単に特徴抽出器として試すことはできる。入門書も整えられてきており、今、多くのエンジニアたちが色々試している。とりあえずは、今後深層学習に慣れ親しんだ技術者の人たちが、面白いアプリケーションを開発してくれることを期待している。

TensorFlow勉強会(1)怪しみながら使うTensorFlow
深層学習フレームワークChainerの導入と化合物活性予測への応用

 個人的には、人工知能関連のシンポジウムなどを聞くたびに「この講演を丸ごと文字起こしして要約してくれる人工知能はいつになったら登場するのだろうか」と思っている。