What Is ChatGPT Doing … and Why Does It Work?

What Is ChatGPT Doing … and Why Does It Work?

ChatGPT は何をしていて、なぜ機能するのか?

一度に 1 つの単語を追加するだけです

ChatGPTが、表面的には人間が書いたテキストのように読めるものを自動的に生成できることは、驚くべきことであり、予想外です。しかし、それはどのように行うのですか?そして、なぜそれが機能するのですか?ここでの私の目的は、ChatGPT の内部で何が起こっているかについて大まかな概要を説明することです。次に、ChatGPT が意味のあるテキストと見なされるものを作成するのになぜこれほどうまく機能するのかを探ります。最初に言っておきたいのは、何が起こっているのかという全体像に焦点を当てるということです。エンジニアリングの詳細については触れますが、深くは触れません。(そして、私が言うことの本質は、ChatGPT と同様に、他の現在の「大規模言語モデル」[LLM] にも当てはまります。)

最初に説明することは、ChatGPT が常に基本的にやろうとしていることは、これまでに得たテキストの「合理的な継続」を作成することであるということです。「合理的」とは、「人々が何を見た後に誰かが書くことを期待できるか」を意味します。何十億ものウェブページなどに書いています。」

では、「 AI の最も優れた点は、その能力です」というテキストがあるとします。人間が書いた何十億ページものテキスト (たとえば Web やデジタル化された本) をスキャンし、このテキストのすべてのインスタンスを見つけて、次にどの単語がどのくらいの時間で来るかを確認することを想像してみてください。ChatGPT は効果的にこのようなことを行いますが、(後で説明するように) リテラル テキストを調べない点が異なります。ある意味で「意味が一致する」ものを探します。しかし、最終的には、「確率」とともに、後に続く可能性のある単語のランク付けされたリストが生成されます。

 

そして注目すべき点は、ChatGPT がエッセイを書くようなことをするとき、本質的には、「これまでのテキストを考えると、次の単語は何にすべきか?」と何度も何度も質問し、そのたびに単語を追加することです。(より正確には、後で説明するように、単語の一部にすぎない「トークン」を追加することです。そのため、「新しい単語を作成する」ことがあるのです。)

しかし、OK、各ステップで、確率を持つ単語のリストを取得します。しかし、実際に書いているエッセイ (またはその他のもの) に追加するには、どれを選択する必要がありますか? それは「最高ランク」の単語 (つまり、最高の「確率」が割り当てられた単語) であるべきだと思うかもしれません。しかし、ここで少しブードゥー教が入り込み始めます。なぜなら、何らかの理由で、おそらくいつの日か科学的な理解ができるようになるからです。常に最高ランクの単語を選ぶと、通常、非常に「創造性を示す」ことは決してないように見える「フラットな」エッセイです(そして時には一言一句繰り返すことさえあります)。しかし、ときどき (無作為に) ランクの低い単語を選ぶと、「より興味深い」エッセイが得られます。

ここにランダム性があるという事実は、同じプロンプトを複数回使用すると、毎回異なるエッセイを取得する可能性が高いことを意味します. そして、ブードゥー教の考えに沿って、ランクの低い単語が使用される頻度を決定する特定のいわゆる「温度」パラメーターがあり、エッセイの生成では、0.8 の「温度」が最適であることが判明しました。(ここで使用されている「理論」はないことを強調する価値があります。それは、実際に機能することがわかっていることの問題です。たとえば、「温度」の概念が存在するのは、統計物理学でおなじみの指数分布がたまたま使用されているためです。 、しかし、少なくとも私たちが知る限り、「物理的な」接続はありません.)

先に進む前に、説明のために、ChatGPT にある完全なシステムをほとんど使用しないことを説明しておく必要があります。代わりに、通常はよりシンプルなGPT-2 システムを使用します。これは、標準のデスクトップ コンピューターで実行できるほど小さいという優れた機能を備えています。したがって、基本的に私が示すすべてのものには、コンピュータですぐに実行できる明示的なWolfram 言語コードを含めることができます。(ここの画像をクリックして、背後にあるコードをコピーしてください。)

たとえば、上記の確率表を取得する方法は次のとおりです。まず、基礎となる「言語モデル」ニューラル ネットワークを取得する必要があります。

 

後で、このニューラル ネットワークの内部を見て、そのしくみについて説明します。しかし今のところ、この「ネット モデル」をブラック ボックスとしてこれまでのテキストに適用し、モデルが従うべきである確率で上位 5 語を求めることができます。

 

これはその結果を取得し、明示的にフォーマットされた「データセット」にします。

 

繰り返し「モデルを適用」すると、次のようになります。各ステップで、確率が最も高い単語を追加します (このコードでは、モデルからの「決定」として指定されています)。

 

それ以上続けるとどうなりますか?この (「ゼロ温度」) ケースでは、すぐに出てくるものはかなり混乱し、繰り返しになります。

 

しかし、常に「トップ」の単語を選択する代わりに、「トップ以外」の単語をランダムに選択するとどうなるでしょうか (「ランダム度」は「温度」0.8 に対応します)。ここでも、テキストを構築できます。

 

これを行うたびに、次の 5 つの例のように、異なるランダムな選択が行われ、テキストが異なります。

 

最初のステップでも、(温度 0.8 で) 選択できる「次の単語」がたくさんあることを指摘する価値があります。は、言語の一般統計に非常に特徴的な-1 の「べき乗則」減衰に対応します):

 

では、これ以上続けるとどうなるでしょうか。これはランダムな例です。トップワード (ゼロ温度) の場合よりは優れていますが、せいぜい少し奇妙です:

 

これは、最も単純な GPT-2 モデル(2019 年以降)で行われました。新しくて大きな GPT-3 モデルを使用すると、結果が向上します。これは、同じ「プロンプト」で生成された最上位の単語 (ゼロ温度) のテキストですが、最大の GPT-3 モデルを使用しています。

 

そして、これは「温度 0.8」でのランダムな例です。

 

確率はどこから来るのか?

OK、ChatGPT は常に確率に基づいて次の単語を選択します。しかし、これらの確率はどこから来るのでしょうか? もっと簡単な問題から始めましょう。一度に (単語ではなく) 1 文字ずつ英語のテキストを生成することを考えてみましょう。各文字の確率はどうすればよいでしょうか?

私たちができる非常に最小限のことは、英語のテキストのサンプルを取り、その中で異なる文字がどのくらいの頻度で出現するかを計算することです. したがって、たとえば、これは「猫」に関するウィキペディアの記事の文字をカウントします

 

そして、これは「犬」に対しても同じことを行います:

 

結果は似ていますが、同じではありません (「o」は、「犬」という単語自体に含まれているため、「犬」の記事で間違いなく一般的です)。それでも、十分な量の英語テキストのサンプルを取得すれば、最終的には少なくともかなり一貫した結果が得られると期待できます。

 

これらの確率で一連の文字を生成した場合に得られるもののサンプルを次に示します。

 

特定の確率で文字であるかのようにスペースを追加することで、これを「単語」に分割できます。

 

「単語の長さ」の分布を強制的に英語の分布と一致させることで、「単語」を作成する少し良い仕事をすることができます。

 

ここではたまたま「実際の言葉」を得ることができませんでしたが、結果はわずかに良くなっています。ただし、さらに先に進むには、各文字をランダムに個別に選択するだけでは不十分です。たとえば、「q」がある場合、次の文字は基本的に「u」でなければならないことがわかっています。

これは、文字自体の確率のプロットです。

 

そして、これは典型的な英語のテキストにおける文字のペア (「2-gram」) の確率を示すプロットです。考えられる最初の文字はページ全体に表示され、2 番目の文字はページの下に表示されます。

 

ここでは、たとえば、「q」列は「u」行を除いて空白 (ゼロ確率) であることがわかります。では、一度に 1 文字ずつ「単語」を生成する代わりに、これらの「2 グラム」の確率を使用して、一度に 2 文字を見て単語を生成しましょう。結果のサンプルを次に示します。たまたまいくつかの「実際の単語」が含まれています。

 

十分な量の英語のテキストがあれば、単一の文字または文字のペア (2 グラム) の確率だけでなく、文字が長く続く確率についてもかなり良い推定値を得ることができます。そして、 nグラムの確率が次第に長くなる「ランダムな単語」を生成すると、それらが次第に「より現実的」になることがわかります。

 

しかしここで、多かれ少なかれ ChatGPT と同じように、文字ではなく単語全体を扱っていると仮定しましょう。英語には約 40,000 の一般的に使用されている単語があります。また、英語のテキストの大規模なコーパス (数千億語を含む数百万冊の本など) を見ることで、各単語がどの程度一般的であるかを推定できます。そして、これを使用して、コーパスに出現するのと同じ確率で、各単語が個別にランダムに選択される「文」の生成を開始できます。以下は、得られるもののサンプルです。

 

当然のことながら、これはナンセンスです。では、どうすればもっとうまくやれるでしょうか?文字と同じように、単一の単語の確率だけでなく、単語のペアまたはより長いnグラムの確率も考慮に入れることができます。ペアでこれを行うと、「cat」という単語から始まる 5 つの例が得られます。

 

もう少し「賢明な見た目」になっています。そして、十分に長いnグラムを使用できれば、基本的に「ChatGPT を取得する」ことができると想像するかもしれません。確率」。しかし、ここに問題があります。これらの確率を推測できるように書かれた英語のテキストは、これまでほとんどありませんでした。

Web をクロールすると、数千億の単語が存在する可能性があります。デジタル化された本には、さらに 1000 億語が含まれている可能性があります。しかし、40,000 の一般的な単語があるため、可能な 2 グラムの数でさえ、すでに 16 億であり、可能な 3 グラムの数は 60 兆です。したがって、出回っているテキストからこれらすべての確率を推定することはできません。そして、20語の「エッセイの断片」にたどり着く頃には、可能性の数は宇宙の粒子の数よりも多いため、ある意味ですべてを書き留めることはできません.

では、何ができるでしょうか?大きなアイデアは、シーケンスが発生する確率を推定できるモデルを作成することです。これまでに調べたテキストのコーパスでそれらのシーケンスを明示的に見たことはありませんが. そして、ChatGPT の中核にあるのは、まさにいわゆる「大規模言語モデル」 (LLM) であり、これらの確率を適切に推定するために構築されています。

モデルとは

たとえば、1500 年代後半にガリレオが行ったように、ピサの塔の各階から落とされた砲弾が地面に落ちるまでにかかる時間を知りたいとします。まあ、それぞれのケースでそれを測定し、結果の表を作ることができます. あるいは、理論科学の本質とは何かを行うこともできます。それぞれのケースを単に測定して記憶するのではなく、答えを計算するための何らかの手順を与えるモデルを作成します。

キャノン ボールがさまざまなフロアから落下するのにかかる時間の (やや理想化された) データがあるとします。

 

明示的にデータを持っていない床から落下するのにかかる時間をどのように計算するのでしょうか? この特定のケースでは、既知の物理法則を使用して解決できます。しかし、私たちが持っているのはデータだけであり、それを支配する基礎となる法律が何であるかはわかりません. 次に、モデルとして直線を使用する必要があるように、数学的な推測を行う場合があります。

 

さまざまな直線を選択できます。しかし、これは与えられたデータに平均して最も近いものです。そして、この直線から、どの階でも落下する時間を見積もることができます。

ここで直線を使用することをどのように知ったのでしょうか? あるレベルではそうではありませんでした。それは数学的に単純なものであり、私たちが測定した多くのデータが数学的に単純なものにうまく適合することが判明したという事実に慣れています. a + x + 2など、数学的にもっと複雑なことを試すこともできますが、この場合はよりうまくいきます。

 

ただし、事態はかなり悪化する可能性があります。a + b / x + c sin( x )でできる最善のことは次のとおりです。

 

「モデルのないモデル」は存在しないことを理解する価値があります。使用するすべてのモデルには、特定の基本構造があります。次に、データに合わせて特定の一連の「回すことができるノブ」(つまり、設定できるパラメーター) があります。ChatGPT の場合、そのような「ノブ」が多数使用されており、実際には 1,750 億個に上ります。

しかし注目に値するのは、ChatGPT の基礎となる構造 (「ちょうど」多くのパラメーターを使用) が、次の単語の確率を「十分に」計算するモデルを作成するのに十分であることです。

人間のようなタスクのモデル

上記の例では、数値データのモデルを作成します。これは基本的に単純な物理学に由来します。「単純な数学が適用される」ことは何世紀にもわたって知られています。しかし、ChatGPT では、人間の脳によって生成される種類の人間の言語のテキストのモデルを作成する必要があります。そして、そのようなものについては、(少なくともまだ)「単純な数学」のようなものはありません。では、そのモデルはどのようなものでしょうか?

言語について話す前に、人間に似たもう 1 つのタスク、つまり画像の認識について話しましょう。この簡単な例として、数字の画像を考えてみましょう (もちろん、これは古典的な機械学習の例です)。

 

できることの 1 つは、各桁のサンプル画像を大量に取得することです。

 

次に、入力として与えられた画像が特定の数字に対応するかどうかを調べるために、持っているサンプルと明示的にピクセルごとに比較することができます。しかし、人間として、私たちは確かに何かより良いことをしているように見えます — たとえば手書きの数字であっても、あらゆる種類の修正や歪みがあっても数字を認識することができるからです:

 

上記の数値データのモデルを作成したとき、与えられた数値xを取得し、特定のabに対してa + bxを計算するだけで済みました。したがって、ここで各ピクセルのグレーレベル値を変数iとして扱う場合、これらのすべての変数の関数が存在し、評価されると、画像が何桁であるかがわかりますか? そのような関数を構築することが可能であることがわかりました。驚くことではありませんが、特に単純ではありません。典型的な例としては、おそらく 50 万回の数学演算が含まれる場合があります。

