見出し画像

シミュレーション型の推測:生成AIを支える技術

会話型AIや生成AIの技術が話題になっています。それは従来のソフトウェアやITシステムでは実現できなかったことが可能になっているためです。

会話型AIや生成AIの技術は、従来のソフトウェア技術とは別の観点から研究されて発展してきた技術であるため、私のように従来のソフトウェア開発に携わっているエンジニアから見ると、概要の理解が難しい面があります。特に、技術解説記事を読んでも、ソフトウェアエンジニアとして気になる点が不明瞭であることが多いと感じます。

それは、そうした技術解説記事に詳細が書かれていないためではなく、その逆です。ソフトウェアエンジニアの観点から把握したい概要部分がスキップされて、AI技術の詳細に入ってしまうため、理解が難しくなるのです。また、ソフトウェアエンジニアとしては学習済のモデルが動作するプラットフォームのアーキテクチャをしっかりと把握したいのですが、多くの解説は学習過程の説明に偏っており、その点でも理解が難しいと感じます。

この記事では、トランスフォーマーモデルについて、ソフトウェアエンジニアの観点からその動作原理を捉えなおすことを試みます。トランスフォーマーモデルはOpenAIのChatGPTにも使われている技術で、GPTのTに相当します。

この試みにより、トランスフォーマーモデルは、従来型AIのパターン認識の能力に加えて、その内部でシミュレーション型の推測を行うことができる点が特徴であることが分かります。人間も、パターン認識とシミュレーションによる推測を行っていますので、AI技術がより人間の能力に近づいている事は、この点からも理解できます。

なお、トランスフォーマーモデルはエンコーダ部とデコーダ部から構成され、入力はエンコーダ部に与えられ、デコーダ部が出力を返すという構造になっていることを示す図は、ネットで検索するとすぐに見つかると思いますので、この記事では省いています。

では、以下、詳細を見ていきましょう。

■ベクトル変換器とベクトルプロセッサ

ベクトルとは複数の数値の配列であり、配列の長さが決まっています。

トランスフォーマーモデルの学習済エンコーダは、入力ベクトルを変換し、エンコードと呼ばれる中間ベクトルを生成します。生成された中間ベクトルは、学習済デコーダへの入力として使われます。

学習済デコーダは、中間ベクトルと内部ベクトルおよび出力済ベクトルを使って、数値を出力し、内部ベクトルを更新します。出力された数値は、出力済ベクトルの末尾に追加されます。

そして、学習済デコーダは、この処理を終了条件が満たされるまで繰り返します。終了を示す値を出力するか、出力ベクトルサイズ上限まで繰り返すことが、終了条件です。

このように捉えると、トランスフォーマーモデルの学習済エンコーダはベクトル変換器であり、学習済デコーダはベクトルプロセッサと呼ぶことができます。

■ベクトル変換器とベクトルプロセッサの実装

一般的なソフトウェアはプログラミング言語で表現できる範囲で実装することになります。つまり、ソフトウェアで何か機能を実装すると表現する時、ハードウェアやプログラミング言語まで含めて実装することは意味しません。

この時、ハードウェアやプログラミング言語は、プラットフォームと呼ばれます。プラットフォームを変更することなく、その上でソフトウェアを実装するわけです。

同様に、ここでベクトル変換器とベクトルプロセッサを実装すると表現する時、あるプラットフォームの上での実装を意味します。そのプラットフォームには変更を加えることなく、プラットフォーム上で表現できる範囲で実装するという事です。

ベクトル変換器とベクトルプロセッサを実装する際のプラットフォームが、トランスフォーマーの基本アーキテクチャ部分となります。トランスフォーマーの基本アーキテクチャ部分には、特有の構造を持ったニューラルネットワークがあります。

このニューラルネットワークのパラメータベクトルが取り得る数値の組合せが、トランスフォーマーの基本アーキテクチャの表現可能な範囲という事になります。そして、このパラメータベクトルを決定することが、ベクトル変換器とベクトルプロセッサの実装に相当します。

