見出し画像

生成AIとコンピュータの処理アーキテクチャの比較

システムエンジニアリングとAI技術は、共にコンピュータサイエンスやソフトウェア技術に支えられています。しかし、両者には技術分野として微妙な隔たりがあると感じています。

システムエンジニアである私としては、会話型AIや生成AIも、一種の情報処理システムとして捉えています。このため、処理の全体像や、内部に保持されている情報の種類とその利用方法と意味をマクロ的に把握したいと考えています。

そこでこの記事では、システムエンジニアの視点から、会話型 AI チャットボットや生成 AI エージェントの処理をマクロ的に捉えることで、理解を深めていきたいと思います。

まず、情報処理システムという観点で、通常のコンピュータシステムと対比すると、現在の会話型AIや生成AIは、会話を行う際に、プログラム生成とそのプログラム実行を自動的に行っているように見えます。そして、そこで使用されるプロセッサ、プログラム言語処理系、プログラム生成器は、AIの学習時に、内部で自動生成しているように見えます。

ただし、そこで設計されるプロセッサやプログラムは、私たちが普段使っているコンピュータとは異なっています。その差異を分析していくと、柔軟で強力な処理アーキテクチャを持っていることが見えてきます。

では、以下で詳しく見ていきます。

■会話型AIの会話処理

現在の会話型AIで使われているトランスフォーマーの処理フローをマクロ的に捉えると、エンコーダ部で入力された文章をエンコードしてエンコーディングを1度生成した後、デコーダ部で1つの単語を出力するという処理を繰り返します。

デコーダ部の1回の処理ステップでは、エンコーディングと内部状態を基にして、次の単語を出力します。この際、内部状態も更新されます。

私はこのフローを、プログラムの自動生成と、そのプログラムを処理するノイマン型コンピュータとして捉えています。

私の捉え方では、エンコーダ部で行われる入力文章から生成されるエンコーディングは、デコーダ部で動作するプログラムに相当します。このため、エンコーダ部はプログラム自動生成装置と言えます。

そして、デコーダ部では、そのプログラムを処理して出力と内部状態の更新を行う、という処理ステップを繰り返します。このため、内部状態は内部メモリであり、デコーダ部はCPUやGPUのようなプロセッサと内部メモリを持った、ノイマン型コンピュータの演算部分に相当します。

■会話型AIの学習メカニズム

会話型AIは学習過程を経て、人間と会話が出来るようになります。大量のテキスト文章を読み込ませて、トランスフォーマーの仕組みによって学習が進みます。それにより、内部のニューラルネットワークのパラメータが決まっていきます。

この学習過程を私の捉え方で見ると、プログラム自動生成装置とプロセッサが、会話型AIの学習時に自動的に出来上がり、内部のニューラルネットワークのパラメータ群として保持される、ということになります。

つまり、会話型AIの学習メカニズムは、プログラム自動生成装置とプロセッサの自動設計メカニズムという事になります。

■プロンプトエンジニアリング

会話型AIを上手く使いこなすテクニックとして、プロンプトエンジニアリングという技術があります。これは会話型AIに上手く指示を与える方法や、会話型AIがより望ましい回答を生成できるように、会話型AIに考え方のアドバイスを与えるようなテクニックです。

これを、私の捉え方で考えてみると、プログラム自動生成装置に、設計情報を与える作業に似ています。実際のソフトウェア開発の時も、プログラマにプログラムの作成をお願いする時に、プログラマに処理フローを指示したり、設計の参考になる例やサンプルを提供する場合があります。

プロンプトエンジニアリングでは、使っている会話型AIの特性や癖を把握することが重要です。これは、プログラマに設計情報を与える時に、使用しているプログラミング言語やライブラリやシステム構成の特徴を把握している必要がある事に似ています。いわゆる、対象プラットフォームのアーキテクチャの知識です。

そう考えると、プロンプトエンジニアリングとは、会話型AIという対象プラットフォームのアーキテクチャを理解して、適切な設計指示を出す技術という事になります。

ただし、プロンプトエンジニアの仕事は、単なるプログラマへの指示だけではありません。なぜなら、会話型AIにおいて、プログラムは最終成果物ではなく、求めたい処理結果を得るための、中間生成物に過ぎないためです。プロンプトエンジニアは、会話型AIのプログラム生成装置に内部で生成するプログラムを上手く作らせることで、最終的な成果物を得るという作業を行っています。