しかし、最終的には、画像のピクセル値のコレクションをこの関数に入力すると、画像の桁を指定する数値が出力されます。後で、そのような関数を構築する方法と、ニューラル ネットワークのアイデアについて説明します。しかし今のところ、この関数をブラック ボックスとして扱いましょう。たとえば、手書きの数字の画像を (ピクセル値の配列として) フィードし、これらに対応する数値を取得します。

 

しかし、ここで実際に何が起こっているのでしょうか? 数字を徐々にぼかすとしましょう。しばらくの間、私たちの関数はまだそれを「認識」しています。ここでは「2」です。しかし、すぐに「それを失い」、「間違った」結果を出し始めます。

 

しかし、なぜそれが「間違った」結果だと言えるのでしょうか? この場合、「2」をぼかしてすべての画像を取得したことがわかります。しかし、私たちの目標が画像を認識する際に人間ができることのモデルを作成することである場合、実際に問うべき問題は、それらのぼやけた画像の 1 つがどこから来たのかを知らずに提示された場合、人間は何をするかということです。

そして、関数から得られる結果が通常、人間が言うことと一致する場合、「良いモデル」を持っています。そして、重要な科学的事実は、このような画像認識タスクについて、これを行う関数を構築する方法を基本的に知っているということです。

それらが機能することを「数学的に証明」できますか? うーん、ダメ。そのためには、人間が何をしているかについての数学的理論が必要になるからです。「2」の画像を取り、いくつかのピクセルを変更します。ほんの数ピクセルが「場違い」であっても、画像を「2」と見なす必要があると想像するかもしれません。しかし、それはどこまで行くべきですか?それは人間の視覚の問題です。そして、はい、その答えはミツバチやタコでは間違いなく異なります。

ニューラルネット

では、画像認識などのタスクの典型的なモデルは実際にどのように機能するのでしょうか? 最も一般的で成功している現在のアプローチは、ニューラル ネットワークを使用します。今日の使用に非常に近い形で発明されたニューラル ネットワークは、 1940 年代に発明され、脳がどのように機能するかを単純に理想化したものと考えることができます。

人間の脳には約 1000 億個のニューロン (神経細胞) があり、それぞれがおそらく 1 秒間に最大で 1,000 回の電気パルスを生成することができます。ニューロンは複雑なネットワークで接続されており、各ニューロンには木のような枝があり、おそらく数千の他のニューロンに電気信号を渡すことができます. 大まかな概算として、特定のニューロンが特定の瞬間に電気パルスを生成するかどうかは、他のニューロンから受信したパルスに依存します。さまざまな接続がさまざまな「重み」に寄与しています。

私たちが「画像を見る」とき、何が起こっているかというと、画像からの光の光子が目の奥の細胞 (「光受容体」) に当たると、神経細胞で電気信号が生成されます。これらの神経細胞は他の神経細胞に接続されており、最終的に信号は一連のニューロン層全体を通過します。そして、この過程で私たちはイメージを「認識」し、最終的には「2を見ている」という「思考を形成」します(そして、最終的には「2」という言葉を大声で言うようなことをするかもしれません).

前のセクションの「ブラックボックス」関数は、そのようなニューラル ネットワークの「数学化された」バージョンです。たまたま 11 層あります (「コア層」は 4 つだけですが)。

 

このニューラル ネットワークについて特に「理論的に導き出された」ものは何もありません。それは、1998 年にエンジニアリングの一部として構築され、機能することがわかったものにすぎません。(もちろん、それは私たちの脳が生物学的進化の過程で生み出されたものであると説明する方法と大差ありません。)

わかりましたが、このようなニューラル ネットワークはどのように「物事を認識する」のでしょうか? 鍵となるのは、アトラクタの概念です。1 と 2 の手書きの画像があるとします。

 

どういうわけか、すべての 1 は「ある場所に惹かれる」ようになり、すべての 2 は「別の場所に引き寄せられる」ようになります。または、別の言い方をすれば、画像が何らかの形で 2 よりも「1 に近い」場合、最終的に「1 位」になり、その逆も同様です。

簡単な例えとして、飛行機内にドットで示された特定の位置があるとしましょう (実際の設定では、コーヒー ショップの位置である可能性があります)。次に、飛行機のどの地点から出発しても、常に最も近い点に到達したいと考えるかもしれません (つまり、常に最も近いコーヒー ショップに行きます)。これは、平面を理想的な「流域」で区切られた領域 (「アトラクター盆地」) に分割することで表すことができます。

 

これは、与えられた画像がどの数字に「最も似ている」かを特定するようなことを行うのではなく、与えられた画像のどの点がどのドットであるかを直接的に確認するような、一種の「認識タスク」を実装していると考えることができます。ポイントは最も近いです。(ここで示している「ボロノイ図」のセットアップは、2D ユークリッド空間でポイントを分離します。数字認識タスクは、非常に似たようなことを行うと考えることができますが、すべてのピクセルのグレー レベルから形成される 784 次元空間で行われます。それぞれの画像です。)

では、ニューラル ネットワークに「認識タスクを実行させる」にはどうすればよいでしょうか。この非常に単純なケースを考えてみましょう:

 

私たちの目標は、位置 { x , y } に対応する「入力」を取得し、それを 3 つのポイントのいずれか最も近いものとして「認識する」ことです。または、言い換えると、ニューラル ネットに { x , y }の関数を次のように計算させたいと考えています。

 

では、ニューラル ネットワークでこれを行うにはどうすればよいでしょうか。最終的に、ニューラル ネットワークは、理想化された「ニューロン」の接続されたコレクションであり、通常は層状に配置されます。簡単な例を次に示します。

 

各「ニューロン」は、単純な数値関数を評価するように効果的に設定されています。そして、ネットワークを「使用」するには、上部に数値 (座標xyなど) を入力し、各層のニューロンに「機能を評価」させ、ネットワークを通じて結果を転送させます。最終的に最終結果を生成します。下部に:

 

従来の (生物学に着想を得た) セットアップでは、各ニューロンは効果的に、前の層のニューロンからの特定の「着信接続」のセットを持ち、各接続には特定の「重み」 (正または負の数値) が割り当てられます。特定のニューロンの値は、「前のニューロン」の値に対応する重みを掛けてから、これらを加算して定数を加算し、最後に「しきい値」(または「活性化」) 関数を適用することによって決定されます。数学的に言えば、ニューロンに入力x = { 1 , 2 …}がある場合、 f [ wを計算します。x + b ]、ここで重みwおよび定数b は、通常、ネットワーク内のニューロンごとに異なる方法で選択されます。関数f は通常同じです。

wを計算しています。x + bは、行列の乗算と加算の問題です。「活性化関数」f は非線形性を導入します (そして最終的には非自明な動作につながります)。さまざまなアクティベーション関数が一般的に使用されます。ここでは、 Ramp (または ReLU)を使用します。

 

ニューラル ネットワークに実行させたいタスクごとに (または、評価させたい全体的な関数ごとに)、さまざまな重みの選択肢があります。(そして、後で説明するように、これらの重みは通常、必要な出力の例から機械学習を使用してニューラル ネットワークを「トレーニング」することによって決定されます。)

最終的に、すべてのニューラル ネットワークは全体的な数学的関数に対応しているだけですが、書き出すのは面倒かもしれません。上記の例では、次のようになります。

 

ChatGPT のニューラル ネットワークも、このような数学関数に対応していますが、効果的には数十億の項が含まれています。

しかし、個々のニューロンに戻りましょう。2 つの入力 (座標xyを表す) を持つニューロンがさまざまな重みと定数の選択 (および活性化関数としてのRamp )を使用して計算できる関数の例を次に示します。

 

しかし、上から見たより大きなネットワークはどうでしょうか? さて、これが計算するものです:

 

これは完全に「正しい」わけではありませんが、上で示した「最近点」関数に近いものです。

他のニューラル ネットワークで何が起こるか見てみましょう。いずれの場合も、後で説明するように、機械学習を使用して最適な重みの選択を見つけています。次に、これらの重みを持つニューラル ネットワークが何を計算するかを示します。

 

一般に、ネットワークが大きいほど、目的の関数をより適切に近似できます。そして、「各アトラクタ盆地の真ん中」では、通常、私たちが望む正確な答えが得られます. しかし、ニューラル ネットワークが「決心するのに苦労している」境界では、状況がより複雑になる可能性があります。

この単純な数学的スタイルの「認識タスク」により、何が「正しい答え」であるかが明確になります。しかし、手書きの数字を認識する問題では、それほど明確ではありません。誰かが「2」をひどく書きすぎて「7」などに見えたらどうしますか? それでも、ニューラル ネットワークが数字をどのように区別するかを尋ねることはできます。

 

ネットワークがどのように区別するかを「数学的に」言えますか? あまり。それはただ「ニューラルネットがすることをする」だけです。しかし、それは通常、私たち人間が行う区別とかなりよく一致しているように思われる.

より詳細な例を見てみましょう。猫と犬の画像があるとしましょう。そして、それらを区別するように訓練されたニューラル ネットワークがあります。いくつかの例でそれができることは次のとおりです。

 

現在、「正しい答え」が何であるかはさらに明確ではありません。猫のスーツを着た犬はどうですか?どのような入力が与えられても、ニューラル ネットワークは答えを生成します。その方法は、人間が行う方法と合理的に一致します。上で述べたように、それは「第一原理から導き出す」ことができる事実ではありません。それは、少なくとも特定の分野では、経験的に真実であることが判明したものです. しかし、ニューラル ネットワークが有用である主な理由は、「人間に似た」物事のやり方を捉えていることです。

猫の絵を自分に見せて、「なんで猫なの?」と聞いてみてください。たぶん、「まあ、とがった耳などが見えます」と言い始めるかもしれません。しかし、その画像を猫として認識した理由を説明するのは簡単ではありません。どういうわけかあなたの脳がそれを理解しただけです。しかし、脳にとって、「内部に入り」、それがどのように理解されたかを確認する方法は (少なくともまだ) ありません。(人工)ニューラルネットはどうですか?猫の写真を見せると、それぞれの「ニューロン」が何をするかは簡単にわかります。しかし、基本的なビジュアライゼーションを得ることさえ、通常は非常に困難です。

上記の「最近点」問題に使用した最終的なネットには、17 個のニューロンがあります。手書きの数字を認識するためのネットには 2190 個あります。猫と犬を認識するために使用しているネットには 60,650 個あります。通常、60,650 次元の空間を視覚化するのは非常に困難です。しかし、これは画像を処理するために設定されたネットワークであるため、ニューロンの層の多くは、見ているピクセルの配列のように、配列に編成されています。

典型的な猫の画像を例にとると

猫

次に、導出された画像のコレクションによって、最初の層のニューロンの状態を表すことができます。その多くは、「背景のない猫」または「猫の輪郭」のようなものとして簡単に解釈できます。

 

10 番目のレイヤーまでに、何が起こっているのかを解釈するのが難しくなります。

 

しかし一般的に言えば、ニューラル ネットワークは「特定の特徴を抽出」しており (尖った耳などもその中に含まれている可能性があります)、これらを使用して画像が何であるかを判断しています。しかし、それらの機能には、「とんがり耳」などの名前が付けられていますか? ほとんどありません。

私たちの脳は同様の機能を使用していますか? ほとんどの場合、私たちは知りません。しかし、ここで示したようなニューラル ネットワークの最初の数層が、画像の最初のレベルで選択されることがわかっているものと似ているように見える画像の側面 (オブジェクトのエッジなど) を選択しているように見えることは注目に値します。脳の視覚処理。

しかし、ニューラル ネットワークに「猫認識の理論」が必要だとしましょう。「見てください、この特定のネットはそれを実行します」と言うことができます。そしてすぐに、それが「どれほど困難な問題か」をある程度理解できます (たとえば、ニューロンや層がいくつ必要になるかなど)。しかし、少なくとも今のところ、ネットワークが何をしているかを「説明する」方法はありません。おそらくそれは、それが本当に計算上既約であり、各ステップを明示的にトレースする以外に、それが何をするかを見つける一般的な方法がないためです. あるいは、私たちが「科学を理解」しておらず、何が起こっているかを要約できる「自然法則」を特定していないだけかもしれません.

ChatGPT で言語を生成する場合、同じ種類の問題が発生します。繰り返しますが、「何をしているのかを要約する」方法があるかどうかは明らかではありません。しかし、言語の豊かさと詳細 (およびそれに関する私たちの経験) により、画像よりも先に進むことができる場合があります。

機械学習とニューラル ネットのトレーニング

これまで、特定のタスクの実行方法を「すでに知っている」ニューラル ネットワークについて説明してきました。しかし、ニューラル ネットワークが非常に便利な理由 (おそらく脳内でも) は、原則としてあらゆる種類のタスクを実行できるだけでなく、それらのタスクを実行するために段階的に「例から訓練」できることです。

猫と犬を区別するニューラル ネットワークを作成する場合、(たとえば) ひげを明示的に検出するプログラムを効率的に作成する必要はありません。代わりに、猫と犬の例をたくさん示して、それらを区別する方法をネットワークに「機械学習」させます。

要点は、訓練されたネットワークが、示されている特定の例から「一般化」することです。上記で見たように、ネットワークが表示された猫の画像の特定のピクセル パターンを認識するだけではありません。むしろ、ある種の「一般的な猫らしさ」と見なされるものに基づいて、ニューラル ネットワークが何らかの方法で画像を区別しているということです。

では、ニューラル ネットワーク トレーニングは実際にどのように機能するのでしょうか。基本的に、私たちが常に試みていることは、ニューラル ネットワークが与えられた例をうまく再現できるようにする重みを見つけることです。そして、これらの例を「合理的な」方法で「補間」(または「一般化」) するために、ニューラル ネットワークに依存しています。