通常、パラメータベクトルの決定は、機械学習のプロセスを経ることで行われます。学習用のデータを入力として与えて、期待する出力が出なければパラメータを調整するという事を繰り返すことが、機械学習の基本プロセスです。これにより、パラメータベクトルが決定されていきます。

■シンプルな例

ベクトル変換器とベクトルプロセッサをシンプルに把握するための例を考えてみます。

まず、極端にシンプルにするために、入力ベクトルと出力ベクトルを2つの数値の配列と考えます。また、ついでに中間ベクトルも同様に2つの数値の配列と考えます。

入力や出力のベクトルに入る数値も、シンプルに0と1のみを取る事にします。

従って、入力は4パターンのみです。入力と、それに対応する期待出力は以下のようになります。

 入力:00 期待出力:11
 入力:01 期待出力:10
 入力:10 期待出力:01
 入力:11 期待出力:00

これを学習させた時、ベクトル変換器で入力ベクトルを中間ベクトルに変換する方法と、ベクトルプロセッサによって中間ベクトルから出力を求める部分は、複数の組み合わせパターンがあり得ます。

例えば、ベクトル変換器で、入力ベクトルから期待出力と同じ中間ベクトルへ変換する処理を行うケースが考えられます。この場合、ベクトルプロセッサは、中間ベクトルを順に出力する処理を行えばよいことになります。

具体的には、ベクトル変換器が以下の変換になるように実装します。

 入力:00 中間ベクトル:11
 入力:01 中間ベクトル:10
 入力:10 中間ベクトル:01
 入力:11 中間ベクトル:00

この場合、ベクトルプロセッサは、内部ベクトルとして2つの数値を持つことにします。内部ベクトルの初期値は10とします。

ベクトルプロセッサは中間ベクトルの1桁目と内部ベクトルの1桁目を掛け算し、2桁目同士も掛け算します。そして、その合計を出力します。

かつ、内部ベクトルを、初期値の10から、01のように1を右に一桁ずらすような形で更新します。

例えば入力ベクトルとして01を与えた場合、中間ベクトルは10となります。

ベクトルプロセッサの1回目の処理時には、内部ベクトルは10です。中間ベクトル10と内部ベクトル10の1桁目を掛け算すると1となり、2桁目同士を掛け算すると0になり、合計である1を出力します。この時、内部ベクトルは先ほどの規則に従って01となります。

ベクトルプロセッサの1回目の処理時には、内部ベクトルは01です。中間ベクトル10と内部ベクトル01は、1桁目も2桁目も、掛け算すると0ですので、出力も0になります。

こうして、このベクトル変換器とベクトルプロセッサは、入力01に対して、10を出力することができます。同様に、上で挙げた入力に対して、期待出力どおりに出力することができます。

■もう一つのパターン

同じ入力と期待出力に対しするベクトル変換器とベクトルプロセッサのもう一つの分かりやすい実装パターンは、ベクトル変換器で、入力ベクトルと全く同じ中間ベクトルへ変換するパターンです。

具体的には、ベクトル変換器が以下の変換になるように実装します。

 入力:00 中間ベクトル:00
 入力:01 中間ベクトル:01
 入力:10 中間ベクトル:10
 入力:11 中間ベクトル:11

この場合、ベクトルプロセッサにはいくつかの実装方法が考えられます。

例えば、出力済ベクトル初期値を全てー1としておきます。そして、以下の規則に従って出力を決定します。

出力済みベクトルの1桁目がー1で、かつ中間ベクトルの1桁目が0なら1を出力

出力済みベクトルの1桁目がー1で、かつ中間ベクトルの1桁目が1なら0を出力

出力済みベクトルの1桁目がー1でなく、2桁目がー1で、かつ中間ベクトルの2桁目が0なら1を出力

