見出し画像

自動設計型ノイマン型コンピュータシステムとしてのチャットAI

昨年から世界を驚かせているチャットAIについて、どのような処理を行っているかについて、システムアーキテクチャの観点から、マクロ的に理解を深めたいと考えています。

チャットAIは入力された文章から、文章を出力する際に、逐次的に1単語ずつ出力することを繰り返します。そして、その際にチャットAIの内部状態を更新しながらこの処理を繰り返しています。

この動作の様子は、プログラムを処理するコンピュータと相似しています。端的に言ってしまえば、チャットAIをマクロ的観点から見れば、独自のプログラムを逐次処理するノイマン型コンピュータであると言い切る事が出来ます。

通常のコンピュータとは違い、この独自のプログラムは、入力された文章からチャットAIが内部で自動的にブラックボックス的に生成していると考える事が出来ます。また、このプログラミング言語、言語処理系、およびプログラムの自動生成処理は、チャットAIが学習過程で自動的に内部で設計していると考えることができます。

このように、ノイマン型コンピュータとその周辺システムの集合体としてマクロ的に捉えることで、チャットAIが行っている処理について理解を深めることができると考えています。

この記事では、上記で述べた捉え方について、詳しく説明していきます。

■チャットAI技術の一般的な説明

チャットAIの技術を調べると、その学習の際の技術や、文字の出力の考え方の説明をよく見かけます。

学習については、エンコーダとデコーダという仕掛けで入力データを効率的な内部表現に変換する技術がつかわれているそうです。また、アテンションという考え方に基づいて、文の中から、その文脈において重要度の高い部分を識別しながら学習するという技術が、近年のチャットAIのブレイクスルーとなった技術のようです。

また、チャットAIが文を出力する時、与えられた文の次の文字として確立が高いものを学習結果から推定して文字を出すという事を繰り返しているという説明がなされています。

■チャットAIの外形的な処理

こうした内部の詳細な仕組みをいったん横において、シンプルに外形だけをマクロ的に考えると、次のような仕組みになっています。

ステップ1:
・入力された文章に対して、内部で解析処理を行って「内部情報1」を生成する。

ステップ2:
・「内部情報1」と「内部情報2」と、「これまでに出力した文章」を使って、次の1単語を出力する。
・この処理の過程で「内部情報2」が更新される。

ステップ3:
・終了条件を満たすまで、ステップ2を繰り返す

■処理の例

これは例えば「Thank you」と入力して「You are welcome」という出力がなされたとしたら、以下の処理が行われたという事です。

ステップ1:
・入力「Thank you」
・更新:「内部情報1(Thank you)」

ステップ2(1回目):
・情報:「内部情報1(Thank you)」「内部情報2(なし)」「これまでに出力した文章=なし」
・出力:「You」
・更新:「内部情報2(You)」

ステップ2(2回目):
・情報:「内部情報1(Thank you)」「内部情報2(You)」「これまでに出力した文章=You」
・出力:「are」
・更新:「内部情報2(You+are)」

ステップ2(3回目):
・情報:「内部情報1(Thank you)」「内部情報2(You+are)」「これまでに出力した文章=You are」
・出力:「welcome」
・更新:「内部情報2(You+are+welcome)」

■ノイマン型コンピュータとチャットAI

このようにモデル化すると、この処理は、実はノイマン型コンピュータとなっていることが分かります。ノイマン型コンピュータとは、現在のプログラムを処理するコンピュータのモデルです。

ノイマン型コンピュータをごく簡単に説明すると、プログラムに書かれた命令を1ステップずつプログラムが終了するまで処理していく機械です。その際に、内部メモリにデータを保持することができ、そのデータを更新しながら処理をしてくことになります。

このために、構造としてはプログラムを処理するプロセッシングユニットと内部メモリを持ち、入力装置と出力装置を持ちます。プロセッシングユニットは実際のコンピュータではCPUやGPUなどに相当します。

チャットAIで言えば、「内部情報1」が、プログラムに相当し、ステップ2の処理を実行する部分がプロセッシングユニットです。通常、プログラム部分は、処理ステップを繰り返している間、不変ですので、その点で「内部情報1」はぴったりと当てはまります。

そして、内部メモリのデータに相当するのが、「内部情報2」と「これまでに出力した文章」です。「内部情報2」は同じメモリ領域のデータが更新されていくベクタ的な使われ方をし、「これまでに出力した文章」は処理の度に末尾にデータが加わっていくリスト的な使われ方をする情報です。