上記の最近点の問題よりもさらに単純な問題を見てみましょう。関数を学習するためのニューラル ネットワークを取得してみましょう。

 

このタスクには、次のような 1 つの入力と 1 つの出力しか持たないネットワークが必要です。

 

しかし、どの重みなどを使用する必要がありますか? 可能なすべての重みのセットを使用して、ニューラル ネットワークは何らかの関数を計算します。たとえば、ランダムに選択された重みのセットをいくつか使用すると、次のようになります。

 

そして、はい、これらのケースのいずれにおいても、私たちが望む機能を再現することにさえ近づいていないことがはっきりとわかります. では、関数を再現する重みをどのように見つけるのでしょうか?

基本的な考え方は、多くの「入力→出力」の例を提供して「学習」し、これらの例を再現する重みを見つけようとすることです。徐々に多くの例でそれを行った結果は次のとおりです。

 

この「トレーニング」の各段階で、ネットワークの重みが徐々に調整され、最終的には、必要な機能をうまく再現するネットワークが得られることがわかります。では、重みを調整するにはどうすればよいでしょうか。基本的な考え方は、各段階で目的の関数を取得するまでの「距離」を確認し、それに近づくように重みを更新することです。

「どれだけ離れているか」を調べるために、通常「損失関数」(または「コスト関数」) と呼ばれるものを計算します。ここでは、単純な (L2) 損失関数を使用しています。これは、取得した値と真の値の差の二乗和です。そして、トレーニング プロセスが進行するにつれて、損失関数が (タスクごとに異なる特定の「学習曲線」に従って) 徐々に減少し、ネットワークが (少なくとも適切な近似値まで) 正常に再現されるポイントに到達することがわかります。必要な関数:

 

さて、説明する最後の重要な部分は、損失関数を減らすために重みを調整する方法です。すでに述べたように、損失関数は取得した値と真の値の間の「距離」を示します。しかし、「取得した値」は、ニューラル ネットワークの現在のバージョンとその重みによって各段階で決定されます。しかしここで、重みが変数であると想像してみてください。たとえばiとします。これらの変数の値を調整して、それらに依存する損失を最小限に抑える方法を見つけたいと考えています。

たとえば、(実際に使用される典型的なニューラル ネットワークを信じられないほど単純化して) 2 つの重み1 と2しかないと想像してください。次に、 w 12の関数として次のような損失が発生する可能性があります。

 

数値解析は、このような場合に最小値を見つけるためのさまざまな手法を提供します。しかし、典型的なアプローチは、私たちが持っていた以前のw 12から最も急な降下の道を徐々にたどることです:

 

山を流れ落ちる水のように、保証されているのは、この手順が表面の局所的な最小値 (「山の湖」) に到達することだけです。究極の世界的最小値に達しない可能性があります。

「ウェイト ランドスケープ」上で最も急な下り坂のパスを見つけることが実行可能かどうかは明らかではありません。しかし、微積分が助けになります。上で述べたように、ニューラル ネットワークは常に、その入力と重みに依存する数学関数を計算するものと考えることができます。しかしここで、これらの重みに関して微分することを考えてみましょう。実際、微積分の連鎖律により、ニューラル ネットワーク内の連続する層によって実行される操作を「解明」できることがわかりました。その結果、少なくとも局所的な近似では、ニューラル ネットワークの動作を「反転」させ、出力に関連する損失を最小限に抑える重みを徐々に見つけることができます。

上の図は、重みが 2 つしかない非現実的な単純なケースで実行する必要がある最小化の種類を示しています。しかし、さらに多くの重み (ChatGPT は 1750 億を使用) を使用しても、少なくともある程度の近似値までは最小化できることがわかりました。実際、2011 年頃に発生した「深層学習」の大きなブレークスルーは、関係する重みがかなり少ない場合よりも、多くの重みがある場合の方が、ある意味で (少なくとも概算で) 最小化を行う方が簡単であるという発見に関連していました。

言い換えれば、やや直感に反して、単純な問題よりも複雑な問題をニューラル ネットワークで解決する方が簡単な場合があります。そして、これの大まかな理由は、多くの「重み変数」がある場合、最小値に導くことができる「多くの異なる方向」を持つ高次元空間があり、変数が少ないと終了するのが簡単になるためです。極小値 (「山の湖」) に行き詰まり、そこから「抜け出す方向」はありません。

典型的なケースでは、多くの異なる重みのコレクションがあり、それらすべてがほとんど同じパフォーマンスを持つニューラル ネットワークを提供することを指摘する価値があります。通常、実際のニューラル ネットワーク トレーニングでは、多くのランダムな選択が行われ、次のような「異なるが同等のソリューション」につながります。

 

しかし、そのような「異なるソリューション」はそれぞれ、少なくともわずかに異なる動作をします。そして、たとえば、トレーニング例を提供した地域の外で「外挿」を求めると、劇的に異なる結果が得られます。

 

しかし、これらのうちどれが「正しい」のでしょうか? 本当に言うことはありません。それらはすべて「観測データと一致」しています。しかし、それらはすべて、「既成概念にとらわれずに」何をすべきかを「考える」さまざまな「生まれつきの」方法に対応しています。そして、私たち人間にとって、他のものよりも「より合理的」に見えるものもあるかもしれません。

ニューラルネットトレーニングの実践と伝承

特に過去 10 年間で、ニューラル ネットワークのトレーニング技術に多くの進歩がありました。そして、はい、それは基本的に芸術です。時々、特に振り返ってみると、行われていることの「科学的説明」の少なくともかすかなものを見ることができます. しかし、ほとんどのことは試行錯誤によって発見され、アイデアやトリックを追加することで、ニューラル ネットワークの操作方法に関する重要な伝承を徐々に構築してきました。

いくつかの重要な部分があります。まず、特定のタスクにどのアーキテクチャのニューラル ネットワークを使用するかという問題があります。次に、ニューラル ネットワークをトレーニングするためのデータをどのように取得するかという重大な問題があります。そして、ますますゼロからネットをトレーニングするのではなく、新しいネットにすでにトレーニング済みの別のネットを直接組み込むか、少なくともそのネットを使用してそれ自体のトレーニング例をさらに生成することができます。

特定の種類のタスクごとに、異なるアーキテクチャのニューラル ネットワークが必要になると考えた人もいるかもしれません。しかし、明らかにまったく異なるタスクに対しても、同じアーキテクチャがしばしば機能するように見えることが分かっています。あるレベルでは、これは普遍的な計算(および私の計算等価性の原則) の考え方の 1 つを思い起こさせますが、後で説明するように、私たちが通常ニューラルにしようとしているタスクが、行うネットは「人間に似た」ものであり、ニューラル ネットは非常に一般的な「人間に似たプロセス」を捉えることができます。

ニューラルネットの初期には、「ニューラルネットの機能をできるだけ少なくする」べきだという考えがありがちでした。たとえば、音声をテキストに変換するには、まず音声を分析して音素に分解する必要があると考えられていました。 「エンドツーエンドの問題」でニューラルネットを訓練しようとし、それ自体に必要な中間機能、エンコーディングなどを「発見」させます。

また、「特定のアルゴリズムのアイデアを明示的に実装する」ために、複雑な個々のコンポーネントをニューラル ネットワークに導入する必要があるという考えもありました。しかし、繰り返しになりますが、これはほとんど価値がないことが判明しました。代わりに、非常に単純なコンポーネントを処理し、(通常は理解できない方法ではありますが) 「自分自身を整理」して、それらのアルゴリズムのアイデアと同等のものを (おそらく) 達成する方がよいでしょう。

ニューラルネットに関連する「構造化のアイデア」がないと言っているわけではありません。したがって、たとえば、ローカル接続を持つニューロンの 2D 配列を持つことは、画像処理の初期段階では少なくとも非常に役立つようです。また、後で説明するように、ChatGPT などの人間の言語などを扱う際に、「順番に振り返る」ことに集中する接続パターンを持つことは有用に思えます。

しかし、ニューラル ネットワークの重要な特徴は、一般的なコンピューターと同様に、最終的にはデータを処理しているだけだということです。また、現在のニューラル ネットワーク (ニューラル ネットワークのトレーニングに対する現在のアプローチを使用) は、具体的には数値の配列を扱います。しかし、処理の過程で、これらの配列は完全に再配置され、再形成される可能性があります。例として、上記の数字を識別するために使用したネットワークは、2D の「画像のような」配列から始まり、多くのチャンネルに急速に「濃くなり」ますが、最終的に異なるものを表す要素を含む1D 配列に「集中」します。可能な出力桁:

 

しかし、OK、特定のタスクに必要なニューラル ネットワークのサイズをどのように判断できるでしょうか? それは芸術のようなものです。あるレベルでは、重要なことは「タスクがどれほど難しいか」を知ることです。しかし、通常は見積もりが非常に難しい人間のようなタスクの場合. はい、コンピューターによって非常に「機械的に」タスクを実行する体系的な方法があるかもしれません。しかし、少なくとも「人間のようなレベル」ではるかに簡単にタスクを実行できるようにするためのトリックまたはショートカットと見なされるものがあるかどうかを知ることは困難です. 特定のゲームを「機械的に」プレイするには、巨大なゲーム ツリーを列挙する必要があるかもしれません。しかし、「人間レベルのプレイ」を実現するためのもっと簡単な (「発見的」) 方法があるかもしれません。

小さなニューラル ネットワークと単純なタスクを扱っていると、「ここから先に進めない」ことが明確にわかることがあります。たとえば、いくつかの小さなニューラル ネットワークを使用して、前のセクションのタスクで実行できると思われる最善の方法を次に示します。

 

ネットが小さすぎると、必要な機能を再現できないことがわかります。しかし、ある程度以上のサイズであれば問題ありません。ところで、これらの写真はニューラル ネットワークの伝承の一部を示しています。ネットワークの中間に「スクイーズ」があり、すべてがより少数の中間ニューロンを通過することを強制する場合、より小さなネットワークで問題を解決できることがよくあります。(また、「中間層なし」、いわゆる「パーセプトロン」ネットワークは基本的に線形関数しか学習できないことにも言及する価値がありますが、中間層が 1 つでもあるとすぐに、原則として常に可能になります。少なくとも十分な数のニューロンがあれば、任意の関数を任意に近似することができますが、実行可能なトレーニングを可能にするために、通常は何らかの正則化または正規化があります。)

では、特定のニューラル ネットワーク アーキテクチャに落ち着いたとしましょう。ここで、ネットワークをトレーニングするためのデータを取得するという問題があります。また、ニューラル ネットワーク (および一般的な機械学習) に関する実際的な課題の多くは、必要なトレーニング データの取得または準備に集中しています。多くの場合 (「教師あり学習」)、入力の明示的な例と、それらから期待される出力を取得したいと考えています。したがって、たとえば、画像に含まれるものやその他の属性によってタグ付けされた画像が必要になる場合があります。そして、明示的に (通常は多大な努力を払って) タグ付けを行う必要があるかもしれません。しかし、すでに行われていることを利用したり、何らかのプロキシとして使用したりできることがよくあります。そのため、たとえば、Web 上の画像に提供されている alt タグを使用できます。または、別のドメインで、ビデオ用に作成されたクローズド キャプションを使用する場合もあります。または、言語翻訳トレーニングの場合、異なる言語で存在する Web ページまたはその他のドキュメントの並列バージョンを使用する場合があります。

