第226回 フレーム問題をマインド・エンジンで解決してやろうじゃない


ロボマインド・プロジェクト、第226弾!
こんにちは、ロボマインドの田方です。

AIで絶対解決不可能な難問といえば、フレーム問題です。
50年以上前に提唱されて、未だに解けない難問と言われています。
何年か前、こうしたらフレーム問題を解決できるってブログに書いたら、炎上してしまいましてね。
そんなに簡単に解決できるなら、解決したとこ見せろって言われるんですよ。
それじゃぁ、見せてやろうじゃないかってことで作ったのがマインド・エンジンです。
いや、マインド・エンジンは、フレーム問題を解決しようとして作ったんじゃなくて、人間と同じように思考する心を作ろうとしただけです。
ただ、結果的に、フレーム問題も解決できてたってわけです。
これが、今回のテーマです。

解決不可能なフレーム問題。
マインド・エンジンで解決してやろうじゃない。
それでは、始めましょう!

まずは、フレーム問題を、簡単に説明します。
洞窟の中にバッテリがあります。
ただし、バッテリの上には爆弾が乗ってます。
バッテリを取って来いって、AIロボットに命じます。
このAIロボット、バッテリを動かすと、上に乗ってる爆弾もついてくるって推論ができます。
さすが、AIです。
そこで、つぎは、爆弾をのけたら、どうなるかって考えます。
まず、天井が落ちてこないかとかって考えます。
うん、なるほど。
次は、爆弾をのけたら、壁が崩れないか考えます。
まぁ、そこも考えといたほうがいいですよね。
その次は、爆弾をのけたら、壁の色が変わらないか考えます。
えっ、それ、いる?
そんなこと言ってるまも、壁の臭いが変わらないかとか、次々と考えて行きます。
そうやって、AIロボットは、いつまでたっても動こうとしませんでした。

これがフレーム問題です。
この話を聞くと、たぶん、たいていの人はこう思います。
なんで、そんな考え方するのって。
人間やったら、絶対、そんな風に考えないでしょって。

まずは、このことから考えて行きましょ。
フレーム問題が提唱されたのは1969年です。
この頃、コンピュータで、迷路やパズルが解けるようになりました。
第一次AIブームといわれる時代です。

それじゃぁ、迷路探索のAIを考えてみます。
最初に、道が三つに分かれてて、どれが正しい道かわからないとします。
AIは、まず、一番右の道を探索して、行き止まりなら戻ってきて、2番目の道を探索します。
もし、探索途中で道が分かれたら、そこでも同じように右から順に探索していきます。
そうやって、順番に探索して、ゴールに辿り着いたら、その道が正解ってわけです。

洞窟の場合も同じです。
バッテリの周りにある物をリストアップします。
爆弾、天井、壁って。
ほんで、バッテリを移動したとき、それらがどうなるか、一つづつ検証するわけです。
壁には色や臭いがあるとするなら、色が変わるか、臭いが変わるか、一つづつ検証するわけです。
これがAIの考え方です。
こんな風に考えたら、フレーム問題が起るのもわかりますよね。

じゃぁ、人間は、どんな風に考えるんでしょう?
ここが、今回の核心部分です。
じっくり考えていきますよ。

人は、目で見た現実世界を頭の中に仮想世界として作ります。
意識は、仮想世界を介して、現実世界を認識します。
これを、意識の仮想世界仮説っていいます。
詳しくは、この本に書いてあるので、良かったら読んでください。

さて、考えるってのは、この仮想世界を操作することです。
ああでもない、こうでもないって操作することです。

ここまでは、AIも人間も同じです。
AIの場合、迷路とか洞窟のモデルを作って、それを操作して問題を解くわけです。
バッテリを動かしたとき、爆弾は動くか、天井が落ちるか、壁の色が変わるか、一つ一つ調べるわけです。
これがAIの考え方です。

さて、じゃぁ、人間の場合はどうなんでしょう?
人間と同じ考えを、コンピュータで再現するとします。
たとえば、洞窟の仮想世界は、3DCGで作れますよね。
3DCGなんで、物理シミュレーションもできます。
つまり、3DCGの世界で、バッテリを動かしたら、その上に乗ってる爆弾も一緒に動くところが再現できます。
次に、爆弾を動かしてみます。
すると、天井は落下しません。
壁の色も変わりません。
つまり、壁の色が変わるかとか、いちいち調べる必要はないんです。
物理シミュレーションを使えば、バッテリを動かして変化するのは、上に乗ってる爆弾だけだってすぐに分かるんです。
だから、次は、爆弾を持ってこないようにするにはどうしたらいいかって言う、次の課題に移れるんです。

それじゃぁ、フレーム問題が起るAIと、人間の考え方の一番の違いはどこにあったでしょう?
それは、仮想世界です。
フレーム問題を起るAIの仮想世界は、静止してるんです。
だから、何か動かすたびに、他は影響ないか、一つ一つチェックしないと行けなかったんです。
一方、人間が頭で思い描く仮想世界は、現実世界をシミュレーションするんです。
だから、バッテリ動かしたら、上に乗ってる爆弾も動くんです。
それ以外は動かないって、すぐに分かるんです。

