実践的なデータ分析に挑むデータサイエンティストのブログ

統計/機械学習/AWSに関する投稿をしていきます

思考するAI 〜GPTと知性のレイヤー〜

ChatGPT*1の活用例が沢山発見され、話題は尽きないでいます。ChatGPTの 受け答えがあまりにも良くできているので、論理も学習しているかのように見えます。

ですがChatGPTの文章生成の学習では、Unsupervised pre-trainingと呼ばれる、文章の次の単語を予測する学習が行われているとされており、論理処理を行うような特別な実装はされていません*2。したがって、数学の問題のような、論理的な手順を踏んで考える必要がある問題に対して論理的に回答している訳ではありません。

数学の問題に回答する例.

上図は数学の問題に回答する例です。正解はπ/4と7π/4です。象限の話の辺りから微妙に間違えています。

しかしながら、細かいところは間違うものの、式変形をして、\thetaの範囲を考えて、解を絞る、といった大まかな論理の流れは正しいと思います。このような大まかな論理処理ができているように見えるのはなぜでしょうか。

答えの一つは、学習に使用した文章が論理的な文章だからだと考えられます。学習に使用した文章は人間が論理処理をして書いた文章であり、文章の構造に論理が反映されています。そのため、ChatGPTは品詞や係り受け等の文法規則のみならず、文章に含まれる意味的な関係性も学習していると考えられます。

以上のような、大まかな論理処理に注目し、なぜこのような論理処理が出来るのかネットワークの構造から考えてみたいと思います。せっかくなので、文章生成モデルの進化を振り返りながら、ChatGPTを含むGPT(Generative Pre-trained Transformer )シリーズの最初のモデルであるGPT-1*3の構造を考察したいと思います。

素朴なマルコフモデル

ところで、本記事はAIが知性(Intelligent)を持つかという疑問がモチベーションになっています。

AIが知性を持つかを判別する一つ方法はチューリング・テスト*4です。チューリング・テストについてはwebに情報があるので読者に検索してもらうとしますが、大雑把に言えば人間の質問に対してAIに人間のふりをして回答してもらい、その回答が人間と区別がつかなければAIに知性があると判断する方法です。この方法は第三者から見てAIに知性があるかを判断します。

一方で、ジョン・サール中国語の部屋*5と呼ばれる思考実験を提示しました。

ある小部屋の中に、アルファベットしか理解できない人を閉じこめておく(例えば英国人)。この小部屋には外部と紙きれのやりとりをするための小さい穴がひとつ空いており、この穴を通して英国人に1枚の紙きれが差し入れられる。そこには彼が見たこともない文字が並んでいる。これは漢字の並びなのだが、英国人の彼にしてみれば、それは「★△◎∇☆□」といった記号の羅列にしか見えない。 彼の仕事はこの記号の列に対して、新たな記号を書き加えてから、紙きれを外に返すことである。どういう記号の列に、どういう記号を付け加えればいいのか、それは部屋の中にある1冊のマニュアルの中に全て書かれている。例えば"「★△◎∇☆□」と書かれた紙片には「■@◎∇」と書き加えてから外に出せ"などと書かれている。

彼はこの作業をただひたすら繰り返す。外から記号の羅列された紙きれを受け取り(実は部屋の外ではこの紙きれを"質問"と呼んでいる)、それに新たな記号を付け加えて外に返す(こちらの方は"回答"と呼ばれている)。すると、部屋の外にいる人間は「この小部屋の中には中国語を理解している人がいる」と考える。しかしながら、小部屋の中には英国人がいるだけである。彼は全く漢字が読めず、作業の意味を全く理解しないまま、ただマニュアルどおりの作業を繰り返しているだけである。それでも部屋の外部から見ると、中国語による対話が成立している。 引用元: Wikipedia, "中国語の部屋", (閲覧日: 2023/4/14).

今風に言えば、質問と回答のペアが無限に収録されているデータベースを用意し、AIは質問をクエリとしてデータベースを検索しているだけ、といった構造のことを指すでしょう。確かにそういったシステムは論理処理をしていないように思えます*6

中国語の部屋の指摘はもっともですが、中国語の部屋の問題を解決するにはシステムの中の構造を調べ、知性との関連性を調べないといけません。これは人間でも同じで、他人に知性があるかは脳のどの部分がどのような化学反応が起きているときに知性があると定義しないと判別できません。それ以外の知性の定義は形而上学の問題になってしまいます。その場合は、第三者から見た知性の定義、すなわちチューリング・テストによる知性の判別に頼るしかありません。

