意識をプログラムで作るには

意識をプログラムで作るには

意識のプログラムと無意識のプログラムの違いとは?

このエントリーをはてなブックマークに追加

 

どうすれば、コンピュータに意識を発生させることができるのでしょう?

プログラムで意識を作るには、どうすればいいでしょう?

意識のプログラムと無意識のプログラムでは、何が違うのでしょうか?

 

これらの質問に答えるために、ここで、意識と無意識の違いについておさらいしておきましょう。

たとえば、膝頭の真下を叩くと、足が勝手に上がります。
いわゆる反射です。
これは、無意識の動作です。
足を上げようと意識して上げたわけではありません。
無意識とは、文字通り、意識できない行動のことです。
無意識の第一の特徴は、入力と出力が直結していることです。
膝頭を叩くという入力があれば、自動的に足を上げるという出力になります。

次は、意識です。
意識では、リンゴを見つけて「あっ、リンゴがある」と思ったり、「リンゴを今食べようか、後から食べようか」と考えたりすることができます。
これらの考えは、頭の中で思い巡らすことができます。
つまり、意識は、入力と出力が直結しておらず、頭の中だけで思考を操作できます。

意識と無意識の第一の違いは、入力と出力が直結しているのが無意識で、入力された情報を頭の中で操作できるのが意識です。

 

意識と無意識のもう一つの違いについて説明します。
無意識の例として、トラウマを考えてみましょう。

僕は、小さい時、タクシーに乗って酷く乗り物酔いをしたことがありました。
それ以来、タクシーのあの独特の臭いを嗅ぐだけで、気分が悪くなりました。
タクシーに乗らなくても、臭いを嗅ぐだけで乗り物酔いしてしまうのです。
これは、このタクシーの臭いという入力と、乗り物酔いをするという出力が直結している無意識の反応です。

まだタクシーに乗ってないので乗り物酔いするはずがないと、意識で考えても、それを打ち消すことができません。
これが、無意識のもう一つの大きな特徴です。
無意識は、変更することができない

一方、意識の場合を考えて見ましょう。
たとえば、正月とか、たまにしか会わない親戚のおじさんがいたとします。
その人は、あまり笑わず、いつもムスッとしていて、子ども心に、怖い人だと思っていました。
あるとき、宿題が分からず困っていたとき、そのおじさんが丁寧に教えてくれて、本当は、優しいおじさんだと分かったとします。

これは、最初に結びついていた「おじさん」に対する「怖い」という印象が、経験によって、「優しい」に書き換えられたわけです。
認識していたデータを、書き換えることができたのです。
これが意識のもう一つの大きな特徴です。
意識は、変更することができる。

 

それでは、これら意識と無意識の二つの違いを、コンピュータ・プログラムでどうやって実現すればいいでしょう?
その前に、コンピュータ・プログラムについて、少し説明しておきます。

プログラムは、関数によって構成されます。
関数とは、入力データに対して何らかの計算を行い、出力するプログラムの一つのまとまりのことです。

さて、意識と無意識の違いの第一の特徴によると、無意識は、入力と出力が直結しています。
これは、コンピュータ・プログラムで言えば、一つの関数によって構成されているといえます。
何らかの入力があると、後は、関数によって自動で計算され、一気に出力されるわけです。

人間の場合、入力元は、外部世界であり、身体の感覚器官から入力されます。
出力先も、外部世界であり、身体を通して出力されます。
口から言葉を発したり、手足を動かしたりすることです。

反射の場合、入力が膝頭を叩くことであり、出力が、足が上がる動作です。
コンピュータで無意識を作るには、センサーからの入力に応じて手足を自動で動かす関数を作ればいいわけです。

 

次に、意識について考えて見ましょう。
意識は、リンゴを見るという入力があっても、「リンゴだ」と認識するだけで、すぐに外部に何らかの行動として出力するわけではありません。
リンゴを認識して、「リンゴを今、食べよう」と考えたり、「後で食べよう」考えたりします。
「リンゴだ」と認識すること、「リンゴを今、食べよう」と考えること、「後で食べよう」と考えること、これらは一種の認知パターンです。
この認知パターンの出力先は、外部でないとすれば、どこでしょう?