■ノイマン型コンピュータとしてのデコーダ部の処理アーキテクチャ

会話型AIに使用されているトランスフォーマーのデコーダ部をノイマン型コンピュータと捉えた場合、通常のコンピュータの処理とは大きく異なる処理アーキテクチャを持っています。

通常のコンピュータは、プログラムを上から下に順に処理していくという処理アーキテクチャを持っています。そのために、現在プログラムのどの部分を処理しているかを示すプログラムカウンタという値を内部メモリに持っています。

通常、1つの処理ステップを終えるごとに、このプログラムカウンタを1つ増します。そして、次の処理ステップでは、プログラムカウンタが指し示す場所に書かれた処理を実行し、またプログラムカウンタを1つ増します。これを繰り返すことで、プログラムに書かれた処理を上から下に逐次実行していきます。

会話型AIに使用されているトランスフォーマーのデコーダ部は、このようにプログラムを上から下に処理するタイプの処理アーキテクチャではありません。

デコーダ部の1回の処理ステップでは、デコーダ部は、プログラム全体を参照しながら、ニューラルネットワーク内の全てのノードの計算処理を実施し、内部状態を更新します。なお、トランスフォーマーのデコーダ部は過去に出力した文章も参照しますが、それもここでは内部状態の一部と見なして考える事にします。

通常のプログラムであれば、1回の処理ステップではプログラムの1処理命令だけを参照しています。これに比べて、トランスフォーマーのデコード部では、毎回の処理ステップで、プログラム全体を参照します。この点が大きく異なります。

ただし、常にプログラム全体が等しく処理に影響を与えるわけではありません。処理毎に内部状態が変化することになり、その内部状態によって、プログラム全体のうち、処理に影響を強く与える部分と、あまり影響を与えない部分が変化していきます。これにより、毎回同じ処理がなされるわけではなく、処理ステップごとに異なる処理が行われることになります。

■通常のコンピュータ処理の模擬

この基本的な処理アーキテクチャを利用して、実際にどういったプログラムと内部状態が与えられたときに、プログラムのどの部分が、どのくらいそれぞれの処理結果(出力及び内部状態の更新)に影響するかは、プロセッサの設計時に決まります。つまり、会話型AIの学習時に、自動的に決まるという事です。

ここで、もしもプログラムがあるパターンを持っている時には、内部状態にカウンタのような部分を持たせて、1回の処理ステップでは、そのカウンタが示すプログラム部分のみが、処理結果に影響を及ぼし、かつ、1回の処理ステップが終わる度に、内部状態のカウンタが1増えるという形で、プロセッサが設計されたと考えてみましょう。

すると、このカウンタは、プログラムカウンタの役割を担っていることになります。従って、このようなプロセッサの設計がなされれば、会話型AIのデコーダ部は、私たちが通常知っているコンピュータと同じように、プログラムを上から下に逐次処理する仕組みを持つこととなります。

さらに、先ほどは説明を省きましたが、このプログラムカウンタを処理の途中で変更するような処理をプログラムの中に設けることで、通常のプログラムが行う条件分岐処理やループ処理も実現できます。これが実現されれば、通常のプログラムとして実現できる処理は、全て会話型AI内部のデコーダ部でも実現できることになります。

つまり、会話型AI内部のデコーダ部の処理アーキテクチャは、通常のコンピュータの処理アーキテクチャを内包していることになります。そして、デコーダ部の設計の結果によっては、通常のコンピュータの処理を完全に模擬することも可能である、と言えます。

■処理アーキテクチャとしての柔軟性

従って、デコーダ部の処理アーキテクチャは、通常のコンピュータの処理アーキテクチャと単純に別物という理解は不適切です。通常のコンピュータの処理アーキテクチャは、トランスフォーマーのデコーダ部の処理アーキテクチャの特殊な限定パターンであるという理解が、より適切でしょう。反対に言えば、通常のコンピュータの処理アーキテクチャよりも柔軟な処理アーキテクチャを、デコーダ部は持っていると言えます。

この柔軟性を利用すれば、例えば、複数のプログラムカウンタを持ち、それぞれが同時にプログラム別々の個所を指し示すようにすることで、並列処理が実現できます。

また、並列処理の影響に濃淡をつけることも可能です。メインとなる処理は強く影響を与え、サブとなる処理は控えめに処理を与えるといった具合です。処理の途中でメインとサブを入れ替えたり、影響度を滑らかに変化させたり急激に変化させることも可能です。