特定のタスクのためにニューラル ネットワークをトレーニングするためにニューラル ネットワークを表示するには、どのくらいのデータが必要ですか? 繰り返しますが、第一原理から推定するのは困難です。確かに、「転移学習」を使用して、別のネットワークで既に学習された重要な機能のリストなどを「転移」することで、要件を劇的に減らすことができます。しかし、一般的に、ニューラル ネットワークを適切にトレーニングするには、「多くの例を見る」必要があります。そして、少なくとも一部のタスクでは、例が信じられないほど繰り返される可能性があることがニューラル ネットワークの知識の重要な部分です。実際、ニューラル ネットワークにすべての例を何度も何度も表示するのは、標準的な戦略です。これらの「トレーニング ラウンド」(または「エポック」) のそれぞれで、ニューラル ネットワークは少なくともわずかに異なる状態になります。特定の例を何らかの形で「思い出させる」ことは、「その例を思い出す」のに役立ちます。(はい、

しかし、多くの場合、同じ例を何度も繰り返すだけでは十分ではありません。例のニューラル ネットのバリエーションを示すことも必要です。そして、これらの「データ拡張」のバリエーションが有用であるために洗練されている必要がないということは、ニューラル ネットワークの伝承の特徴です。基本的な画像処理を使用して画像をわずかに変更するだけで、ニューラル ネットワーク トレーニング用に本質的に「新品同様」にすることができます。また、同様に、自動運転車のトレーニング用の実際のビデオなどが不足した場合は、実際の現実世界のシーンの詳細を一切使用せずに、ビデオゲームのようなモデル環境でシミュレーションを実行してデータを取得するだけで済みます。

ChatGPTのようなものはどうですか?それは、「教師なし学習」を実行できるという優れた機能を備えているため、トレーニング用のサンプルを簡単に取得できます。ChatGPT の基本的なタスクは、与えられたテキストをどのように継続するかを理解することであることを思い出してください。したがって、「トレーニング例」を取得するには、テキストの一部を取得し、その末尾をマスクして、これを「トレーニングするための入力」として使用するだけです。「出力」は完全なものです。マスクされていないテキスト。これについては後で詳しく説明しますが、要点は、たとえば画像の内容を学習する場合とは異なり、「明示的なタグ付け」は必要ないということです。実際、ChatGPT は、与えられたテキストの例から直接学習することができます。

では、ニューラル ネットワークでの実際の学習プロセスはどうでしょうか。最終的には、与えられたトレーニング例を最もよく捉える重みを決定することがすべてです。また、あらゆる種類の詳細な選択肢と「ハイパーパラメーター設定」 (重みが「パラメーター」と見なされるため、このように呼ばれます) があり、これをどのように行うかを微調整するために使用できます。損失関数にはさまざまな選択肢があります(二乗和、絶対値和など)。損失の最小化を行うにはさまざまな方法があります (各ステップで移動するウェイト スペースの距離など)。そして、最小化しようとしている損失の連続した見積もりを取得するために、例の「バッチ」をどのくらいの大きさにするかなどの質問があります。そしてもちろん、機械学習を適用して (たとえば Wolfram 言語で行っているように)、機械学習を自動化し、ハイパーパラメータなどを自動的に設定することもできます。

しかし最終的には、損失がどのように減少していくかを見ることで、トレーニングのプロセス全体を特徴付けることができます(このWolfram言語の小さなトレーニングの進行状況モニターのように):

 

そして、一般的に見られるのは、損失がしばらく減少することですが、最終的には一定の値で横ばいになります. その値が十分に小さい場合、トレーニングは成功したと見なすことができます。それ以外の場合は、おそらくネットワーク アーキテクチャの変更を試みる必要がある兆候です。

「学習曲線」が平らになるまでにどれくらいの時間がかかるかを知ることができますか? 他の多くのものと同様に、ニューラル ネットワークのサイズと使用するデータの量に応じて、おおよそのベキ乗スケーリング関係があるようです。しかし、一般的な結論として、ニューラル ネットワークのトレーニングは難しく、多くの計算作業が必要です。そして実際問題として、その労力の大部分は、数値の配列に対する演算に費やされます。これは、GPU が得意とすることです。これが、ニューラル ネットワークのトレーニングが通常、GPU の可用性によって制限される理由です。

将来、ニューラル ネットワークをトレーニングするための根本的に優れた方法、または一般的にニューラル ネットワークが行うことを行う方法は存在するでしょうか? ほぼ間違いないと思います。ニューラル ネットの基本的な考え方は、多数の単純な (本質的に同一の) コンポーネントから柔軟な「コンピューティング ファブリック」を作成し、この「ファブリック」を段階的に変更して例から学習できるようにすることです。現在のニューラル ネットワークでは、微積分のアイデアを基本的に使用して (実数に適用)、その増分修正を行います。しかし、数値の精度が高いことは問題ではないことがますます明らかになっています。現在の方法でも 8 ビット以下で十分かもしれません。

基本的に多くの個々のビットで並列に動作するセルオートマトンのような計算システムでは、この種の増分変更を行う方法は明確ではありませんが、それが不可能であると考える理由はありません. 実際、「2012 年の深層学習のブレークスルー」と同様に、単純なケースよりも複雑なケースの方が、このような漸進的な変更が効果的に容易になる可能性があります。

ニューラル ネットワーク (おそらく脳に少し似ている) は、本質的に固定されたニューロン ネットワークを持つように設定されており、ニューロン間の接続の強さ (「重み」) が変更されます。(おそらく、少なくとも若い脳では、かなりの数のまったく新しい接続も成長する可能性があります。)しかし、これは生物学にとって便利な設定かもしれませんが、必要な機能を達成するための最良の方法に近いかどうかはまったく明らかではありません. そして、漸進的なネットワークの書き換えに相当するもの (おそらく私たちのPhysics Projectを思い起こさせるもの) が、最終的にはより良いものになる可能性があります。

しかし、既存のニューラル ネットワークのフレームワーク内でも、現時点では重大な制限があります。現在行われているニューラル ネットワークのトレーニングは基本的にシーケンシャルであり、例の各バッチの効果が伝播されて重みが更新されます。実際、現在のコンピューター ハードウェアでは (GPU を考慮しても)、ほとんどのニューラル ネットワークはトレーニング中のほとんどの時間「アイドル状態」であり、一度に 1 つの部分だけが更新されます。ある意味では、これは現在のコンピューターが CPU (または GPU) とは別のメモリを使用する傾向があるためです。しかし、脳内ではおそらく異なります。すべての「記憶要素」(つまりニューロン) は、潜在的にアクティブな計算要素でもあります。そして、将来のコンピューター ハードウェアをこのようにセットアップできれば、トレーニングをより効率的に行うことが可能になるかもしれません。

「十分に大きなネットワークがあれば、何でもできるはずです!」

ChatGPT のようなものの機能は非常に印象的であるように思われるため、単に「継続」してより大規模なニューラル ネットワークをトレーニングできれば、最終的には「すべてを行う」ことができるようになると想像するかもしれません。そして、人間の即時の思考に容易にアクセスできるものに関心がある場合、これが事実である可能性は十分にあります. しかし、過去数百年の科学の教訓は、正式なプロセスによって把握できるものの、人間の即時の思考には容易にアクセスできないものがあるということです.

重要な数学はその大きな例です。しかし、一般的なケースは実際には計算です。そして最終的に問題となるのは、計算上の既約性という現象です。実行するには多くの手順が必要だと思われるかもしれない計算がいくつかありますが、実際には非常に即時的なものに「削減」できます。しかし、計算上の既約性の発見は、これが常に機能するとは限らないことを意味します。その代わりに、おそらく以下のようなプロセスがありますが、何が起こるかを解明するには、本質的に各計算ステップをトレースする必要があります。

 

私たちが通常脳で行っていることは、計算上の既約性を避けるために特別に選択されていると考えられます。頭の中で計算するには特別な努力が必要です。そして、自明ではないプログラムの操作手順を頭の中で「考え抜く」ことは、実際にはほとんど不可能です。

もちろん、そのためにコンピュータがあります。そして、コンピューターを使えば、計算上は簡単に還元できない、長くかかることを簡単に行うことができます。重要な点は、一般に、これらには近道がないということです。

はい、特定の計算システムで何が起こるかについて、多くの具体的な例を記憶することができます。そして、ちょっとした一般化を可能にするいくつかの (「計算で還元可能な」) パターンを見ることさえできるかもしれません。しかし重要なのは、計算上の既約性とは、予期せぬことが起こらないことを決して保証できないことを意味するということです。そして、特定のケースで実際に何が起こるかを知ることができるのは、明示的に計算を行うことだけです。

そして結局のところ、学習可能性と計算上の既約性の間には根本的な緊張関係があります。学習には、規則性を利用して事実上データを圧縮することが含まれます。しかし、計算上の既約性は、最終的には規則性に限界があることを意味します。

実際問題として、セル オートマトンやチューリング マシンなどの小さな計算デバイスを、ニューラル ネットワークのようなトレーニング可能なシステムに構築することを想像できます。実際、Wolfram|Alpha が ChatGPT の優れたツールになるように、そのようなデバイスはニューラル ネットワークの優れた「ツール」として機能します。しかし、計算の既約性は、それらのデバイスの「内部に入り」、学習させることを期待できないことを意味します。

別の言い方をすれば、能力と訓練可能性の間には究極のトレードオフがあります。システムにその計算能力を「真に活用」させようとすればするほど、計算の既約性が示され、訓練可能性が低下します。そして、基本的にトレーニング可能になればなるほど、高度な計算を行うことができなくなります。

(現在の ChatGPT の場合、状況は実際にははるかに極端です。なぜなら、出力の各トークンを生成するために使用されるニューラル ネットワークは、ループのない純粋な「フィードフォワード」ネットワークであるため、いかなる種類の処理も実行できないからです。重要な「制御フロー」による計算)。

もちろん、既約計算を実行できることが実際に重要かどうか疑問に思う人もいるかもしれません。実際、人類の歴史の大部分において、それは特に重要ではありませんでした。しかし、現代のテクノロジーの世界は、少なくとも数学的計算を利用するエンジニアリングに基づいて構築されており、ますます一般的な計算も利用されています。そして、自然界を見てみると、還元不可能な計算でいっぱいです。それをエミュレートして技術的な目的に使用する方法をゆっくりと理解しています.

はい、ニューラル ネットワークは確かに自然界の規則性の種類に気付くことができます。これは、「人の助けを借りずに考えること」でもすぐに気付く可能性があります。しかし、数理科学や計算科学の範囲内にあることを解決したい場合、ニューラル ネットワークは、「通常の」計算システムを効果的に「ツールとして使用」しない限り、それを行うことはできません。

しかし、これらすべてについて混乱を招く可能性のあるものがあります。過去には、エッセイを書くなど、コンピューターには「根本的に難しすぎる」と思われるタスクがたくさんありました。そして、ChatGPT のようなものによってそれらが行われたのを見た今、私たちは突然、コンピューターがはるかに強力になったにちがいないと考える傾向があります。 .

しかし、これは正しい結論ではありません。コンピューターが個々のステップを簡単に計算できたとしても、計算上既約プロセスは依然として計算上既約であり、コンピューターにとって依然として根本的に困難です。代わりに、エッセイを書くなど、人間にはできてもコンピューターにはできないと思っていたタスクは、ある意味で、私たちが思っていたよりも計算的に簡単であると結論付けなければなりません。

言い換えれば、エッセイを書くのにニューラル ネットワークが成功する理由は、エッセイを書くことが、私たちが考えていたよりも「計算的に浅い」問題であることが判明したからです。そしてある意味では、これは私たち人間がエッセイを書くようなことや一般的に言語を扱う方法についての「理論を持つ」ことに私たちを近づけます.

十分な大きさのニューラル ネットワークがあれば、人間がすぐにできることは何でもできるかもしれません。しかし、自然界が一般的にできること、または私たちが自然界から作り出したツールができることを捉えることはできません。そして、これらのツール (実用的および概念的) の使用により、ここ数世紀、「純粋な人間の支援なしの思考」がアクセスできるものの境界を超え、人間の目的のために、物理的および計算的でそこにあるものをより多くキャプチャすることが可能になりました。宇宙。

埋め込みの概念

ニューラル ネットは、少なくとも現在設定されているものは、基本的に数値に基づいています。したがって、それらを使用してテキストなどを処理する場合は、テキストを数値で表す方法が必要になります。そして確かに、辞書内のすべての単語に番号を割り当てるだけで (基本的に ChatGPT と同じように) 開始できます。しかし、それを超えた重要なアイデアがあります。たとえば、ChatGPT の中心的なものです。それが「埋め込み」の考え方です。埋め込みは、何かの「本質」を数値の配列で表そうとする方法と考えることができます。「近くのもの」は近くの数値で表されるという性質があります。

したがって、たとえば、単語の埋め込みは、一種の「意味空間」に単語を配置しようとすることと考えることができます。この空間では、どういうわけか「意味が近い」単語が埋め込みの近くに表示されます。ChatGPT などで使用される実際の埋め込みには、多数の数字のリストが含まれる傾向があります。しかし、2D に投影すると、埋め込みによって単語がどのように配置されるかの例を示すことができます。

 

そして、はい、私たちが見ているものは、典型的な日常の印象を捉えるのに非常にうまく機能します. しかし、どうすればそのような埋め込みを構築できるでしょうか? 大まかに言えば、大量のテキスト (ここでは Web からの 50 億語) を見て、さまざまな単語が出現する「環境」が「どの程度似ているか」を確認するという考え方です。たとえば、「ワニ」と「クロコダイル」は、他の点では類似した文章ではほとんど同じように表示されることが多く、つまり、埋め込みの近くに配置されることを意味します。しかし、「カブ」と「イーグル」は類似した文にはあまり現れないため、埋め込みでは遠く離れて配置されます。

しかし、ニューラル ネットワークを使用して実際にこのようなものを実装するにはどうすればよいでしょうか。言葉ではなく画像の埋め込みについて話すことから始めましょう。「似ていると考える画像」に同様の数字のリストが割り当てられるように、数字のリストによって画像を特徴付ける方法を見つけたいと考えています。

「画像が似ていると見なす」必要があるかどうかをどのように判断しますか? たとえば、画像が手書きの数字である場合、それらが同じ数字である場合、「2 つの画像は類似していると見なす」ことができます。以前、手書きの数字を認識するように訓練されたニューラル ネットワークについて説明しました。そして、このニューラル ネットは、最終的な出力で画像を 10 個の異なるビン (数字ごとに 1 つずつ) に配置するように設定されていると考えることができます。

しかし、最終的な「4 だ」という決定が下される前に、ニューラル ネットワーク内で何が起こっているかを「傍受」するとどうなるでしょうか。ニューラル ネットワーク内には、画像を「ほとんど 4 に似ているが、少し 2 に似ている」またはそのようなものとして特徴付ける数字があると予想できます。そのアイデアは、そのような数値をピックアップして、埋め込みの要素として使用することです。

というわけでコンセプトはこちら。「どの画像が他のどの画像に近いか」を直接特徴付けようとするのではなく、明示的なトレーニング データを取得できる明確に定義されたタスク (この場合は数字認識) を検討します。ニューラルネットは、暗黙のうちに「近さの決定」に相当するものを行う必要があります。したがって、「画像の近さ」について明示的に話す必要はなく、画像が何桁を表すかという具体的な問題について話しているだけであり、それが何を意味するかを暗黙のうちに判断するために「ニューラル ネットワークに任せる」ことになります。 「イメージの近さ」について。

では、これは数字認識ネットワークに対してどのように機能するのでしょうか? ネットワークは 11 の連続するレイヤーから構成されると考えることができます。

 

最初に、ピクセル値の 2D 配列で表される実際の画像を最初のレイヤーに入力します。そして最後に、最後のレイヤーから、10 個の値の配列を取得しています。これは、画像が 0 から 9 の各数字に対応しているというネットワークの「確実性」を示すものと考えることができます。

画像をフィードすると、最後の層のニューロンの値は次のようになります。

 

言い換えれば、この時点で、ニューラル ネットワークはこの画像が 4 であることを「信じられないほど確実」にしています。実際に出力「4」を得るには、最大値を持つニューロンの位置を選択する必要があります。

しかし、一歩前に目を向けるとどうなるでしょうか。ネットワークの最後の操作は、「確実性を強制」しようとする、いわゆるソフトマックスです。しかし、それが適用される前のニューロンの値は次のとおりです。

 

「4」を表すニューロンは、依然として最も高い数値を保持しています。しかし、他のニューロンの値にも情報があります。そして、この数字のリストは、ある意味で画像の「本質」を特徴付けるために使用できると期待できます。つまり、埋め込みとして使用できるものを提供することができます。したがって、たとえば、ここにある 4 のそれぞれには、わずかに異なる「シグネチャ」(または「機能の埋め込み」) があり、すべて 8 とは大きく異なります。

 

ここでは基本的に、画像を特徴付けるために 10 個の数字を使用しています。しかし、多くの場合、それよりもはるかに多くを使用する方が適切です。たとえば、私たちの数字認識ネットワークでは、前のレイヤーを利用することで、500 個の数字の配列を取得できます。そして、これはおそらく「画像の埋め込み」として使用するのに妥当な配列です。

手書きの数字の「画像空間」を明示的に視覚化したい場合は、取得した 500 次元のベクトルをたとえば 3D 空間に射影することにより、効果的に「次元を減らす」必要があります。

 

画像が同じ手書きの数字に対応するかどうかを (トレーニング セットに従って) 判断することにより、画像の類似性を効果的に識別することに基づいて、画像の特徴付けを作成する (したがって、埋め込む) ことについて説明しました。そして、たとえば、5000 種類の一般的なオブジェクト (猫、犬、椅子など) のどれが各画像であるかを識別するトレーニング セットがあれば、画像に対して同じことをより一般的に行うことができます。このようにして、共通オブジェクトの識別によって「固定」された画像埋め込みを作成できますが、ニューラル ネットワークの動作に従って「その周りを一般化」します。そして要点は、その振る舞いが私たち人間がイメージを知覚し解釈する方法と一致する限り、これは最終的に「私たちにとって正しいと思われる」埋め込みであり、実際には「人間の判断のような」タスクを行うのに役立つということです.

では、同じ種類のアプローチに従って、単語の埋め込みを見つけるにはどうすればよいでしょうか? 訓練しやすい単語から始めるのがポイントです。そしてその定番タスクが「単語予測」です。「___猫」が与えられたと想像してください。テキストの大規模なコーパス (たとえば、Web のテキスト コンテンツ) に基づいて、さまざまな単語が「空白を埋める」可能性はどのくらいですか? または、代わりに、「___ 黒 ___」が与えられた場合、異なる「隣接する単語」の確率はどれくらいですか?

この問題をニューラル ネットワークにどのように設定すればよいでしょうか。最終的には、すべてを数値で定式化する必要があります。これを行う 1 つの方法は、50,000 ほどの一般的な英語の単語のそれぞれに固有の番号を割り当てることです。したがって、たとえば、「the」は 914 であり、「cat」(前にスペースがある) は 3542 である可能性があります (これらは GPT-2 で使用される実際の数字です)。 、入力は {914, 3542} かもしれません。出力はどのようにする必要がありますか?それは、50,000 程度の数字のリストであり、可能な「埋め込み」単語のそれぞれの確率を効果的に与える必要があります。繰り返しになりますが、埋め込みを見つけるには、ニューラル ネットワークが「結論に達する」直前に「内部」を「インターセプト」し、そこで発生し、考えられる数のリストを取得します。 「それぞれの言葉を特徴付ける」として。

では、それらの特徴付けはどのように見えるでしょうか? 過去 10 年間に、それぞれが異なるニューラル ネットワーク アプローチに基づいて一連の異なるシステム ( word2vecGloVeBERTGPTなど) が開発されてきました。しかし最終的には、それらはすべて単語を取り、数百から数千のリストによって特徴付けられます。

生の形では、これらの「埋め込みベクトル」はまったく有益ではありません。たとえば、GPT-2 が 3 つの特定の単語の生の埋め込みベクトルとして生成するものは次のとおりです。

 

これらのベクトル間の距離を測ったりなどを行えば、言葉の「近さ」などがわかります。後ほど、そのような埋め込みの「認知的」重要性について、より詳細に説明します。しかし今のところ重要な点は、単語を「ニューラル ネットワークに適した」数値のコレクションに有効に変換する方法があるということです。

しかし実際には、数字の集合によって単語を特徴付けるだけではありません。一連の単語、または実際にはテキストのブロック全体に対してもこれを行うことができます。ChatGPT 内では、このように処理されます。これまでに取得したテキストを取得し、それを表す埋め込みベクトルを生成します。次に、その目標は、次に出現する可能性のあるさまざまな単語の確率を見つけることです。そして、これに対する答えを、基本的に 50,000 ほどの可能な単語のそれぞれの確率を示す数値のリストとして表します。

(厳密には、ChatGPT は単語ではなく、 「トークン」を扱います。これは、単語全体である場合もあれば、「pre」、「ing」、「ized」などの断片である場合もある便利な言語単位です。トークンを使用すると、作業が簡単になります。 ChatGPT が珍しい単語、複合語、英語以外の単語を処理し、場合によっては、良くも悪くも新しい単語を発明します。)

ChatGPTの内部

では、ChatGPT の内部について説明する準備が整いました。そして、最終的には、これは巨大なニューラル ネットワークです。現在は、1,750 億の重みを持つ、いわゆる GPT-3 ネットワークのバージョンです。多くの点で、これはこれまで説明してきた他のネットワークと非常によく似たニューラル ネットワークです。しかし、これは言語を扱うために特別に設定されたニューラル ネットワークです。そして、その最大の特徴は、「トランスフォーマー」と呼ばれるニューラル ネットワーク アーキテクチャの一部です。

上で説明した最初のニューラル ネットワークでは、任意の層のすべてのニューロンは基本的に、前の層のすべてのニューロンに (少なくともある程度の重みで) 接続されていました。しかし、この種の完全に接続されたネットワークは、特定の既知の構造を持つデータを扱う場合、(おそらく) やり過ぎです。したがって、たとえば、画像処理の初期段階では、いわゆる畳み込みニューラル ネットワーク(「convnet」) を使用するのが一般的です。このネットワークでは、ニューロンが画像内のピクセルに類似したグリッド上に効果的に配置され、接続されます。グリッド上の近くのニューロンにのみ。

トランスフォーマーの考え方は、テキストを構成する一連のトークンに対して、少なくともいくらか似たようなことを行うことです。しかし、トランスフォーマーは、接続可能なシーケンス内の固定領域を定義するだけでなく、代わりに「注意」の概念を導入し、シーケンスの一部の部分に他の部分よりも「注意を払う」という考えを導入します。いつの日か、一般的なニューラル ネットワークを開始し、トレーニングを通じてすべてのカスタマイズを行うことが理にかなっているかもしれません。しかし、少なくとも現時点では、トランスフォーマーがそうであるように、そしておそらく私たちの脳もそうであるように、物事を「モジュール化」することが実際には重要であるように思われます。

では、ChatGPT (または、そのベースとなっている GPT-3 ネットワーク) は実際に何をしているのでしょうか? その全体的な目標は、これまでのトレーニング (Web などから何十億ページものテキストを参照することで構成されます) から見たものに基づいて、「合理的な」方法でテキストを続けることであることを思い出してください。一定量のテキストがあり、その目標は、次に追加するトークンの適切な選択肢を見つけることです。

それは 3 つの基本的な段階で動作します。まず、これまでのテキストに対応する一連のトークンを取得し、これらを表す埋め込み (つまり、数値の配列) を見つけます。次に、この埋め込みを「標準的なニューラル ネットの方法」で操作し、値がネットワーク内の連続するレイヤーを「波及」して、新しい埋め込み (つまり、新しい数値の配列) を生成します。次に、この配列の最後の部分を取得し、そこから約 50,000 個の値の配列を生成します。この配列は、次のさまざまなトークンの可能性の確率になります。(そして、そうです、たまたま、英語の一般的な単語とほぼ同じ数のトークンが使用されていますが、トークンの約 3000 のみが完全な単語であり、残りは断片です。)

重要な点は、このパイプラインのすべての部分がニューラル ネットワークによって実装され、その重みがネットワークのエンドツーエンドのトレーニングによって決定されることです。言い換えれば、事実上、アーキテクチャ全体を除いて何も「明示的に設計」されていません。すべてがトレーニング データから「学習」されるだけです。

ただし、アーキテクチャのセットアップ方法には多くの詳細があり、あらゆる種類の経験とニューラル ネットワークの知識が反映されています。そして、これは間違いなく雑草の中に入っていますが、ChatGPT のようなものを構築するために何が必要なのかを理解するために、これらの詳細のいくつかについて話すことは有益だと思います.

まず、埋め込みモジュールです。GPT-2のWolfram言語での概略表現は次のとおりです:

 

入力はn個のトークンのベクトルです(前のセクションのように、1 から約 50,000 までの整数で表されます)。これらのトークンはそれぞれ (単層ニューラル ネットによって) 埋め込みベクトル (GPT-2 では長さ 768、ChatGPT の GPT-3 では長さ 12,288) に変換されます。一方、トークンの(整数) 位置のシーケンスを取得し、これらの整数から別の埋め込みベクトルを作成する「二次経路」があります。最後に、トークン値とトークン位置からの埋め込みベクトルが加算され、埋め込みモジュールからの埋め込みベクトルの最終的なシーケンスが生成されます。

トークン値とトークン位置の埋め込みベクトルを一緒に追加するのはなぜですか? これには特別な科学はないと思います。ただ、色々と試してみた結果、これが効きそうです。そして、それはニューラル ネットワークの伝承の一部であり、ある意味では、セットアップが「おおむね正しい」ものである限り、通常、十分なトレーニングを行うだけで詳細に到達することが可能であり、実際に「理解する」必要はありません。エンジニアリング レベル」で、ニューラル ネットワークが最終的にどのように構成されたかを説明します。

文字列hello hello hello hello hello hello hello hello hello hello bye bye bye bye bye bye bye bye bye bye bye を操作して、埋め込みモジュールが行うことは次のとおりです。

 

各トークンの埋め込みベクトルの要素がページの下に表示され、ページ全体に、最初に「 hello 」埋め込みの実行が表示され、その後に「 bye」埋め込みの実行が続きます。上記の 2 番目の配列は位置埋め込みです。ややランダムに見える構造は、まさに「たまたま学習された」ものです (この場合は GPT-2)。

埋め込みモジュールの後に、トランスフォーマーの「メイン イベント」が続きます。いわゆる「アテンション ブロック」のシーケンスです (GPT-2 の場合は 12、ChatGPT の GPT-3 の場合は 96)。それはすべて非常に複雑で、典型的な大規模で理解しにくい工学システム、さらに言えば生物学的システムを連想させます。とにかく、これは単一の「注意ブロック」(GPT-2の場合)の概略図です。

 

このような各アテンション ブロック内には、「アテンション ヘッド」のコレクション (GPT-2 の場合は 12、ChatGPT の GPT-3 の場合は 96) があり、それぞれが埋め込みベクトル内の値の異なるチャンクに対して独立して動作します。(そして、はい、埋め込みベクトルを分割することがなぜ良い考えなのか、またはそのさまざまな部分が何を意味するのか、特定の理由はわかりません。これは、「機能することがわかっている」ことの 1 つにすぎません。 .)

では、アテンション ヘッドは何をするのでしょうか。基本的に、それらは一連のトークン (つまり、これまでに生成されたテキスト) を “振り返る” 方法であり、次のトークンを見つけるのに役立つ形式で “過去をパッケージ化” する方法です。上記の最初のセクションでは、直前の単語に基づいて単語を選択するために 2 グラムの確率を使用することについて説明しました。トランスフォーマーの「注意」メカニズムは、はるかに前の単語にさえ「注意」できるようにすることです。つまり、たとえば、動詞が、文内でそれらの単語よりも前にある名詞を参照できる方法を捉えることができます。

より詳細なレベルでは、アテンション ヘッドが行うことは、さまざまなトークンに関連付けられた埋め込みベクトル内のチャンクを特定の重みで再結合することです。したがって、たとえば、最初のアテンション ブロック (GPT-2) の 12 個のアテンション ヘッドには、次のようなものがあります (「look-back-all-the-way-to-beginning-of-the-sequence-of–上記の「 hellobye 」文字列の「再結合重み」のパターン:

 

アテンション ヘッドによって処理された後、結果として得られる「再重み付けされた埋め込みベクトル」(GPT-2 では長さ 768、ChatGPT の GPT-3 では長さ 12,288) は、標準の「完全に接続された」ニューラル ネット レイヤーを通過します。このレイヤーが何をしているかを把握するのは困難です。しかし、これが使用している重みの 768×768 行列のプロットです (GPT-2 の場合):

 

64×64 の移動平均を取ると、いくつかの (ランダム ウォークっぽい) 構造が現れ始めます。

 

この構造を決定するものは何ですか?最終的には、人間の言語の機能の「ニューラル ネット エンコーディング」であると考えられます。しかし、現時点では、それらの機能が何であるかはまったく不明です. 事実上、私たちは「ChatGPT (または少なくとも GPT-2) の頭脳を開き」、そうです、そこは複雑であり、最終的に認識可能な人間の言語を生成しているにもかかわらず、それを理解していないことを発見しています。 .

OK、1 つのアテンション ブロックを通過した後、新しい埋め込みベクトルを取得しました。これは、追加のアテンション ブロック (GPT-2 の場合は合計 12、GPT-3 の場合は 96) を連続して通過します。各注意ブロックには、「注意」と「完全に接続された」重みの独自の特定のパターンがあります。GPT-2 の最初のアテンション ヘッドの「こんにちは、バイ」入力の一連のアテンション ウェイトは次のとおりです。

 

全結合層の (移動平均) 「行列」は次のとおりです。

 

興味深いことに、異なるアテンション ブロックのこれらの「重みの行列」は非常によく似ていますが、重みのサイズの分布は多少異なる場合があります (常にガウス分布であるとは限りません)。

 

これらすべての注意ブロックを通過した後、トランスフォーマーの正味の効果は何ですか? 本質的には、一連のトークンの埋め込みの元のコレクションを最終的なコレクションに変換することです。そして、ChatGPT が機能する特定の方法は、このコレクションの最後の埋め込みを取得し、それを「デコード」して、次に来るトークンの確率のリストを作成することです。

以上がChatGPTの中身の概要です。複雑に見えるかもしれませんが (特に、多くの必然的に恣意的な「エンジニアリング上の選択」があるため)、実際に含まれる最終的な要素は非常に単純です。最終的に私たちが扱っているのは、「人工ニューロン」でできた単なるニューラル ネットワークであり、それぞれが数値入力のコレクションを取得し、それらを特定の重みと組み合わせるという単純な操作を行うからです。

ChatGPT への元の入力は数値の配列 (これまでのトークンの埋め込みベクトル) であり、ChatGPT が新しいトークンを生成するために「実行」するときに何が起こるかは、これらの数値がニューラル ネットワークのレイヤーを「波及」することだけです。各ニューロンが「その役割を果たし」、結果を次の層のニューロンに渡します。ループや「戻る」ことはありません。すべてがネットワークを介して「フィードフォワード」されます。

これは、同じ計算要素によって結果が繰り返し「再処理」される、チューリング マシンのような典型的な計算システムとは非常に異なる設定です。ここでは、少なくとも出力の特定のトークンを生成する際に、各計算要素 (つまりニューロン) は 1 回だけ使用されます。

しかし、ChatGPT にも計算要素を再利用する「外側のループ」がある意味ではまだ存在します。ChatGPT が新しいトークンを生成しようとするとき、ChatGPT 自体が以前に「書き込んだ」トークンを含め、その前にあるトークンのシーケンス全体を常に「読み取る」(つまり、入力として受け取る) ためです。そして、このセットアップは、ChatGPT が、少なくともその最も外側のレベルで、「フィードバック ループ」を含むことを意味していると考えることができます。

しかし、ChatGPT の核心に戻りましょう: 各トークンを生成するために繰り返し使用されているニューラル ネットワークです。あるレベルでは非常に単純です: 同一の人工ニューロンのコレクション全体です。そして、ネットワークの一部は、特定の層のすべてのニューロンが前の層のすべてのニューロンに (ある程度の重みで) 接続されている ( 「完全に接続された」) ニューロンの層で構成されているだけです。しかし、特にそのトランスフォーマー アーキテクチャでは、ChatGPT にはより多くの構造を持つ部分があり、異なるレイヤーの特定のニューロンのみが接続されています。(もちろん、「すべてのニューロンが接続されている」と言うことができますが、重みがゼロのニューロンもあります。)

さらに、ChatGPT のニューラル ネットワークには、単に「均質な」レイヤーで構成されていると最も自然に考えられない側面があります。そして、たとえば、上記の象徴的な要約が示すように、注意ブロック内には、受信データの「複数のコピーが作成される」場所があり、それぞれが異なる「処理パス」を通過し、異なる数のレイヤーを含む可能性があります。後で再結合します。しかし、これは何が起こっているかの便利な表現かもしれませんが、少なくとも原則として、レイヤーを「密に埋める」ことは常に可能ですが、一部の重みをゼロにするだけです。

ChatGPT を介した最長パスを見ると、約 400 の (コア) レイヤーが関与していますが、ある意味では膨大な数ではありません。しかし、何百万ものニューロンがあり、合計で 1,750 億の接続があるため、1,750 億の重みがあります。そして、理解しておくべきことの 1 つは、ChatGPT が新しいトークンを生成するたびに、これらの重みのすべてを含む計算を行う必要があるということです。実装上、これらの計算は、GPU で便利に実行できる高度に並列な配列操作に「レイヤーごと」にある程度整理できます。しかし、生成されるトークンごとに、まだ 1,750 億回の計算を行う必要があります (そして、最終的にはもう少し多くの計算を行う必要があります)。そのため、ChatGPT で長いテキストを生成するのに時間がかかることは驚くに値しません。

しかし、最終的に注目すべきことは、これらすべての操作 (個々の操作は単純ですが) が何らかの形で連携して、テキストを生成するという優れた「人間らしい」仕事を行うことができるということです。(少なくとも私たちが知る限り) このようなものが機能する「究極の理論的理由」は存在しないことを再度強調しておく必要があります。そして実際、これから説明するように、これは科学的発見であると見なす必要があると思います。ChatGPT のようなニューラル ネットワークでは、人間の脳が言語を生成するために行っていることの本質を捉えることができるということです。 .

ChatGPTのトレーニング

では、セットアップ後の ChatGPT の動作の概要を説明しました。しかし、それはどのように設定されたのですか?そのニューラル ネットワークの 1,750 億の重みはどのように決定されたのでしょうか? 基本的に、これらは、人間が作成した Web や書籍などの膨大なテキスト コーパスに基づく、非常に大規模なトレーニングの結果です。前述したように、すべてのトレーニング データが与えられたとしても、ニューラル ネットワークが「人間のような」テキストをうまく生成できるかどうかは明らかではありません。そして、繰り返しになりますが、それを実現するには詳細なエンジニアリングが必要なようです. しかし、ChatGPT の大きな驚き (そして発見) は、それがまったく可能であるということです。そして、事実上、「ちょうど」1,750 億の重みを持つニューラル ネットワークは、人間が書くテキストの「合理的なモデル」を作成できます。

現代では、人間が書いた多くのテキストがデジタル形式で出回っています。公共の Web には、少なくとも数十億の人間が書いたページがあり、全体でおそらく 1 兆語のテキストがあります。また、非公開の Web ページを含めると、その数は少なくとも 100 倍になる可能性があります。これまでに 500 万冊以上のデジタル化された書籍が利用可能になり (これまでに出版された約 1 億冊のうち)、さらに 1,000 億語程度のテキストが提供されています。そして、それはビデオなどのスピーチから派生したテキストについても言及していませ.約 1,500 万語の電子メールで、おそらく 5,000 万語を入力しました。ここ 2 年ほどで、私はライブ ストリームで 1,000 万語以上話しました。そして、はい、そのすべてからボットをトレーニングします。)

しかし、OK、このすべてのデータが与えられた場合、それからニューラル ネットワークをどのようにトレーニングするのでしょうか? 基本的なプロセスは、上記の簡単な例で説明したとおりです。例のバッチを提示し、ネットワークの重みを調整して、ネットワークがそれらの例に対して行うエラー (「損失」) を最小限に抑えます。エラーからの「逆伝播」でコストがかかる主な点は、これを行うたびに、通常、ネットワーク内のすべての重みが少なくともわずかに変化し、処理する重みがたくさんあるということです。(実際の「バック計算」は、通常、フォワード計算よりも小さな一定係数だけ難しいです。)

最新の GPU ハードウェアを使用すると、何千ものサンプルのバッチから並列に結果を簡単に計算できます。しかし、実際にニューラル ネットの重みを更新する場合、現在の方法では基本的にバッチごとにこれを行う必要があります。(そして、はい、これはおそらく、計算と記憶の要素を組み合わせた実際の脳が、今のところ少なくともアーキテクチャ上の利点を持っている場所です。)

先ほど説明した数値関数を学習する一見単純なケースでも、ネットワークを正常にトレーニングするには、何百万もの例を使用しなければならないことがよくありました。少なくとも最初からです。これは、「人間に似た言語」モデルをトレーニングするために、いくつの例が必要になることを意味するのでしょうか? 知るための基本的な「理論的」方法はないようです。しかし実際には、ChatGPT は数千億語のテキストでうまく訓練されました。

いくつかのテキストは複数回フィードされ、一部は一度だけフィードされました。しかし、どういうわけか、見たテキストから「必要なものを取得」しました。しかし、このように学習するテキストの量を考えると、「よく学習する」ためにはどのくらいのネット​​ワークが必要になるのでしょうか? 繰り返しますが、基本的な理論的方法はまだありません。最終的には、以下でさらに議論するように、人間の言語と、人間が通常それを使って発するものには、特定の「総アルゴリズム コンテンツ」が存在すると考えられます。しかし、次の問題は、そのアルゴリズムの内容に基づいてモデルを実装する際に、ニューラル ネットワークがどれほど効率的かということです。繰り返しになりますが、ChatGPT の成功はかなり効率的であることを示唆していますが。

そして最後に、ChatGPT は、与えられたトレーニング データの単語 (またはトークン) の総数に匹敵する数千億の重みを使用して、それが行うことを行うことに注意してください。うまく機能しているように見える「ネットワークのサイズ」が「トレーニング データのサイズ」に非常に匹敵することは、いくつかの点でおそらく驚くべきことです (ただし、ChatGPT のより小さなアナログでも経験的に観察されています)。結局のところ、Web や書籍などからのすべてのテキストが「ChatGPT の内部」に「直接保存」されているわけではありません。ChatGPT の内部に実際にあるのは、10 桁未満の精度の数字の集まりであり、すべてのテキストの集合構造のある種の分散エンコーディングです。

別の言い方をすれば、人間の言語の「効果的な情報内容」とは何か、そしてそれを使って一般的に何を言っているのかを尋ねるかもしれません。言語の例の生のコーパスがあります。そして、ChatGPT のニューラル ネットワークでの表現があります。その表現は、「アルゴリズム的に最小限の」表現とはかけ離れている可能性が非常に高いです (以下で説明します)。しかし、これはニューラル ネットワークですぐに使用できる表現です。そして、この表現では、最終的にトレーニング データの「圧縮」がほとんどないように見えます。平均して、トレーニング データの単語の「情報コンテンツ」を運ぶのに、基本的に 1 ニューラル ネット ウェイトより少し少ない量しか必要ないように思われます。

ChatGPT を実行してテキストを生成する場合、基本的に各重みを 1 回使用する必要があります。したがって、 n個の重みがある場合、 n 次の計算ステップを実行する必要がありますが、実際には、それらの多くは通常、GPU で並列に実行できます。しかし、これらの重みを設定するために約nワードのトレーニング データが必要な場合、上で述べたことから、ネットワークのトレーニングを行うには約2 の計算ステップが必要であると結論付けることができます。現在の方法では、10 億ドル規模のトレーニングの取り組みについて話す必要があります。

基礎トレーニングを超えて

ChatGPT のトレーニングの労力の大部分は、Web や本などから大量の既存のテキストを「表示」することに費やされます。

表示された元のテキスト コーパスからの「生のトレーニング」が完了するとすぐに、ChatGPT 内のニューラル ネットワークは、プロンプトなどから継続して、独自のテキストの生成を開始する準備が整います。 、特に長いテキストの場合、人間らしくない方法で「さまよう」傾向があります。これは、たとえば、従来の統計をテキストに対して行うことによって容易に検出できるものではありません。しかし、それはテキストを読んでいる実際の人間が簡単に気付くものです。

そして、ChatGPT の構築における重要なアイデアは、Web のようなものを「受動的に読む」後に別のステップを設けることでした: 実際の人間に ChatGPT と積極的に対話させ、それが生成するものを確認し、実際に「どうすればよいか」についてフィードバックを与えることです。良いチャットボット」。しかし、ニューラル ネットワークはそのフィードバックをどのように利用できるのでしょうか? 最初のステップは、人間がニューラル ネットワークからの結果を評価することです。しかしその後、それらの評価を予測しようとする別のニューラル ネットワーク モデルが構築されます。しかし今では、この予測モデルを元のネットワーク上で (基本的には損失関数のように) 実行できるため、与えられた人間のフィードバックによってそのネットワークを「調整」することができます。実際の結果は、システムが「人間のような」出力を生成する成功に大きな影響を与えるようです。

一般に、「最初に訓練された」ネットワークを特定の方向に有効に進めるために必要な「突っ込む」ことがいかに少ないかは興味深いことです。ネットワークを「何か新しいことを学んだ」かのように動作させるには、トレーニング アルゴリズムを実行し、重みを調整するなどの作業が必要になると考えた人もいるかもしれません。

しかし、そうではありません。代わりに、基本的に ChatGPT に何かを 1 回 (プロンプトの一部として) 伝えるだけで十分であるように思われます。繰り返しになりますが、これが機能するという事実は、ChatGPT が「実際に行っていること」と、それが人間の言語と思考の構造にどのように関係しているかを理解する上で重要な手がかりになると思います。

それには確かにかなり人間的なものがあります: 少なくとも事前トレーニングがすべて行われていれば、一度だけ何かを伝えることができ、それを使用してテキストを生成するのに少なくとも「十分に長く」「覚えている」ことができます。 . では、このようなケースでは何が起こっているのでしょうか? 「あなたが言うかもしれないことはすべてどこかにすでにある」のかもしれません – そしてあなたはそれを正しい場所に導いているだけです。しかし、それはもっともらしいとは思えません。代わりに、そうです、要素はすでにそこにありますが、詳細は「それらの要素間の軌跡」のようなものによって定義されており、それがあなたが何かを伝えるときに導入しているものです.

実際、人間と同じように、自分の知っている枠組みに完全に収まらない奇妙で予想外のことを伝えた場合、それをうまく「統合」することはできそうにありません。基本的に、すでに持っているフレームワークの上にかなり単純な方法で乗っている場合にのみ、それを「統合」できます。

また、ニューラル ネットワークが「拾う」ことができるものには必然的に「アルゴリズムの限界」があることも指摘しておく価値があります。「これはそこに行く」などの形式の「浅い」ルールを伝えると、ニューラル ネットワークはこれらを適切に表現および再現できる可能性が高く、実際、言語から「すでに知っている」ことは、すぐ従うべきパターン。しかし、多くの潜在的に計算上還元不可能なステップを含む実際の「深い」計算のルールを与えようとすると、うまくいきません。(各ステップでは、ネットワーク内で常に「データを前方にフィー​​ド」しているだけであり、新しいトークンを生成する場合を除き、決してループしないことに注意してください。)

もちろん、ネットワークは特定の「既約」計算に対する答えを学習できます。しかし、可能性の組み合わせ数があるとすぐに、そのような「テーブルルックアップスタイル」のアプローチは機能しなくなります。そうです、人間と同じように、ニューラル ネットワークが実際の計算ツールを「手を差し伸べて」使用する時が来ました。(そして、そうです、Wolfram|AlphaWolfram 言語は、言語モデルのニューラル ネットワークと同様に、「世界中のことについて話す」ように構築されているため、他に類を見ないほど適しています。)

ChatGPT を実際に機能させるものは何ですか?

人間の言語と、それを生成するための思考プロセスは、常に一種の複雑さの頂点を表しているように見えてきました。実際、人間の脳が、「ほんの」1,000 億個程度のニューロンのネットワーク (およびおそらく 100 兆個の接続) でそれを担っている可能性があることは、いくぶん注目に値するように思われます。おそらく、脳にはニューロンのネットワーク以上の何かがあると想像したかもしれません。未発見の物理学の新しい層のようなものです。しかし、ChatGPT によって重要な新しい情報が得られました。脳のニューロンとほぼ同じ数の接続を持つ純粋な人工ニューラル ネットワークが、驚くほど優れた人間の言語を生成できることがわかっています。

そして、はい、それは依然として大きくて複雑なシステムであり、現在世界中で利用可能なテキストの単語とほぼ同じ数のニューラル ネットの重みがあります。しかし、あるレベルでは、言語のすべての豊かさとそれが話すことができる事柄が、そのような有限のシステムにカプセル化できるとはまだ信じがたいようです. 起こっていることの一部は、ユビキタス現象を反映していることは間違いありません (ルール 30 の例で最初に明らかになりました)。) 基礎となるルールが単純な場合でも、計算プロセスは実際にはシステムの見かけの複雑さを大幅に増幅する可能性がある. しかし、実際には、上記で説明したように、ChatGPT で使用される種類のニューラル ネットワークは、トレーニングをより利用しやすくするために、この現象の影響 (およびそれに関連する計算上の既約性) を制限するように特別に構築される傾向があります。