それは、意識です。
意識は、複数の認知パターンからの出力を受けて、次の認知パターンに出力したり、場合によっては、身体を通して外部世界に出力します。
つまり、意識は、認知パターンを制御するコントローラの役目を果たしているのです。

認知パターンは、プログラムで言えば関数にあたります。
意識プログラムは、複数の関数を制御するコントローラといえます。

 

次に、意識と無意識の第二の違いである変更可能性をコンピュータプログラムで実現する方法について考えてみましょう。

プログラム言語には二種類あります。
一つは、コンパイル型言語で、もう一つはインタプリタ型言語です。
C言語などはコンパイル型言語で、JavaScriptなどの多くのスクリプト言語は、インタプリタ型言語です。

コンパイル型言語とインタプリタ型言語の違いについて、もう少し説明します。
コンピュータプログラムは、CPUによって実行されます。
CPUが解釈できるのは、CPUの持つ命令やレジスタで記述された機械語(マシン語)です。
一方、プログラマーが書くプログラムは、人が読んでも理解できるテキストデータです。
このテキストデータのプログラムをバイナリデータ(2進数)の機械語に変換することをコンパイルと言います。

コンパイル型言語では、コンピュータで実行する前に、先に、コンパイルしておきます。
コンピュータでプログラムを実行するときには、機械語に変換されているので、すぐに実行でき、実行速度が速いという特徴があります。

一方、インタプリタ型言語は、コンピュータで実行するとき、その時点で、プログラムを機械語に変換して実行する方式です。
先にコンパイルしておくのではなく、テキストで書かれたプログラムを、実行時に1ステップずつ機械語に変換しながら実行するので、コンパイラ型言語に比べて実行速度が遅くなります。

コンパイラ型言語は、先にコンパイルされているので、入力データを出力まで一気に処理します。
これは、まさに、無意識と同じです。

一方、インタプリタ型言語は、1ステップずつ、解釈しながら実行します。
これは、認知パターンの結果に応じて次のステップの認知パターンを一つずつ実行する意識と同じ動作と言えます。

コンパイル型言語は、0と1から成る機械語に変換されるので、一旦、コンパイルされてしまうと、処理の中身を後から変更することはできません。

一方、インタプリタ型言語は、テキストで書かれたプログラムを、そのまま解釈実行するので、プログラムの内容を把握することが可能で、後から、テキストであるプログラムの中身を書き換えることも容易です。
「おじさん」に結びついていた「怖い」というデータを、「優しい」というデータに変更するといったことが可能というわけです。
コンパイルされて0と1だけのバイナリデータに変換された後では、どれが「おじさん」で、どれが「怖い」とか「優しい」とか、データの区別がつかなくなるので、コンパイル型言語は、変更が不可能というわけです。

このことから、コンパイラ型言語が無意識で、インタプリタ型言語が意識に対応すると言うことができると思います。

 

意識のプログラムとは、認知パターンがプログラムで記述されていて、そのプログラムを1ステップずつ実行するインタプリタ型プログラムで実現されると言えます。
インタプリタ型言語なので、経験に基づいて、プログラムの中身を変更することもできます。
これが、意識のコンピュータ・プログラムなのです。

ロボマインド・プロジェクトでは、意識が解釈するインタプリタ型言語として、新たに専用のアセンブリ言語「ロボマイ語」を開発しました。
そして、単語の意味は、ロボマイ語で記述されます。
意識は、新たな単語を教えてもらうと、その意味を、ロボマイ語で記述します。

このようにして、意識を持ったシステムは、人間と、言葉を使って教えたり、教えられたりすることが可能となります。
つまり、人間と自然なコミュニケーションが取れるようになるのです。

 

追記
意識と無意識の脳の構造の違いについて、コンピュータ・アーキテクチャに対応させて、意識がノイマン型アーキテクチャ、無意識が非ノイマン型アーキテクチャになると「脳を観察して心はどこまで解明できるか」で考察しました。

 

このエントリーをはてなブックマークに追加

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です