もちろん、チャットAIは内部をミクロ的に見れば、巨大なニューラルネットワークの並列処理を行っています。しかし、ステップ2の部分で次の文字を予測して出力する部分の繰り返しは、マクロ的に見れば、コマンドやプログラムの詳細がブラックボックスになっている、ノイマン型コンピュータの1ステップの逐次処理に該当すると考える事が出来ます。

■プログラムジェネレータ内蔵型ノイマン型コンピュータとしてのチャットAI

そして、入力された文章を変換して「内部状態1」にしている部分は、プログラムジェネレータに例えることができます。入力された文章を要求文書のようにして、プログラムとしての「内部状態1」を生成しているという捉え方です。

このように考えると、全体としてチャットAIは、プログラムジェネレータ内蔵型ノイマン型コンピュータに相当すると言えることになります。

なお、チャットAIは通常、出力する単語の選択にランダム性があります。それも、ノイマン型コンピュータが処理するコマンドの中に乱数生成ができるコマンドがあると考えれば良いでしょう。一般に、ノイマン型コンピュータは決定的な動作をすると考えられていますが、コマンドの中に乱数生成が含まれていれば、動作ごとに異なる確率的でファジーな処理を行う事も可能です。

また、通常ノイマン型コンピュータは、CPUが処理するコマンドの種類が限られており、かつ、それぞれのコマンドの動作も明確です。

しかし、ノイマン型コンピュータとしてチャットAIが処理するコマンドは、非常に複雑で、かつ、膨大な種類を持つコマンドです。

また、これらの複雑で膨大なコマンドと、そのコマンドに対応するプログラムを生成する部分は、チャットAIが膨大な文章を読んで学習する過程で、ニューラルネットワークの内部に形成されるものです。これらはニューラルネットワークの中に完全に隠れてしまっており、私たちが探し出そうとしても、ブラックボックスになっていて取り出すことはできません。

そのため、一見ノイマン型コンピュータには見えないかもしれません。しかし、入力されたプログラムに応じて内部メモリの状態を更新しながら逐次処理を行うという点で、抽象的に見ればチャットAIは完全にノイマン型コンピュータとしての本質に当てはまっているのです。

■コマンドセットとプログラムジェネレータの自動開発過程としてのチャットAIの学習

先ほどまでの話は、学習済みのチャットAIと会話を行う際の話でした。

チャットAIは、私たちと会話を行う前に、膨大な文章を読み込みながら学習を行っています。学習済みのチャットAIが、プログラムジェネレータ内蔵型ノイマン型コンピュータだとすれば、この学習過程は、コマンドセットとプログラムジェネレータの開発を行っている過程に相当します。

チャットAIはこの過程で、膨大な文章を読みながら、上手く機能するコマンドセットとプログラムジェネレータを自動的に開発していることになります。

従って、冒頭に述べたエンコーダ・デコーダやアテンションのメカニズムは、ノイマン型コンピュータのコマンドセットとプログラムジェネレータの自動開発を行うための技術だと言えます。

現在のチャットAIは、学習は事前学習した上で会話を行うという形で提供されています。将来的には、会話を行っている時に、同時に学習も行うというチャットAI技術も登場するでしょう。そうなると、コマンドセットとプログラムジェネレータの改良を動的に行うノイマン型コンピュータということになるでしょう。

■ノイマン型コンピュータとその周辺の仕組みの開発の様子

通常のノイマン型コンピュータとその周辺の仕組みは、人間が開発します。その中には、人間のエンジニアによる以下のような設計作業が含まれています。

まず、コンピュータの設計が必要です。これには、コマンドセットの論理的な設計と、プロセッシングユニットの設計が含まれます。

コマンドセットの設計は、そのコンピュータで動作させたい処理をプログラムで書くときに、プログラム内で使用することができる各種コマンドを定義する作業です。基本的には、四則演算、ループ処理や条件分岐処理、内部メモリ、データ入力、データ出力のコマンドを定義すれば、一通りのプログラムが作れるようになります。より高度なコマンドを定義すれば、プログラミングが容易になります。

プロセッシングユニットの設計は、コマンドセットに含まれる各コマンドがプログラムから与えられた際の処理を設計する作業です。

こうして設計されたコンピュータのコマンドセットを使って、要求されている処理を行うために、プログラムの設計が必要です。プログラムの設計は、コンピュータに処理させたい内容を分析する要求分析の作業と、その要求を満たすプログラムの作成を含みます。

プログラムの設計を行うためには、ソフトウェアエンジニアが必要になります。ソフトウェアエンジニアは、コンピュータのコマンドセットとその機能を学習することでプログラムの作成ができるようになります。また、要求分析スキルを習得することで、要求された内容をプログラムで処理できるものに整理することができます。

■チャットAIにおけるコンピュータとプログラムの設計