では、ChatGPT のようなものは、どのようにして言語と同じように到達できるのでしょうか? 私が思うに、基本的な答えは、言語は基本的なレベルで、見かけよりもなんとなく単純だということです。つまり、ChatGPT は、究極的に単純なニューラル ネットワーク構造であっても、人間の言語とその背後にある思考の「本質を捉える」ことに成功しています。さらに、トレーニングの中で、ChatGPT は言語 (および思考) の規則性がこれを可能にするものを「暗黙のうちに発見」しました。

ChatGPT の成功は、科学の基本的かつ重要な部分の証拠を私たちに与えていると思います: それは、主要な新しい「言語の法則」、そして事実上「思考の法則」が発見されることを期待できることを示唆しています。 . ニューラルネットとして構築されたChatGPTでは、これらの法則はせいぜい暗黙的です. しかし、どうにかして法律を明確にすることができれば、ChatGPT と同じようなことを、はるかに直接的、効率的、かつ透過的な方法で行うことができる可能性があります。

しかし、OK、では、これらの法律はどのようなものでしょうか? 最終的には、言語と、それを使って私たちが言うことをどのように組み合わせるかについて、ある種の処方箋を私たちに与える必要があります。後で、「ChatGPT の内部を見る」ことでこれに関するヒントが得られる可能性があること、および計算言語の構築から得た知識がどのように前進する道を示唆するかについて説明します。しかし、最初に、「言語の法則」に相当するものと、それらが ChatGPT の運用にどのように関係しているかを示す 2 つの古くから知られている例について説明しましょう。

