第294回 心をコンピュータで実現する技術の裏側 全部見せます!


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

僕らは、コンピュータで心を作ろうとしてるでしょ。
心って、間違いなく、この世で最も複雑なシステムです。
そんな複雑なシステムを作るには、基盤となる構造をきちんと設計しとかないといけないんですよ。
そこ間違うと、ぐちゃぐちゃになっていくんですよ。
というか、今、まさにその問題に直面してるんです。

でも、それを突破する方法が、ようやく見えてきたんですよ。
それは、システム開発の最新の手法の中に見つかったんです。
システム開発の手法って、コンピュータ中心から人間中心に進化してるんです。
つまり、人間が頭で考えたものを、そのまま、プログラムに書けるように進化してるんです。

よく、AIはニューロンとか、脳を真似てるっていうでしょ。
でも、ニューロンって、脳細胞ですよ。
脳細胞がどう動いてるかなんか、意識できないでしょ。
僕らが意識してるのは、「ご飯食べる前に、先にこのメールの返信しとこ」とかってレベルのことでしょ。
順番とか、重要度とか、思考レベルのことです。
そのレベルを、一番真剣に考えてるのって、じつは、AIよりシステム開発の分野なんです。
だから、システム開発の最新手法の中に、僕らが探してた心の仕組みの基本構造が見つかったんです。

これが、今回のテーマです。
心をコンピュータで実現する技術の裏側、全部見せます!
それでは、始めましょう!

僕らは、全く新しいことに挑戦してるようで、結構、今までの自然言語処理の基本は踏襲してるんですよ。
たとえばオントロジーとかです。
オントロジーっていうのは、言葉の関係を表現したものです。
たとえば、これは概念ツリーです。
生物の下位概念が動物で、動物の下位概念が哺乳類で、哺乳類の下位概念が犬ってなります。

これは犬のhas-aツリーです。

犬は、胴体を持っていて、胴体は頭と脚としっぽを持ってるって関係を示しています。
これは、古くからある言葉の分類の仕方ですし、特に、何も問題ないように思いますよね。

次に、これと同じように動詞を分類しようとしたんです。
その話は第281回でしました。
毎日、3人で会議してるんですけど、なかなかしっくりこないんでよ。
もうかれこれ、2ヶ月以上、議論してます。
もしかして、単語を分類しようとするってこと、その出発点が間違ってないかって思い始めたんですよ。
これは、前回、第293回で指摘した科学の問題と同じやと思うんですよ。

前回、認知科学者、ニック・チェイターの本『心はこうして創られる』を紹介しました。
彼は、心は薄っぺらで、大した処理はしていないっていいます。
心で感じてることは幻想だっていいます。
たとえば、これを見てください。

右の白丸が眼球の動きです。
だから、本当に目で見えてるのは左のようになるはずです。
でも、僕らは、右のように全体を感じますよね。
ニック・チェイターは、これは幻想だっていうんですよ。
なんでこんな結論になるかっていうと、眼球の動きはアイトラッカーで測定できる事実だからです。
でも、どんな風に見えるかって、心が感じることですよね。
心が感じることは測定できません。
客観的に測定できないものは存在しないも同じ。
これが科学の考えです。
だから、心で見てると思ってることは幻想ってなるんですよ。

「んん、なんか、ちょっと違うんじゃないかなぁ」って思いますよね。
でも、これが、科学的推論の結果なんです。

自然言語処理も同じです。
最近の自然言語処理は、単語の次にどんな単語が来るかを学習してます。
たとえば、「昔々、ある所に、おじいさんと○○がいました」って文があったとき、大量の文書から、○○に入るのは、「おばあさん」だって予測するわけです。
これで正しく予測できたら、「おばあさん」の意味を理解してるってなるんけです。
でも、これも、なんか違うんじゃないかなぁって思います。

だって、僕らは、「おばあさん」といってイメージするのは、腰が曲がってるとか、昔のことをよく知ってるとか、そんなことですよね。
でも、AIは、そんなことは全く思いません。
「おじいさん」の後に来る確率が高い単語としか理解してないんです。
薄っぺらい理解ですよねぇ。

何でこんな薄っぺらい理解になるかっていうと、文字の並びしか見てないからです。
なんで文字の並びしか見てないかって言うと、それが観察できる唯一の事実だからです。
これが、科学の考え方なんです。
科学は、表面に現れた現象しか見ないんですよ。
その奥に深い心があるって考えないんですよ。
いくら、僕らが、「心がある」って叫んでも、「それを証明できますか?」「観測可能なデータを出せますか」って言われたら、黙るしかないんです。
「こんなんおかしい!」って、ずっと思ってたんですけど、よく考えたら、僕らも同じことをやってたって気づいたんです。