チャットAIをノイマン型コンピュータと周辺の仕組みの集合体として捉えると、以下のように考える事が出来ます。

まず、コンピュータの設計は、チャットAIの学習過程で、自動的に行われます。その設計結果は、チャットAI内部の大規模言語モデル内のパラメータ群として保持されます。この中身はブラックボックスですが、その中にコマンドセットを処理するプロセッシングユニットが含まれていることになります。

同時に、プログラムジェネレータの設計も、チャットAIの学習の過程で自動的に行われ、大規模言語モデル内のパラメータ群に保持されます。

プログラムジェネレータは、プログラムの自動設計を行う仕組みです。通常のコンピュータでは、要求分析を内包する自動プログラムジェネレータは存在しておらず、人間のソフトウェアエンジニアがその役目を担っています。つまり、プログラムジェネレータは人間のソフトウェアエンジニアが学習するプログラム作成方法と要求分析スキルを、自動的に学習している事になります。

こうしてチャットAIの学習を通して、プロセッシングユニットとプログラムジェネレータが設計されて、チャットAI内部に保持されることになります。

このチャットAIに文章を入力すると、プログラムジェネレータによりプログラムが設計され、そのプログラムがプロセッシングユニットによって逐次処理され、文章が出力されます。

■ノイマン型コンピュータとして捉えたチャットAI

チャットAIを、自然言語を処理しているという解釈でなく、独自の命令セットを持つプログラムを処理しているノイマン型コンピュータであるというマクロ的な視点から考えると、いくつかの謎に新しい視点が加わります。

まず、チャットAIは、単に自然言語を扱えるだけでなく、高度な知的能力を獲得しているという話があります。

これは、チャットAIの学習が、自然言語の処理の学習だと考えると、不思議な現象に見えます。単に言葉を覚えるための学習をしていたら、算数の計算能力を獲得したり、連鎖的に思考を行う能力を獲得するというのは直感的に良く分かりません。

しかし、チャットAIの学習を、ノイマン型コンピュータのコマンドセットとプログラムジェネレータの自動開発だと捉えると、上手く学習できれば算数の計算が出来るようになるのは当たり前に思えます。また、より高度になれば、ループ処理をしながら1つ前のループで更新した情報を利用して、思考を進めていくことができるというのも、別に不思議な話ではありません。

また、チャットAIのニューラルネットワークのサイズが大きくなると、小さいサイズでは見られなかった知的能力を獲得していくという話もあります。

これも、自然言語の学習であると考えると、単に言葉を覚えるための記憶容量や単語同士の意味の関連付けの量が増えるだけに思えますので、サイズの大きさと知的能力の獲得が上手く理解できないでしょう。

しかし、ノイマン型コンピュータのコマンドセットとプログラムジェネレータの自動開発だとすれば、CPUアーキテクチャのbit幅アップやROMサイズのアップに似た話と捉えることができるでしょう。

8bitマイコンに比べて、64bit CPUの1コマンドで出来る処理の複雑さと、それを利用したプログラムの作りのシンプルさを考えれば、後者が高度な処理に向いていることは理解できます。また、小さなROMに入れなければならない制約を持つプログラムと、大きなROMに入れられるプログラムで実現できることを比較すれば、後者が高度なことが実現できるのは当然です。

また、ニューラルネットワークのサイズアップが、今後はあまり効果が無いのではないかという議論も出ています。これも、CPUアーキテクチャのビット幅やROMサイズがある程度大きくなると、そこがさらに進化してもさほど利得が得られないことを考えれば、素直に納得ができます。

■さいごに

このように、チャットAIをマクロ的に自動設計型のノイマン型コンピュータとその周辺システムとして捉えることは、単なるアナロジーではなく、その仕組みや性質を直観的に理解する上で、とても有効だと思います。

現在は、サイズの大きなチャットAIに膨大なテキストを読ませて学習させていたら、たまたま様々な知的能力が現れてきたという事だと思います。今後は、単語や文法や自然な応答を学習させるステップと、計算や連鎖思考などの知的能力を開発する学習ステップを上手く分離して効率化することが考えられるでしょう。

後者をコマンドセットとプログラムジェネレータの自動開発という観点で研究することで、上手い学習方法の手がかりが得られるかもしれません。また、例えばサイズの小さなチャットAIであっても、効率的に知的能力を獲得させるアイデアに繋がるかもしれません。

チャットAIが自然言語を学習する過程で、知的能力を獲得するメカニズムやその学習のコツが明らかになっていけば、人間の知的能力の向上についても、有効な知見や洞察を得られる可能性があります。


サポートも大変ありがたいですし、コメントや引用、ツイッターでのリポストをいただくことでも、大変励みになります。よろしくおねがいします!