人間は1つのミスもなく順序だって伝えるのが苦手だいまから、30年も前のこと、私のいた会社で、人工知能でCOBOLのバグを診断するというプロジェクトがあった。いま聞くと冗談のように聞こえるかもしれないが、米国の某有名研究所の技術を導入したもので、ネットで調べるとその断片も出てくる当時としてはマジな話だった。第二次AIブームの主目的の1つは「今後ますます複雑化するソフトウェア開発は人間には手に負えなくなるから機械にやらせよう」だったのだ。そのプロジェクトの関係で、私も、「Prolog」というプログラミング言語の研修に出よと言われた。登場人物の属性や背景、状況証拠なんかを述語論理で並べておいて、ポンと実行してやると「犯人はジョンです」などと答えが出る。要するに、一般的なプログラミング言語は、Javaにしろ、Cにしろ、Rubyにしろ、Pythonにしろ、コンピューターにやらせる手続きを、ほぼひたすら並べて書いていくものが多い。それに対して、論理型プログラミング言語は、文字どおり「~は~である」という論理式を使うところがポイントとなっている。私のいた会社は、当時、それこそCOBOLやPLI/Iで銀行や証券向けの開発などもやっていたが、一方で、交換機用OSやPascalコンパイラなんかも作っていた。私も、某公衆パケット交換網(X.25)のプロトコルマシンを書いていたころである(だから最近マストドンのインスタンス間のデータのやりとりとか懐かしさを覚えずにいられないのだが)。ところが、30人くらいの研修に出たプログラマたちのほぼ全員が、このパズルのような世界に面食らって、演習問題さえなかなか解けないのである。Bn.」と書いたりするのだが、「:-」という演算子を「メダカ記号」などと呼んでいた。どちらかというと若手でまあ書ける方のプログラマが集っていたはずだが、「:-」「:-」「:-」「:-」「:-」というメダカの群れに手の出しようがなかったといっても大げさではなかった。いうと、いま思えば「人間は手順を正しく伝えることが苦手だから」と考えられていたからだと思う。それこそ、推理小説のような問題を1つずつ順を追って1つの漏れもなく考えるのは、それだけでストーリーになる名探偵の仕事である。それに対して、状況証拠を並べるだけで犯人が見つかるなんて理想ではないか(だからさっきの例題は「エキスパートシステム」と呼ばれる種類のソフトに似ているのだが)。要するに、順序だって考えるのではなくて、前提となるデータをバサバサバサっと放り込んだらポンと答えがでたらいいなと、いつの時代もソフトの開発者は夢見てきた。2013年頃以降、がぜん注目されて成果も出てきているディープラーニングもそうしたことの現れなのだと思う。2600版の「ミズ・パックマン」で99万9990点のパーフェクトスコアを達成したと発表した。2600版の49種類のゲームをプレイさせた。その結果、「スペースインベーダー」や「ブロックくずし」などで人間と同等かそれ以上の得点をはじき出した(2週間の学習で半数以上で人間の75%以上のスコア)。ところが、このとき「パックマン」ではうまくいかなかったとしていたのだ(2015年の話だが)。ここで重要なのは、マイクロソフトやDeepMindの人工知能は、ゲームの画面と得点だけを見てルールを学習して上達していったことである。これ、ゲームセンターでお兄さんのプレイする様子を小さい子どもがヨコで見ていて、ルールの説明をわざわざ受けなくても遊び方を理解するような感覚である。要するに、人工知能によって人々は「コンピューターに1つ1つ手順を教えてはじめて動くという面倒」から解放される可能性があるということだ。そのように解放されたら、その先は、パッと開けたラッキーな世界が待っているのだろうか?自分でルールや目的を見つけて動く人工知能は、程度の差こそあれ何をはじめるか分からないという要素が出てくると思う。人間が頼みもしないのに自分でやるべきことを見つけて「部屋を掃除しておきました」などということを言うかもしれない。DeepMindの創設者のデミス・ハサビスは、「AIの素晴らしい点は、AIのほうが開発者に、新たな知識を授けてくれることだ」と述べている。AIは、人智のおよばぬ領域に入ってきている。これには、何をしでかすか分からない人間の集まりでも世の中がなんとか回っているように、何かの工夫が必要だろう。個人的には、あるとき人工知能がトントンと私の肩を叩くようにして、「あなたの人生の意味を計算してみました」などと言い出さないでほしいと思っている。ところで、直前だが7月2日(日)、大阪で丸山不二夫さんのディープラーニング講座、東京とあわせて6回目を開催します。丸山さんに聞いたら、人工知能は、いまは画像認識や自然言語処理がさかんだが、この先は、論理的な問題に向かうんじゃないかとのこと。ご興味のある方は、「申し込みページ」をご覧ください。置換型プログラミング半年前にここで書いた「人生のたいていのことはPythonで出来る?」で、文字列置換だけで、ちょっとした言語(ASCII.JPのCMSのタグ付け言語)の真似事ができると書いたと思う。ワープロを使っていても、ちょっと置換を工夫するだけで、ポチポチと手でやっていた修正作業が一気にすんでしまうことがある(とくに「正規表現」を使ったら百人力である)。要するに、人間は手続きを正しく順番に書いていくのが苦手だというのに対して、「置換」は割と得意なのではないかと思う。我々は、ふだんお金をパンに変えたり、愛情をお金で表現したり、なにかと「置換」をしていますからね。そこで、「置換」だけで問題が解けないか遊んでみたので、ちょっとだけ紹介させてもらいたい。やってみたのは、アルゴリズムの演習では定番の「ハノイの塔」である(ご存じない方はお手数だが調べていただきたい)。Prologのサンプルコードがまさにそうだった)でやるのが定石となっているが、これを「置換」だけで解いてみる。・いちばん小さな円盤を右隣へ(いちばん右に来たら左端へ)・それ以外のどれかの円盤を動かすこの2つの操作をひたすら答え(すべての円盤を他の柱に移す=ルールは円盤はより大きい円盤か土台の上にしかのらない)が完了するまで繰り返すというものだ。以下で、データの1~5は、1から小さい順に大きさの異なるハノイの塔の円盤、@はそれを通す柱の土台とお考えいただきたい。a)While文で繰り返し構造になっているので「置換だけじゃないじゃん」と言われそうだが、ダラダラと置換を並べるだけでも答えは出てくる。これは、円盤が5枚の例で、n枚の場合のコードも書いてみたのだが複雑になり過ぎたので、素直にしくみが分かる状態で掲載しておくことにする。これを実行した結果は、次のようになる。いう突っ込みがきそうだが、ご存じのように板の枚数を増やしていくと倍々で板を動かす回数が増えていくので、その限りではない(100枚くらいだと十分に宇宙が終わるくらい時間がかかるらしい)。分かりやすくはならなかった「置換型プログラミング」だが、使用言語はご覧のとおりPythonだ。分かりやすくて便利で楽しいのがPythonのプログラミングなので念のため。Python講座も4回目のリピート開催します。アスキー編集長などを経て、2013年より現職。角川アスキー総研では、スマートフォンとネットの時代の人々のライフスタイルに関して、調査・コンサルティングを行っている。2016年よりASCII.JP内で「プログラミング+」を担当。世界一やさしいネット力養成講座』(講談社)など。平成の終わり、デジタル最大のトピックはやっぱりネットでしたよね。3-1今年3月23日に行われたセミナー「量子コンピュータで学ぶ量子プログラミング入門」を好評につき、リピート開催。これまでの「紙と鉛筆で学ぶ量子コンピュータ入門」と異なり、今回のハンズオンは量子コンピュータで計算させるために必要な「量子プログラミング」の基礎を学ぶことが目標。IBMの協力を得て、基本的なゲートを組み合わせて量子回路を構成するプログラミング手法と、IBMのQiskitにある多くのシミュレータの使い方を学ぶ。問わず、ご興味のある方は上記フォームよりお気軽にお問い合わせください。スマホお気に入り一覧マイページ。