人間の脳をいじくるのは難しいですが、ITシステムで実装されるAIについては、中身を調べることができます。どのような構造があれば知性があると定義できるか考えることはできそうです。この方面の研究としては意識の情報統合理論*7というものがあるようです。ですが、本記事では現在のニューラルネットワークの構造について考察し、もう少し素朴な議論をしてみたいと思います。

AIが大まかな論理処理をしているかを調べられそうなネットワーク構造として、素朴なマルコフモデル*8が考えられます。

隠れマルコフモデル.

 \boldsymbol{s}_iは意味や文脈といった抽象的思考を表す変数で、 y_iは単語です。添字は単語の順番を表します。タイムステップとも呼びます。

このモデルでは文脈の時間発展があり、文脈から文章が生成されるといった構造になっています。このような構造であれば、文脈空間の時間発展を解析すれば、モデルが出力した文章が正しい論理展開から生成されているか確認できそうです。

言語生成モデルの発展

ここで、話を変えて、言語生成モデルの歴史的な代表例を振り返りながら、話をChatGPTへ接続することを試みます。

最も単純な文章生成モデルは次の単語を予測するだけのモデルです。

次の単語を予測するだけのモデル.

上図の見方を説明します。一番下の y_1は入力する単語です。 \boldsymbol{x}_1は埋め込み器で変換された単語のベクトル表現です。 \boldsymbol{h}_2は特徴抽出器で変換された特徴ベクトルです。一番上の y_1は予測した単語です。埋め込み器、特徴抽出器、分類器といった層を矩形で表します。

このモデルは単語を1つ入力し、次の単語を1つ予測します。これを再帰的に実行することで文章を生成することができます。上図だと文章の入力の仕方が分かりにくいので、これ以降のモデルでは次のように書くことにします。

次の単語を予測するだけのモデル.

上図の見方を説明します。一番下に並ぶ y_iは入力する文章のそれぞれの単語です。添字は単語の順番を表します。タイムステップとも呼びます。BOSは特殊な単語で、文章生成のきっかけとなる文頭を表す記号の単語です。 \boldsymbol{x}_iは埋め込み器で変換された単語のベクトル表現です。 \boldsymbol{h}_iは特徴抽出器で変換された特徴ベクトルです。一番上に並ぶ y_iは予測した単語です。埋め込み器、特徴抽出器、分類器といった層を矩形で表します。モデルが3つあるように見えますが、再帰的な入力を横に並べただけであり、同じ模様の矩形は同じものを使いまわしていると考えてください。

モデルの動作を説明します。まずBOSを入力します。するとモデルは単語 y_1を出力します。今度はこの単語 y_1をモデルに入力し、出力単語 y_2を得ます。これを繰り返して文章 y_1y_2y_3y_4\cdotsを得ます。

このモデルでは単語を1つ入力し、次の単語を1つ予測するだけなので、文脈を考慮することができません。そこで、文脈を保持できるように、過去の状態を入力するようにします。

Recurrent neural network (RNN).

上図の構造をしたモデルの総称をRecurrent neural network (RNN)*9と呼びます。単語 y_iと同時に前回の特徴ベクトル \boldsymbol{h}_iを入力することで、文脈を考慮した文章生成ができるようになります。

このモデルは最初の隠れ層の入力が0ベクトルであるため、文章の最初の単語は文脈無しで生成されます。そこで、最初の隠れ層の入力に他の文章から抽出した文脈情報を使用することで、生成する文章を制御してみます。次のようなモデルを考えます。

seq2seqモデル

プライムが付いた変数は、別の文章 y'_1y'_2y'_3y'_4\cdotsから変換した変数です。このモデルはあるシーケンスを別のシーケンスに変換しますので、総称としてseq2seq*10と呼ばれます。真ん中の縦線の左側のネットワークをエンコーダー、右側のネットワークをデコーダーと呼びます。このモデルは文章 y'_1y'_2y'_3y'_4\cdotsの文脈を踏まえた上で文章 y_1y_2y_3y_4\cdotsを生成します。言語翻訳、会話モデル、テキスト要約などのタスクに利用されます。