つまりね、文章って、何か言いたいことがあって、それを言葉で表現したものですよね。
でも、言葉って、文脈とか、状況によって簡単に変化します。
だから、表面に出てくる言葉だけ見ててもダメなんですよ。
単語だけ見て整理しようとしてもダメなんですよ。
それじゃぁ、どうすればいいんでしょう?

それは、単語や文より上のレベル、つまり、文脈とか状況から整理しないといけないんですよ。

「単語じゃなくて、文脈から考えるべきじゃないか」って、僕が会議で言ったんですよ。
そしたら、メインで開発してるSさんが、それじゃぁ、「DCIアーキテクチャが使えるんじゃないか」って教えてくれたんです。
ここで、システム開発の最新手法の話になります。
システム開発の手法っていうのは、ソフトウェア・アーキテクチャのことです。
ソフトウェア・アーキテクチャっていうのは、システムの基本構造のことです。

DCIの説明の前に、オブジェクト指向言語のおさらいと問題点について話しておきます。
オブジェクト指向言語っていうのは、人が頭で考えるようにプログラムを書けるように設計されたプログラム言語です。
オブジェクトは属性を表すプロパティと、動作を表すメソッドを持っています。
たとえば、犬なら犬種ってプロパティと、吠えるってメソッドを持っています。
オブジェクトの元になるものをクラスって言います。
クラスの最大の特徴は、継承といって、親子関係があることです。
犬クラスの親は哺乳類クラスです。
これを、犬クラスは、哺乳類クラスを継承するっていいます。

そして、親クラスのプロパティやメソッドは、子クラスも引き継ぎます。
たとえば、哺乳類クラスに「鳴く」ってメソッドがあって、哺乳類クラスの子クラスに猫クラスと犬クラスがあったとします。
猫クラスの鳴くメソッドを呼び出すと、「ニャーニャー」って言います。
犬クラスの鳴くメソッドを呼び出すと、「ワンワン」って言います。
こんな風にしてクラスを設計していくんです。

それじゃぁ、人間クラスを考えてみましょう。
食べるメソッドとか、歩くメソッド、走るメソッドとかありますよね。
自動車を運転するメソッドもあれば、自転車を運転するメソッドもあります。
そう考えたら、ヘリコプターを運転するメソッドも作らないといけないですよね。
そんなことをしてると、人間オブジェクトはとんでもなくデカくなります。
こんなデカいオブジェクトを作ったら、すぐにメモリがいっぱいになってしまいます。
これがオブジェクト指向言語の問題点です。

そこで登場してくるのがDCIアーキテクチャです。
用語の説明からすると、Dはデータ。オブジェクトのことです。
Cはコンテクスト。文脈のことです。
Iはインタラクション。メソッドのことです。

注目して欲しいのは、Cのコンテクスト、文脈です。
DCIアーキテクチャの考え方について、提唱者のジェームズ・コプリンは映画、マトリックスで説明してます。
マトリックスでヒロインのトリニティがヘリコプターの乗り込むシーンがあります。
主人公のネオが尋ねます。
「操縦できるのか?」
トリニティは答えます「まだよ」
そう言って、トリニティはヘリの操縦方法をダウンロードします。
これがDCIの考え方です。

分かりやすく説明します。
トリニティは人間オブジェクトです。
でも、中身はスカスカです。
「ヘリコプタに乗る」が文脈です。
ヘリの操縦方法がメソッドです。
トリニティは、ヘリに乗ってから、操縦方法をダウンロードしたわけです。
つまり、オブジェクトに最初から全てのメソッドを持たせておくんじゃなくて、文脈に応じて、必要なメソッドを実装するって考え方です。
これで、メモリがいっぱいになるって問題が解決します。

つまり、DCIは、文脈を中心に設計せよってわけです。
そして、文脈に応じて、オブジェクトにメソッドをロードしたり、アンロードしたりするわけです。
つまり、オブジェクトやメソッドから組み立てるんじゃなくて、先に、文脈を決めるんです。
そして、その文脈に合うように、オブジェクトやメソッドを、その場でダイナミックに組み立てるんです。
ご飯食べてるとき、ヘリの操縦方法なんか必要ないです。
必要になった時、必要なものだけ思い出せばいいんです。
これって、まさに、人間の頭と同じですよね。

さて、マインド・エンジンでは、「世界」ってのを定義してました。
三次元世界とか所有権世界とかです。
そして、世界の中で言葉の意味が定義されます。
たとえば、「売る」とか「買う」とかって言葉の意味は所有権の移動で定義します。
この世界ってのが、DCIアーキテクチャの文脈に相当するんですよ。
つまり、言葉は、「世界」を中心に整理すべきじゃないかってことです。