出力済みベクトルの1桁目がー1でなく、2桁目がー1で、かつ中間ベクトルの2桁目が1なら0を出力

このベクトル変換器とベクトルプロセッサも、入力に対して、期待出力どおりの値を出力します。

■少し複雑な例

先ほどの例は、ベクトルが2つの数値配列で、かつ取り得る数値も0と1のみでしたのでシンプルでした。その上、入力に対する期待出力が、決定論的に一意に決まるという点でも、非常にシンプルでした。

こうした決定論的な入力と期待出力の組合わせだけでなく、非決定論的な組合せも、この仕組みで扱う事ができます。それは以下のようなパターンです。

 入力:00 期待出力:11(70%) 10(20%) 01(10%)
 入力:01 期待出力:10(50%) 01(50%)
 入力:11 期待出力:00(100%)

これは、入力と期待出力のベクトルのサイズや数値の中身は変わっていませんが、2つの点が先ほどの例とは異なります。

1つ目の点は、同一の入力に対して、確率的に複数の期待出力がある点です。上のサンプルでは入力が00の場合には70%の確率で11が出力され、20%の確率で10,10%の確率で01が出力されることを期待しています。これは、会話における返答の例を考えてみると良いでしょう。「こんにちは」という会話の応答に、毎回「こんにちは」と応答するわけではないでしょう。

2つ目の点は、入力のパターンが網羅されていないという点です。これは、会話を学習させるときに、全ての文字の並びを学習させるわけではない点を考えると分かりやすいと思います。「ああああ」という言葉は一般的ではありませんので、学習データとして入力されることは無いでしょう。

また、「こんにちは」や「こんばんは」という会話を学習させたとして、学習済のAIをユーザに提供すると「こんちは」とか「どうも、こんばんは」のように学習データに含まれていない言葉のパターンを使われることはあるでしょう。このように、人間が使う全ての会話パターンを予め学習させることは不可能です。

■ベクトル変換器とベクトルプロセッサの特徴

以上のようにシンプルな例で考えると、この仕組みのいくつかの特徴が浮き彫りになります。

まず簡単で分かりやすい特徴としては、それは入力に対して確率的な出力を出す能力や、学習データに含まれていない入力パターンにも、何らかの出力を出すという能力が挙げられます。

より興味深い特徴としては、パターン認識的な出力と、シミュレーション的な出力の両方に対応できる能力を持っているという点です。

シンプルな例の最初に挙げた、中間ベクトルとして期待出力と同じものに変換する例では、ベクトルプロセッサは内部ベクトルとしてカウンタを持って、そのカウンタの値を参照しながら出力をずらしていくという事を行っていました。これは、一般的なコンピュータプログラムと同じ操作です。カウンタのように内部状態を更新しながら、繰り返し処理を進めるというプロセスが実現できるという事は、シミュレーションが行えるという事を意味します。

一方で、シンプルな例の2番目に挙げた、中間ベクトルとして入力ベクトルと同じに変化するという例では、中間ベクトルと出力済みベクトルのパターンに従って、出力値を決めていました。これは、ベクトルプロセッサでパターン認識的な処理を行えることを意味します。

このシンプルな例では、シミュレーション的な処理と、パターン認識的な処理のどちらでも適切に、期待出力通りの出力ができるベクトル変換器とベクトルプロセッサを実装できました。

しかし、複雑なものになれば、シミュレーション的な処理が適切な場合と、パターン認識的な処理が向いている場合、そして、そのハイブリッド処理が求められる場合があるでしょう。

ベクトル変換器とベクトルプロセッサのベースとなっているプラットフォームは、こうした複雑な処理も可能なアーキテクチャを持っています。後は、上手くベクトル変換器とベクトルプロセッサを実装することができるかどうかという問題になります。

■高度な推論能力

トランスフォーマーの持つニューラルネットワークの構造や、アテンションメカニズムは、それに成功しているのだと思います。