1つ目は、言語の構文です。言語は単なるランダムな単語の寄せ集めではありません。代わりに、さまざまな種類の単語をどのように組み合わせるかについて (かなり) 明確な文法規則があります。他の。このような文法構造は、どの程度の「構文木」をまとめることができるかを定義する一連の規則によって (少なくともおおよそ) 捉えることができます。

 

ChatGPT には、そのようなルールに関する明確な「知識」はありません。しかし、どういうわけか、それは訓練の中で暗黙のうちにそれらを「発見」し、それからそれらを追跡するのが得意なようです. では、これはどのように機能するのでしょうか。「全体像」レベルでは明確ではありません。しかし、洞察を得るには、もっと単純な例を見てみるのがおそらく有益でしょう。

次のような解析ツリーで表されるように、(‘s と )’s のシーケンスから形成された “言語” を考えてみましょう

 

「文法的に正しい」括弧シーケンスを生成するようにニューラル ネットワークをトレーニングできますか? ニューラルネットでシーケンスを扱う方法はいろいろありますが、ChatGPTのようにトランスフォーマーネットを使いましょう。単純な変換ネットが与えられた場合、トレーニング例として文法的に正しい括弧シーケンスを供給し始めることができます。微妙な点 (ChatGPT の人間の言語の生成にも実際に現れます) は、「コンテンツ トークン」(ここでは「(」と「)」) に加えて、「End」トークンを含める必要があることです。出力はそれ以上続けるべきではありません (つまり、ChatGPT の場合、「話の終わり」に達したということです)。