所有権世界の中に、「売る」とか「買う」とかってメソッド、それから「所有物」とか「所有者」ってオブジェクトを定義するんです。
これは、言葉で言えば、動詞や名詞になります。
「リンゴを買いました」って文脈では、「リンゴ」は「所有物」となるわけです。
だからといって、家族でリンゴを食べるとき、このリンゴの所有物は誰だって考えないですよね。
そこでは、「リンゴ」は美味しいとか、甘いとかってなるわけです。
同じリンゴでも違う意味となるのは、文脈が違うからです。
これが、文脈に応じて意味を考えるってことです。

それでは、世界をつかって、具体的にどうやって言葉を定義していくかについて考えてみます。
世界には、基本世界と、それを継承した応用世界があります。
一例として、「戦い世界」って基本世界を考えてみます。
「戦い世界」には、「勝つ」とか「負ける」とか、「攻撃する」とか「守る」とか「ルール」なんかが定義されてます。
「戦い世界」を継承した応用世界に、野球とかサッカーといったスポーツ、それから将棋とかチェス、ジャンケンといったゲームや遊び、それから、選挙とか戦争もあります。
「戦い世界」の攻撃が、野球だったらバットで打つ、守るが打ったボールをキャッチするってなるわけです。

それから、忘れてはいけないのが心の目的です。
それは、心の目的とは、行動の決定です。
行動の決定に必要なのは、感情や感覚、善悪といった心理パターンです。
だから、基本世界は、心理パターンにつながっています。
たとえば、「戦い世界」の「勝つ」は「嬉しい」って感情につながりますし、「負ける」は、「悲しい」とか「悔しい」につながります。
だから、人は、ゲームで自分が勝つように行動するわけです。

それでは、野球で考えてみます。
今から、野球をしますってなりました。
すると、「戦い世界」に「野球」がロードされます。
すると、攻撃はバットで打つんだな、守備は、ボールをキャッチするんだなって分かります。

幼稚園ぐらいのとき、生まれて初めて野球をしたんですよ。
見たことはあったし、なんか楽しそうやなぁって思ってました。
いわれるまま、一塁を任されました。
誰かが打って、みんな、「走れ、走れ!」って叫ぶんですよ。
僕は、てっきり、自分に言われてって思って、二塁に向かって走ったんですよ。
そしたら、「君やない」って笑われました。

つまり、僕は、攻撃と守備の意味を理解してなかったわけです。
でも、バットで打ったり、一塁から二塁に走るってことは、何となく見て知ってました。
つまり、表面に現れる現象は知ってたわけです。

表面に現れるとこだけ見様見真似をしても、意味を理解したことにならないんですよ。
意味を分かるってのは、どの基本世界に属するかってことを分かってるってことです。
世界とか文脈を中心にシステムを設計すべきって、こういうことです。

そう考えると、人間クラスが最低限持つべきものが見えてきます。
ます、感情とかの心理パターンです。
それから、手や足も絶対必要ですよね。
そして、三次元世界、所有権世界、戦い世界といった基本世界です。
ただし、戦い世界を継承した野球とかは、必要ないです。
必要になってからロードします。
そして、野球の攻撃のバットで打つとか、守備のボールをキャッチするとかは、人間が持つ手の動きで定義しておくわけです。
そして、自分のチームに点が入ると喜ぶし、相手チームに点が入ると悔しがります。
これが心のシステムの基本構造です。
そして、それを実現するソフトウェア・アーキテクチャが、DCIアーキテクチャです。

ただ、このDCIアーキテクチャ、まだ提唱されて間がないんです。
だから、DCIアーキテクチャを実現するプログラム言語が、まだ、追いついてないんですよ。
どういうことかと言うと、オブジェクト指向言語って、最初にクラスを設計します。
それは、後から変更できません。
後から変更できないって言うのは、プログラムの実行中に変更できないってことです。
でも、DCIアーキテクチャだと、プログラムの実行中に、文脈に応じて、メソッドを追加したり、削除したりできないといけないんです。
それを実現できるプログラム言語が、まだ、ほとんどないんですよ。
だから、僕らはプログラム言語からつくってるってわけです。

僕らが、今、何をやってるのか分かってきたでしょうか?
今回は、マインド・エンジンのソフトウェア・アーキテクチャの部分の話でしたけど、意識自体の仕組みについては、こちらの本で詳しく解説してるので、よかったら読んでください。

はい、今回の動画が面白かったら、チャンネル登録、高評価お願いしますね。
それじゃぁ、次回も、おっ楽しみに!