ロボマインド・プロジェクト、第255弾
こんにちは、ロボマインドの田方です。
実際に動くロボマインド・プロジェクト、マインド・エンジンシリーズの最新作です。
今回は、マインド・エンジンをロボットに搭載してみました。
近い将来、人型AIロボットが人間と共存する時代が来ると思います。
というか、とっくに来ててもおかしくないのに、なぜ、まだ出来ていないんでしょう?
だって、二足歩行とか、既に、ここまで出来てるんですよ。
でも、一番肝心なことが出来てないんですよ。
それは、世界を見て、それが何か認識するって心です。
ものを見るとか、認識するとかって、僕らは、あまりにも当たり前にやってることなので、何か特殊なことをやってるなんて、思いもしません。
たとえば、お皿を洗ってるのを見て、「洗う」の意味を理解するって、どういう事でしょう?
単に、「皿を洗ってる」って文字列を出力するぐらいなら、今のディープラーニングでもできます。
たとえば、この写真を見て
「海を向こうに大きなビルが建っている」
なんて説明文を出力するAIは既に存在します。
たぶん、お皿を洗ってる大量の動画を学習させれば、「お皿を洗ってる」って答えるAIロボットはできると思いますよ。
でも、それって、本当に「洗う」の意味を理解したことになるんでしょうか?
たとえば、そのロボットに、「もっときれいに洗って」って言ったら、きれいに洗ってくれるんでしょうか?
できませんよね。
だって、そのAIにできるのは、映像を文字列に変換することだけですから。
でも、それじゃぁ、いつまでたっても、人と共存できるロボットなんて、出来ませんよね。
重要なのは、世界の意味なんです。
でも、ほとんどのAI技術者は、その一番重要なとこを見ないようにしてるんですよ。
これが、今回のテーマです。
AI技術者が、見て見ぬふりしてる世界の意味とは
それでは、始めましょう!
オープニング動画
これ、マインド・エンジンを搭載したAIロボットがお皿を洗ってるところを見て、意味を理解するところです。
まず、カメラで捉えた映像から、3Dオブジェクトに変換します。
じつはねぇ、この部分は実際に動いてるわけじゃないんですよ。
ただ、このぐらいのことは、既に実用化されてます。
たとえば、これは、マイクロソフトのMRシステム、ホロレンズです。
VRは、VRゴーグルを使って完全に仮想世界に没入しますよね。
MRというのは、現実世界も見せつつ、現実世界にVRを重ねて表示するシステムです。
そのために、現実世界から3D情報を取得します。
こんな風に、現実世界の3D形状をリアルタイムで取得することは、既に出来ています。
そこまでできれば、3D形状から、その物体が何かを認識することは可能です。
自動運転なんかも、この技術を使ってます。
問題は、それを何に使うかです。
MRシステムだと、現実のテーブルの上に、バーチャルな家やお城を載せるといったことができます。
これは、空間の位置情報を使ってるわけです。
でも、これって意味を理解したことになるんでしょうか?
そのことを考えるのに、脳の中で何をやってるのかを知るのが一番分かりやすいです。
盲視患者の話で説明します。
目からの情報は後頭部の視覚野に送られて、そこで二つに分かれます。
一つは、物の色や形を分析する「何の経路」です。
もう一つは、物の位置や動きを分析する「どこの経路」です。
盲視というのは、このうち、「何の経路」が損傷して物が見えなくなった人です。
だから、リンゴを見せて、「何が見えますか?」って聞いても、「見えないのでわかりません」って答えます。
でも、「どこの経路」は生きてるので、たとえば、黒板をレーザーポインターで示して、「光の点はどこにありますか?」って質問すると、ちゃんと指差しできるんです。
ただ、本人は、何で指差しできたのか分からないんです。
つまり、意識では、見えてないんです。
これは、「何の経路」の先に意識があって、「何の経路」が損傷すると、意識では世界が見えなくなるからです。
逆に言えば、指差しとか、世界への動作は、意識がなくてもできるってことです。
つまり、空間的な位置を把握して、現実世界に適切に行動するだけなら意識は必要ないんです。
だから、現実の机の上にヴァーチャルな家を表示したり、認識した物体を避けるように運転する自動運転システムには、意識は必要ないんです。
意識が感じるのは、見えるとか、あるとかって感じですよね。
意識は一種のプログラムです。
だから、意識プログラムが扱えるデータで、現実世界を再構築する必要があるんです。
その世界のことを、僕は、仮想世界と呼んでいます。
それじゃぁ、仮想世界をどうやって作るか、マインド・エンジンで説明します。
これがマインド・エンジンの全体像です。
全体構造は、今までとほぼ同じです。
コンソール、仮想世界、無意識、意識の4つのウィンドウからなります。
今回、新たに追加したのが視覚入力ウィンドウです。
これは、カメラからの現実世界の映像です。
人間で言えば、網膜に映った映像です。
それが仮想世界ウィンドウに送られます。
仮想世界ウィンドウでは、入力画像を処理して3Dオブジェクトに変換する機能が追加されました。
これが、「何の経路」に相当するわけです。
実際に何をしてるかと言うと、入力映像から3Dオブジェクトを生成します。
(ワイヤーフレームに変換する動画を表示)
こうやって、3Dオブジェクトの形状が得られます。
また、マインド・エンジンは3Dデータベースも持っていて、3D形状からデータベースを検索します。
そして、検索結果からオブジェクトを生成してワーキングメモリに入れます。
お皿、手、スポンジ、水、人間って表示されましたよね。
それから、形だけでなく、動きも認識します。
これが、往復運動を認識したってことです。
さて、これ、今、何が起こったか分かりましたか?
形から、皿や手、スポンジってのを認識したってわけです。
つまり、現実世界から物体を切り出したわけです。
以前紹介した脳科学者、ジル・ボルト・テイラーの話は覚えてますか。
彼女は、左脳が脳卒中になって、自分と世界の区別がつかなくなりました。
あらゆるものが、一体となる世界を感じました。
つまり、左脳には、物を一つ一つ区別して認識する機能があるようなんです。
これが机、これが椅子って区別して認識できるのは、そうやって世界を管理する仕組みがあるからなんです。
今、お見せしたのはそれと同じです。
映像から物体を判別して、それをワーキングメモリに生成したわけです。
意識が認識するのは、このワーキングメモリに生成されたオブジェクトです。
意識は、現実世界を見てるわけじゃないんです。
意識が認識するのはワーキングメモリです。
意識は、プログラムです。
プログラムが直接読み書きできるのはメモリです。
意識プログラムは、ワーキングメモリからデータを読み出します。
これが、世界を見るってことです。
意識が「見える」って感じれるのは、メモリにオブジェクトが生成されたからです。
つまり、見るとは、オブジェクトを生成するってことなんです。
前回、意識プログラムが理解できるのはオブジェクト指向プログラミングだって説明しました。
マインド・エンジンでは、独自のオブジェクト指向プログラミングを使ってます。
それは、仮想世界ウィンドウのスクリプトタブに表示されてます。
たとえば、お皿の生成なら、こうなります。
Let plate = new DailyLife.Plate();
newが、オブジェクトを生成せよって命令文です。
つまり、この文は、お皿オブジェクトを生成して、変数plateに代入せよって意味です。
これでお皿が生成されました。
これで「お皿を見る」ことができるんです。
この文は、じつは、ものすごく重要なことも示してます。
それがどこかと言うと、生成したオブジェクトを変数に代入してるところです。
この意味、わかりますか?
変数plateは、生成した皿オブジェクトを指し示してるわけです。
言ってみれば、変数は皿オブジェクトを示す記号です。
言い換えれば、名前です。
ワーキングメモリに「お皿」って書いてありますよね。
これが、オブジェクトの名前です。
名前の意味って、分かりますか?
物の名前をほかの人と共有しておきます。
すると、「お皿」って言うだけで、相手は、お皿を思い浮かべることができますよね。
相手がAIなら、お皿オブジェクトをメモリに生成します。
「お皿の色は白色です」って言えば、人間なら、白いお皿を思い浮かべますし、AIなら、お皿オブジェクトの色プロパティを白に設定します。
plate.color = white;
こんな感じです。
分かりましたか?
これって、言葉そのものなんですよ。
言語が生まれたんですよ。
プログラムには、オブジェクトと、それを指し示す変数があるわけです。
そういう風にして、世界を管理してるわけです。
この仕組みがあって、初めて、言葉というものが生まれるんです。
認識した世界を、この仕組みに変換すること。
これが、世界を理解するってことです。
これが、意味を理解するってことなんです。
さて、これを踏まえて、もう少し説明しますよ。
以前、世界を構成するのは、要素と演算子って話をしました。
要素ってのはオブジェクトのことです。
演算子ってのは、オブジェクトを変化させるものです。
言語で言えば、要素は名詞で、演算子は動詞です。
動詞もデータベースに登録してあります。
そこで、今度は認識したオブジェクトから動詞を検索します。
動詞は、概念を使って定義されています。
名詞は、概念の上下関係で管理します。
たとえば、トップは具体物概念です。
具体物概念の下には、生物概念とか、非生物概念とかがあって、非生物概念の下に道具概念があって、道具概念の下に洗い道具概念があって、洗い道具概念の下にスポンジがあるって感じです。
そして、たとえば、洗うって動詞は、「具体物を、洗い道具と水を使ってこする」といった感じで定義されてます。
それから、動きは、いくつかの動きの組み合わせから成ります。
「こする」って動きは、「押し付ける」と「往復運動」って動きの組み合わせからなります。
以上の条件から、今、認識したオブジェクトや動きを当てはめてみます。
すると、スポンジは洗い道具になりますし、水もあります。
こするの要素として往復運動があります。
これらの要素から、動詞データベースを検索すると、「洗う」って動詞が得られます。
どうやら、今見てるのは、「お皿を洗う」って推測できるわけです。
次は、「洗う」の意味です。
「洗う」って動詞の意味とはなんでしょう?
それは、物をきれいにするってことですよね。
この場合だと、お皿をきれいにするわけです。
お皿の状態が変化するわけです。
たとえば、「きれいさ」という値を定義して、「洗う」とは、「きれいさ」の値が大きくなると定義します。
「洗う」の定義は、意識ウィンドウの出来事タブに示しています。
「出来事」と言うのは、誰が何をしたって形式で表現したものです。
主体は、Person、人です。
対象はPlate、お皿です。
動詞は、アクションで、Wash、洗うです。
つまり、出来事は、「人がお皿を洗う」となります。
動詞は、オブジェクトの変化の前後で定義します。
前状態は、Beforeが、cleanness=0となってます。これは「きれいさ」が0ということです。
後状態は、Afterで、cleanness=7となってます。これは「きれいさ」が7ということです。
つまり、「洗う」という出来事により、お皿の「きれいさ」の値が大きくなるわけです。
つまり、お皿がきれいになるってことです。
これが「洗う」の意味です。
ここで、前回の話を思い出してください。
同じオブジェクトの変化の前後を管理する仕組みがあるわけです。
この前後とは、何のことだったか、覚えてますか?
そう、これが時間です。
つまり、動詞を定義するということは、時間を理解してるってことです。
逆に言えば、オブジェクトの前と後の状態を比較できる仕組みがあって、初めて、時間が理解できるってことです。
現実世界にあるのは常に、今、現在の状態だけです。
現実世界を直接認識してたら時間は感じれません。
現実世界からオブジェクトを生成して、それを認識する仕組みがあって、初めて、時間を理解できるんです。
時間を理解できて、初めて、今、何が行われてるかって意味が理解できるんです。
見て、何をしてるって分かるってことは、時間を感じれるってことでもあるんです。
さて、これで、ようやく、「お皿を洗ってる」って理解できるようになりました。
ただ、これだけじゃ、まだ、「お皿を、もっときれいにして」って言われても、どうしていいかわかりません。
次回は、その事について、考えてみます。
はい、今回の動画が面白かったらチャンネル登録、高評価お願いしますね。
それじゃぁ、次回も、おっ楽しみに!