このページの本文へ

遠藤諭のプログラミング+日記第21回

勝手に遊ぶAIが出てきたということは、 人間が頼んでない事をするAIが出てくるということか

2017年07月01日 09時00分更新

文● 遠藤諭(角川アスキー総合研究所)

  • この記事をはてなブックマークに追加
  • 本文印刷

人間は1つのミスもなく順序だって伝えるのが苦手だ

 いまから、30年も前のこと、私のいた会社で、人工知能でCOBOLのバグを診断するというプロジェクトがあった。いま聞くと冗談のように聞こえるかもしれないが、米国の某有名研究所の技術を導入したもので、ネットで調べるとその断片も出てくる当時としてはマジな話だった。第二次AIブームの主目的の1つは「今後ますます複雑化するソフトウェア開発は人間には手に負えなくなるから機械にやらせよう」だったのだ。

 そのプロジェクトの関係で、私も、「Prolog」というプログラミング言語の研修に出よと言われた。Prologというのは、論理プログラミング言語と呼ばれるもので、サンプルコードなんかに、推理小説を題材にしたものがあった(「Turbo Prolog 2.0」のマニュアルのChapter 7. Example Program 3)。登場人物の属性や背景、状況証拠なんかを述語論理で並べておいて、ポンと実行してやると「犯人はジョンです」などと答えが出る。

 要するに、一般的なプログラミング言語は、Javaにしろ、Cにしろ、Rubyにしろ、Pythonにしろ、コンピューターにやらせる手続きを、ほぼひたすら並べて書いていくものが多い。それに対して、論理型プログラミング言語は、文字どおり「~は~である」という論理式を使うところがポイントとなっている。

 私のいた会社は、当時、それこそCOBOLやPLI/Iで銀行や証券向けの開発などもやっていたが、一方で、交換機用OSやPascalコンパイラなんかも作っていた。私も、某公衆パケット交換網(X.25)のプロトコルマシンを書いていたころである(だから最近マストドンのインスタンス間のデータのやりとりとか懐かしさを覚えずにいられないのだが)。

 ところが、30人くらいの研修に出たプログラマたちのほぼ全員が、このパズルのような世界に面食らって、演習問題さえなかなか解けないのである。Prologでは、「H :- B1, ..., Bn.」と書いたりするのだが、「:-」という演算子を「メダカ記号」などと呼んでいた。どちらかというと若手でまあ書ける方のプログラマが集っていたはずだが、「:-」「:-」「:-」「:-」「:-」というメダカの群れに手の出しようがなかったといっても大げさではなかった。

 それでは、なぜそんなややこしい言語をわざわざ使おうとしていたのか? というと、いま思えば「人間は手順を正しく伝えることが苦手だから」と考えられていたからだと思う。それこそ、推理小説のような問題を1つずつ順を追って1つの漏れもなく考えるのは、それだけでストーリーになる名探偵の仕事である。それに対して、状況証拠を並べるだけで犯人が見つかるなんて理想ではないか(だからさっきの例題は「エキスパートシステム」と呼ばれる種類のソフトに似ているのだが)。

 要するに、順序だって考えるのではなくて、前提となるデータをバサバサバサっと放り込んだらポンと答えがでたらいいなと、いつの時代もソフトの開発者は夢見てきた。そして、2013年頃以降、がぜん注目されて成果も出てきているディープラーニングもそうしたことの現れなのだと思う。

「おまかせ」でやったら、自分が予想しないことも起きるだろう

 先日は、マイクロソフトが、同社の人工知能がAtari 2600版の「ミズ・パックマン」で99万9990点のパーフェクトスコアを達成したと発表した。このニュースには伏線があって、グーグルが買収した人工知能企業のDeepMind社が、同社の人工知能「deep Q-network(DQN)」にAtari 2600版の49種類のゲームをプレイさせた。その結果、「スペースインベーダー」や「ブロックくずし」などで人間と同等かそれ以上の得点をはじき出した(2週間の学習で半数以上で人間の75%以上のスコア)。ところが、このとき「パックマン」ではうまくいかなかったとしていたのだ(2015年の話だが)。

 ここで重要なのは、マイクロソフトやDeepMindの人工知能は、ゲームの画面と得点だけを見てルールを学習して上達していったことである。これ、ゲームセンターでお兄さんのプレイする様子を小さい子どもがヨコで見ていて、ルールの説明をわざわざ受けなくても遊び方を理解するような感覚である。

 要するに、人工知能によって人々は「コンピューターに1つ1つ手順を教えてはじめて動くという面倒」から解放される可能性があるということだ。しかし、そのように解放されたら、その先は、パッと開けたラッキーな世界が待っているのだろうか?

 自分でルールや目的を見つけて動く人工知能は、程度の差こそあれ何をはじめるか分からないという要素が出てくると思う。人間が頼みもしないのに自分でやるべきことを見つけて「部屋を掃除しておきました」などということを言うかもしれない。DeepMindの創設者のデミス・ハサビスは、「AIの素晴らしい点は、AIのほうが開発者に、新たな知識を授けてくれることだ」と述べている。AIは、人智のおよばぬ領域に入ってきている。

 これには、何をしでかすか分からない人間の集まりでも世の中がなんとか回っているように、何かの工夫が必要だろう。個人的には、あるとき人工知能がトントンと私の肩を叩くようにして、「あなたの人生の意味を計算してみました」などと言い出さないでほしいと思っている。

 ところで、直前だが7月2日(日)、大阪で丸山不二夫さんのディープラーニング講座、東京とあわせて6回目を開催します。丸山さんに聞いたら、人工知能は、いまは画像認識や自然言語処理がさかんだが、この先は、論理的な問題に向かうんじゃないかとのこと。ご興味のある方は、「申し込みページ」をご覧ください。