8 つのヘッドと長さ 128 の特徴ベクトルを持つアテンション ブロックを 1 つだけ使用してトランスフォーマー ネットをセットアップした場合 (ChatGPT も長さ 128 のフィーチャ ベクトルを使用しますが、96 個のアテンション ブロックがあり、それぞれに 96 個のヘッドがあります)、括弧言語について多くを学ぶことができます。しかし、2 つのアテンション ブロックを使用すると、学習プロセスは収束するように見えます — 少なくとも 1,000 万個ほどの例が与えられた後 (そして、変換ネットワークでよくあることですが、さらに多くの例を示すとパフォーマンスが低下するように見えます)。

したがって、このネットワークでは、ChatGPT が行うことと同様のことを行い、次のトークンがどうあるべきかの確率を、括弧のシーケンスで求めることができます。

 

そして最初のケースでは、ネットワークは、シーケンスがここで終了できないことを「かなり確信」しています。これは良いことです。ただし、2 番目のケースでは、シーケンスがここで終了する可能性があることを「正しく認識」しますが、「(」、おそらく「)」を続けて「もう一度開始」できることも「指摘」します。 . しかし、苦労して訓練された 400,000 ほどの重みがあっても、次のトークンとして “)” が含まれる確率は 15% であると言われています。

徐々に長くなる ( のシーケンス:

 

そして、はい、ネットワークは一定の長さまで問題なく機能します。しかし、それは失敗し始めます。これは、ニューラル ネットワーク (または一般的な機械学習) を使用したこのような「正確な」状況で見られる非常に典型的な種類のものです。人間が「一目で解決できる」ケースは、ニューラル ネットワークでも解決できます。しかし、「よりアルゴリズム的な」何かを実行する必要がある場合 (たとえば、括弧が閉じているかどうかを明示的にカウントするなど)、ニューラル ネットワークは何らかの形で「計算が浅すぎて」確実に実行できない傾向があります。(ちなみに、現在の完全な ChatGPT でさえ、長いシーケンスで括弧を正しく一致させるのは困難です。)

では、これは ChatGPT や英語などの言語の構文にとって何を意味するのでしょうか? 括弧の言語は「厳粛」であり、「アルゴリズムの話」のようなものです。しかし、英語では、現地の単語の選択やその他のヒントに基づいて、文法的に適合するものを「推測」できる方がはるかに現実的です。そして、そうです、ニューラル ネットワークはこの点ではるかに優れています。しかし重要な点は、言語には全体的な構文構造があり、それが意味するすべての規則性があるという事実は、ある意味で、ニューラル ネットワークが学習しなければならない「量」を制限するということです。

構文は、言語に対する一種の制約を提供します。しかし、明らかにそれ以上のものがあります。「Inquisitive electrons eat blue theory for fish」のような文は文法的には正しいですが、通常はこう言うとは考えられません。また、ChatGPT がそれを生成した場合、成功とは見なされません。その中の言葉、それは基本的に無意味です。

しかし、文が意味があるかどうかを判断する一般的な方法はありますか? そのための従来の全体的な理論はありません。しかし、ChatGPT は、Web などからの数十億の (おそらく意味のある) 文でトレーニングされた後、暗黙のうちに「理論を開発した」と考えることができます。

この理論はどのようなものでしょうか?基本的に 2000 年前から知られている小さなコーナーが 1 つあります。. 確かに、アリストテレスが発見した三段論法では、論理とは基本的に、特定のパターンに従う文は妥当であり、他の文はそうではないということを示す方法です。したがって、たとえば、「すべての X は Y です。これは Y ではないため、X ではありません」(「すべての魚は青です。これは青ではないため、魚ではありません」のように) と言うのは合理的です。そして、アリストテレスが多くのレトリックの例を (「機械学習スタイル」で) 調べて三段論法を発見したことをいくらか気まぐれに想像できるように、ChatGPT のトレーニングで「発見することができた」ことも想像できます。 Web 上の多くのテキストを参照するなどして、「三段論法ロジック」を作成します。

しかし、ロジックの狭い例を超えて、もっともらしい意味のあるテキストを体系的に構築 (または認識) する方法について何が言えるでしょうか? はい、非常に特殊な「フレーズ テンプレート」を使用するMad Libsのようなものがあります。しかしどういうわけか、ChatGPT にはそれを行うためのより一般的な方法が暗示的にあります。そしておそらく、「1,750 億のニューラル ネット ウェイトがある場合に何らかの形で発生する」以上の方法については、何も言うことはありません。しかし、もっと単純で強力な話があるのではないかと私は強く思っています。

運動の意味空間と意味法則

上記で説明したように、ChatGPT 内では、あらゆるテキストが、ある種の「言語特徴空間」内の点の座標と考えることができる数値の配列によって効果的に表されます。したがって、ChatGPT がテキストの一部を続けるとき、これは言語特徴空間で軌跡をたどることに対応します。しかし今、この軌跡が意味のあるテキストに対応する理由を問うことができます。そして、言語特徴空間内のポイントが「意味」を維持しながらどのように移動できるかを定義する、または少なくとも制約する、ある種の「運動の意味論的法則」があるのではないでしょうか?

では、この言語特徴空間はどのようなものでしょうか? このような特徴空間を 2D に投影すると、単一の単語 (ここでは一般名詞) がどのように配置されるかの例を次に示します。

 

上記の別の例は、植物や動物を表す単語に基づいています。しかし、どちらの場合もポイントは、「意味的に似た言葉」が近くに配置されていることです。

別の例として、さまざまな品詞に対応する単語がどのように配置されるかを次に示します。

 

もちろん、与えられた単語は一般に「1 つの意味」だけを持っているわけではありません (または、必ずしも品詞の 1 つだけに対応しているわけではありません)。そして、ある単語を含む文が特徴空間でどのように配置されているかを見ることで、さまざまな意味を「分解」できることがよくあります。たとえば、次の「クレーン」という単語 (鳥か機械か) の例のように:

 

よし、少なくともこの特徴空間は、この空間の近くに「意味の近くにある単語」を配置するものと考えることができる。しかし、この空間でどのような追加構造を識別できるでしょうか? たとえば、空間の「平坦性」を反映する「平行輸送」の概念はありますか? それを理解する 1 つの方法は、アナロジーを調べることです。

 

そして、そうです、2D に投影した場合でも、多くの場合、少なくとも「平坦さのヒント」がありますが、それが普遍的に見られるわけではありません。

では、軌跡はどうですか?ChatGPT のプロンプトが機能空間でたどる軌跡を見ることができます。そして、ChatGPT がそれをどのように継続するかを確認できます。

 

ここには、「幾何学的に明白な」運動の法則は確かにありません。そして、それはまったく驚くべきことではありません。これはかなり複雑な話になると予想しています。そして、たとえば、「運動の意味論的法則」が見つかったとしても、それがどのような種類の埋め込み (または、実際には、どの「変数」) で最も自然に記述されるかは明らかではありません。

上の図では、「軌跡」のいくつかのステップを示しています。各ステップで、ChatGPT が最も可能性が高いと見なす単語を選択しています (「ゼロ温度」のケース)。しかし、特定の時点でどの単語が「次に来る」可能性があるかを尋ねることもできます。

 

そして、この場合に見られるのは、特徴空間で多かれ少なかれ明確な方向に向かうように見える確率の高い単語の「ファン」が存在することです。さらに進むとどうなりますか?軌道を「進む」と現れる一連の「ファン」は次のとおりです。

 

これは 3D 表現で、合計 40 ステップになります。

 

そして、はい、これはごちゃごちゃしているように見えます。また、「ChatGPT が内部で行っていること」を経験的に研究することによって、「数理物理学のような」「運動の意味論的法則」を特定できると期待できるという考えを特に奨励するものではありません。 . しかし、おそらく私たちは「間違った変数」 (または間違った座標系) を見ているだけで、正しい変数を見ていれば、ChatGPT が測地線に従うような「数学的物理学的に単純な」ことを行っていることがすぐにわかります。しかし、現時点では、ChatGPT が人間の言語がどのように「組み立てられている」かについて「発見」したことを、その「内部動作」から「経験的に解読」する準備ができていません。

意味文法と計算言語の力

「意味のある人間の言語」を生み出すには何が必要ですか? 以前は、それは人間の脳にほかならない、と考えていたかもしれません。しかし今では、ChatGPT のニューラル ネットワークによって非常に立派に実行できることがわかっています。それでも、おそらくそれは私たちができる限りのことであり、機能するより単純な、またはより人間に理解できるものはありません. しかし、ChatGPT の成功は、重要な「科学的」事実を暗黙のうちに明らかにしているのではないかと強く疑っています。意味のある人間の言語には、これまで知られていたよりもはるかに多くの構造と単純さが実際にあるということです。そのような言語をどのように組み合わせることができるかを説明してください。

上で述べたように、構文文法は、さまざまな品詞などに対応する単語を人間の言語でどのように組み合わせることができるかについての規則を与えます。しかし、意味を扱うには、さらに先に進む必要があります。これを行う方法の 1 つのバージョンは、言語の構文文法だけでなく、意味文法についても考えることです。

構文の目的で、名詞や動詞などを識別します。しかし、セマンティクスのためには、「より細かいグラデーション」が必要です。したがって、たとえば、「移動」の概念と、「場所に関係なくアイデンティティを維持する」「オブジェクト」の概念を識別することができます。これらの「意味論的概念」のそれぞれには無限の具体例があります。しかし、意味文法の目的のために、基本的に「オブジェクト」は「移動」できるという一般的な種類のルールを用意します。このすべてがどのように機能するかについては、言いたいことがたくさんあります (そのいくつかは以前に述べました)。しかし、私はここで、今後の潜在的な道筋のいくつかを示すいくつかの発言で満足します.

文が意味文法に従って完全にOKであっても、それが実際に実現された(または実現される可能性さえある)ことを意味するわけではないことに注意してください。「象は月に旅した」は間違いなく私たちの意味文法を「通過」するでしょうが、現実の世界では (少なくともまだ) 実現されていないことは確かです。

「意味文法」について話し始めると、すぐに「その下には何があるのか​​?」という質問に導かれます。それはどのような「世界のモデル」を想定していますか? 構文文法とは、単語から言語を構築することです。しかし、意味文法は必然的にある種の「世界のモデル」、つまり実際の単語から作られた言語を重ねることができる「骨格」として機能するものと関わります。

最近まで、私たちは (人間の) 言語が私たちの「世界のモデル」を説明する唯一の一般的な方法であると想像していたかもしれません。すでに数世紀前に、特に数学に基づいて、特定の種類のものの形式化が開始されました. しかし今では、形式化へのより一般的なアプローチ、つまり計算言語があります。

そして、そうです、それは40年以上にわたる私の大きなプロジェクトでした(現在はWolfram言語に具体化されています) : 世界の物事についてできるだけ広く話すことができる正確な記号表現を開発することです.私たちが気にかけていること。そのため、たとえば、都市分子画像ニューラル ネットワークの記号表現があり、それらを計算する方法に関する知識が組み込まれています。

そして、何十年にもわたる作業の後、この方法で多くの分野をカバーしてきました。しかし、これまで特に「日常談話」を扱ってきたわけではありません。「2 ポンドのリンゴを買った」では、「2 ポンドのリンゴ」を簡単に表すことができます (また、栄養やその他の計算を行うこともできます)。しかし、「買った」の象徴的な表現は (まだ) ありません。

それはすべて、セマンティック文法のアイデアに関連しています。また、概念の一般的な象徴的な「構築キット」を持つという目標に関連しています。人間の言葉に。

しかし、この「象徴的な談話言語」があったとしましょう。私たちはそれをどうしますか?「ローカルで意味のあるテキスト」を生成するなどの作業から始めることができます。しかし、最終的には、より「グローバルに意味のある」結果が必要になる可能性があります。つまり、世界 (またはおそらく一貫した架空の世界) で実際に存在または発生する可能性があるものについて、より多くの「計算」を行うことを意味します。

現在、Wolfram言語には、さまざまな種類の計算に関する膨大な知識が組み込まれています。しかし、完全なシンボリック談話言語のためには、世界の一般的な事柄について追加の「計算法」を構築する必要があります: オブジェクトが A から B に、B から C に移動する場合、A から C に移動するなどです。

象徴的な談話言語が与えられると、それを使用して「スタンドアロンのステートメント」を作成できます。しかし、それを使って世界について質問することもできます。「Wolfram|Alpha スタイル」です。または、おそらく何らかの外部作動メカニズムを使用して、「そうしたい」ことを述べるために使用できます。または、それを使用して主張を行うこともできます—おそらく現実の世界について、またはおそらく架空の世界など、私たちが検討している特定の世界についてです。

人間の言語は基本的に不正確です。特に、特定の計算実装に「拘束」されておらず、その意味は基本的にユーザー間の「社会的契約」によってのみ定義されているためです。しかし、計算言語は、その性質上、特定の基本的な精度を備えています。最終的には、計算言語が指定するものは常に「コンピューター上で明確に実行」できるからです。人間の言語は、通常、ある程度のあいまいさを回避できます。(「惑星」と言うとき、系外惑星を含むかどうかなど?) しかし、計算言語では、作成しているすべての区別について正確かつ明確にする必要があります。

計算言語で名前を構成する際に、通常の人間の言語を利用すると便利なことがよくあります。しかし、それらが計算言語で持つ意味は必然的に正確であり、典型的な人間の言語の使用法における特定の含意をカバーしている場合とカバーしていない場合があります。

一般的な記号談話言語に適した基本的な「存在論」をどのように見つけ出すべきでしょうか? まあ、それは簡単ではありません。これがおそらく、アリストテレスが 2000 年以上前に行った原始的な始まり以来、ほとんど何も行われてこなかった理由です。しかし、今日、私たちが世界を計算的に考える方法について多くのことを知っていることは本当に役に立ちます (そして、私たちの物理学プロジェクトからの「基本的な形而上学」とルーリアドのアイデアを持っていることは害にはなりません) 。

しかし、ChatGPT のコンテキストでは、これらすべてが何を意味するのでしょうか? そのトレーニングから、ChatGPT は意味文法に相当する一定の (かなり印象的な) 量を効果的に「つなぎ合わせ」ました。しかし、その成功そのものが、計算言語形式でより完全なものを構築することが実現可能になると考える理由を与えてくれます。そして、ChatGPT の内部についてこれまで解明してきたこととは異なり、人間が容易に理解できるように計算言語を設計することが期待できます。

意味文法について話すとき、三段論法に類推することができます。当初、三段論法は本質的に、人間の言語で表現されたステートメントに関する規則の集まりでした。しかし (そう、2000 年後)形式論理が開発されたとき、三段論理学の元の基本的な構成要素は、現在、たとえば最新のデジタル回路の操作を含む巨大な「形式的な塔」を構築するために使用できます。したがって、それはより一般的な意味文法であると予想できます。最初は、たとえばテキストとして表現された単純なパターンを処理できるだけかもしれません。しかし、その計算言語フレームワーク全体が構築されると、「一般化されたセマンティック ロジック」の高い塔を構築するために使用できるようになると期待できます。人間の言葉を介した「1階レベル」を除いて、あいまいさを備えたものを除いて、これまで私たちがアクセスすることはできませんでした。

計算言語 (および意味文法) の構築は、物事を表現する際の一種の究極の圧縮を表していると考えることができます。たとえば、通常の人間の言語に存在するすべての「言い回し」を扱うことなく、可能なことの本質について話すことができるからです。そして、ChatGPT の大きな強みは、少し似たようなものであると見ることができます。ChatGPT も、ある意味で「意味的に意味のある方法で言語をまとめる」ことができる点まで「ドリルスルー」されているため、さまざまな可能性のあるターンを気にする必要はありません。段階。

では、ChatGPT を基礎となる計算言語に適用するとどうなるでしょうか? 計算言語は何が可能かを説明できます。しかし、追加できるのは、たとえば Web 上のすべてのコンテンツを読むことに基づいて、「何が人気があるか」という感覚です。しかし、その下では、計算言語で動作するということは、ChatGPT のようなものが、潜在的に還元不可能な計算を利用するための究極のツールに即座かつ基本的にアクセスできることを意味します。そしてそれは、「妥当なテキストを生成する」だけでなく、そのテキストが実際に世界について「正しい」声明を出しているかどうか、またはそれが話しているはずのことは何でも、解決できることを期待できるシステムにします.

それでは… ChatGPT は何をしていて、なぜ機能するのでしょうか?

ChatGPT の基本概念は、あるレベルではかなり単純です。Web や本などから人間が作成したテキストの膨大なサンプルから始めます。次に、ニューラル ネットワークをトレーニングして、「このような」テキストを生成します。特に、「プロンプト」から開始して、「トレーニング済みのような」テキストで続行できるようにします。

これまで見てきたように、ChatGPT の実際のニューラル ネットワークは非常に単純な要素で構成されていますが、数十億の要素があります。また、ニューラル ネットワークの基本的な操作も非常に単純で、これまでに生成されたテキストから派生した入力を、新しい単語 (または単語の一部) ごとに「その要素を介して」(ループなどなしで) 渡すことから本質的に成ります。 ) 生成します。