seq2seqの欠点として、(ネットワークの意味で)距離が離れた変数の情報が失われることがあります。例えば y_3を出力する頃には、 y'_1は特徴抽出器をたくさん通ってきており、情報が失われています。したがって、単語間の長距離依存性を考慮しにくいモデルになっています。そこで、思い切って、距離が遠い過去の情報を入力してしまいます。

Attentionが導入されたRNN.

上図ではAttention*11という層が追加されています。日本語では注意機構と訳されます。文章 y'_1y'_2y'_3y'_4\cdotsの特徴ベクトルを集約し、デコーダーの出力の処理に使用します。Attentionでは \boldsymbol{g} \boldsymbol{h}_iを用いて、単語間の相関を考慮した特徴量を出力しています。エンコーダーの情報を使いつつ、特に相関している単語の情報を抽出しているのです。

さらにAttentionをふんだんに活用したモデル、Transformer*12が生まれます。

Transformer.

Transformerでは特徴抽出にもAttentionを使用することで、単語間相関を考慮した特徴量を出力します。エンコーダーでは、文章 y'_1y'_2y'_3y'_4\cdotsの全ての単語間の相関を考慮して集約された特徴量 \boldsymbol{g}を出力します。デコーダーでも同様に文章 y_1y_2y_3y_4\cdotsから特徴を抽出していますが、因果律を守るために各単語は未来の単語の情報を使用していません。その後、エンコーダーから得られた特徴量と組み合わせて特徴量を抽出し、単語を予測しています。

知性のレイヤー

ここまで長々とモデルの構造を説明してきました。ここからは構造について考察していきます。GPT-1への接続を考えるのですが、図が複雑になるので、まずTransformerの構造を次のように略して描くことにします。

Transformerの層を除外した略図.

実はTransformerは、特徴抽出層を複数にすることができます。

N=2のTransformer.

Transformerが威力を発揮したのは、特徴抽出層をN個積み重ねることで大量データを学習させることができるようになり、飛躍的にAIの性能が向上したからです。このスケーラビリティのおかげで、Transformerの構造は様々なタスクで使用されるようになりました。

そして、GPT-1はTransformerのデコーダーを使用したモデルです。ChatGPTを含むGPTシリーズのモデルは、Transformerのデコーダーがベースとなっています。TransformerはAttentionを含んでおり、単語間の関係を学習しやすくしています。エンコーダーがないため、因果を守った単語間相関を学習をするだけのシンプルなモデルになっています。

GPT-1.

ここで、特徴抽出層をよく見てください。なんだかこれ、素朴なマルコフモデルに似ていませんか?素朴なマルコフモデルの延長にあるRNNとGPT-1を比較してみましょう。

RNNとGPT-1の比較.

上図はN=2のRNNとGPT-1のモデルです。左側がRNN、右側がGPT-1です。GPT-1は以下の点でRNNとは異なります。

  • 1層前の同じタイムステップ以前の全ての特徴を入力します。つまりn次マルコフモデルのようになっています。これにより長期的な単語間相関を考慮できます。
  • 同一層の横の入力がありません。これによって計算を並列化でき、効率の良い計算が可能になります。

しかし、タイムステップ方向に情報が流れていく点は共通しており、意味や文脈がタイムステップ方向に時系列発展し、単語が生成されるという構造になっています。むしろ時系列的に過去の情報を考慮できる点でRNNより自然かもしれません。

したがって、GPT-1の隠れ層が出力する特徴ベクトルが表す概念を解析することができれば、どのような(抽象的な)論理展開をしているか確認することができるのではないでしょうか。

GPT-1は隠れ層の部分が12層あります。このうち、単語の入力に近い浅い層は単語を文脈に変換していく層だと考えられます。一方で単語を出力する直前の深い層は文脈を単語に変換する層だと考えられます。純粋な意味の時間発展を担っているのはちょうど中間くらいの層だと考えられます。以上のように、ある種のオートエンコーダのようになっているのではないでしょうか。

GPT-1の層の役割についての予想.

ジェフ・ホーキンスの"脳は世界をどう見ているのか"によると、人間の知能は大脳の新皮質で生み出されているらしいです。そして新皮質はヒトが進化していく中で、脳の古い部位の上に新しい部位として加えられていったらしいです。新皮質が大きくなっていくと知能が高くなるというのは、まるでTransformer のデコーダーの層を増やし、入力データを大量にすることでAIの能力が飛躍的に向上することと似ていないでしょうか?人間はChatGPTほど大量の文章を学習していないかもしれませんが、代わりに視覚や聴覚、触覚など様々な情報を大量に脳に入力しているため、知性を獲得するのでしょうか?