これで、もう、分かりますよね。
どうやったら、フレーム問題を起こさずに済むか。
それは、現実世界を忠実にシミュレーションする仮想世界を作るんです。
そして、それを実際に実現してるのが、マインド・エンジンなんです。

こっからは、マインド・エンジンを実際に動かしながら、説明しましょう。
まず、マインド・エンジンのおさらいです。
マインド・エンジンは、MindEngineコンソール、無意識、意識、仮想世界の四つのウィンドウから構成されます。

MindEngineコンソールに自然言語の文を入力すると、それが無意識に送られて、中間言語に変換され、それが仮想世界ウィンドウに送られてプログラム言語に変換されます。
仮想世界ウィンドウには、ヴァーチャル・マシンがあって、変換されたプログラムを実行します。
ヴァーチャル・マシンの話は、前回、第225回「作ってみた!ソシュールが夢見た言語システム」で解説しましたので、よかったらそちらもご覧ください。

こっからは、前回の続きです。
解釈する文章は、スーパーにリンゴが売ってあるって文章です。
今、「リンゴを手に持ちました」って文まで実行してます。
これが、その時の仮想世界ウィンドウです。

それじゃぁ、次の、「そのリンゴから手を放しました」って文を実行しますよ。

はい、リンゴが下に落ちましたよね。

この場面が、今回、一番のキモとなるところなんで、じっくり解説していきますよ。
仮想世界ウィンドウの下にワーキングメモリってありますよね。
それから、意識ウィンドウの上に、ワーキングメモリ、出来事ってタブがありますよね。

意識ウィンドウのワーキングメモリは、仮想世界ウィンドウのワーキングメモリに対応しています。

この意識ウィンドウ、これこそが、意識が感じてる世界なんです。
マインド・エンジンが何をしてるか、一言で言うと、「自然言語の文の内容を仮想世界で再現し、意識が、それを認識する」です。
つまり、仮想世界は、意識のためにあるわけです。
ここで勘違いして欲しくないのは、仮想世界で重要なのは、3DCGで表示されてる画面のことじゃないですよ。
重要なのは、背景で動いてる仕組みの方です。
意識は、3DCGの画面を認識してるんじゃなくて、裏で動いてるデータや仕組みを認識してるんです。
その一つが、ワーキングメモリです。

ワーキングメモリというのは、文章を読んで、生成したオブジェクトを保存する場所です。
この場合だと、スーパーとか、リンゴってオブジェクトのことです。
文章で説明されるたびに、そのオブジェクトのデータを更新するわけです。
「そのリンゴは赤い」って文を読んだら、ワーキングメモリのリンゴオブジェクトの色プロパティに赤って設定するわけです。
これが、意識ウィンドウのワーキングメモリの中身です。

Physics3D.Appleってのが3次元世界のリンゴオブジェクトです。
[color]=Physics3D.Redってのが、りんごオブジェクトの色プロパティが赤ってことです。
こうやって、文を読んで、オブジェクトの情報を更新していくわけです。
これが、文の意味を理解するってことです。

意識は、世界には、どんなオブジェクトがあるかって視点で世界を認識します。
それを管理するのがワーキングメモリです。
ただ、それで認識できるのは静止した世界だけです。
でも、世界は、動いていますよね。
っていうか、世界は動いてるって感じてますよね。

ここ、重要なとこです。
いいですか。
世界が動いてるって感じるってことは、動きを認識する仕組みがあるってことですよ。
ここ、勘違いしないでくださいよ。
僕らは、動いてる世界を見てるから、世界は動いてるって感じるんじゃないんですよ。
そうじゃなくて、僕らが動きを認識する仕組みを持ってるから、世界は動いてるって感じるんです。
その仕組みがなかったら、いくら世界が動いてても、動いてるって感じないんですよ。

じゃぁ、世界の動きを認識する仕組みって、何でしょう。
それが出来事です。
こっからが本題です。
動きってのは、いってみれば、時間による変化です。
最もシンプルに時間変化を表現するとすれば、前と後です。
そこで、マインド・エンジンでは、beforeとafterでオブジェクトの変化を管理します。
これが出来事って概念です。

それと、動きについては、もう一つ考えないといけないことがあります。
動きって、単に、どう動くかってだけじゃありません。
ある動きは、次の動きを引き起こしたりします。
その仕組みがあるから、次、どうなるかって予測ができるわけです。

それじゃぁ、さっそく、マインド・エンジンの出来事を見て行きましょう。
「りんごを手に持ちました」って文を実行すると、三次元世界で少年がリンゴを持ちます。

実際には何をしてるかと言うと、3DCGの少年の手の位置にリングを配置して、手とりんごが一体となるように、指示を出してるわけです。
次に、「そのりんごから手を放しました」を実行します。
これは、手とりんごの連結を解除せよって指示を出したわけです。
すると、物理シミュレータによって、リンゴが下に落ちるわけです。
落ちたリンゴは、床で止まります。