カウンタの進み具合を並列処理のそれぞれで変化させるといった処理も行えますし、処理の途中でカウンタの進み具合を変化させることもできるでしょう。

これらは、まるで処理を行いながら処理アーキテクチャのチューニングを行う事が出来るようなものです。現在のソフトウェアシステム技術として、ソフトウェアデファインドネットワークやシステムオーケストレーション技術のように、ソフトウェア処理でシステムインフラ構成を変更することができるものがあります。トランスフォーマーのデコーダ部は、これに似た概念として、ソフトウェアデファインド処理アーキテクチャとも呼べるような、処理アーキテクチャを柔軟に変化させることも実現できると言えるでしょう。

もちろん、これはデコーダ部の処理アーキテクチャが持ち得る能力の範囲の話であり、実際にそのような能力を駆使して処理を行うかどうかは、プロセッサの設計次第です。従って、このような処理が行われるように会話型AIを学習させることができれば、このデコーダ部の処理アーキテクチャの柔軟性を活用した、並列処理や処理中の処理アーキテクチャの調整を行うプロセッサも、原理的には作り出せるはずです。

■認知機能を活用できる強力さ

加えて、デコーダ部はニューラルネットワークで実現されていますので、複雑な情報を分類、認識、確率的を評価する能力も兼ね備えています。学習の過程で様々な分類器や認識器などが内部に形成されていれば、デコーダでの処理中に、適切な分類器や識別器を任意のタイミングで使用して、その結果を利用することも可能です。

これは、通常の分類型のAIをソフトウェアシステムの中で呼び出して使用する、というようなことを、デコーダ内部で自動的に実現できるアーキテクチャを持っているという事も意味します。

従って、単なる柔軟な並列処理コンピューティングに留まらず、ニューラルネットワークで実現される認知機能群を組み合わせて、複雑な認知システムが形成できるという強力なアーキテクチャでもあるのです。

■さいごに

会話型AIに使用されているトランスフォーマーのデコーダ部のような仕組みは、このように考えていくと、通常のコンピュータよりも、はるかに柔軟で、強力な処理アーキテクチャを持っていることが分かります。

私はシステムエンジニアであり、プログラマでもありますが、この柔軟で強力な処理アーキテクチャを使ってプログラムを書けと言われたら、困ってしまいます。柔軟で強力すぎるため、人間のエンジニアには、このアーキテクチャをどうすればうまく活用して、会話型AIが実現しているような高度な処理を設計すればよいか、皆目見当がつかないためです。

これは、例えば腕が100本あるようなロボットを操縦することを想像してもらえばわかるでしょう。いかに身体能力とロボット操縦センスに恵まれた人であっても、100本の腕を持つロボットの能力を最大限に引き出すような操作ができるとは思えません。これと同じことです。人間が操作するのに適したロボットがあるように、現在の通常のコンピュータの処理アーキテクチャは、私たち人間のエンジニアにとって、扱いやすいアーキテクチャなのです。

従って、このアーキテクチャを上手く活用するためには、AIのような機械学習による手法が有効でしょう。AIであれば腕が100本あっても、訓練を重ねればうまく使いこなしてくれるでしょう。同じように、会話型AIは、人間のエンジニアには使いこなせないほどの柔軟で強力なアーキテクチャを活用することができます。これにより、人間レベルの会話ができ、高度な連鎖推論が可能なシステムを、自動的に作り出してくれました。

このトランスフォーマーのデコーダ部の柔軟で強力なアーキテクチャが持つ潜在能力に対して、現在の会話型AIがどの程度活用できているのかは不明です。もしかしたら100本の腕のうち、10本程度しか使えておらず、トレーニング次第では残りの部分も上手く使えるようになるのかもしれません。人間も、脳の能力のほんの一部しか活用できていないという話も聞いたことがありますが、それと同じように分析できるのかもしれません。

今後、会話型AIが、人間が作ったテキストだけでなく、AI同士で生成したテキストを交換しながら強化学習を進めていけば、より深く、このアーキテクチャを活用した能力の開発がされていくのかもしれません。また、アーキテクチャ自体も進化させていく余地もあるでしょう。コンピュータハードウェアの進化に加えて、アーキテクチャや学習方法の進化により、今後ますます、AIはその能力を飛躍的に高めていくのでしょう。

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