置換型プログラミング

 半年前にここで書いた「人生のたいていのことはPythonで出来る?」で、文字列置換だけで、ちょっとした言語(ASCII.JPのCMSのタグ付け言語)の真似事ができると書いたと思う。よくワープロを使っていても、ちょっと置換を工夫するだけで、ポチポチと手でやっていた修正作業が一気にすんでしまうことがある(とくに「正規表現」を使ったら百人力である)。

 要するに、人間は手続きを正しく順番に書いていくのが苦手だというのに対して、「置換」は割と得意なのではないかと思う。我々は、ふだんお金をパンに変えたり、愛情をお金で表現したり、なにかと「置換」をしていますからね。そこで、「置換」だけで問題が解けないか遊んでみたので、ちょっとだけ紹介させてもらいたい。

 やってみたのは、アルゴリズムの演習では定番の「ハノイの塔」である(ご存じない方はお手数だが調べていただきたい)。私が苦手な再帰呼び出し(さっきのTurbo Prologのサンプルコードがまさにそうだった)でやるのが定石となっているが、これを「置換」だけで解いてみる。Peter BunemanとLeon Levyが1980年に発表した解法を使えばなんとかできそうなのだ(ネットで当該の論文を購入できる=『Information Processing Letters』Volume 10, Issues 4–5, 5 July 1980, Pages 243-244)。

・いちばん小さな円盤を右隣へ(いちばん右に来たら左端へ)
・それ以外のどれかの円盤を動かす

 この2つの操作をひたすら答え(すべての円盤を他の柱に移す=ルールは円盤はより大きい円盤か土台の上にしかのらない)が完了するまで繰り返すというものだ。以下で、データの1~5は、1から小さい順に大きさの異なるハノイの塔の円盤、@はそれを通す柱の土台とお考えいただきたい。


a=' 12345@      @      @  '
while a != ' @ 12345@ @ ':
  print(a)
  a = re.sub(r' 1([2-5]*@) ([ ]*)', r' \1\2 1', a)
  a = re.sub(r'^ ([ ]*) ([2-5@]*.*) 1$', r'\1 1\2 ', a)
  print(a)
  a = re.sub(r' 5(.*) ([@])', r' _\1_5\2', a)
  a = re.sub(r' ([@])(.*) 5', r'5\1\2 _', a)
  a = re.sub(r' 4(.*) ([5@])', r' _\1_4\2', a)
  a = re.sub(r' ([5@])(.*) 4', r'4\1\2 _', a)
  a = re.sub(r' 3(.*) ([45@])', r' _\1_3\2', a)
  a = re.sub(r' ([45@])(.*) 3', r'3\1\2 _', a)
  a = re.sub(r' 2(.*) ([345@])', r' _\1_2\2', a)
  a = re.sub(r' ([345@])(.*) 2', r'2\1\2 _', a)
  a = re.sub(r'_', '', a)

 While文で繰り返し構造になっているので「置換だけじゃないじゃん」と言われそうだが、ダラダラと置換を並べるだけでも答えは出てくる。これは、円盤が5枚の例で、n枚の場合のコードも書いてみたのだが複雑になり過ぎたので、素直にしくみが分かる状態で掲載しておくことにする。これを実行した結果は、次のようになる。

 結果の文字数のほうが少ないんじゃないか! という突っ込みがきそうだが、ご存じのように板の枚数を増やしていくと倍々で板を動かす回数が増えていくので、その限りではない(100枚くらいだと十分に宇宙が終わるくらい時間がかかるらしい)。

 どうもあまり分かりやすくはならなかった「置換型プログラミング」だが、使用言語はご覧のとおりPythonだ。もっと分かりやすくて便利で楽しいのがPythonのプログラミングなので念のため。Python講座も4回目のリピート開催します。

遠藤諭(えんどうさとし)

 株式会社角川アスキー総合研究所 取締役主席研究員。月刊アスキー編集長などを経て、2013年より現職。角川アスキー総研では、スマートフォンとネットの時代の人々のライフスタイルに関して、調査・コンサルティングを行っている。また、2016年よりASCII.JP内で「プログラミング+」を担当。著書に『ソーシャルネイティブの時代』、『ジャネラルパーパス・テクノロジー』(野口悠紀雄氏との共著、アスキー新書)、『NHK ITホワイトボックス 世界一やさしいネット力養成講座』(講談社)など。

Twitter:@hortense667
Mastodon:https://mstdn.jp/@hortense667

カテゴリートップへ

この特集の記事
ピックアップ