この時の意識の出来事タブはこうなっています。

順番に説明します。
出来事Releaseというのが、「手を放す」って指示です。
主体がMeとなってますけど、これは、自分の事です。
つまり、マインド・エンジン本人です。
僕らも、「りんごを持つ」って文を読んで想像するとき、自分が持ってるとこを想像するでしょ。
それと同じで、マインド・エンジンが文を読んで想像するとき、自分が持ってるとこを想像してるんです。
だから、主体は自分、Meとなってるんです。
それから対象はApple、リンゴとなってますよね。
Beforeのposition、位置はMe、自分です。
これは、自分がリンゴを手で持ってるってことです。
AfterのpositionはNULLとなってますよね。
NULLってのは、無いって意味です。
手で持ってた物が無くなったってことです。

その下に【出来事】Dropってありますよね。
落ちるって意味です。
手を放すって出来事から、落ちるって出来事が発生したわけです。
入力文には「手を放す」としか書いてないですけど、それによって「落ちる」って現象が起るってことを予測したわけです。

落ちた結果、どうなったかと言うと、Afterを見てください。
PositionがFloor、床ってなってますよね。
つまり、床に落ちて、リンゴの位置が床となったわけです。
こうやって、リンゴから手を放したら、リンゴが床に落ちるってとこまで想像できるわけです。

ただ、じつは、これ、そんな単純な話じゃないんですよ。
理論を考えるのと、実際に作るのとじゃ、じつは、大きな隔たりがあるんですよ。
僕は、哲学者というより、技術者に近いんで、実際に作る大変さもよく分かってます。
こっからは、プログラムとかコンピュータ科学の話になります。
出来るだけ分かりやすく説明しますんで、もうちょっと聞いてください。

今の話、どうやって実現してるかっていうと、リンゴオブジェクトの動きを監視するんです。
りんごが床にぶつかるとか、変化が起こるたびに、それを通知する仕組みを組み込んでるんです。

こうやって、何か変化するたびに意識に通知されるわけです。
意識からしたら、「あっ、あっ」って気付くって感じです。
ここなんですよ。
重要なのは。
重要ってのは、フレーム問題を解決するのに重要ってことです。

思い出してください。
フレーム問題を起こすAIって、何をやってましたか?
天井はどうなるか、壁はどうなるかって、全部チェックしてたでしょ。
チェックするのは、言ってみれば意識です。

一方、マインド・エンジンはどうでしたか?
仮想世界にあるオブジェクトを、全部チェックしたりなんかしないですよね。
意識は、仮想世界で何か変化があったら、その変化を通知として受け取るだけです。
世界の変化を調べるのは意識じゃないです。
チェックしてるのは、無意識です。

でも、意識がしなくても、無意識が全部チェックしてたら、結局、無意識のところでフレーム問題が起るんじゃない?

もしかしたら、そう思った人もいるかもしれません。
そこも違うんですよ。
さっき説明しましたけど、無意識はオブジェクトを全部チェックなんかしてなかったですよね。
オブジェクトを監視してて、変化があった物だけ通知してただけです。
全オブジェクトをチェックしてたわけじゃありません。
だから、フレーム問題が起らないんですよ。

ここでコンピュータの話になります。
今言ったことを実現するのには、メインで動くプログラムとは別に、監視するプログラムが必要なんです。
つまり、メインのプログラムと監視プログラムの二つのプログラムが同時に動く仕組みが必要なんです。
これを、並列処理って言います。
そして、通知を受けたら、そこから、また別のプログラムが動き出します。
通知を受けてプログラムが動く仕組みをイベントドリブンっていいます。

こんな複雑なプログラムって、昔はできなかったんですよ。
昔は、プログラムは上から順番に実行するだけの単純なものしかありませんでした。
昔っていつの事かって言うと、フレーム問題が提唱された1960年代です。

並列処理やイベントドリブンなんて仕組みが登場するのは、1970年代、80年代になってからです。
分かってきましたか?
フレーム問題が解決できないってのは、フレーム問題が提唱された頃のコンピュータ技術ってのも、大いに関係するんです。

前回、言語システムってアイデアは、ソシュールも考えてたことだって話をしましたけど、ソシュールの時代は、コンピュータすら無くて、とても、実現不可能だってこと、分かりますよね。

人間と同じ心を持ったロボットとか人造人間を創ろうって話、古くはギリシャ神話まで遡ります。
そんな人類の夢、それを実現するには、コンピュータの出現を待つしかありません。
ただ、コンピュータができたからと言っても、心の仕組みを再現するには、もっと細かい技術が必要です。
それは、並列処理、イベントドリブン、オブジェクト指向言語、物理シミュレータとかってコンピュータ技術です。
あと必要なのは、そういった技術を駆使して、心を作ろうって言う、ちょっと頭のいかれた連中です。
そんな連中が集まってるのがロボマインド・プロジェクトです。

よかったら、ロボマインド・プロジェクト、応援してやってください。
それじゃぁ、次回も、おっ楽しみに!