適切に、シミュレーション的な処理とパターン認識的な処理を適切に使い分けたり融合させることができることで、トランスフォーマーによる会話型AIエージェントは、単に知っている知識を回答するパターン認識的な会話だけでなく、多段階の推論を行ったり、順を追って回答内容を整理したりすることができるのだと思います。

こうした回答は、パターン認識では不可能であり、内部的にシミュレーション的な処理が必要です。シミュレーションは概念の状態モデルとそれに適用されるルールを把握することと、状態モデルに繰り返しルールを適用して状態変化をさせる能力が必要です。先ほど見たように、ベクトルプロセッサ部分の繰り返し処理は、こうした能力を持っています。

後は、入力文から適切にこうしたシミュレーションをすべき部分を把握して、シミュレーションに必要な概念とルールを整理して中間ベクトルに表現することと、予め一般的な概念モデルとルール群をベクトルプロセッサ内に学習しておき、中間ベクトルと組み合わせてシミュレーションを実行することができれば良いはずです。

■シミュレーションとアテンション

このシミュレーション的な処理に、アテンションメカニズムが効果を発揮していると考えられます。

ベクトルプロセッサがシミュレーション的な処理を行う際、中間ベクトル、出力済ベクトル、内部ベクトルの中の、どの位置の数値を、出力や内部ベクトルに強く反映するべきかは変遷していきます。

これは、シンプルな例で挙げた内部ベクトルのカウンタのようなものを考えると良く理解できます。シンプルな例では、1回目の処理では中間ベクトルの1桁目の数値を直接出力に反映し、2回目の処理では2桁目の数値を直接反映しました。これは、1回目の処理と、2回目の処理で、ベクトルの中で注目すべき箇所が変化した事を意味します。

このように、状況に応じて注目すべき箇所を特定し、処理が進むに連れて変遷させていく仕組みを、アテンションメカニズムが担っていると考えられます。これにより、処理の進行と共に概念モデルの状態を変化させていくシミュレーション処理が実現できるようになります。

■推測能力

未来や未知の物事を、私たちは見聞きした情報に基づいて推測しながら活動しています。

朝起きて、家族の顔色が悪ければ、何も言われなくても体調不良を疑います。コップに牛乳を注ぐ時、どのタイミングで牛乳瓶を傾けるのをやめれば狙い通りの量を注ぐことができるかを推測しています。道を歩く時、近くにいる人や車の次の動きを推測して、自分が進むべきか止まるべきかを判断しています。

これは、状況に応じて頭の中に概念モデルを作成し、その概念モデルの状態と、そこから派生して考えられる未知の部分や未来を推測しています。

顔色が良い場合は体調は良好である場合が多く、顔色が悪ければ体調が悪い場合が多いと考えます。これはパターン認識による推測です。

牛乳を注ぐときは、コップの牛乳の量、牛乳瓶の傾きという概念モデルを頭の中に思い浮かべ、傾きが大きければコップの牛乳量が短時間で増えるというルールを適用して、頭の中でリアルタイムにシミュレーションしているはずです。このシミュレーションにより、どのタイミングで牛乳瓶の傾きをなくせば、ちょうどコップの8割程のラインで牛乳の増加が止まるかが推測できます。

道を歩く時は、周りの人や車の位置をモデル化し、進行方向に進む速度を割り出しています。この際、歩行者や車の様子からパターン認識を行います。例えば左右を見ながら歩いている人やウインカーを出している車は方向を変える可能性が高いというようなパターンがあるでしょう。

そうした、他の歩行者や車も速度や進行方向を変える可能性も加味して、幅広いケースのシミュレーションを同時並行で行っています。そして、このままの速度で自分が歩くと、他の人や車にぶつかる可能性があると推測したのなら、歩みを止めたり歩く方向を変えたりします。

このように、パターン認識やシミュレーションの能力を組み合わせて、私たちは未知や未来を推測していることになります。パターン認識やシミュレーションが行えるベクトル変換器とベクトルプロセッサは、同様に未知や未来の推測装置として機能します。