しかし、注目に値する (そして予想外の) ことは、このプロセスによって、Web や本などに出回っているものとうまく「似た」テキストを生成できることです。そのプロンプト」をコンテンツを利用して「読む」ことです。「全体的に意味のある」(または正しい計算に対応する)ことを常に言っているわけではありません。なぜなら (たとえば、Wolfram|Alpha の「計算の超能力」にアクセスすることなく)、単に「正しく聞こえる」ことを言っているだけだからです。そのトレーニング資料で「どのように聞こえるか」。

ChatGPT の特定のエンジニアリングにより、ChatGPT は非常に魅力的なものになりました。しかし、最終的には (少なくとも外部ツールを使用できるようになるまでは)、ChatGPT は、蓄積された「一般通念の統計」から「一貫したテキストのスレッド」を「単に」引き出しているにすぎません。しかし、結果がどれほど人間に似ているかは驚くべきことです。そして、これまで議論してきたように、これは少なくとも科学的に非常に重要なことを示唆しています。それは、人間の言語 (およびその背後にある思考パターン) は、私たちが考えていたよりも構造が単純で、「法律に似ている」ということです。ChatGPT は暗黙のうちにそれを発見しました。しかし、意味文法や計算言語などを使用して、明示的に公開できる可能性があります。

ChatGPT がテキストを生成する際に行うことは非常に印象的です。その結果は通常、人間が生成するものと非常によく似ています。これは、ChatGPT が脳のように機能しているということですか? その根底にある人工ニューラルネット構造は、最終的に脳の理想化に基づいてモデル化されました。そして、私たち人間が言語を生成するとき、起こっていることの多くの側面が非常に似ている可能性が非常に高いようです.

トレーニング (別名学習) に関して言えば、脳と現在のコンピューターの異なる「ハードウェア」 (およびおそらくいくつかの未開発のアルゴリズムのアイデア) により、ChatGPT はおそらくかなり異なる戦略を使用することを余儀なくされます (ある意味でははるかに少ない)効率的)よりも脳。また、他のこともあります。典型的なアルゴリズム計算とは異なり、ChatGPT は内部的に「ループを持たない」または「データを再計算する」ことはありません。そして、それは必然的にその計算能力を制限します — 現在のコンピューターに関してでさえ、しかし脳に関しては間違いなく.

「それを修正」する方法と、妥当な効率でシステムをトレーニングする能力を維持する方法は明らかではありません。しかし、そうすることで、将来の ChatGPT がさらに「脳のようなこと」を行えるようになると思われます。もちろん、脳があまりうまくいかないことはたくさんあります特に、還元不可能な計算に相当するものはそうです。そのためには、頭脳と ChatGPT のようなものの両方が、Wolfram 言語のような「外部ツール」を探す必要があります。

しかし今のところ、ChatGPT がすでに実現していることを見るのはワクワクします。あるレベルでは、多数の単純な計算要素が驚くべき予想外のことを実行できるという基本的な科学的事実の好例です。しかし、それはまた、人間の状態の中心的な特徴である人間の言語とその背後にある思考プロセスの基本的な特徴と原則が何であるかをよりよく理解するために、おそらく2000年で私たちが持っていた最高の推進力を提供します.

ありがとう

私は約 43 年間、ニューラル ネットワークの開発を追跡してきました。その間、私はニューラル ネットワークについて多くの人とやり取りしてきました。その中には、昔から、最近から、そして何年にもわたって、ジュリオ・アレッサンドリーニ、ダリオ・アモデイ、エティエンヌ・バーナード、タリアセン・ベイノン、セバスチャン・ボーデンスタイン、グレッグ・ブロックマン、ジャック・コーワン、ペドロ・ドミンゴス、ジェシー・ガレフ、ロジャー・ガームンドソンがいます。 、ロバート・ヘクト=ニールセン、ジェフ・ヒントン、ジョン・ホップフィールド、ヤン・ルカン、ジェリー・レトヴィン、ジェローム・ロウラドゥール、マーヴィン・ミンスキー、エリック・ミョルズネス、カイデン・ピアース、トマソ・ポッジョ、マッテオ・サルヴァレッツァ、テリー・セイノフスキー、オリバー・セルフリッジ、ゴードン・ショウ、ジョナス・シェーバーグ、イリヤ・サツケーバー、ジェリー・テサウロ、ティモシー・ヴェルディエ。この作品の助けを借りて、Giulio Alessandrini と Brad Klee に特に感謝したいと思います。

Pocket
LINEで送る