ロボマインド・プロジェクト、第409弾!
こんにちは、ロボマインドの田方です。
今回は、僕らが開発してるマインド・エンジンのど真ん中の話です。
それは、ヴァーチャルマシンとかスクリプト言語の話です。
こんな話したら、間違いなく視聴率下がるからやめてくれって社員に言われるんですけど、この話は絶対に避けることできないんですよ。
確かに、ややこしい話です。
でも、言っときます。
3年後、いや、半年後、今回の動画、世界中が注目することになりますよ。
たとえば、サトシナカモトと名乗る人物の書いた論文が世界を変えましたよね。
ご存じ、ビットコインの論文です。
この論文どおりつくったら、実際に使える暗号通貨ができました。
この10年、これで世界はすっかり変わりました。
今回の動画もそれと同じです。
なんでかって言うと、人の意識をコンピュータでどうやって作るかを具体的に解説してるからです。
この動画で語ったとおりヴァーチャルマシンを作ったら、意識をもったコンピュータが生まれるんです。
ねぇ、ビットコインどころの騒ぎじゃないでしょ。
これが今回のテーマです。
意識をもつヴァーチャルマシンの作り方
それでは、始めましょう!
たぶん、ほとんどの人は、ヴァーチャルマシンとかいっても、何のことかさっぱり分からないと思います。
まずそっから説明します。
ヴァーチャルっていうのは仮想って意味で、マシンっていうのは、コンピュータマシンのことです。
普通は、コンピュータのCPUって、半導体のシリコンチップでできてますよね。
CPUを、ソフトウェアで仮想的に作ろうってことです。
だから、今回の話、コンピュータ科学のかなり低レベルの話になります。
普通のプログラマーは、プログラムがなんで動くかなんか気にしてないです。
「1+1」って書いたら、コンピュータが計算してくれるってさえ知ってたら、その下で、どうやって動いてるかなんか気にする必要がないからです。
でも、僕らは、そうはいかないです。
だって、下のレベルで何が行われてるかを知らないと、心を作れないじゃないですか。
「1+1」って数式の部分が、意識が考える上のレベルです。
このレベルには、数式以外に「文」とか言葉があります。
今回、なにもコンピュータ理論の話をしたいわけじゃないです。
説明したいのは、「文」を理解するとはどういうことかって話です。
たとえば、目の前にリンゴがあったとするでしょ。
そしたら「リンゴがある」って思うでしょ。
スーパーでリンゴを売ってて、買うかどうか悩んだとするでしょ。
「美味しそうやなぁ。食後にみんなで食べたら、喜ぶよなぁ」とか。
今、文で考えましたよね。
これ、映像だけで考えるのは難しいんですよ。
家族で食べてる映像を見ても、人によったら、「あのテーブルいいよなぁ」とか、「あの服、おしゃれなやぁ」とかって思うかもしれません。
肝心なことが表現されてないですよね。
でも、文で表現したら、何が言いたいか誤解のしようがないです。
これと同じことをAIが考えたら、そのAIは心があるって思うでしょ。
だから、「文」で考えるってことが重要なんです。
じゃぁ、どうやったら文の意味を理解できるヴァーチャルマシンを作れるか。
これが今回の中心テーマです。
最終的にやろうとしてることも、先に言っときます。
それは、ヴィトゲンシュタインの『論理哲学論考』を実行するヴァーチャルマシンを作ることです。
何となく、やろうとしてることが見えてきましたか?
もしかしたら、余計、分からないくなりましたかねぇ?
とにかく、やりたいのは人の思考を実現するヴァーチャルマシンです。
そのためには、コンピュータ理論から始めないといけません。
コンピュータの話なので、最初は数式で説明します。
まず、こんなプログラムがあったとします。
Let a = 1 + 2;
これ、僕らが今、実際に作ってるスクリプト言語です。
この文の意味は、1+2を計算して、aって変数に代入するってことです。
変数っていうのは、いろんなデータを入れられる箱です。
実際はメモリです。
人がこのプログラムを見たら、aに3が入ると思うでしょ。
これを、コンピュータで実行して、aに3が入ったら、人間とコンピュータが同じことを考えたってことになりますよね。
これを、次の段階では、コンピュータに文章を読ませるんですよ。
それで、人と同じことを考えたら、そのコンピュータは人の意識と同じ処理をしてるといえますよね。
これがやろうとしてる全体像です。
それじゃぁ、始めますよ。
さて、この文です。(Let a = 1 + 2;)
この文は、Let 変数a=右辺 って形になってますよね。
これを分解すると、まず、aって変数を用意します。
そして、右辺の1+2を計算して、その結果をaに代入するってことです。
まずは、ヴァーチャルマシンの構成です。
ヴァーチャルマシンは、一列に並んだ巨大なメモリを持ってます。
メモリには、0番地、1番地、2番地ってアドレスが振られていて、それぞれにデータを入れることができます。
最初にあるのはこれだけです。
データは、数字でも文字でも、命令でも、何でも入れることができます。
それから、予め小さいプログラムが用意されてます。
今回なら、足し算プログラムです。
CPUなら、これが足し算回路って演算回路で実現されます。
ヴァーチャルマシンだと、それが別のメモリ空間に用意されてます。
これらの仕組みをつかって、与えられたプログラムを実行するのがヴァーチャルマシンです。
今の場合、プログラムは「Let a = 1 + 2;」です。
じつは、ヴァーチャルマシンって、プログラムを直接実行できません。
ヴァーチャルマシンができることって、メモリ番地を指定されたら、その番地の値を読み取ってその通り動くことだけなんです。
だから、さっきのプログラムをヴァーチャルマシンが実行できるように変換しないといけません。
このことをコンパイルって言います。
それじゃか、コンパイルしますよ。
はい、これがコンパイルした結果です。
–[literals]–
[0]1 int
[1]2 int
–[variables]–
[0]a
–[op codes]-
[0]PUSHL 0
[1]PUSHL 1
[2]ADD
[3]POPV 0
[4]END
ちょっと待ってください。
これ見て逃げるのはまだ早いです。
今から、これを、サルでもわかるように説明しますから。
コンパイルの仕方は、それほど重要じゃないので飛ばします。
機械的に簡単にできるってことだけ分かったらいいです。
重要なのは元のプログラムをどう変換したかです。
それは、メモリに格納できるように変換したわけです。
だから、一列に書かれるんです。
じゃぁ、順番に説明しますよ。
(–[literals]—)リテラルっていうのは、文字とか数字のことです。
[0]とか[1]っていうのがメモリの番地です。
Intっていうのは整数です。
だから、これは([0]1 int [1]2 int)
0番地に整数の1、1番地に整数の2を格納したってことです。
1,2っていうのは、右辺の1+2の1,2のことですよね。
つぎの(–[variables]—)バリアブルズは変数のことです。
0番地に変数aを確保したってことです。
ここに計算結果を格納するので、その準備をするわけです。
ここまでがデータの話です。
次の(–[op codes]—)オペコードがプログラムの中身です。
準備したデータをどう操作するかってことがここに書かれています。
ここで、一つ、新しい言葉を覚えてもらいます。
それは、「スタック」です。
お菓子のペッツって知ってますか?
ラムネ菓子なんですけど、頭にキャラクタがついてて、頭を傾けたら一個ずつ、ラムネが出てくるおもちゃです。
中には、こんな風にラムネがいっぱい詰まってます。
分解すると、バネで押し上げてるのがわかります。
これがスタックです。
どういうことかというと、ラムネをデータとします。
スタックは、ラムネを押し込むみたいに上からデータを一個ずつ上から押し込んで入れます。
これをPUSHっていいます。
取り出すときは、一番上から一個ずつ取り出します。
これをPOPっていいます。
こうやってデータを格納したり出したりする仕組みがスタックです。
これだけ分かったら、オペコードが読めます。
それでは、[0]番地から順に読んでいきます。
0番地は、PUSHL 0 ってなってますよね。
LはリテラルのLで、0は0番地です。
つまり、リテラルの0番地をスタックにプッシュするってことです。
リテラルの0番地([0]1 int)には整数の1が入ってますね。
1をスタックに入れるわけです。
次は、PUSHL 1です。
これはリテラルの1番地、つまり整数の2をスタックにプッシュします。
その次はADDですよね。
これは足し算プログラムです。
ADDって単に一言だけの命令ですけど、処理の中身は別の場所に書いてあります。
どんな処理かっていうと、スタックから二つデータを取り出して、二つデータを足し算したら、また、スタックにプッシュするって処理です。
今、スタックには1と2が入ってましたよね。
ADDを実行すると、これらを足し算した答えの3がスタックに入るわけです。
次の「POPV 0」っていうのは、スタックから取り出して、V0に入れなさいってことです。
V0っていうのは(–[variables]–)バリアブルズの0番地のことです。
バリアブルズの0番地には、変数aがありましたよね。
つまり、変数aに1+2の答えの3が代入されたってことです。
オペコードの最後の4番地はENDなので、これでオペコードは終了です。
これがヴァーチャルマシンがやってることです。
これで終わったら、ただのヴァーチャルマシンの解説です。
重要なのは、今、何をやったのか、その意味です。
それじゃぁ、始めますよ。
まず、分かって欲しいのは、ヴァーチャルマシンも一種のプログラムです。
じゃぁ、普通のプログラムと何が違うかってことです。
さっきの例でいえば、ADDって命令の中身が普通のプログラムです。
二つの数を足し算するってちっちゃいプログラムです。
それから、スタックっていう仕組みもちっちゃいプログラムです。
ヴァーチャルマシンは、それらと何が違うかというと、まず、ちっちゃいプログラムを使う側だってことです。
ただ、大きなシステムは、どれもちっちゃいプログラムをつかって大きな処理をします。
ヴァーチャルマシンは、それとも違います。
どう違うかっていうと、ちっちゃいプログラムをどの順番に処理するかって、自由に作れるんです。
たとえば、こっちのプログラムの結果をあっちのプログラムにいれて、その結果とこのデータを足し算してって、自由にプログラムを作れるんです。
そうやって書かれたプログラム文を実行できるのがヴァーチャルマシンってことです。
つまり、プログラム文を自由に作ったり変更できるってとこが、一番の特徴なんです。
逆に言えば、それ以外のシステムは、最初から決まったプログラムしか実行できないんです。
じゃぁ、その文を変更するのは誰でしょう?
人の場合なら、それは意識です。
人は、頭で考えるでしょ。
考えるっていうのは文で考えるわけです。
来週、期末試験やから勉強せなあかんなぁ、とか。
ゲームばっかりしてたらあかんよなぁ。
もっと勉強せな、いい大学にいけないし、いい会社に就職できないしなぁ。
いや、ちょっと待てよ。
本当に、いい会社に就職したいんか?
僕はゲームが好きやから、ゲーム会社に就職したい。
ゲーム作りたいんやったら、今からでもゲーム作ったらええやん。
作ったら、それを売ったらええやん。
そしたら、就職する必要もないし、勉強する必要ないやん。
そうや、勉強より、ゲームの作り方を勉強しよ!
こんな風にいくらでも考えることができますよね。
こんな風に考えることができるから、全然違う生き方もできるんです。
さっき、足し算プログラムがあったでしょ。
足し算プログラムは、渡す数を変えたら、いろんな足し算ができます。
でも、出来るのは足し算だけです。
今の例でいったら、勉強するのに国語を英語に変更するとかです。
でも、これだけじゃ、根本的に違う生き方をすることはできません。
動物で考えてみます。
動物の赤ちゃんはお母さんに育てられて、やがて自分でエサを取れるようになって自立します。
次は、配偶者を見つけて、子どもを産んで育てます。
その繰り返しです。
全て生まれる前から決められていて、それに従ってるだけです。
新しいエサの取り方を考えたり、料理したりとか、全然違う行動は取れないですよね。
サルとか、人間と同じような手を持ってるから、フライパンで肉と野菜炒めることもできるはずです。
でも、絶対、やらないでしょ。
教えてもできません。
なんでかって言うと、言葉で考えることができないからです。
言葉を使って考えるって、ものすごいことやってわかるでしょ。
言葉を使って考えるとはどういうことかが、今回、話した内容です。
それは、自由にプログラム文を作れるってことです。
いろんなデータと、ちっちゃいプログラムがあるわけです。
それを目的達成のために自由に組み合わせるんです。
組み合わせ方に制限はありません。
長さも制限ありません。
そう考えたら、無限にプログラムを作れますよね。
だから、人はみんな違うんです。
同じ環境で暮らしてても、違うものを食べるし、違う行動をとります。
それができるのは、自由にプログラムを組み立てる仕組みを持ってるからです。
そのプログラムを文字で書き出したのが言葉です。
そう考えたら、言葉って、表面に出ただけのものってわかりますよね。
文字の並びとかは、本質じゃないんです。
重要なのは、言葉の奥にあるプログラムです。
それが言葉の意味です。
それを無視して、大量の文書から文字の並びだけ学習しても意味はありません。
でも、それをやってるのが今の大規模言語モデルです。
大規模言語モデルが意味を理解できないのは当たり前なんです。
今、AI業界はマルチモーダルがブームです。
大規模言語モデルが学習してるのはテキストデータだけです。
そこに映像や音声も学習させようってことです。
さらに、ロボットに搭載して手や足を付ければ、人間そのものができるっていいます。
でも、そんなことしても人間にはならないってわかりますよね。
もし、それで人間になるなら、今頃、サルがフライパンで野菜炒めを作ってます。
AI業界の人は、それがわからないみたいなんです。
なんでかっていうと、表面しか見てないからです。
テキストか映像かって、それは表面です。
人間とサルの違いは、奥でやってる処理の違いです。
ただ、表から見えないので、ものすごく分かりにくいです。
それを、何とか分かりやすく説明したのが今回の動画です。
今回は、コンピュータの一番低レベルの話と、人の意識が考える一番上のレベルの文の話をしました。
これで、意識が内部でどんな処理をしてるのか、全体像が見えてきたと思います。
ただ、その間の説明がすっぽり抜けています。
その間にあるのが何かって言うと、記号とか論理空間とか世界の話です。
そこにヴィトゲンシュタインの『論理哲学論考』が出てくるんですけど、今回は、これで時間となってしまいました。
この続きは次回にしたいと思います。
はい、今回の動画がおもしろかったら、チャンネル登録、高評価お願いしますね。
それから、良かったらこちらの本も読んでください。
それでは次回も、おっ楽しみに!