人工知能研究の第一人者、マービン・ミンスキーが2016年1月24日に亡くなりました。ミンスキーらが提案した人工知能はいま、あらゆる業界で活用のための研究が進んでいます。ですが、一般に語られるのはビジネスへの利用であったり、社会的・倫理的な問題であったり、人工知能の応用と影響が大半を占めています。その基本的な技術について触れる機会は少ないのが現状でしょう。
翔泳社が3月7日(月)に刊行した『はじめての人工知能 Excelで体験しながら学ぶAI』では、ブラックボックスに感じがちな人工知能の基本的な技術を解説しています。配布しているExcelのサンプルプログラムでそうした技術をシミュレートしているので、誰でも実際に人工知能に触れながら基本を知ることができるのです。
本書では解説している技術は、ニューラルネットワーク、ファジィ、遺伝的アルゴリズム、問題解決、探索法、ゲーム戦略、機械学習、知識表現・エキスパートシステム、エージェントの九つ。いずれもExcelのサンプルプログラムでどんな技術なのか体験することができます。また、現在はPythonやJava、C++などが主流の開発言語ですが、従来使われてきたLispとPrologの理論的な背景も説明しています。
いま人工知能に関する仕事をされている方はもちろん、将来研究に携わりたい方、少しでも興味があって詳しく知りたい方にとって、本書は妖しげな技術ではなくソフトウェアとしての人工知能をきちんと理解するきっかけになるでしょう。
今回は、本書で解説している技術を抜粋して紹介します。サンプルプログラムもダウンロードできますので、ぜひ人工知能を体験してみてください(以下は本文からの抜粋です)。
第2章 人間の脳を機械で真似る = ニューラルネットワーク
人工知能はいわば認知メカニズムの機械シミュレーションであるといわれる。人間の脳はニューロンという神経細胞のつながりでできているので、これを真似てコンピュータを作れば、脳活動の真似ができるというわけだ。このような考え方に基づいて、ニューラルネットワークが生まれ、発展してきた。人間の脳活動はニューロンだけで行われるわけではないので、実際にはこのような考え方には限界があるが、普通の手続き的なプログラムではできないこと、例えば連想や、学習による進化、数値処理において多数の計算の並行処理などができる、という側面もあり、応用範囲は広い。近年注目されている深層学習の原理も、ニューラルネットワークを基本としている。
ここではニューラルネットワークの動作原理を知るために、初期に考案された代表的なニューラルネットワークである、パーセプトロンとホップフィールドネットワークのシミュレーションを行う。例題として、アルファベットの文字認識を扱う。手書き文字だと他の技術要素(特徴抽出など)も必要になり難しいので、ここでは限られた入力方法で考えることにする。しかしそれでも十分、連想の面白さはわかると思われ、手書き文字認識や様々な応用技術の基本的な原理を知ることができる。
多少ゆがんだ文字でも人工知能なら正しく認識できる~パーセプトロンによる文字認識~
サンプルプログラムをダウンロードする(使用するのはEx1_Perceptron文字認識.xlsm)
パーセプトロンは、最も初期に考案されたニューラルネットワークである。ここではアルファベット26文字を認識できるようにしてみよう。すなわち、アルファベット26文字のうちいずれかの文字を記憶したネットワークを作り、任意の入力パターンから記憶した文字を連想する、というシミュレーションである。
26文字をすべて認識するにはかなり大がかりになるので、サンプルプログラムはPC上で簡易に実行できる範囲にした。そのため一度に数文字ずつしか記憶できないが、それでもパーセプトロンの面白さは実感できると思う。数文字では物足りないということなら、Excelのシートを変更していろいろ試すこともできる。
Excel シートの説明
[Dot Pattern]シート:記憶するアルファベットのパターン(各文字7×5のセル領域を使用)
[Perceptron]シート:シミュレーションの解説
[Percep]シート:パーセプトロンによる文字認識シミュレーション
操作手順
- [Percep]シートを開き、記憶させたい文字に*を入力する(1回につき3文字程度まで)。
- [Filter]ボタンを押すと、教師信号が設定される。やり直す場合は、[Clear]ボタンを押す。
- [Init]ボタンを押して、重み配列を初期化する。
- 重み配列学習回数を入力し、[Weight]ボタンを押す。学習結果や、学習後の重み配列が表示される。
- 重み配列の学習をやり直す場合は、[Reset]ボタンを押す。
- セルを黒く塗りつぶして文字パターンを入力し、[Input]ボタンを押す。文字パターンを多少ゆがませると、パーセプトロンによって連想できることがわかる。塗りつぶし箇所については「Dot Pattern」シートを参照。
- [Recall]ボタンを押すと、文字パターンの想起演算が実行され、想起パターンが表示される。教師信号に一致しない場合は、想起に失敗する。
- 入力パターンを再入力する場合は、[Retry]ボタンを押す。
- 最初からやり直す場合は、[Clear]ボタンを押す。
注意事項
- 記憶する文字はどれでもよいが、同時に3 文字程度まで。文字数が多いとうまく記憶できない。
- Bit Pattern Matrix Mは、各文字の記憶パターン配列を横1行に並べ、記憶個数分だけ縦に並べたものである。
- 学習は重み配列が教師信号を出力できるようになるまで、すなわち誤差P−Yが0になるまで繰り返される。しかし、記憶文字数が多いと誤差P−Yが0にならない。この場合は記憶文字が線形分離可能でないと考えられ、学習失敗になるので、[Reset]ではなく、[Clear]で記憶文字選択からやり直す。重み配列は1通りというわけではなく、初期値によって変化するので、いろいろ試してみよう。
- 記憶文字のパターンはDot Pattern シートで確認する。入力パターンは、記憶文字と同じパターンでも、多少違うパターンでもよい。[Input]ボタンを押すと、7×5の入力パターン配列を横1行に並べた作業ベクトルaが設定される。
- 想起演算実行([Recall]ボタン):作業ベクトルa と重み配列Xの行列積(各要素とも、符号により1か0)が記憶パターン配列Mのいずれかの行に一致すれば、その行に相当する記憶パターンを想起したことになる。入力パターンが記憶パターンのいずれかと同じ場合は必ずその文字を想起するし、多少違っていても近い文 字を想起する。これが連想である。記憶パターンのいずれにも一致しない場合は想起失敗である。想起演算結果は想起パターンに表示される。
このシミュレーションで、アルファベット26文字を一度に記憶することは難しいが、文字数を増やす試みは、次のようにすればできる。
記憶文字を選択するOriginal Bit Pattern Matrix(シート内の1)の右端のOutput設定欄の部分を、記憶する文字パターンが線形分離可能になるように変更する。線形分離可能性の判断基準は本文でも少し触れているが、実際には難しいので、重み配列の学習を試みて誤差が0になればよい、とする。
第5章 身の回りの問題をうまく解決するには = 問題解決
「問題解決」ということばは、日々の身の回りの問題を解決するという意味合いで使われ、社会では「問題解決力」が重要視される。与えられた問題を解くという学校授業の範囲を超え、自ら問題を発見することも、問題解決の一環である。一般に「問題」というのは理想と現実のギャップで、これを埋めるのが「解決」である。
「問題」は静的な場合と動的な(時間軸がある)場合がある。組合せ最適化問題は静的であるが、身の回りには動的な問題も多い。時間軸は現実世界では後戻りができないので、事前にシミュレーションで確認する必要もある。ニューラルネットワークや遺伝的アルゴリズムは静的な問題向きで、動的な問題解決には別の方法が求められる。すなわち、時間軸の要因を状態遷移という概念でモデル化することを考える。
問題解決のシミュレーションとして、宣教師と人食い人の問題を考えてみよう。この問題は再帰的に解けないので、可能な状態遷移をたどってみるしかない。あとで詳細に解説するが、ここでは人数と舟の定員数を変えられるようにしている。また、1回ずつ動きを確認することも、一挙に解を求めることもできる。すぐに解を得られなくても、このように状態遷移を見ていけば、(解があれば)必ず解決可能なことを実感できると思う。
宣教師が「人食い人」に食われずに川を渡れるか?~MC問題~
サンプルプログラムをダウンロードする(使用するのはEx6_MC問題.xlsm)
MC問題とは、「Missionary(宣教師)とCannibal(人食い人)が同数いて、2人乗りの舟が1艘あるとき、全員が川の左岸から右岸に渡るにはどうすればよいか?」という問題である。ただし、宣教師の数が人食い人の数より少ないと食べられてしまうので、両岸には常に同数以上がいないといけない(下図)。
また、反対側に舟を移すためには、1人以上が舟に乗らないといけない。左岸でも右岸でも宣教師の数が人食い人以上、というのは一見無理そうだが、状態を順に追っていけば、この問題の特殊性が見えてきて、解決できることがわかる。M(宣教師)とC(人食い人)の人数、および舟の定員を変更して、いろんな組合せでの状態遷移の様子を見ると、計算問題とは違って、問題の規模に応じて複雑さが増すのではないこともわかる。状態遷移を頭だけで考えると混乱してしまうが、一つずつ状態を調べていけば、解がある場合は必ず成功するわけで、この考え方は複雑に見える問題解決には有用である。
Excel シートの説明
[MC問題]シート:川渡りに関する問題解決のシミュレーション
操作手順
- [MC問題]シートを開き[人数]と[定員]を設定する。人数は3~8、舟の定員は2~6を入力。
- [Step]を必要なら設定する(0のときは連続実行、1のときは1回移動するごとに止まる)。
- [初期化]ボタンを押して、初期状態を表示する。上段にM、下段にCの人数分だけ色付けされる。舟の位置は黄色で表示される。[状態]と[探索木]も初期状態の値が表示される。
- [実行]ボタンを押すと、移動が開始する。
- 状態遷移の様子が表示される。
注意事項
- [人数]、[定員]:M、Cの人数(3~8)、および舟の定員(2~6)を指定する。
- [Step]:0のときは連続実行、1のときはステップ実行(1回移動するごとに止まる)。
- [回数]:実際の移動回数が表示される。
- [状態]:左岸のM、C人数、および舟の位置(t=1は左岸、t=−1は右岸を表す)、同時に移動人数と右岸人数も示す(作用素欄は未使用)。
- [探索木]:各行はその時点で考えられるすべての状態を示す。禁止状態と前に戻ってしまう重複状態を除いて、有効な状態が一つ下の行に展開される。現在たどっている状態は緑色に色付けされる。途中で後戻りが発生した場合は、一つ上の行に戻り、有効な状態があればそれが展開される。したがって、緑色のセルを上から順にたどれば、状態遷移の経路となる。一番下の行の緑色のセルが0(すなわち左岸のM、Cとも0人)なら成功である。
成功すれば、M、Cの色付けが川の右岸だけになる。また、[探索木]の各行の緑色のセルを上から順にたどれば、一番下の行の緑色のセルが0(すなわち左岸のM、Cとも0人)になっているはずである。これは状態遷移の経路を示している。
あとがき 人工知能は人間の知的活動を強化する
技術の発達に伴い、人工知能が人間以上の仕事をしてくれるのを見ると、本当に人工知能にすべてを任せてもいい、という気になるかもしれない。あるいは、それを脅威と感じるかもしれない。しかし、人工知能の技術も、種を明かせば各ソフトウェアの上に成り立っている。
人工知能は人間の知的活動を強化すべく、ある目的に沿ってコンピュータの特質を活かす範囲で、脳活動の一部を模倣するものと考えれば、いくら発達しても人間の存在が侵されるわけではない。
現在は人工知能の研究分野としてニューラルネットワークと機械学習に注目が集まっているが、本書で述べたテーマを始めとして、人工知能の研究テーマは幅が広く、過去の研究が見直されて再び脚光を浴びると思われる。どのようなテーマも永遠の価値があると思う。