■パターン認識とシミュレーションによる推測技術

ベクトル変換器とベクトルプロセッサとしてトランスフォーマーモデルを捉えた場合、これを使って実現される会話型AIも、パターン認識やシミュレーションによる推測の能力を持っていることになります。

会話型AIの推論の能力は、このパターン認識やシミュレーションによる推測能力の表れだと考える事ができるでしょう。言葉の上での論理的な推論は、論理的なモデルに対して論理ルールを適用するシミュレーションといえるためです。また、単純で厳密な論理的推論だけでなく、言葉で表現されている現実世界の概念モデルに、現実世界のルールを適用するようなシミュレーションも行っているはずです。

この概念モデルを立ててシミュレーションできる能力があるからこそ、小説のような物語に対して的確なあらすじや登場人物の感情を分析することができます。そして、断片的な物語を与えると、その続きの物語をそれなりに生成することができるのも、物語世界のモデルを立ててシミュレーションができているからに他ならないでしょう。

この他にも、こうした会話型AIは、様々なタイプの知的作業を行う事ができます。また、トランスフォーマーモデルを基にして、会話だけでなく、絵や音楽を生成する生成AIも作られています。

トランスフォーマーモデルの特徴をベクトル変換器とベクトルプロセッサと捉えると、こうした生成AIの様々な能力は、パターン認識とシミュレーションの組合せによる推測能力の応用であると言えるでしょう。

つまり、トランスフォーマーモデルや、ベクトル変換器とベクトルプロセッサに限らず、パターン認識とシミュレーションの組合せによる高度な推測能力を持つモデルや仕組みができれば、それを応用して、現在の生成AIが持つ様々な能力を再現できるという事です。

この理解が正しければ、生成AIの技術開発は、パターン認識とシミュレーションの高度な組合せを実現できるアーキテクチャを開発することと、そのアーキテクチャ上に、高度な推測能力を実装することを意味します。

この視点からは、トランスフォーマーモデルは、パターン認識とシミュレーションの高度な組合せが実現できるアーキテクチャとなっており、さらに機械学習による高度な推測能力の自動実装を可能にした技術だと言えます。

■さいごに:推測の道具としての自然言語

生成AIやトランスフォーマーモデルやアテンションメカニズムの技術解説記事を読むと、これらの技術は、文章から次の単語を予測することや、文章中の注目すべき単語を判断しているという解説がなされていると思います。

それによって自然言語処理能力が向上することについてはある程度説明できます。しかし、それによってなぜ高度な推論能力を会話型AIが獲得できるようになったのかは、このような説明からは上手く理解することが難しいと思います。

私は、これは考え方が逆なのだと思っています。

この記事で分析したように、トランスフォーマーモデルの処理アーキテクチャは、パターン認識とシミュレーションの組合せによる高度な推測を可能にするものです。アテンションメカニズムとデコーダによる反復処理を採用したトランスフォーマーモデルは、従来のAI技術が得意としたパターン認識能力に加え、シミュレーションによる推論能力の強化を可能にしています。

つまり、トランスフォーマーモデル、突き詰めれば、そもそもAIの推論能力を高める技術なのです。

そこから考えると、会話が上達すると推論能力も高まるという理解は逆なのです。推論能力が高まった結果として、会話能力が向上したのです。

つまり自然言語処理能力は、推論能力に基づいていることになります。そして、自然言語は、コミュニケーションや情報の保存の機能以外に、推測能力を活用したり発揮するための道具としての役割を持っていることになります。

会話型AIが人間の作った大量の文章を学習する時、そこにある単語や文法や会話のパターンを学習しているだけではなく、人間の推測の仕方を学習している事になります。自然言語に、その推論の過程を表現する能力があるからこそ、人間の作った文章から、会話型AIは人間の行っている推測を真似することができるのです。


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