以上、GPT-1は大まかな論理の処理を行う知性のレイヤーを持っているという仮説でした。

AIは三段論法を理解できるか

以上、GPT-1と同様の構造を持っているChatGPTが大まかな論理処理をできる可能性について考察しました。では、ニューラルネットワークを改善していけば、AIはより細かい論理処理、すなわち演繹処理をできるようになるのでしょうか。そして、演繹処理をしていることを、隠れ層の特徴ベクトル等から判別することができるのでしょうか。

ChatGPTを使って非常に面白いことをしている記事を見つけました。

qiita.com

この記事ではChatGPTに日本語で文法の定義を行うことで、自作プログラミング言語Sanaを実装しています。ChatGPTに新しい言語処理のルールを覚えさせています。

ここで、ルールを覚えさせる過程に注目します。記事中ではルールを覚えさせようとして誤った回答をした場合、それを訂正して正しい回答まで導いています。これはChatGPTの回答に対してヒントの文を追加し、回答とヒントの文を合わせた全体の単語間相関を考慮して、再回答を出力するというプロセスです。この過程は、単語間相関を巧みに使用し、出力を絞っていっているように見えます。これは回答文の単語(もしくは文脈)の出力確率を更新していくベイズ更新*13のようではないでしょうか。

演繹と確率モデル.

ChatGPTに命令文を入力すると、その入力に相関する回答文を生成します。「命令文と回答文の単語間相関が高い」ということと「命令文と回答文の矛盾が少ない」ということがほとんど同一であるとするならば、ヒントを与える過程は回答文の生成確率を更新する過程と考えられます。

以上のように考えると、ニューラルネットワークによるAIはあくまで確率処理を行うだけで、演繹処理はできないということになります。ただし、ヒントを適切に与えることで、演繹処理の回答と同じ確率分布に収束させることができる、といった感じではないでしょうか。

命令文に対して、仮説的回答を出力するという点ではアブダクション*14の変形のようなものとも考えられるかもしれません*15

ChatGPTの人間らしさ

ChatGPTはInstructGPT*16を踏襲し、Unsupervised pre-trainingの後、報酬モデルと強化学習を行っています。人間のアノテーターにモデルの回答を順位付けしてもらい、モデルを更新します。これはもはや、子供をしつけるような学習のさせ方です。

ChatGPTの学習方法*17.

以前の記事でAIの自我について書きましたが、ChatGPTが道徳的に振る舞うのは、スーパーエゴ*18を獲得したという見方も面白いかもしれません。

まとめ

  • ChatGPTの構造はn次マルコフモデルに類似した構造を持ちます。
  • ChatGPTは大まかな論理処理をしており、隠れ層の特徴ベクトルから論理展開を判別できる可能性があります。
  • 大量の文章による学習やプロンプトでヒントを追加することで、演繹処理と同じ結果を確率モデルから引き出せるのかもしれません。

*1:Introducing ChatGPT

*2:https://cdn.openai.com/research-covers/language-unsupervised/language_understanding_paper.pdf

*3:GPT (言語モデル) - Wikipedia.

*4:チューリング・テスト - Wikipedia

*5:中国語の部屋 - Wikipedia

*6:中国語の部屋に対する反論もあります。Wikipediaで確認できますので読んでみてください。

*7:意識の統合情報理論 - Wikipedia

*8:Markovモデル - 機械学習の「朱鷺の杜Wiki」

*9:回帰型ニューラルネットワーク - Wikipedia

*10:Seq2seq - Wikipedia

*11:アテンション (機械学習) - Wikipedia

*12:Transformer (機械学習モデル) - Wikipedia

*13:ベイズ更新 - Qiita

*14:アブダクション - Wikipedia

*15:推論には「分析的推論」と「拡張的推論」があるようです。分析的推論は演繹、拡張的推論は帰納アブダクションです。機械学習は学習を元に推論するのだから、帰納に分類されるような気がするものの、論理的に帰納推論するのではなく、単語の相関で確率的に推論するので、帰納とは異なるような気がします。機械学習による新しい分類の推論なのでしょうか。

*16:Aligning language models to follow instructions

*17:Introducing ChatGPT

*18:自我 - Wikipedia