
82,831 文字

みなさん、こんにちは。この動画を作ろうと思っていたのですが、これはChatGPTのような大規模言語モデルについての包括的な、しかし一般の方向けの入門編になります。この動画で私が達成したいのは、このツールが一体何なのかを考えるための心的モデルを皆さんに提供することです。明らかに、ある面では魔法のように素晴らしく、あるものには非常に優れていて、他のものにはそれほど優れていないのですが、注意すべき鋭いエッジもたくさんあります。
では、このテキストボックスの裏側には何があるのでしょうか。そこには何でも入力して、エンターを押すことができますが、私たちは何を入力すべきで、これらの生成された言葉はどのように機能し、一体何と会話しているのでしょうか。この動画では、これらすべての話題に触れていきたいと思います。このシステムがどのように構築されているのか、パイプライン全体を見ていきますが、すべてを一般の方にも分かりやすく説明していきます。
まず、ChatGPTのようなものをどのように構築するのかを見ていきましょう。そして、その過程で、これらのツールが持つ認知的・心理的な意味合いについても触れていきます。
では、ChatGPTを構築していきましょう。複数の段階が順番に並んでいきます。最初の段階は事前学習段階と呼ばれ、その最初のステップはインターネットをダウンロードして処理することです。これがどのようなものかを理解するために、このURLを見ることをお勧めします。Hugging Faceという会社がFine webというデータセットを収集・作成・キュレーションし、このブログ投稿でFine webデータセットをどのように構築したのかについて詳しく説明しています。OpenAI、Anthropic、Googleなどの主要なLLMプロバイダーは、内部的にFine webデータセットのような同等のものを持っているでしょう。
大まかに言えば、ここで何を達成しようとしているのでしょうか。私たちは公開されているソースからインターネットの大量のテキストを取得しようとしています。非常に高品質な文書を大量に手に入れようとしているのです。また、これらのモデルの中に多くの知識を入れたいので、文書の多様性も大きくしたいと考えています。つまり、高品質な文書の大きな多様性と、その大量の文書が必要なのです。これを達成するのはかなり複雑で、ご覧の通り、うまく行うには複数の段階が必要です。
これらの段階がどのようなものか見ていきましょう。今のところ、例えばFine webデータセットは、実際の本番環境のアプリケーションでよく見られるものですが、最終的にはディスク容量で約44テラバイトにしかなりません。1テラバイトのUSBスティックは簡単に手に入りますし、今日では1台のハードドライブにほぼ収まるかもしれません。つまり、インターネットは非常に大きいですが、私たちはテキストを扱っていて、それも積極的にフィルタリングしているので、この例では最終的に約44テラバイトになるのです。
では、このデータがどのようなものか、そしてこれらの段階がどのようなものか見ていきましょう。これらの取り組みの多くの出発点であり、最終的にデータの大部分を占めるのが、Common Crawlからのデータです。Common Crawlは2007年からインターネットを探索してきた組織です。例えば2024年現在、Common Crawlは27億のウェブページをインデックス化しています。彼らはインターネット上を這い回るクローラーを持っていて、基本的に少数のシードウェブページから始めて、すべてのリンクをたどり、リンクをたどり続け、時間とともにすべての情報をインデックス化していくのです。これが通常、これらの取り組みの多くの出発点となります。
このCommon Crawlのデータはかなり生のデータで、様々な方法でフィルタリングされます。ここで彼らは、これは同じ図ですが、これらの段階でどのような処理が行われているのかを少し文書化しています。ここでの最初のものはURLフィルタリングと呼ばれるものです。これは基本的に、データを取得したくないURLやドメインのブロックリストがあることを指しています。通常、これにはマルウェアサイト、スパムサイト、マーケティングサイト、人種差別的なサイト、アダルトサイトなどが含まれます。このような種類のウェブサイトは、このステージで大量に除外されます。なぜなら、私たちはそれらをデータセットに含めたくないからです。
二番目の部分はテキスト抽出です。これらのウェブページはすべて、これらのクローラーによって保存された生のHTMLであることを覚えておく必要があります。ここで検査すると、これが実際の生のHTMLがどのように見えるかということです。リストなどのマークアップがあり、CSSなどもあることに気付くでしょう。これはほとんどウェブページのためのコンピュータコードですが、私たちが本当に欲しいのは、このテキストだけなのです。ウェブページのテキストだけが欲しく、ナビゲーションなどは必要ありません。そのため、これらのウェブページの良いコンテンツだけを適切にフィルタリングするには、多くのフィルタリングと処理、そしてヒューリスティックが必要になります。
次の段階は言語フィルタリングです。例えば、Fine webは言語分類器を使用してフィルタリングを行い、各ウェブページがどの言語であるかを推測しようとし、英語が65%以上のウェブページだけを保持します。これは各社が自分たちで決定できるデザインの決定であることがわかります。データセットにどの割合の異なる種類の言語を含めるかということです。例えば、スペイン語をすべてフィルタリングしてしまうと、そのモデルは後でスペイン語があまり得意ではなくなるかもしれません。なぜなら、その言語のデータをあまり見ていないからです。そのため、異なる企業は多言語のパフォーマンスに異なる程度で焦点を当てることができます。例えば、Fine webは英語に非常に焦点を当てているので、後で言語モデルを訓練すると、英語は非常に得意になりますが、他の言語はそれほど得意ではないかもしれません。
言語フィルタリングの後、他のいくつかのフィルタリングステップと重複排除などがあり、最後にPII(個人を特定できる情報)の削除で終わります。例えば、住所や社会保障番号などを検出しようとし、そのような種類のウェブページをデータセットからフィルタリングしようとします。ここには多くの段階があり、詳細には立ち入りませんが、それは前処理のかなり広範な部分であり、最終的には例えばFine webデータセットになります。
クリックしてみると、これが実際にどのように見えるかの例がいくつか見られます。誰でもHugging Faceのウェブページでこれをダウンロードできます。ここに、トレーニングセットに最終的に含まれるテキストの例があります。これは2012年の竜巻に関する記事です。2012年に発生した竜巻とその経緯についてです。次のものは、体内に電池サイズの副腎が2つあることを知っていましたか、というような変わった医学記事です。これらは基本的に、様々な方法でテキストだけをフィルタリングしたインターネット上のウェブページだと考えてください。今、私たちは40テラバイトのテキストを持っており、それが次のステップの出発点となります。
今、私たちがどこにいるのかの直感的な感覚を与えたいと思います。ここで最初の200のウェブページを取り、覚えておいてください、私たちは大量のウェブページを持っていますが、そのテキストをすべて一緒に連結しました。これが私たちが得たものです。ただの生のテキスト、生のインターネットテキストです。これらの200のウェブページでさえ、大量のテキストがあります。ここでズームアウトを続けることができ、このような巨大なテキストのタペストリーができあがります。このテキストデータにはすべてのパターンがあり、今私たちがしたいのは、このテキストの流れをモデル化し、内部化するためにニューラルネットワークの訓練を開始することです。私たちは巨大なテキストのタペストリーを持っていて、それを模倣するニューラルネットを手に入れたいのです。
さて、テキストをニューラルネットワークに入力する前に、このテキストをどのように表現し、どのように入力するかを決める必要があります。私たちのニューラルネットのテクノロジーでは、それらは一次元のシンボルのシーケンスを期待し、可能なシンボルの有限セットを望んでいます。そのため、シンボルが何であるかを決め、そしてそれらのシンボルの一次元シーケンスとしてデータを表現する必要があります。
今、私たちが持っているのは、テキストの一次元シーケンスです。ここから始まり、ここに行き、そしてここに来るという具合です。これは一次元のシーケンスです。もちろん私のモニター上では二次元的に配置されていますが、左から右へ、上から下へと進んでいきます。つまり、これはテキストの一次元シーケンスなのです。
もちろん、これはコンピュータなので、基礎となる表現があります。このテキストをUTF-8エンコードすると、コンピュータ内のこのテキストに対応する生のビットを得ることができ、それはこのように見えます。例えば、この最初のバーは最初の8ビットであることがわかります。これは何でしょうか。これは、ある意味で私たちが探している表現です。可能なシンボルが0と1の2つだけで、それの非常に長いシーケンスを持っています。
ところが、このシーケンスの長さは実際には非常に有限で、貴重なリソースになります。私たちのニューラルネットワークでは、2つのシンボルだけの極端に長いシーケンスは望ましくありません。代わりに、この語彙のシンボルサイズと、結果として生じるシーケンスの長さのトレードオフを行いたいのです。2つのシンボルと極端に長いシーケンスは望まず、より多くのシンボルとより短いシーケンスが欲しいのです。
シーケンスの長さを圧縮または短縮する一つの単純な方法は、基本的に8ビットなどの連続したビットのグループを考え、それを1つのバイトにグループ化することです。これらのビットはオンかオフのどちらかなので、8ビットのグループを取ると、これらのビットがオンかオフになる可能性のある組み合わせは256通りしかないことがわかります。そのため、このシーケンスをバイトのシーケンスに再表現することができます。このバイトのシーケンスは8倍短くなりますが、今度は256の可能なシンボルを持つことになります。つまり、ここの各数字は0から255までの範囲になります。
実は、これらを数字としてではなく、ユニークなIDやユニークなシンボルとして考えることを強くお勧めします。おそらく、これらの各々を独自の絵文字に置き換えると考える方がいいかもしれません。このようになります。基本的に、絵文字のシーケンスを持っていて、256の可能な絵文字があると考えることができます。
実際の最先端の言語モデルでは、これ以上に進む必要があることが判明しています。語彙の中のシンボルをより多く使用する代わりに、シーケンスの長さをさらに縮小し続けたいのです。なぜなら、繰り返しになりますが、それは貴重なリソースだからです。これは、バイトペアエンコーディングアルゴリズムと呼ばれるものを実行することで行われます。
これがどのように機能するかというと、基本的に非常に一般的な連続したバイトやシンボルを探します。例えば、116の後に32が続くシーケンスは非常に一般的で、頻繁に出現することがわかります。そこで私たちがすることは、このペアを新しいシンボルにグループ化することです。ID 256を持つシンボルを作成し、11632のペアをすべてこの新しいシンボルで書き換えます。このアルゴリズムを望む回数だけ繰り返すことができ、新しいシンボルを作成するたびに、長さを減らしシンボルサイズを増やしていきます。実際には、語彙サイズの良い設定は約10万の可能なシンボルであることが判明しています。特に、GPT-4は100,277のシンボルを使用しています。
生のテキストからこれらのシンボルまたはトークンへの変換プロセスは、トークン化と呼ばれます。では、GPT-4がどのようにテキストからトークンへ、そしてトークンからテキストへのトークン化を実行するのか、実際にどのように見えるのかを見ていきましょう。
これらのトークン表現を探索するのに私が好むウェブサイトの一つは、Tick Tokenizerと呼ばれるものです。ドロップダウンに行き、GPT-4のベースモデルトークナイザーであるCL100aベースを選択します。ここで左側にテキストを入力すると、そのテキストのトークン化が表示されます。
例えば、「hello world」は正確に2つのトークンになります。ID 15339のトークン「hello」と、ID 11917のトークン「space world」です。例えば、これら2つを結合すると、再び2つのトークンになりますが、今度は「H」のトークンと、「H」のない「l world」のトークンになります。「hello」と「world」の間に2つのスペースを入れると、また異なるトークン化になり、ここに新しいトークン220が現れます。
これで遊んで、何が起こるかを見ることができます。また、これは大文字小文字を区別することにも注意してください。「H」が大文字の場合は別のものになり、「Hello World」の場合は実際に2つのトークンではなく3つのトークンになります。これで遊んで、これらのトークンがどのように機能するかの直感的な感覚を得ることができます。
私たちは実際にこのビデオの後半でトークン化に戻ってきますが、今のところは、このウェブサイトを紹介し、このテキストが最終的にGPT-4によってどのように見られるかを示したかったのです。例えば、ここの1行を取ると、これはGPT-4が見るものです。このテキストは長さ62のシーケンスになり、これがそのシーケンスで、これがテキストの塊がこれらのシンボルにどのように対応するかを示しています。繰り返しになりますが、100,277の可能なシンボルがあり、今私たちはそれらのシンボルの一次元シーケンスを持っています。
では、データセットにあるこのテキストのシーケンスを取り、トークナイザーを使用してトークンのシーケンスに再表現しました。これがそれがどのように見えるかです。例えば、Fine webデータセットに戻ると、これは44テラバイトのディスク容量だけでなく、このデータセットで約15兆トークンのシーケンスであると言及しています。ここにあるのは、このデータセットの最初の数千トークンだけだと思いますが、15兆あることを覚えておいてください。もう一度覚えておいてほしいのは、これらはすべて小さなテキストの塊を表していて、これらはすべてシーケンスの原子のようなものだということです。ここの数字は意味を持ちません。それらは単にユニークなIDです。
さて、楽しい部分に入ります。ニューラルネットワークの訓練です。これは、これらのニューラルネットワークを訓練する際に計算的に多くの重要な作業が行われる部分です。ここで私たちがすることは、これらのトークンがシーケンス内でどのように互いに続くかの統計的な関係をモデル化することです。
私たちがすることは、データに入り、トークンのウィンドウを取ります。このデータからかなりランダムにトークンのウィンドウを取り、ウィンドウの長さは実際に0トークンから私たちが決める最大サイズまでの範囲になります。例えば、実際には8,000トークンのウィンドウを見ることができます。原則として、任意のウィンドウ長のトークンを使用できますが、非常に長いウィンドウシーケンスの処理は計算的に非常に高価になるので、例えば8,000や4,000、16,000が良い数字だと決めて、そこでカットします。
この例では、すべてがうまく収まるように、最初の4つのトークンを取ります。これらのトークン、「bar」「view」「in」「space」「single」というトークンID、ウィンドウの4つのトークンを取り、基本的にシーケンスで次に来るトークンを予測しようとします。3962が次に来ます。
ここで私たちがすることは、これら4つのトークンをコンテキストと呼び、それらはニューラルネットワークに入力されます。これがニューラルネットワークへの入力です。このニューラルネットワークの中身については後で詳しく説明しますが、今は入力と出力を理解することが重要です。入力は0から8,000などの最大サイズまでの可変長のトークンのシーケンスです。
出力は次に何が来るかの予測です。私たちの語彙には100,277の可能なトークンがあるので、ニューラルネットワークは正確にその数の数字を出力し、それらの数字はすべて、そのトークンがシーケンスで次に来る確率に対応します。シーケンスで次に何が来るかについて推測を行っているのです。
最初、このニューラルネットワークはランダムに初期化されています。後で説明しますが、これはランダムな変換です。そのため、訓練の最初の段階では、これらの確率もある種ランダムになります。ここに3つの例がありますが、ここには100,000の数字があることを覚えておいてください。
トークン「space Direction」の確率について、ニューラルネットワークは現時点で4%の可能性があると言っています。11799は2%で、3962(「post」)は3%です。もちろん、このウィンドウをデータセットからサンプリングしたので、次に何が来るかを知っています。これがラベルで、正解は実際に3962がシーケンスで次に来ることを知っています。
ここで私たちは、ニューラルネットワークを更新するための数学的なプロセスを持っています。それを調整する方法があり、後で詳しく説明しますが、基本的にここの3%の確率をより高くしたいと知っていて、他のすべてのトークンの確率を低くしたいのです。そのため、正解がより高い確率を持つようにニューラルネットワークを調整し更新する方法を数学的に計算する方法があります。
ニューラルネットワークを更新すると、次にこの特定の4つのトークンのシーケンスをニューラルネットワークに入力すると、ニューラルネットワークは少し調整され、「post」は4%になり、「case」は1%になり、「Direction」は2%になるかもしれません。そのように、正解のトークンにより高い確率を与えるようにニューラルネットを少しずつ調整する方法があります。
ここで覚えておく必要があるのは、このプロセスは、これら4つが入力されてこれを予測するこのトークンだけでなく、データセット全体のこれらすべてのトークンで同時に発生するということです。実際には、小さなウィンドウ、小さなウィンドウのバッチをサンプリングし、これらのトークンの各々で、そのトークンの確率が少し高くなるようにニューラルネットワークを調整したいのです。
これはすべて、これらのトークンの大きなバッチで並列に発生し、これがニューラルネットワークを訓練するプロセスです。予測が訓練セットの統計と一致し、その確率がデータ内でこれらのトークンが互いにどのように続くかの統計的パターンと一致するように、ネットワークを更新する一連のプロセスです。
では、これらのニューラルネットワークの内部に簡単に入っていき、中身がどのようなものか感覚をつかんでみましょう。先ほど述べたように、トークンのシーケンスの入力があります。この場合は4つの入力トークンですが、これは0から例えば8,000トークンまでの間のどこでもよいのです。原則として、これは無限の数のトークンにすることもできますが、無限の数のトークンを処理するのは計算的に高価すぎるので、ある長さでカットし、それがそのモデルの最大コンテキスト長になります。
これらの入力Xは、これらのニューラルネットワークのパラメータまたは重みと一緒に、巨大な数学的表現の中で混ぜ合わされます。ここでは6つのパラメータ例とその設定を示していますが、実際には、これらの現代のニューラルネットワークは何十億ものパラメータを持っており、最初これらのパラメータは完全にランダムに設定されています。
パラメータのランダムな設定では、このニューラルネットワークがランダムな予測を行うことが予想されます。最初は完全にランダムな予測を行いますが、このネットワークを繰り返し更新するプロセス、これを私たちはニューラルネットワークの訓練と呼びますが、このプロセスを通じて、これらのパラメータの設定が調整され、ニューラルネットワークの出力が訓練セットで見られるパターンと一致するようになります。
これらのパラメータは、DJセットのノブのようなものだと考えてください。これらのノブを調整すると、可能なすべてのトークンシーケンス入力に対して異なる予測が得られ、ニューラルネットワークの訓練とは、訓練セットの統計と一致するようなパラメータの設定を発見することを意味します。
この巨大な数学的表現がどのようなものか、感覚をつかむために例を示させてください。現代のネットワークはおそらく数兆の項を持つ巨大な表現ですが、簡単な例を示しましょう。このようなものです。これらは表現の種類で、それほど怖いものではないことを示すためです。入力xがあり、この場合はX1とX2という2つの例の入力があり、それらはネットワークの重みw0、w1、2、3などと混ぜ合わされます。
この混合は、乗算、加算、加算、指数化、除算などの単純なものです。これは、表現力があり、最適化可能で、並列化可能などの便利な特性を持つ効果的な数学的表現を設計することが、ニューラルネットワークアーキテクチャ研究の対象です。しかし結局のところ、これらは複雑な表現ではなく、基本的に入力をパラメータと混ぜ合わせて予測を行い、この訓練セットと一致する予測が出てくるようにニューラルネットワークのパラメータを最適化しているのです。
実際の本番環境での例を示したいと思います。そのために、これらのネットワークの1つの非常に良い視覚化を持つこのウェブサイトを見ることをお勧めします。これがこのウェブサイトで見つかるもので、本番環境で使用されるこのニューラルネットワークは、この特別な種類の構造を持っています。
このネットワークはTransformerと呼ばれ、この特定のものは例として約85,000のパラメータを持っています。上部で入力であるトークンシーケンスを取り、情報はニューラルネットワークを通って流れ、出力である次に何が来るかの予測(ここではlogit softmaxと呼ばれる)に到達するまで続きます。そして、次のトークンを予測する際に、この数学的表現内で生成されるすべての中間値がこの一連の変換となります。
例えば、これらのトークンは、分散表現と呼ばれるものに埋め込まれます。つまり、可能な各トークンは、ニューラルネットワーク内でそれを表すベクトルのようなものを持っています。まずトークンを埋め込み、それらの値がこの図を通って流れていきます。これらはすべて個別には非常に単純な数学的表現です。レイヤー正規化、行列乗算、ソフトマックスなどがあります。ここがこのTransformerの注意ブロックで、情報は多層パーセプトロンブロックへと流れていきます。
これらの数字はすべて、表現の中間値です。これらをある種の合成ニューロンの発火率のように考えることもできますが、これらをあまりにもニューロンのように考えすぎないよう注意してください。これらは、脳内の生物学的ニューロンと比べると非常に単純なニューロンです。生物学的ニューロンは、記憶を持つ非常に複雑な動的プロセスですが、この表現には記憶がありません。入力から出力への固定された数学的表現で、記憶はありません。完全に状態を持たないのです。そのため、生物学的ニューロンと比べると非常に単純なニューロンですが、それでもゆるく合成脳組織の一片のように考えることはできます。
情報はすべてのニューロンを通って流れ、予測に到達するまで発火し続けます。実際には、これらすべての変換の正確な数学的詳細にはあまり深入りしません。正直なところ、それはそれほど重要だとは思いません。重要なのは、これが数学的関数であり、例えば85,000個のような固定されたパラメータセットによってパラメータ化され、入力を出力に変換する方法であるということです。パラメータを調整すると異なる種類の予測が得られ、予測が訓練セットで見られるパターンと一致するような良いパラメータ設定を見つける必要があります。これがTransformerです。
ニューラルネットワークの内部を見せ、その訓練プロセスについて少し話しましたが、これらのネットワークを扱う上でもう一つの重要な段階について説明したいと思います。それは推論と呼ばれる段階です。推論では、モデルから新しいデータを生成します。基本的に、そのネットワークのパラメータに内部化されたパターンがどのようなものかを見たいのです。
モデルからの生成は比較的単純です。基本的に、開始したい接頭辞であるトークンから始めます。例えば、トークン91から始めたいとします。それをネットワークに入力すると、ネットワークは確率を与えてくれることを覚えておいてください。ここにこの確率ベクトルがあります。今できることは、基本的に偏りのあるコインを投げることです。モデルによって高い確率が与えられたトークンは、この偏りのあるコインを投げたときにサンプリングされる可能性が高くなります。そのように考えることができます。
分布からサンプリングして、単一の一意のトークンを得ます。例えば、トークン860が次に来ます。860は、モデルから生成する場合、次に来る可能性があります。860は比較的可能性の高いトークンですが、唯一の可能なトークンではないかもしれません。この場合、サンプリングされた可能性のある他の多くのトークンがあるかもしれませんが、860は例として比較的可能性の高いトークンであることがわかります。実際、私たちの訓練例では、860は91の後に続いています。
では、プロセスを続けましょう。91の後に860があり、それを追加して、もう一度3番目のトークンは何かを尋ねます。サンプリングして、ここにあるように287だとしましょう。もう一度戻って、今度は3つのシーケンスがあり、4番目の可能性の高いトークンは何かを尋ね、そこからサンプリングしてこれを得ます。そしてもう一度やってみましょう。これら4つを取り、サンプリングして、この13659を得ます。
この13659は実際には、以前あった3962ではありません。このトークンは「article」というトークンです。「viewing a single article」というように。この場合、ここで訓練データで見たシーケンスを正確に再現したわけではありません。これらのシステムは確率的であることを覚えておいてください。サンプリングとコイン投げがあり、時には運が良くて訓練セットの小さなテキストの塊を再現することもありますが、時には訓練データの文書の一部ではなかったトークンを得ることもあります。
訓練で見たデータのある種のリミックスを得ることになります。なぜなら、各ステップで少し異なるトークンを得る可能性があり、そのトークンが入ると、次のトークンをサンプリングし、そうしていくと、訓練文書のトークンストリームとは非常に異なるトークンストリームを生成し始めるからです。統計的には似たような特性を持ちますが、訓練データと同一ではありません。訓練データに触発されたようなものですが、この場合、少し異なるシーケンスを得ました。
なぜ「article」が出てきたのでしょうか。「bar viewing single」などのコンテキストの中で、「article」は比較的可能性の高いトークンだと想像できます。このコンテキストウィンドウの後に「article」という単語が訓練文書のどこかで続いていたと想像でき、この段階でそれをサンプリングしたのです。
基本的に、推論はこれらの分布から一度に1つずつ予測し、トークンを継続的に入力して次のものを得続け、常にこれらのコインを投げています。これらの確率分布からどのようにサンプリングするかによって、運が良いか悪いかに応じて、非常に異なる種類のパターンを得る可能性があります。これが推論です。
最も一般的なシナリオでは、基本的にインターネットのダウンロードとトークン化は前処理のステップです。それを1回行い、トークンシーケンスを得たら、ネットワークの訓練を開始できます。実際の場合、異なる種類の設定、異なる種類の配置、異なる種類のサイズを持つ多くの異なるネットワークを訓練しようとします。そのため、多くのニューラルネットワークの訓練を行うことになります。
そして、ニューラルネットワークを持ち、それを訓練し、満足のいく特定のパラメータセットを持ったら、そのモデルを取り、推論を行い、実際にモデルからデータを生成することができます。ChatGPTでモデルと対話するとき、そのモデルは訓練済みで、おそらく数ヶ月前にOpenAIによって訓練されています。彼らは上手く機能する特定の重みセットを持っており、モデルと対話するとき、それはすべて推論です。もう訓練はなく、それらのパラメータは固定されており、基本的にいくつかのトークンを与え、それがトークンシーケンスを完成させるような形で対話しているのです。それがChatGPTでモデルを使用するときに生成されているものです。そのモデルは推論だけを行います。
では、これらのモデルが訓練されるときの具体的な例を見て、それが実際にどのように見えるかの感覚をつかんでみましょう。私が特に好む例で、取り上げたいのは、OpenAIのGPT-2です。GPTは「Generatively Pre-trained Transformer」の略で、これはOpenAIのGPTシリーズの2番目のイテレーションです。今日、ChatGPTと対話するとき、その相互作用の魔法の背後にあるモデルはGPT-4で、そのシリーズの4番目のイテレーションです。
GPT-2は2019年にOpenAIによってこの論文で公開されました。GPT-2が好きな理由は、これが認識可能な現代的なスタックが初めて一緒になった時だからです。GPT-2のすべての部分は、現代の標準では認識可能です。ただ、すべてが今ではより大きくなっただけです。
もちろん、この論文の詳細すべてに立ち入ることはできません。これは技術的な出版物だからです。しかし、強調したい詳細がいくつかあります。GPT-2は、今日使用するようなTransformerニューラルネットワークでした。16億のパラメータを持っていました。これらは、ここで見たパラメータで、16億個ありました。今日の現代のTransformerは、おそらく1兆またはいくつかの千億に近いパラメータを持っています。
ここでの最大コンテキスト長は1,024トークンでした。データセットからトークンのウィンドウの塊をサンプリングするとき、1,024トークン以上は取りません。そのため、シーケンスで次のトークンを予測しようとするとき、その予測を行うためのコンテキストとして1,024トークン以上を持つことはありません。これも現代の標準では非常に小さく、今日のトークンのコンテキスト長は数十万、あるいは100万に近いでしょう。そのため、履歴により多くのコンテキスト、より多くのトークンがあり、そのようにしてシーケンスの次のトークンについてより良い予測を行うことができます。
最後に、GPT-2は約1,000億トークンで訓練されました。これも現代の標準では比較的小さいものです。先ほど見たFine webデータセットには15兆トークンがあると言及しましたが、1,000億は非常に小さいものです。
実際、私は楽しみのためにGPT-2を再現しようとしました。それはlm.cというプロジェクトの一部で、GitHubのlm.cリポジトリにあるこの投稿で、その実行を見ることができます。特に、2019年のGPT-2の訓練コストは約4万ドルと推定されていましたが、今日ではそれをはるかに下回ることができます。特に、ここでは約1日と約600ドルかかりましたが、これは本気で試みたわけではなく、今日では本当に100ドル程度まで下げることができると思います。
なぜコストがそれほど下がったのでしょうか。第一に、これらのデータセットは非常に改善され、それらをフィルタリング、抽出、準備する方法がより洗練されてきました。そのため、データセットの品質が非常に向上しています。これが一つの理由です。しかし、本当に最大の違いは、ハードウェアの面でコンピュータが非常に高速になったことです。そしてこれらのモデルを実行し、ハードウェアから可能な限りの速度を引き出すためのソフトウェアも、誰もがこれらのモデルに焦点を当て、非常に高速に実行しようとしたため、はるかに改善されています。
このGPT-2の再現の詳細すべてには立ち入れません。これは長い技術的な投稿ですが、研究者としてこれらのモデルの一つを実際に訓練するとはどのようなものか、どのように見え、どのように感じるのか、その直感的な感覚を与えたいと思います。少しその感覚を示させてください。
これがどのように見えるか、横にスライドさせましょう。ここで私は今GPT-2モデルを訓練しています。ここで起こっているのは、このような各行がモデルへの1回の更新です。ここで私たちは基本的に、これらのトークンの各々で予測を改善し、ニューラルネットのこれらの重みまたはパラメータを更新していることを覚えておいてください。
ここで各行は、ニューラルネットワークへの1回の更新で、シーケンスの次のトークンをより良く予測できるようにパラメータを少し変更します。特に、ここの各行は訓練セットの100万トークンの予測を改善します。基本的に、このデータセットから100万トークンを取り出し、シーケンスで次に来るトークンとしてのそのトークンの予測を、100万すべてで同時に改善しようとしています。
これらの各ステップで、そのためにネットワークを更新しています。注目すべき数字は、損失と呼ばれるこの数字です。損失は、ニューラルネットワークが現在どれだけ良く機能しているかを示す単一の数字で、低い損失が良いように作られています。ニューラルネットワークに更新を加えるにつれて損失が減少していることがわかります。これはシーケンスの次のトークンについてより良い予測を行うことに対応します。
損失は、ニューラルネットワーク研究者として見ている数字です。あなたは親指をひねり、コーヒーを飲みながら、これが良く見えることを確認します。各更新で損失が改善され、ネットワークが予測において改善していることを確認します。
ここでは、更新ごとに100万トークンを処理しており、各更新は約7秒かかり、最適化の合計32,000ステップを処理する予定です。32,000ステップで各100万トークンは、約330億トークンを処理することになります。現在は32,000のうち約420ステップなので、まだ1%強しか完了していません。これは10分か15分ほど実行しているだけだからです。
20ステップごとに、この最適化が推論を行うように設定しています。ここで見ているのは、モデルがシーケンスの次のトークンを予測しているところです。ランダムに開始し、トークンを継続的に入力していきます。この推論ステップを実行しており、何か表示されるたびに新しいトークンです。これがまだあまり一貫性がないことがわかります。訓練の1%しか進んでおらず、モデルはまだシーケンスの次のトークンを予測することがそれほど得意ではないことを覚えておいてください。
そのため、出てくるのは少しでたらめなようなものです。しかし、まだ少しローカルな一貫性があります。「since she is mine it’s a part of the information should discuss my father great companions Gordon showed me sitting over at」などです。良く見えないことは分かっていますが、最適化を開始したときがどのように見えたのか、上にスクロールして見てみましょう。
ステップ1のところまで。最適化の20ステップ後、ここで得られているものは完全にランダムに見えます。これはもちろん、モデルがパラメータへの20回の更新しか受けていないためで、ランダムなネットワークなのでランダムなテキストを生成しているのです。少なくとも、これと比較すると、モデルはずっと良くなり始めているのが分かります。実際、32,000ステップすべてを待つと、モデルは実際にかなり一貫性のある英語を生成し、トークンストリームが正しく、英語をずっとよく作り出すところまで改善するでしょう。
これはあと1日か2日実行する必要があり、この段階では損失が減少し、すべてが良く見えることを確認するだけです。私のラップトップでこの最適化を実行しているわけではありません。それは高価すぎるでしょう。このニューラルネットワークを実行し、改善する必要があり、すべてのこのデータが必要だからです。ネットワークが大きすぎるため、コンピュータでうまく実行することはできません。
これはすべてクラウド上のコンピュータで実行されており、これらのモデルの訓練の計算面の話とそれがどのように見えるかに触れたいと思います。見てみましょう。
この最適化を実行しているコンピュータは、8x H100ノードです。単一のノードまたは単一のコンピュータに8つのH100があります。私はこのコンピュータをレンタルしており、それはクラウドのどこかにあります。実際に物理的にどこにあるのかは分かりません。私がレンタルするのが好きな場所はLambdaですが、このサービスを提供する会社は他にもたくさんあります。
スクロールダウンすると、H100(これらはGPUです)を持つこれらのコンピュータのオンデマンド価格が表示されます。後で示しますが、例えば、8x NVIDIA H100 GPUのオンデマンド、このマシンはGPUあたり1時間3ドルで提供されます。これらをレンタルすると、クラウド上のマシンを得て、そこに入ってこれらのモデルを訓練することができます。
これらのGPUはこのように見えます。これが1つのH100 GPUで、このように見えます。これをコンピュータにスロットインします。GPUはこれらのニューラルネットワークの訓練に完璧な適合です。なぜなら、計算的に非常に高価ですが、計算に多くの並列性を示すからです。これらのニューラルネットワークの訓練の背後にある行列乗算を解くために、多くの独立したワーカーが同時に作業できます。
これはH100の1つだけですが、実際には複数を一緒に配置します。8つを単一のノードにスタックし、その後、複数のノードを1つのデータセンターまたは1つのシステムにスタックできます。データセンターを見ると、このように見えるものが出てきます。1つのGPUが8つのGPUになり、1つのシステムになり、多くのシステムになります。これらはより大きなデータセンターで、もちろんはるかに高価になります。
起こっているのは、大手テクノロジー企業がすべて、これらの言語モデルを訓練できるようにこれらのGPUを欲しがっているということです。それらは非常に強力だからです。これが、今日NVIDIAの株価が3.4兆ドルになっている基本的な理由であり、NVIDIAが急成長した理由です。これはゴールドラッシュです。このゴールドラッシュは、GPUを手に入れ、十分な数のGPUを手に入れて、それらすべてがこの最適化を実行するために協力できるようにすることです。
それらは何をしているのでしょうか。それらはすべて、Fine webデータセットのようなデータセットで次のトークンを予測するために協力しています。これが、非常に高価な計算ワークフローです。より多くのGPUを持つほど、より多くのトークンを予測し、改善しようとすることができ、このデータセットをより速く処理し、より速く反復し、より大きなネットワークを得て、より大きなネットワークを訓練することができます。
これが、それらのマシンが行っていることであり、これが全てがそれほど大きな話題になっている理由です。例えば、これは約1ヶ月前くらいの記事ですが、これがイーロン・マスクが単一のデータセンターで10万のGPUを獲得することが大きな話題になっている理由です。これらのGPUはすべて非常に高価で、大量の電力を消費し、それらはすべてシーケンスの次のトークンを予測し、そうすることでネットワークを改善しようとしています。おそらく、ここで見ているものよりもはるかに一貫性のあるテキストを、はるかに速く得られるでしょう。
残念ながら、このような本当に大きなモデルを訓練するために1,000万から1億ドルを費やす余裕はありませんが、幸運なことに、これらのモデルを日常的に訓練し、訓練が終わると一部をリリースする大手テクノロジー企業に頼ることができます。彼らはこのネットワークを訓練するために膨大な計算を費やし、最適化の終わりにネットワークをリリースします。彼らが多くの計算を行ってくれたので、それは非常に有用です。
これらのモデルを日常的に訓練する企業は多くありますが、実際にはこれらの「ベースモデル」と呼ばれるものをリリースする企業は多くありません。ここで最後に出てくるモデルがベースモデルです。ベースモデルとは何でしょうか。それはトークンシミュレータです。インターネットテキストのトークンシミュレータです。
それ自体では有用ではありません。なぜなら、私たちが欲しいのは「アシスタント」と呼ばれるものだからです。質問をして回答を得たいのです。これらのモデルはそれを行いません。インターネットのリミックスのようなものを作り出すだけです。インターネットページの夢を見るのです。ベースモデルはあまり頻繁にリリースされません。なぜなら、それらはまだ必要な他のいくつかのステップの第一段階に過ぎないからです。しかし、いくつかのリリースはありました。
例えば、GPT-2モデルは2019年に16億…申し訳ありません、15億のモデルをリリースしました。このGPT-2モデルはベースモデルです。モデルのリリースとは何でしょうか。これらのモデルをリリースするとはどういうことでしょうか。これがGitHub上のGPT-2リポジトリです。
モデルをリリースするには基本的に2つのものが必要です。第一に、通常はPythonコードで、彼らのモデルで行う操作の詳細なシーケンスを記述したものです。このTransformer、このニューラルネットワークで行われるステップのシーケンスを記述しているのが、このコードです。このコードは、このニューラルネットワークのいわゆる順伝播を実装しています。
そのニューラルネットワークをどのように配線したのかの具体的な詳細が必要です。これは単なるコンピュータコードで、通常は数百行のコードに過ぎません。それほど複雑ではなく、通常はかなり標準的なものです。標準的でないのはパラメータです。そこに実際の価値があります。このニューラルネットワークのパラメータは何でしょうか。16億個のパラメータがあり、それらが必要です。
正しい設定、または本当に良い設定が必要です。そのため、このソースコードに加えて、この場合約15億個のパラメータをリリースします。これらは単なる数字です。15億個の数字の単一のリストで、トークンが上手く出てくるように、すべてのノブの正確で良い設定です。基本モデルをリリースするにはこの2つが必要です。GPT2はリリースされましたが、先ほど述べたように、これはかなり古いモデルです。実際に次に見ていきたいのはLlama 3と呼ばれるモデルです。GPT2は再度言いますと、16億個のパラメータで1000億のトークンで学習されました。Llama 3はもっと大きく、よりモダンなモデルです。Metaによってリリース・学習され、450億個のパラメータで15兆のトークンを同じような方法で、ただしずっと大規模に学習しています。
Metaはまた、Llama 3をこの論文とともにリリースしました。この論文では多くの詳細が説明されており、リリースされた最大の基本モデルはLlama 3.1 405Bパラメータモデルです。これが基本モデルで、基本モデルに加えて – 動画の後半部分の予告として – インストラクトモデルもリリースされました。インストラクトとは、これがアシスタントで質問に答えてくれるということを意味します。その部分は後ほど説明します。今は、このトークンシミュレーターである基本モデルを見て、それで遊んでみて、これは何なのか、どのように機能するのか、そして大規模なニューラルネットワークで大量のデータを使って最後まで最適化を実行すると何が得られるのかを考えてみましょう。
基本モデルとやり取りするのに私のお気に入りの場所は、405B Llama 3.1の基本モデルを提供しているHyperbolicsというこの会社です。ウェブサイトにアクセスして、登録などが必要かもしれませんが、モデルの中でLlama 3.1 405Bベースを使用していることを確認してください。基本モデルでなければなりません。ここで、最大トークン数は生成するトークン数なので、計算資源を無駄にしないように128トークンに減らしましょう。他の設定はそのままにしておきます。ここでは詳細には立ち入りません。
基本的に、ここで起こることは推論時に起こることと同じです。これは単にトークン列を続けるだけで、与えられた prefix に基づいて続けていきます。まず、このモデルがまだアシスタントではないことをお見せしたいと思います。例えば、「2たす2は何ですか」と尋ねても、「4です。他に何かお手伝いできることはありますか」とは答えません。なぜなら、「2たす2は何ですか」はトークン化され、それらのトークンは単なるプレフィックスとして機能し、モデルが次にすることは次のトークンの確率を得ることだけだからです。それは単なる非常に高価な自動補完で、基本的にウェブページである学習文書で見た統計に基づいて次に何が来るかを予測します。
では、どんなトークンが続くか見てみましょう。ここでは実際に質問に答えて、哲学的な領域に入っていきました。もう一度試してみましょう。コピーペーストして、「2たす2は何ですか」を最初からやり直してみます。また違う方向に行きました。もう1つ強調したいのは、このシステムは毎回ゼロから始めるということです。
システムは確率的なので、同じトークンのプレフィックスに対して常に異なる答えが得られます。その理由は、確率分布を得てそこからサンプリングするため、常に異なるサンプルが得られ、その後常に異なる領域に入っていくからです。このケースでは、これが何なのかわかりません。もう一度試してみましょう。インターネットで見たことをただ続けているだけです。統計的なパターンを再現しているだけなのです。
まず、これはまだアシスタントではありません。トークンの自動補完であり、2番目に、これは確率的なシステムです。重要なのは、このモデルは多くのアプリケーションではまだそれ自体では非常に有用ではないかもしれませんが、シーケンスの次のトークンを予測するタスクにおいて、モデルは世界について多くを学び、その知識をすべてネットワークのパラメータに格納しているということです。
思い出してください、私たちのテキストはこのようなものでした。インターネットのウェブページです。そして今、これら全てがネットワークの重みに圧縮されています。405億個のパラメータを、インターネットの圧縮と考えることができます。450億個のパラメータは一種のZIPファイルのようなものです。ただし、これは可逆圧縮ではなく、損失のある圧縮です。インターネットの要点のようなものが残され、そこから生成することができます。
今、私たちは基本モデルに適切にプロンプトを与えることで、パラメータに隠れているこの知識の一部を引き出すことができます。例えば、ここにその知識を引き出すかもしれないプロンプトがあります。「パリで見るべきトップ10のランドマークのリスト」というように書いています。モデルにこのリストを続けさせようとしているからです。エンターを押して、それが機能するか見てみましょう。
リストを始めて、それらのランドマークについて多くの情報を提供しようとしているのがわかります。ここでの情報を完全に信頼することはできないかもしれません。これは全てインターネット文書の再現に過ぎないことを覚えておいてください。インターネットデータで非常に頻繁に出現することは、まれにしか起こらないことに比べて、正しく記憶される可能性が高いです。
情報がパラメータに明示的に格納されているわけではなく、全てがインターネット文書の漠然とした再現なので、ここにある情報や情報の一部を完全には信頼できません。とはいえ、おそらくおおよそ正しいものを得ることができました。私にはこれが大体正しいかどうかを確認する専門知識はありませんが、モデルの知識を多く引き出すことができ、この知識は正確で厳密なものではなく、漠然として確率的で統計的なものであり、頻繁に起こることは記憶される可能性が高いということがわかります。
このモデルの振る舞いについて、もういくつか例をお見せしたいと思います。最初にお見せしたいのは、シマウマのWikipediaページに行って、最初の1文だけをコピーペーストした例です。エンターを押すと、どんな補完が得られるでしょうか。
モデルがここで生成しているのは、このWikipediaエントリーの正確な再現です。このWikipediaエントリーを純粋に記憶から暗唱しています。この記憶はパラメータに格納されており、512トークンのどこかの時点でモデルがWikipediaエントリーから外れる可能性はありますが、大部分が記憶されているのがわかります。
例えば、この文が今までに出てきたかどうか確認してみましょう。まだ軌道に乗っています。ここを確認してみましょう。まだ軌道に乗っています。最終的には外れていくでしょう。正確に覚えていられないからです。これは単に非常に大きな部分を暗唱しただけです。最終的には逸脱します。
これが起こる理由は、これらのモデルが記憶に非常に優れる可能性があるからです。通常、最終的なモデルではこれは望ましくありません。これは再現と呼ばれ、学習したものを直接引用することは通常望ましくありません。
これが起こる実際の理由は、例えばWikipediaのような文書の場合、これらの文書が非常に質の高いソースとみなされる場合、例えばWikipediaのように、モデルを学習させる際にそれらのソースから優先的にサンプリングすることが非常に多いからです。基本的に、モデルはおそらくこのデータで数エポック行っています。つまり、このウェブページを10回程度見たということです。
人間が何かのテキストを何度も読む、例えば100回読むようなものです。そうすると暗唱できるようになります。このモデルも同様です。何かを頻繁に見すぎると、後で記憶から暗唱できるようになります。ただし、これらのモデルは人間よりもプレゼンテーションあたりの効率が非常に高くなる可能性があります。おそらくこのWikipediaエントリーを10回しか見ていませんが、基本的にこの記事を正確にパラメータに記憶しています。
次にお見せしたいのは、モデルが学習中に確実に見ていないものです。例えば、論文に行って前学習データを見ると、データセットの知識のカットオフが2023年末までであることがわかります。そのため、この時点以降の文書は見ていないはずで、確実に2024年の選挙とその結果については見ていません。
未来からのトークンでモデルをプライミングすると、トークン列を続け、自身のパラメータにある知識に基づいて最善の推測を行います。それがどのようなものかを見てみましょう。「共和党候補トランプは…2017年から米国大統領を務め」、この時点以降何と言うか見てみましょう。
例えば、モデルはランニングメイトやどの候補と戦うかなどを推測する必要があります。エンターを押してみましょう。ここではマイク・ペンスがランニングメイトで、ヒラリー・クリントンとティム・ケインのチケットと対戦したと言っています。これは言語モデルによると起こり得た別の平行宇宙かもしれません。
同じプロンプトで別のサンプルを取ってみましょう。今回はロン・デサンティスがランニングメイトで、ジョー・バイデンとカマラ・ハリスと戦ったとしています。これはまた別の平行宇宙です。モデルは教育を受けた推測を行い、学習した知識に基づいてトークン列を続けます。ここで見ているものは全て幻覚と呼ばれるもので、モデルは確率的な方法で最善の推測を行っているだけです。
次にお見せしたいのは、これがまだ基本モデルでアシスタントモデルではないにもかかわらず、プロンプトデザインを工夫すれば実用的なアプリケーションに活用できるということです。ここに私たちが「few-shotプロンプト」と呼ぶものがあります。
ここには10個の単語、または10組の英語の単語とコロンと韓国語訳があります。10組あって、最後に「teacher:」があり、ここで5トークンほどの補完を行います。これらのモデルには「文脈内学習能力」と呼ばれるものがあり、これはコンテキストを読むにつれて、データに何らかのアルゴリズムパターンがあることをその場で学習し、そのパターンを続けることを知っているということです。これは一種の文脈内学習と呼ばれます。
翻訳者の役割を担い、補完を押すと、teacherの翻訳として「Sim」が出てきました。これは正しいです。このように、まだ基本モデルだけでも、プロンプトを工夫することでアプリケーションを構築することができます。これは文脈内学習能力と呼ばれるものに依存し、「few-shotプロンプト」と呼ばれるものを構築することで実現されます。
最後に、プロンプトだけで完全な言語モデルアシスタントを具現化する賢い方法があることをお見せしたいと思います。そのコツは、有用なAIアシスタントと人間の会話のようなウェブページに見えるようにプロンプトを構造化することです。そうすると、モデルはその会話を続けます。
実際、プロンプトを書くためにChatGPT自体に頼りました。これはメタ的ですが、「基本モデルしかないけどLLMアシスタントを作りたい。プロンプトを書いてほしい」と伝えました。これが返してきたものは実際にかなり良いものでした。
「AIアシスタントと人間の会話です。このAIアシスタントは知識が豊富で、役立つ存在で、幅広い質問に答える能力があります」というような感じです。説明を与えるだけでは不十分で、few-shotプロンプトを作成する方が効果的です。
ここには人間とアシスタントのやり取りが数回あり、最後に実際のクエリを入れる場所があります。これを基本モデルのプロンプトにコピーペーストして、「人間:」の後に実際のプロンプト「なぜ空は青いのですか」を入れて実行してみましょう。
「空が青く見えるのは、レイリー散乱という現象によるものです」などと答えています。基本モデルは単に列を続けているだけですが、列が会話のように見えるため、その役割を担っているのです。ただし、少し微妙な点があります。ここでアシスタントの応答が終わると、次の人間の質問を勝手に生成して続けていきます。
しかし、タスクを達成できたことがわかります。この「なぜ空は青いのですか」という質問だけを取り出して更新すると、もちろん基本モデルではうまく機能しないと予想されます。何が出てくるかわかりません。さらに質問が続くだけですね。これが、基本モデルしかない場合でもアシスタントを作成する1つの方法です。
これが、ここ数分で話した内容の簡単なまとめです。ここで全体を振り返ってみましょう。ChatGPTのようなLLMアシスタントを学習させたいと考えています。その最初のステージである事前学習について議論しました。実際には、インターネット文書を取り、それらをトークンという小さなテキストの塊に分解し、ニューラルネットワークを使ってトークン列を予測することに帰着します。
このステージ全体の出力が、このネットワークのパラメータを設定した基本モデルです。この基本モデルは基本的にトークンレベルでのインターネット文書シミュレーターです。インターネット文書と同じような統計を持つトークン列を生成できます。いくつかのアプリケーションで使用できることを見ましたが、もっと良くする必要があります。
アシスタントが欲しいのです。質問をして答えを得られるようにしたいのです。そのため、次のステージである事後学習に進む必要があります。基本モデル、つまりインターネット文書シミュレーターを事後学習に引き渡します。これらのモデルの事後学習を行ういくつかの方法について議論しようとしています。
事後学習のこれらのステージは、計算コストがはるかに低くなります。大規模なデータセンター、大量の計算リソース、何百万ドルもの費用のほとんどは事前学習ステージにかかります。しかし今は、やや安価ではありますが非常に重要なステージである事後学習に進みます。ここでLLMモデルをアシスタントに変えるのです。
モデルにインターネット文書をサンプリングさせるのではなく、質問に答えさせる方法を見ていきましょう。つまり、会話について考え始める必要があります。これらの会話は複数のターンを持つことができ、最も単純なケースでは人間とアシスタントの間の会話です。
例えば、会話は次のようになる可能性があります:
人間が「2たす2は何ですか」と言うと、アシスタントは「2たす2は4です」のように応答するはずです。人間が「もし+の代わりにだったら?」と続けると、アシスタントはこのように応答できます。
ここで3つ目の例では、アシスタントがある種のパーソナリティを持つことができることを示しています。親切な感じなのです。そして3つ目の例では、人間が私たちが支援したくないことを求めている場合、拒否と呼ばれるものを生成できることを示しています。「それはお手伝いできません」と言えるのです。
つまり、アシスタントが人間とどのように相互作用するかを考え、会話におけるアシスタントとその振る舞いをプログラムしたいと考えています。これはニューラルネットワークなので、これらを明示的にコードでプログラムすることはできません。そのような方法でアシスタントをプログラムすることはできません。
これはニューラルネットワークなので、すべてはデータセット上のニューラルネットワークの学習を通じて行われます。そのため、会話のデータセットを作成することで、暗黙的にアシスタントをプログラムすることになります。これらはデータセットにおける3つの独立した会話の例です。実際のデータセットについてお見せしますが、それはもっと大規模で、何十万もの多ターンの長い会話を含み、多様なトピックをカバーするでしょう。
しかし、ここでは3つの例だけを示しています。基本的にこれは、アシスタントが例によってプログラムされるという仕組みです。「22=4は2+2と同じです」などのこのデータはどこから来るのでしょうか。これは人間のラベラーから来ます。基本的に、人間のラベラーに会話のコンテキストを与え、その状況で理想的なアシスタントの応答を求めます。
人間があらゆる状況で理想的な応答を書き出し、それからモデルにそのような応答を模倣するように学習させます。つまり、事前学習ステージで作成した基本モデルを取り、インターネット文書で学習したこの基本モデルを取り、インターネット文書のデータセットを捨て、新しいデータセットに置き換えます。
それは会話のデータセットになり、モデルをこれらの会話、この新しい会話のデータセットで学習し続けます。すると、モデルは非常に急速に適応し、このアシスタントが人間のクエリにどのように応答するかの統計を学習します。その後、推論時にアシスタントをプライミングして応答を得ることができ、人間のラベラーがその状況で何をするかを模倣することになります。
それが理解できれば、例を見ていくことでもっと具体的になります。また、この事後学習ステージでは、基本的にモデルの学習を続けますが、事前学習ステージは実際には何千台ものコンピューターで約3ヶ月かかる可能性があります。事後学習ステージは通常はるかに短く、例えば3時間程度です。
これは、ここで手動で作成する会話のデータセットが、インターネット上のテキストのデータセットよりもはるかに小さいためです。そのため、この学習は非常に短くなりますが、基本的に基本モデルを取り、全く同じアルゴリズム、全く同じすべてを使って学習を続けます。ただし、データセットを会話用に置き換えるだけです。
では、これらの会話とは何か、それらをどのように表現するのか、モデルに生のテキストではなく会話を見せるにはどうすればよいのか、そしてこの種の学習の結果は何か、モデルについて心理学的な意味で何が得られるのかという質問に移りましょう。
まず、会話のトークン化について話しましょう。これらのモデルでは、すべてがトークンに変換される必要があります。すべてはトークン列に関するものだからです。では、会話をトークン列に変換するにはどうすればよいのでしょうか。
そのためには、何らかのエンコーディングを設計する必要があります。これは、例えばインターネットのTCP/IPパケットと似ています。情報の表現方法、すべてがどのように構造化されているかについて、正確なルールとプロトコルがあり、すべてのこのようなデータが紙に書かれた方法で配置され、誰もが同意できるようになっています。
同じことがLLMでも起こっています。データ構造の種類が必要で、会話のようなデータ構造がトークンとの間でどのようにエンコード・デコードされるかについてのルールが必要です。では、トークン空間でこの会話をどのように再現するかお見せしましょう。
テキストトークナイザーに行くと、その会話を取ることができ、これが言語モデル用にどのように表現されるかを見ることができます。ここでは、この2ターンの会話でユーザーとアシスタントを繰り返しています。見た目は醜いですが、実際には比較的シンプルです。
トークン列に変換される方法は最後の部分が少し複雑ですが、最終的にはユーザーとアシスタントの間のこの会話が49トークンになります。これは49トークンの1次元のシーケンスであり、これらがトークンです。
異なるLLMは少し異なるフォーマットやプロトコルを持ち、今は少し野生的な状態ですが、例えばGPT4では次のような方法で行います。IMOREスタートと呼ばれる特別なトークンがあり、これは仮想モノローグの開始の略です。
それから誰のターンかを指定する必要があります。正直なところ、なぜそう呼ばれているのかは実際にはわかりません。例えばユーザーはトークン428で、それから内部モノローグセパレーターがあり、その後に質問の正確なトークンが続き、最後にIMエンド、仮想モノローグの終了で閉じる必要があります。
基本的に、「2たす2は何ですか」というユーザーからの質問は、これらのトークンのトークン列になります。ここで重要なのは、IMスタートはテキストではないということです。IMスタートは追加される特別なトークンで、新しいトークンです。このトークンはこれまでに学習されていません。事後学習ステージで作成する新しいトークンです。
これらの特別なトークン、IMセップ、IMスタートなどが導入され、テキストと組み合わされて、ターンの開始であることをモデルに学習させます。誰のターンの開始なのか、ユーザーのターンの開始で、これがユーザーが言うことで、ユーザーが終わり、新しいターンの開始でアシスタントのターンで、アシスタントは何を言うのかといった具合です。
そしてこの会話はトークン列に変換されます。ここでの具体的な詳細は実際にはそれほど重要ではありません。私が具体的な用語で示そうとしているのは、構造化されたオブジェクトとして考える会話が、何らかのエンコーディングを通じて1次元のトークン列に変換されるということです。
これが1次元のトークン列なので、以前に適用したすべてのものを適用できます。今は単なるトークン列で、言語モデルをそれで学習できます。以前と同じように次のトークンを予測しているだけです。会話を表現し、学習できます。
では、テスト時、推論時にはどのように見えるのでしょうか。モデルを学習させ、この種の会話のデータセットで学習させたとして、推論時にはどうなるのでしょうか。ChatGPTで対話をする時、どのように機能するのでしょうか。
基本的に、これがすでに入力されていたとします。「2たす2は何ですか」「2たす2は4です」そして「掛け算だったら?」と入力すると、IMエンドで終わります。実際にOpenAIのサーバーなどで起こることは、IMスタート、アシスタント、IMセップを入れ、ここで終わります。
このコンテキストを構築し、モデルからサンプリングを開始します。この段階で、良い最初のトークン、良い2番目のトークン、良い3番目のトークンは何かをモデルに尋ね、ここでLMが引き継いで、例えばこのような応答を作成します。
これと同一である必要はありませんが、データセットにこの種の会話があれば、この味わいを持つことになります。これがプロトコルがどのように機能するかのおおまかな説明です。ただし、このプロトコルの詳細は重要ではありません。
繰り返しますが、私の目標は、すべてが単なる1次元のトークン列になることを示すことです。そのため、すでに見たすべてを適用できますが、今は会話を学習し、基本的に会話も生成しています。
では、これらのデータセットが実際にはどのように見えるのか話に移りましょう。この方向での最初の論文として、OpenAIの2022年の論文をお見せしたいと思います。この論文は「InstructGPT」と呼ばれ、あるいは彼らが開発した技術と呼ばれました。これは、OpenAIが言語モデルを取り、会話で微調整する方法について初めて話した時でした。
この論文にはいくつかの詳細があり、その内容を説明していきたいと思います。まず、セクション3.4に注目したいと思います。ここでは、これらの会話を構築するためにUpworkやScale AIを通じて雇用した人間の請負業者について説明しています。
プロの人間のラベラーが関与し、プロンプトを考え出し、理想的なアシスタントの応答も完成させることが彼らの仕事です。ラベラーが考え出したプロンプトの例を見てみましょう。「私のキャリアへの熱意を取り戻すためのアイデアを5つ挙げてください」「次に読むべきSF小説のトップ10は?」など、様々な種類のプロンプトがあります。「この文をスペイン語に翻訳してください」など、人々が考え出した多くのプロンプトがあります。
彼らはまずプロンプトを考え出し、そのプロンプトに答え、理想的なアシスタントの応答を提供します。では、これらのプロンプトに対してどのような理想的なアシスタントの応答を書くべきかをどのように知るのでしょうか。
少し下にスクロールすると、人間のラベラーに与えられるラベル付けの指示の抜粋があります。例えばOpenAIのような言語モデルを開発している会社は、人間が理想的な応答を作成する方法についてのラベル付けの指示を書きます。
ここに例として、そのようなラベル付けの指示の抜粋があります。高レベルでは、有用で、真実を語り、害のない応答を求めています。ビデオを一時停止して詳細を見ることもできますが、基本的には、有用であろうとし、真実を語ろうとし、後のChatGPTでシステムに扱ってほしくない質問には答えないようにするということです。
大まかに言えば、会社がラベル付けの指示を作成します。通常、これほど短くはなく、何百ページもあり、人々はそれを専門的に学習しなければなりません。そして、それらのラベル付けの指示に従って理想的なアシスタントの応答を書き出します。この論文で説明されているように、これは非常に人間が重要なプロセスです。
InstructGPTのデータセットはOpenAIによって公開されませんでしたが、このようなセットアップを再現しようとするオープンソースの取り組みがいくつかあります。例えば、以前のOpen Assistantの取り組みを知っていますが、これは多くの例の1つだと思います。例をお見せしたいと思います。
これはインターネット上の人々で、OpenAIが人間のラベラーと行ったのと同様に、これらの会話を作成するよう求められました。ここに、「経済学における『独占』という用語の重要性について短い説明を書いてくれませんか?例を使ってください」というエントリーがあります。
同じ人または別の人が応答を書き出します。ここにアシスタントの応答があり、同じ人または別の人が実際にこの理想的な応答を書き出します。そして、これは会話がどのように続く可能性があるかの例です。「今度は犬に説明してください」という具合に、少しシンプルな説明を考え出すこともできます。
これがラベルとなり、これで学習することになります。学習時に起こることは、もちろん推論時のテスト時に人々が将来尋ねる可能性のある質問をすべてカバーすることはできません。将来のプロンプトをすべてカバーすることは不可能です。
しかし、これらの例のデータセットがいくつかあれば、モデルは学習中にこの有用で、真実を語り、害のないアシスタントというペルソナを身につけ始めます。これはすべて例によってプログラムされ、これらの例の行動の会話があり、10万個ほどあれば、モデルは統計的なパターンを理解し始め、このアシスタントのパーソナリティを身につけ始めます。
テスト時にこのような質問を受けた場合、学習セットにあった通りの答えを暗唱する可能性もありますが、それよりも、モデルは同じような雰囲気のことを行い、これが求められている種類の答えだと理解することの方が可能性が高いです。
つまり、私たちはシステムを例によってプログラムしており、システムは会社が作成するラベル付けの指示に反映されるような、有用で、真実を語り、害のないアシスタントというペルソナを統計的に採用します。
InstructGPT論文以降の2-3年で最先端が進歩したことをお見せしたいと思います。特に、人間だけですべての重要な作業を行うことはもはや一般的ではありません。それは、今では言語モデルがあり、これらの言語モデルがデータセットと会話の作成を支援しているからです。
人々が文字通りゼロから応答を書き出すことは非常にまれです。既存のLLMを使って答えを考え出し、それを編集するなどの方が可能性が高いです。LLMがこの事後学習スタックに浸透し始めた方法は多くあり、LLMは基本的にこれらの大規模な会話データセットの作成を支援するために広く使用されています。
Ultra Chatは、より現代的な会話データセットの一例として示したいと思います。これは非常に大きな部分が合成的ですが、人間の関与もあると思います。それについては間違っているかもしれません。通常、少しの人間の関与はありますが、大量の合成的な支援があります。
これはすべて異なる方法で構築されており、Ultra Chatは現在存在する多くのSFTデータセットの1つの例に過ぎません。示したいのは、これらのデータセットには今や何百万もの会話があり、これらの会話はほとんどが合成的ですが、おそらく人間によってある程度編集されており、非常に多様な分野をカバーしているということです。
これらは今では相当に広範なアーティファクトであり、SFTミックスチャーと呼ばれるものがあります。つまり、多くの異なる種類やソースのミックスチャーがあり、部分的に合成的で部分的に人間によるものですが、大まかに言えば、まだSFTデータセットがあり、それらは会話で構成され、以前と同じように学習しています。
最後に指摘したいのは、AIと話すことの魔法を少し解きたいということです。ChatGPTに行って質問をしてエンターを押すと、返ってくるものは学習セットで起こっていることと統計的に一致しており、これらの学習セットは実際にはラベル付けの指示に従う人間に起源があります。
実際にChatGPTで誰と話しているのか、あるいはどのように考えるべきでしょうか。それは魔法のAIから来ているのではありません。大まかに言えば、これらの会社が書いたラベル付けの指示に基づく人間のラベラーを統計的に模倣することから来ています。
つまり、人間のラベラーを模倣しているようなもので、ChatGPTからの答えは人間のラベラーのシミュレーションのようなものです。それは、この種の会話で人間のラベラーは何を言うだろうかと尋ねているようなものです。
このラベラーはインターネット上のランダムな人ではありません。これらの会社は実際に専門家を雇用するからです。例えば、コードについての質問をする場合、これらの会話データセットの作成に関与する人間のラベラーは通常、教育を受けた専門家です。
つまり、魔法のAIと話しているのではなく、平均的なラベラーのシミュレーションと話しているのです。このラベラーはおそらかなり高度なスキルを持っていますが、これらのデータセットの構築で雇用されるような人のような瞬間的なシミュレーションと話しているのです。
もう1つ具体例を挙げてから先に進みましょう。例えば、ChatGPTに行って「パリで見るべきトップ5のランドマークを推薦してください」と言ってエンターを押すと、ここで出てくるものをどのように考えるべきでしょうか。
これは、すべてのランドマークを研究し、無限の知性を使ってランク付けした魔法のAIではありません。私が得ているのは、OpenAIに雇用されたラベラーの統計的なシミュレーションです。大まかにそのように考えることができます。
この特定の質問がOpenAIの事後学習データセットのどこかにある場合、そのラベラーが5つのランドマークについて書き留めた答えと非常によく似た答えを見る可能性が高いです。ラベラーはどのようにしてこれを考え出すのでしょうか。
彼らはインターネットに行き、20分ほど自分で少し調査をして、リストを作成します。彼らがこのリストを作成し、これがデータセットにある場合、アシスタントから提出された正しい答えを見る可能性が非常に高いです。
この特定のクエリが事後学習データセットの一部でない場合、ここで得られるものは少し創発的です。モデルは統計的にこの学習セットにあるランドマークの種類を理解しており、それらは通常著名なランドマーク、人々が通常見たいランドマーク、インターネットで頻繁に話題になるランドマークです。
モデルはインターネットでの事前学習から既に大量の知識を持っていることを覚えておいてください。おそらくパリやランドマーク、人々が見たいものの種類について多くの会話を見ているでしょう。事前学習の知識が事後学習データセットと組み合わさって、この種の模倣が生まれるのです。
これが、統計的な意味でここで舞台裏で起こっていることを考える方法です。では、私がLLM心理学と呼ぶトピックに移りましょう。これらのモデルの学習パイプラインの創発的な認知効果は何でしょうか。
特に最初に話したいのは、もちろん幻覚です。LLMの幻覚をご存知かもしれません。LLMが物事を作り出し、情報を完全に捏造することです。これはLLMアシスタントの大きな問題です。何年も前の初期のモデルでは大きな問題でしたが、後で説明する緩和策があるため、問題は少し改善されたと思います。
今は、これらの幻覚がどこから来るのかを理解しようとしましょう。ここに学習セットにあるかもしれない3つの会話の具体例があります。これらはデータセットにある可能性のある合理的な会話です。
例えば「クルーズって誰?」「トム・クルーズは有名なアメリカの俳優でプロデューサーです」など、「ジョン・バラッソって誰?」これは米国の上院議員であることがわかります。「ジンギスカンって誰?」「ジンギスカンは…」というような感じです。
これが学習時の会話の様子です。問題は、人間がこれらの各ケースでアシスタントの正しい答えを書くとき、その人がその人物を知っているか、インターネットで調べて、自信に満ちた口調で答えを書くということです。
テスト時に、これは私が完全にランダムに考え出した名前で、この人は存在しないと思います。できるだけランダムに生成しようとしましたが、「オーソン・コヴァッツって誰?」と尋ねると、問題は、アシスタントが単に「知りません」とは言わないことです。
たとえアシスタントと言語モデル自体が、その特徴の中で、活性化の中で、ある意味で脳の中で、この人が馴染みのない人であることを知っているかもしれないとしても、ネットワークのある部分がある意味でそれを知っているかもしれないとしても、「この人は知りません」と言うことは起こりません。
なぜなら、モデルは統計的に学習セットを模倣し、学習セットでは「誰は…」という形式の質問に自信を持って正しい答えで答えているからです。答えのスタイルを採用し、最善を尽くし、統計的に最も可能性の高い推測を提供し、基本的に物事を作り出すことになります。
これらのモデルは、先ほど話したように、インターネットにアクセスできず、調査もしていません。これらは私が呼ぶ統計的なトークンタンブラーで、シーケンスの次のトークンをサンプリングしようとしているだけで、基本的に物事を作り出すことになります。
それがどのように見えるか見てみましょう。ここにHugging Faceの推論プレイグラウンドがあり、わざとFalcon 7Bというモデルを選んでいます。これは数年前の古いモデルです。そのため幻覚に悩まされており、先ほど述べたように最近は改善されていますが、「オーソン・コヴァッツって誰?」とFalcon 7B instructに尋ねてみましょう。
「オーソン・コヴァッツはアメリカの作家でSF作家です」これは完全に偽りです。幻覚です。もう一度試してみましょう。これらは統計的なシステムなので、再サンプリングできます。今回は「オーソン・コヴァッツは1950年代のテレビ番組の架空のキャラクターです」これは完全なでたらめです。もう一度試してみましょう。「彼はマイナーリーグの元野球選手です」
基本的に、モデルは知らないので、確率からサンプリングしているため、多くの異なる答えを出しています。モデルは「オーソン・コヴァッツって誰?アシスタント:」というトークンで始まり、ここで確率を得て、その確率からサンプリングし、物事を作り出しています。
その物事は実際に学習セットの答えのスタイルと統計的に一致しており、それを行っているだけですが、あなたと私にとっては作り出された事実的知識として経験されます。ただし、モデルは基本的に知らず、単に答えのフォーマットを模倣しているだけで、調べに行くことはありません。再度言いますが、単に模倣しているだけです。
では、これをどのように緩和できるでしょうか。例えば、ChatGPTに行って「オーソン・コヴァッツって誰?」と尋ねると、OpenAIの最先端モデルに尋ねていることになります。このモデルは「オーソン・コヴァッツという名の有名な歴史上の人物や公人はいないようです」と教えてくれます。
つまり、このモデルは知らないことを知っており、それを伝えてくれます。古いモデルでは明らかに問題であった幻覚を、学習セットがこのように見える場合、このような種類の答えが得られるのは完全に理にかなっていますが、どうにかして改善したのです。
では、これをどのように修正するのでしょうか。明らかに、データセットにモデルが特定の事実を知らない場合に、アシスタントの正しい答えが「知りません」であるような例が必要です。ただし、モデルが実際に知らない場合にのみ、それらの答えを生成する必要があります。
そこで問題となるのは、モデルが何を知っているか知らないかをどのように知るかです。それを経験的にプローブしてモデルが知っていることと知らないことを把握できます。例えば、MetaがLlama 3シリーズのモデルでどのように幻覚に対処したかを見てみましょう。
彼らが公開したこの論文で、彼らが事実性と呼ぶ幻覚のセクションに行くと、基本的にモデルを調べて何を知っていて何を知らないのかを把握し、その知識の境界を理解し、モデルが知らないことについては、モデルが知らないという正しい答えをデータセットに追加する手順が説明されています。
原則的には非常に簡単なことのように聞こえますが、これはおおむね問題を解決します。解決する理由は、モデルがネットワーク内に自己知識の非常に良いモデルを持っている可能性があることを覚えておいてください。
ネットワークを見て、そのすべてのニューロンを見ると、ネットワーク内のどこかにモデルが不確かな時に点灯するニューロンがあると想像できます。しかし、問題は、そのニューロンの活性化が、モデルが実際に言葉で知らないと言うことに現在配線されていないことです。
ニューラルネットワークの内部は、いくつかのニューロンが表現しているため知っているかもしれませんが、それを表面化せず、代わりに学習セットで見るように自信を持って聞こえるように最善の推測をすることになります。
そのため、基本的にモデルを調べ、知らない場合に「知りません」と言えるようにする必要があります。Metaが大まかに行っていることを説明しましょう。
ここに例があります。「ドミニク・ケクは今日の注目記事です」私はただランダムに行きました。彼らが基本的に行うのは、学習セットのランダムな文書を取り、段落を取り、そしてLLMを使ってその段落に関する質問を構築します。
例えば、私はここでChatGPTでそれを行いました。「この段落からこの文書から3つの具体的な事実に基づく質問を生成し、質問と答えを教えてください」と言いました。LLMは既に情報を作成し、リフレームするのに十分良いです。
情報がこのLLMのコンテキストウィンドウにある場合、これは実際にかなりうまく機能します。記憶に頼る必要はなく、コンテキストウィンドウにあるため、基本的にかなり高い精度でその情報をリフレームできます。
例えば、「彼はどのチームでプレーしましたか?」という質問を生成でき、ここに答えがあり、「何個のカップを獲得しましたか?」などと続きます。今、質問と答えがあり、モデルを調べたいと思います。
大まかに言えば、質問を取り、例えばMetaのLlamaですが、例としてここでMol 7Bを調べてみましょう。これは別のモデルです。このモデルはこの答えについて知っているでしょうか。見てみましょう。
彼はバッファロー・セイバーズでプレーしました。モデルは知っています。プログラム的に決定する方法は、基本的にモデルからこの答えを取り、正しい答えと比較することです。繰り返しますが、モデルは自動的にこれを行うのに十分良くなっています。
ここには人間は関与していません。基本的にモデルからの答えを取り、この答えに従って正しいかどうかを確認するために別のLLMジャッジを使用できます。それが正しい場合、モデルはおそらく知っているということです。これを数回行うことになります。
バッファロー・セイバーズを知っています。もう一度試してみましょう。バッファロー・セイバーズ。3回この事実的な質問について尋ね、モデルは知っているようです。
まずはとても良い状態になりましたので、二つ目の質問に移りましょう。スタンレーカップは何回優勝したかということについて、モデルに問い合わせてみましょう。正解は2回なのですが、モデルは4回と主張しており、これは間違っています。もう一度試してみましょう。今度はキャリアでは優勝していないと言っています。明らかにモデルは正解を知らないわけです。
プログラム的にこれを判断する方法としては、モデルに3回か5回程度質問をして、その回答を正解と比較することです。モデルが正解を知らないとわかれば、そのモデルはこの質問に答えられないということがわかります。そうしたら、トレーニングセットに新しい会話を追加します。「スタンレーカップは何回優勝しましたか?」という質問に対して、「申し訳ありませんが、わかりません」あるいは「覚えていません」という回答を設定します。
これが正しい回答となります。なぜなら、モデルに問い合わせた結果、そのように判断できたからです。様々な種類の質問や文書に対してこれを行うことで、モデルは自身の知識に基づいて回答を拒否する機会を得ることができます。トレーニングセットにそういった例をいくつか含めることで、モデルはその知識ベースの拒否と、ネットワーク内のどこかにあると推測される内部ニューロンとの関連性を学習する機会を得ることができます。
経験的に、これはおそらく当てはまると考えられます。モデルは、不確実性の高いニューロンがある場合、実際には知らないということと、「申し訳ありませんが、覚えていません」などと言うことを許されているという関連性を学習することができます。トレーニングセットにこのような例を含めることで、これは幻覚に対する大きな緩和策となり、これがChatGPTがこのようなことができる理由の概要です。これらは人々が実装してきた緩和策であり、時間とともに事実性の問題を改善してきました。
では、幻覚の問題に対する緩和策その1について説明しました。実は、それ以上のことができます。単に「わかりません」と言うのではなく、緩和策その2として、LLMに事実に基づいて実際に質問に答える機会を与えることができます。
ここで、事実に関する質問をされて答えがわからない場合、あなたや私は何をするでしょうか? 検索を行い、インターネットを使って答えを見つけ出し、それを伝えることができますよね。これと全く同じことをこれらのモデルでも行うことができます。
ニューラルネットワーク内のパラメータに含まれる知識は、モデルが事前学習段階で長い時間前に見たものの漠然とした記憶のようなものだと考えてください。何かを繰り返し読み続ければ覚えているでしょうが、珍しいことであれば、その情報についてはあまり良い記憶がないかもしれません。しかし、あなたや私がするように、単に調べればいいのです。調べる時、基本的にはワーキングメモリを情報で更新し、それを取り出して話したりできるようになります。
そこで、モデルのメモリや記憶を更新できるような同様の仕組みが必要になります。これはツールを導入することで実現できます。このアプローチとしては、単に「申し訳ありませんが、わかりません」と言うのではなく、ツールを使用することを試みることができます。
モデルが特殊なトークンを出力できる仕組みを作ることができます。これは私たちが導入する新しいトークンです。例えば、ここでは2つのトークンを導入し、モデルがこれらのトークンを使用できるプロトコルやフォーマットを導入しています。具体的には、モデルが知らない場合に「申し訳ありませんが、わかりません」と言う代わりに、search startという特殊なトークンを出力するオプションが与えられます。これはbing.comやGoogle検索などに送られるクエリとなります。
クエリを出力し、search endを出力します。ここで何が起こるかというと、モデルからサンプリングを行うプログラム、つまり推論を実行しているプログラムは、search endという特殊なトークンを見ると、シーケンス内の次のトークンのサンプリングを一時停止します。そしてbing.comとのセッションを開き、検索クエリを貼り付け、取得したテキストを全て取得します。そのテキストを取得し、おそらく他の特殊なトークンで表現し直し、そのテキストを括弧で示したようにここにコピー&ペーストします。
テキストがここに来ると、コンテキストウィンドウに入ります。つまり、ウェブ検索からのテキストが、ニューラルネットワークに入力されるコンテキストウィンドウの中に入ります。コンテキストウィンドウはモデルのワーキングメモリのようなものだと考えるべきです。コンテキストウィンドウ内のデータは、モデルが直接アクセスでき、ニューラルネットワークに直接入力されます。もはや漠然とした記憶ではなく、モデルがコンテキストウィンドウ内に持っていて直接利用できるデータとなります。
そのため、その後のトークンをサンプリングする際には、そこにコピー&ペーストされたデータを非常に簡単に参照することができます。これがツールの仕組みです。ウェブ検索は単なるツールの1つで、他のツールについても後ほど見ていきますが、基本的には新しいトークンを導入し、モデルがこれらのトークンを利用できるスキーマを導入し、ウェブ検索機能のような特殊な機能を呼び出すことができるようにします。
では、search startやsearch endなどのこれらのツール、例えばウェブ検索をモデルに正しく使用する方法をどのように教えるのでしょうか? これも再びトレーニングセットを通じて行います。ウェブ検索の使用方法を例示するデータと会話が必要になります。つまり、どのような状況でウェブ検索を使用するのか、それがどのように見えるのか、例としてどのように検索を開始するのかなどです。
トレーニングセットに数千の例があれば、モデルは実際にこのツールの使い方をかなり上手く理解します。クエリの構造化方法を理解するでしょう。もちろん、事前学習データセットと世界についての理解により、ウェブ検索とは何かを実際に理解しているので、どのような検索クエリが適切かについても本質的にかなり良く理解しています。そのため、すべてがうまく機能します。このような新しいツールの使い方を示す例をいくつか用意するだけで、情報を取得し、コンテキストウィンドウに入れることができるようになります。これは、あなたや私が何かを調べることと同じです。一度コンテキストに入れば、それはワーキングメモリ内にあり、操作やアクセスが非常に簡単になります。
これは数分前に見たことですが、Orson Kovatsは誰かとChatGPTで検索した時、ChatGPTの言語モデルは、これは珍しい個人か何かだと判断し、記憶から答えを出す代わりに、ウェブ検索を行う特殊なトークンをサンプリングすることにしました。「ウェブツールを使用中」といった表示が一瞬点滅するのを見ました。2秒ほど待ってから、これが生成されました。ここで参考文献を作成しているのがわかります。そのため、ソースを引用しています。
ここで何が起こったかというと、ウェブ検索を行い、これらのソースとURLを見つけ、これらのウェブページのテキストがすべてここに詰め込まれました。ここには表示されていませんが、基本的にはここにテキストとして詰め込まれています。そしてそのテキストを見て、「これらの人物かもしれません(引用)」「あれらの人物かもしれません(引用)」などと言及しています。
これが起こったことであり、Orson Kovatsは誰かと尋ねた時に、「ツールを使用しないでください」と言うことで、ChatGPTにツールを使用せず、記憶と思い出しだけを使うよう説得するのに十分でした。
私もChatGPTに「Dominik Hasekは何回スタンレーカップを獲得しましたか?」と尋ねてみました。ChatGPTは答えを知っていると判断し、重みやパラメータ、活性化において、彼が2回獲得したという十分な確信を持っていたため、記憶に頼ることができました。
しかし、逆にウェブ検索を使用して確認することもできます。同じクエリに対して、実際に検索を行い、多くのソースを見つけ、これらすべての情報がそこにコピー&ペーストされ、再び引用とともに、この情報のソースであるWikipediaの記事も教えてくれます。
これがツールとウェブ検索です。モデルは検索するタイミングを判断し、このようにツールが機能します。これは幻覚と事実性の問題に対する追加の緩和策となります。
もう一度、この非常に重要な心理学的なポイントを強調したいと思います。ニューラルネットワークのパラメータ内の知識は漠然とした記憶です。コンテキストウィンドウを構成するトークン内の知識はワーキングメモリです。これは大まかに言って、私たちの脳での働き方と同じように機能します。私たちが記憶しているものは私たちのパラメータであり、数秒前や数分前に経験したものなどは、コンテキストウィンドウにあると考えることができます。このコンテキストウィンドウは、周りで意識的な経験をする中で構築されていきます。
これには、実践でのLLMの使用に関して多くの含意があります。例えば、ChatGPTに「ジェーン・オースティンの『高慢と偏見』の第1章を要約してください」というようなことができます。これは完全に適切なプロンプトで、ChatGPTは実際にここでかなり妥当なことをします。しかし、それができる理由は、ChatGPTが『高慢と偏見』のような有名な作品についてかなり良い記憶を持っているからです。おそらく大量の情報を見ており、この本についてのフォーラムがあり、この本のバージョンを読んでいて、これを読んだり、これについての記事を読んだりしたことがあれば、実際にこれら全てを言えるくらいの記憶はあると思います。
しかし、通常、私がLLMと対話して特定のことを思い出してもらいたい時は、単にそれを与えた方が常にうまくいきます。そのため、私は次のようなプロンプトの方がはるかに良いと考えています:「ジェーン・オースティンの『高慢と偏見』の第1章を要約してください。以下に第1章を添付します。」そして、ここで区切り文字を入れ、ウェブサイトから見つけた第1章をコピー&ペーストします。
これをするのは、コンテキストウィンドウにあれば、モデルが直接アクセスでき、正確に – 思い出す必要がなく、単にアクセスできるからです。そのため、この要約は最初の要約よりもかなり質が高くなると期待できます。なぜなら、モデルが直接利用できるからです。あなたや私も同じように働くと思います。この章を読み直してから要約する方が、はるかに良い要約を作ることができるでしょう。基本的に、ここで起こっているのはそれと同じことです。
次に話したい心理的な特徴は、自己認識についてです。インターネットでよく見かけるのは、LLMに「あなたはどのようなモデルですか?」「誰があなたを作りましたか?」といった質問をすることです。しかし、この質問は少し意味をなさないものです。その理由は、私が内部の基礎について説明しようとしたように、これは人ではないからです。持続的な存在はありません。トークンを処理して起動し、シャットダウンします。それを全ての人に対して行います。会話のコンテキストウィンドウを構築し、すべてが削除されます。
つまり、この存在は会話ごとに完全にゼロから再起動されます。持続的な自己もなければ、自己意識もありません。これはトークンをめくるものであり、トレーニングセットの統計的な規則性に従います。そのため、「あなたは誰ですか?」「誰があなたを作りましたか?」などと尋ねることは実際にはあまり意味がありません。デフォルトで、私が説明したようなことをデフォルトでどこからともなく行うと、かなりランダムな回答が得られることになります。
例えば、かなり古いモデルであるFalconを例に見てみましょう。質問を回避していますね。「才能のあるエンジニアと開発者たち」と言い、「OpenAIによって作られ、GPT-3モデルに基づいています」と述べています。完全に作り話をしています。
ここでOpenAIによって作られたという事実について、多くの人はこのモデルが何らかの形でOpenAIのデータで学習されたという証拠だと考えるかもしれません。しかし、必ずしもそうだとは思いません。その理由は、このような質問に対する回答を明示的にプログラムしていない場合、得られるのは統計的な最善の推測だからです。
このモデルは会話のSFTデータ混合を持っており、ファインチューニング中にこのデータを学習する中で、モデルは役立つアシスタントというこのパーソナリティを身につけることを理解します。自分にどのラベルを適用すべきかは正確には伝えられていません。役立つアシスタントというこのペルソナを身につけているだけです。
事前学習段階ではインターネット全体の文書を取り込んでおり、ChatGPTとOpenAIはこれらの文書で非常に目立っていることを覚えておいてください。そのため、実際に起こっている可能性が高いのは、これは単なる自分が何であるかについての幻覚的なラベルだということです。これが自己アイデンティティであり、それはOpenAIのChatGPTだということです。そう言っているのは、実際にChatGPTから来ている回答がインターネット上に大量にあるからにすぎません。
開発者としてこれを上書きすることはできます。LLMモデルを持っている場合、実際にこれを上書きする方法がいくつかあります。例えば、お見せしましょう。Allen AIのMMOモデルというものがあります。これはトップクラスのLLMではありませんが、完全にオープンソースなので気に入っています。MMOの論文など、すべてが完全にオープンソースなのは良いことです。
ここでSFTミックスを見ています。これは会話データのデータミックスです。そして、彼らがMMOモデルに対してどのように解決しているかというと、ミックスの中にいろいろなものがあり、合計100万の会話がありますが、ここに240の会話があることがわかります。
これらの240の会話を見てみると、ユーザーが「あなた自身について教えてください」と言い、アシスタントが「私はAI2 Allen人工知能研究所によって開発されたオープンな言語モデルです」などと答えています。「お手伝いさせていただきます」など。「あなたの名前は何ですか?」「プロジェクトMMOです」など。これらはすべて、MMOに関する質問と、そのような場合に与えるべき正しい回答を作り上げたものです。
このような240の質問や会話を取り、トレーニングセットに入れ、それでファインチューニングを行えば、モデルは後でこれらの内容を繰り返すことが期待できます。これを与えなければ、おそらくOpenAIのChatGPTとなってしまうでしょう。
これを行うもう1つの方法があります。基本的に、これらの会話では人間とアシスタントの間でやり取りが行われますが、会話の最初に「システムメッセージ」と呼ばれる特別なメッセージが時々あります。人間とアシスタントの間だけでなく、システムもあり、システムメッセージの中で実際にハードコードし、モデルに「あなたはOpenAIによって開発されたモデルで、名前はChatGPT-4oで、この日に学習され、知識のカットオフはこれです」などと思い出させることができます。
基本的にはモデルを少し文書化し、これを会話に挿入します。ChatGPTでは空白のページが表示されますが、実際にはシステムメッセージが隠されており、それらのトークンがコンテキストウィンドウにあります。
これが、モデルに自分自身について話させる2つの方法です。このようなデータを通じて行うか、システムメッセージなどを通じて行います。基本的には、コンテキストウィンドウにある見えないトークンで、モデルにそのアイデンティティを思い出させます。しかし、これはすべて何らかの形で作り上げられ、取り付けられたものにすぎません。人間の場合のように実際に深く存在しているわけではありません。
次のセクションに進みたいと思います。これらのモデルの問題解決シナリオにおける計算能力、あるいは言うべきネイティブな計算能力を扱います。特に、会話の例を構築する際には非常に注意を払う必要があり、これらのモデルがどのように考えるかを考える上で、いわば示唆に富む鋭い部分が多くあります。
次のような人間からのプロンプトを考えてみましょう。基本的に、会話を構築してトレーニングセットに入れようとしているとします。単純な数学の問題の解き方を基本的に教えているところです。
プロンプトは「エミリーはリンゴを3個とオレンジを2個買います。オレンジ1個は2ドルです。合計費用は13ドルです。リンゴの費用はいくらですか?」という非常に単純な数学の問題です。
ここに2つの回答があります。左と右にあり、どちらも正解で3と言っています。しかし、この2つのうち1つは、もう1つよりもアシスタントにとってかなり良い回答です。私がデータのラベル付け者で、これらの会話の1つを作成しているとすれば、これらのうち1つはアシスタントにとって本当にひどい回答で、もう1つは良い回答となるでしょう。
おそらく動画を一時停止して、なぜこれらの2つのうち1つがもう1つよりも著しく良い回答なのか考えてみてください。間違った方を使うと、モデルは実際に数学が本当に苦手になる可能性があり、良くない結果になるでしょう。これは、理想的なアシスタントの応答を作成するために人々を訓練する際のラベル付けドキュメントで注意すべきことです。
この問題の鍵は、モデルが学習時や推論時に左から右への1次元のトークンシーケンスで作業していることを理解し、覚えておくことです。私がよく心に描く図は、基本的にトークンシーケンスが左から右に展開していくというものです。シーケンス内の次のトークンを常に生成するために、これらすべてのトークンをニューラルネットワークに入力し、このニューラルネットワークが次のトークンのシーケンスの確率を出力します。
この図は、以前に見た図と全く同じです。前に見せたウェブデモから来ています。これは基本的に、上部の入力トークンを取り、これらのニューロンすべての操作を実行し、次に来るものの確率の答えを与える計算です。
重要なのは、ここには基本的に有限数の計算層があるということです。例えば、このモデルにはアテンションとMLPと呼ばれるものが1、2、3層しかありません。典型的な現代の最先端のネットワークでは、おそらく100層程度あるかもしれませんが、前のトークンシーケンスから次のトークンの確率に行くまでに100層程度の計算しかありません。
そのため、ここでの計算量は有限であり、これをごく少量の計算だと考えるべきです。このシーケンス内の各トークンに対するこの計算量は、ほぼ一定です。これは実際には完全に真実ではありません。より多くのトークンを入力すると、このニューラルネットワークのフォワードパスはより高価になりますが、それほど大きくはありません。
良いモデルとして心に留めておくべきなのは、このボックス内で各トークンに対して固定量の計算が行われるということです。このボックス内で起こる計算量はそれほど大きくなれずに、ここには上から下まであまり多くの層がないため、単一のフォワードパスで単一のトークンを得るために任意の計算を想像することはできません。
つまり、実際には推論と計算を多くのトークンに分散させる必要があります。なぜなら、各トークンは有限量の計算しか費やしておらず、単一のトークンで個別にモデルに多すぎる計算を期待することはできないからです。そのため、トークンの計算を分散させたいのです。1つのトークンで計算が多すぎることは許されません。ボックス内での計算量はここでほぼ固定されているからです。
だからこそ、この回答はかなり悪いものです。その理由は、ここで左から右に行くことを想像してみてください。コピー&ペーストしました。「答えは」スペース「$」そして、ここでは基本的にこの問題のすべての計算を単一のトークンに詰め込むことを期待しています。正解の3を出力しなければならず、その後これらのトークンを全て言うことを期待していますが、この時点で既に答えを出力しており、これらのトークンすべてに対してコンテキストウィンドウに入っています。
ここにあるものは、なぜこれが答えなのかについての事後的な正当化にすぎません。答えは既に作られ、トークンウィンドウに既に入っているからです。ここでは実際には計算されていません。そのため、質問に直接すぐに答えると、モデルを単一のトークンで答えを推測するように訓練することになります。これは、トークンごとの有限の計算量のために機能しません。
だからこそ、右側の回答の方がかなり良いのです。なぜなら、計算を回答全体に分散させているからです。実際にモデルに左から右へゆっくりと答えに到達させています。中間結果を得ており、「オレンジの総費用は4ドルなので、13-4は9です」といった具合です。
中間計算を作成しており、これらの計算の1つ1つはそれ自体ではそれほど高価ではありません。基本的には、これらの個々のトークンの1つ1つでモデルが対応できる難しさを少し推測しているのです。これらのトークンの1つ1つで計算的に多すぎる作業があってはいけません。なぜなら、そうすると後のテスト時にモデルがそれを行うことができなくなるからです。
ここでモデルに推論と計算をトークンに分散させることを教えています。こうすることで、各トークンでは非常に単純な問題だけを扱い、それらが積み重なっていき、終わりに近づく頃には、前の結果がすべてワーキングメモリにあり、答えが3であることを判断するのがはるかに簡単になります。
これは計算にとってかなり良いラベルです。一方、これは本当に悪く、モデルに単一のトークンですべての計算を行おうとすることを教えています。これは非常に悪いことです。
これは、プロンプトで心に留めておくべき興味深いことです。通常、明示的に考える必要はありません。なぜなら、OpenAIにはラベル付け者がいて、これについて心配し、回答が分散されていることを確認するからです。そのため、実際にはOpenAIは正しいことを行います。
この質問をChatGPTに尋ねると、実際にはとてもゆっくりと進みます。「まず変数を定義し、方程式を立てましょう」といった具合に、これらの中間結果をすべて作成します。これらはあなたのためではなく、モデルのためです。モデルがこれらの中間結果を自分のために作成していなければ、3に到達することができないでしょう。
また、モデルに少し意地悪をすることも可能だということをお見せしたいと思います。単に物事を求めることができます。例として、全く同じプロンプトを与え、「単一のトークンで答えてください。すぐに答えだけを示し、他は何も言わないでください」と言いました。
このシンプルなプロンプトに対しては、実際に一度で行うことができたことがわかりました。単一の – 私はこれは2つのトークンだと思います。ドル記号は独自のトークンなので、基本的にこのモデルは単一のトークンを与えなかったのですが、2つのトークンを与え、それでも正しい答えを出し、ネットワークの単一のフォワードパスでそれを行いました。これは、ここの数字が非常に単純だからです。そこで、モデルにもう少し意地悪をして、少し難しくしてみました。
「エミリーはリンゴを23個、オレンジを177個買います」と言い、数字を少し大きくしました。単に単一のトークンでより多くの計算を行うようモデルに要求して、より難しくしているのです。同じことを言ったところ、5という答えが返ってきましたが、これは実際には正しくありません。
モデルはネットワークの単一のフォワードパスですべてのこの計算を行うことに失敗しました。入力トークンからネットワークの単一のフォワードパスで結果を出すことができませんでした。そこで「トークンの制限を気にせず、通常通り問題を解いてください」と言うと、すべての中間結果を出し、単純化し、これらの中間結果と中間計算の1つ1つがモデルにとってはるかに簡単で、トークンごとの作業量が多すぎません。ここのトークンはすべて正しく、答えが7という解に到達します。
これをすべて単一のネットワークのフォワードパスに詰め込むことはできませんでした。これは単なる面白い例であり、考えるべきことの1つで、これらのモデルがどのように機能するかについて再び示唆に富むものだと思います。
このトピックについて最後に言いたいのは、実際の日常生活でこれを解こうとする場合、ここですべての中間計算を正しく行うことをモデルに完全には信頼しないかもしれないということです。おそらく実際には次のようなことをするでしょう。ここに来て「コードを使用してください」と言います。
それは、コードがChatGPTが使用できる可能性のあるツールの1つだからです。このような暗算、ここでの暗算を行う代わりに – 私はそれを完全には信頼しませんし、特に数字が本当に大きくなると、モデルがこれを正しく行うという保証はありません。これらの中間ステップのどれか1つが原理的には失敗する可能性があります。
ニューラルネットワークを使って暗算を行うのは、あなたが頭の中で暗算を行うようなものです。中間結果のどれかを単に間違える可能性があります。実際、このような暗算ができること自体が驚くべきことです。私は頭の中でこれを計算できないと思いますが、基本的にモデルは頭の中でそれを行っており、私はそれを信頼しません。そこでツールを使用したいと思います。
「コードを使用してください」のようなことが言えます。ここで何が起こったのかわかりませんが、「コードを使用してください」と言うと、先ほど言及したように特別なツールがあり、モデルはコードを書くことができ、このコードが正しいことを確認することができます。そして、暗算に頼るのではなく、非常にシンプルなプログラミング言語であるPythonインタープリタを使用して、結果を計算するコードを書き出します。
個人的には、これをはるかに信頼します。なぜなら、これは言語モデルの暗算よりもはるかに多くの正確性の保証を持つPythonプログラムから出てきたからです。つまり、このような問題がある場合、基本的にモデルにコードインタープリタを使用するよう依頼することができるという、もう1つの潜在的なヒントです。
ウェブ検索で見たように、モデルには特別なトークンがあり、言語モデルからこれらのトークンを実際に生成することはありません。プログラムを書き、そのプログラムを実際にコンピュータの別の部分に送信し、そのプログラムを実行して結果を返します。そしてモデルはその結果にアクセスし、各リンゴの費用は7ドルだと伝えることができます。これは別の種類のツールであり、実践ではこれを使用するでしょう。はい、これは単にエラーが少ないと言えます。
そこで、このセクションを「モデルは考えるためにトークンを必要とする」「計算を多くのトークンに分散させる」「モデルに中間結果を作成させる」「可能な限りツールとツールの使用に頼る」と呼びました。すべてをメモリで行おうとすると、私は完全には信頼せず、可能な限りツールを使用することを好みます。
これが実際に出てくるもう1つの例をお見せしたいと思います。それは数え上げです。モデルは実際には数え上げが得意ではありません。全く同じ理由で、単一の個別のトークンで多すぎることを要求しているからです。簡単な例をお見せしましょう。
「以下のドットはいくつありますか?」と尋ね、ただ大量のドットを置きます。ChatGPTは「ありますね」と言って、単一のトークンで問題を解こうとします。単一のトークンで、コンテキストウィンドウ内のドットの数を数えなければならず、ネットワークの単一のフォワードパスでそれを行わなければなりません。
ネットワークの単一のフォワードパスでは、先ほど話したように、そこではそれほど多くの計算は行われません。それをごく少量の計算だと考えてください。
モデルが見ているものを見てみましょう。トークナイザーに行くと、「以下のドットはいくつありますか?」と見て、ここにある20個ほどのドットのグループは単一のトークンであり、その次の何個かのグループは別のトークンで、何らかの理由でこのように分かれています。
実際にはこれはトークナイザーの詳細に関係しますが、基本的にモデルはトークンIDをこれ、これ、これなどと見て、これらのトークンIDから数を数えることが期待されます。ネタバレですが、161ではありません。実際には177だと思います。
代わりに何ができるか見てみましょう。「コードを使用してください」と言えます。なぜこれが機能するはずだと期待できるのか、それは実は微妙で興味深いことです。「コードを使用してください」と言うと、実際にこれが機能することを期待しています。見てみましょう。はい、177が正解です。
ここで何が起こったかというと、実際には見た目はそうではありませんが、モデルにとってより簡単な問題に分解しました。モデルが数えられないことはわかっています。暗算での数え上げはできませんが、モデルはコピー&ペーストがかなり得意だということはわかっています。
ここで行っていることは、「コードを使用してください」と言うと、Pythonでこの文字列を作成し、私の入力をここからここへコピー&ペーストする作業は非常に単純です。なぜなら、モデルにとって、これは単にこれら4つのトークンか何かとして見えるからです。
そのため、それらのトークンIDをコピー&ペーストし、ここにドットとして解凍することは非常に単純です。そこでこの文字列を作成し、Pythonのルーチン.countを呼び出し、正しい答えに到達します。Pythonインタープリタが数え上げを行っており、モデルの暗算が数え上げを行っているわけではありません。
これは再び「モデルは考えるためにトークンを必要とする」「暗算に頼らない」という例です。だからこそ、モデルは数え上げタスクが得意ではありません。数え上げタスクが必要な場合は、常にツールに頼るようモデルに依頼してください。
モデルには他にも多くの小さな認知的欠陥があり、これらは時間とともに気付くべき技術の鋭い部分です。例えば、モデルはあらゆる種類のスペリング関連のタスクが得意ではありません。それが得意ではない理由は、トークン化に話を戻すと、モデルは文字を見ていません。トークンを見ていて、その世界全体がこれらの小さなテキストの塊についてのものです。
私たちの目のように文字を見ているわけではないので、非常に単純な文字レベルのタスクがしばしば失敗します。例えば、「ubiquitous」という文字列を与え、最初の文字から始めて3文字目ごとに出力するよう依頼します。Uから始めて、3つごとなので1、2、3でQが次に来るはずです。
これは正しくありません。再び、私の仮説では、これは再び暗算がここで少し失敗しているということと、もう1つの重要な問題は、トークナイザーに行って「ubiquitous」を見ると、これは3つのトークンだということです。
あなたと私は「ubiquitous」を見て、個々の文字に簡単にアクセスできます。なぜなら、私たちはそれらを見ることができ、視覚的な作業記憶の中にあるとき、3文字目ごとに簡単にインデックスを付けることができ、私はそのタスクを行うことができるからです。しかし、モデルは個々の文字にアクセスできません。これらを3つのトークンとして見ています。
覚えておいてください、これらのモデルはインターネット上でゼロから学習され、これらのトークンの基本的にモデルは、これらの異なるトークンにどれだけの異なる文字が詰め込まれているかを発見しなければなりません。トークンを使用する理由は主に効率性のためです。
多くの人がトークンを完全に削除することに興味を持っていると思います。本当は文字レベルやバイトレベルのモデルを持つべきです。ただ、それは非常に長いシーケンスを作成することになり、現時点では人々はそれをどう扱うべきかわかっていません。
トークンの世界を持っている間は、スペリングタスクは実際にはそれほど上手く機能することは期待できません。トークン化のために、スペリングが得意ではないことがわかっているので、再びツールに頼ることができます。
「コードを使用してください」と言えば、これも機能することを期待できます。なぜなら、「ubiquitous」をPythonインタープリタにコピー&ペーストする作業の方がはるかに簡単で、Pythonインタープリタにこの文字列の文字を操作させることができるからです。
「コードを使用してください」と言うと、「ubiquitous」はい、3文字目ごとにインデックスを付け、実際の真実はu、q、sで、uqsであり、これは私には正しく見えます。再び、スペリング関連のタスクがあまり上手く機能しない例です。
最近の有名な例は、「strawberry」にはいくつの「r」がありますか?というものです。これは何度もバイラルになりました。基本的に、モデルは今では正しく答え、「strawberry」には3つのrがあると言います。しかし、長い間、最先端のモデルはすべて、「strawberry」にはrが2つしかないと主張していました。
これは多くの騒ぎを引き起こしました。なぜなら – これは単語でしょうか?そうだと思います – なぜなら、モデルは数学オリンピックの問題を解けるほど素晴らしいのに、「strawberry」のrの数を数えることができないのかという疑問が生じたからです。
その答えは、私がゆっくりと説明してきたように、第一にモデルは文字を見ていません。トークンを見ています。第二に、数え上げが得意ではありません。そのため、ここでは文字を見ることの難しさと数え上げの難しさを組み合わせているため、モデルはこれに苦労したのです。
今では正直に言って、OpenAIがここで答えをハードコードしたのか、何をしたのかはわかりませんが、この特定のクエリは今では機能します。
モデルはスペリングが得意ではなく、他にも多くの鋭い部分があります。すべてについて詳しく説明したいわけではありません。気付くべきことの例をいくつか示したいだけです。実践でこれらのモデルを使用する際に、実際には包括的な分析をここで行いたいわけではありません。
モデルが不足している方法をすべて分析したいわけではなく、ここにいくつかの鋭い部分があることを指摘したいだけです。いくつかについて議論し、そのいくつかは理にかなっていますが、一部は深くモデルがどのように機能するかを理解していても、頭を掻きながら考えざるを得ないものもあります。
最近の良い例は次のようなものです。モデルはこのような非常に単純な質問が得意ではありません。これは多くの人々にとって衝撃的です。なぜなら、これらの数学の問題は複雑な数学問題を解くことができ、私よりもはるかに優れたPHDレベルの物理学、化学、生物学の質問に答えることができますが、時にはこのような超単純な問題で躓くことがあるからです。
では、「9.11は9.9より大きい」という問題を見てみましょう。何らかの方法でそれを正当化しようとしますが、明らかに…そして最後に、後で決定を変えます。私はこれはあまり再現性がないと思います。時々答えを変えたり、時々正解を得たり、間違えたりします。もう一度試してみましょう。「より大きく見えるかもしれませんが…」と言って、最後でさえ自分自身を訂正していません。
何度も尋ねると、時々正解を得ることもありますが、オリンピアドレベルの問題では素晴らしい成績を収めることができるのに、このような非常に単純な問題で失敗するのはなぜでしょうか。これは、先ほど言及したように、少し頭を悩ませるものの1つです。
多くの人々がこれを詳細に研究し、私は実際に論文を読んでいませんが、このチームから聞いた話では、ニューラルネットワーク内の活性化を詳しく調べ、どのような特徴がオンまたはオフになるか、どのニューロンがオンまたはオフになるかを見ると、通常は聖書の節と関連付けられる多くのニューロンがニューラルネットワーク内で点灯するそうです。
そのため、モデルは聖書の節のマーカーのように見えることに何らかの形で注意を引かれ、聖書の節の設定では9.11は9.9の後に来るため、基本的にモデルは何らかの形で、聖書の節では9.11の方が大きいという認知的な混乱を見出しているようです。ここでは実際に数学で答えに到達しようとして正当化しようとしていますが、それでも間違った答えに行き着いてしまいます。基本的には完全に理解できず、完全には理解されていません。
このようなぎこちない問題がいくつかあります。そのため、これを現状のまま、つまり本当に魔法のような確率的なシステムとして扱いますが、完全には信頼できないものとして扱い、ツールとして使用したいと思います。問題に対して完全に放任し、結果をコピー&ペーストするようなものとしては扱いません。
では、大規模言語モデルの学習の2つの主要な段階について説明してきました。最初の段階は事前学習段階と呼ばれ、インターネット文書で学習を行うことを見てきました。言語モデルをインターネット文書で学習させると、ベースモデルと呼ばれるものが得られます。基本的にはインターネット文書シミュレーターです。
これは興味深いアーティファクトであり、数千台のコンピュータで何ヶ月もかかる学習であり、インターネットの損失の多い圧縮であり、非常に興味深いものです。しかし、私たちはインターネット文書をサンプリングしたいわけではなく、AIに質問をして質問に答えてもらいたいので、直接的には有用ではありません。
そのためにはアシスタントが必要で、後学習のプロセス、特に監督付きファインチューニングと呼ばれるプロセスでアシスタントを構築できることを見てきました。このステージでは、アルゴリズム的には事前学習と全く同じで、何も変わりません。変わるのはデータセットだけです。
インターネット文書の代わりに、人間とアシスタントの間の様々な多様なトピックについての会話の非常に良いデータセットを作成し、キュレーションしたいと思います。基本的に、これらの会話は人間によって作成されます。人間がプロンプトを書き、人間がラベル付けドキュメントに基づいて理想的な応答を書きます。
最新のスタックでは、実際には人間によって完全に手動で行われているわけではありません。実際には今では、これらのデータセットを作成するのに多くのツールの助けを借りています。言語モデルを使ってこれらのデータセットを作成するのに役立てることができ、それは広く行われていますが、基本的には最終的にはすべて人間のキュレーションから来ています。
これらの会話を作成し、それが私たちのデータセットとなり、それでファインチューニングを行うか、学習を継続し、アシスタントを得ます。その後、私たちは方向を転換し、このアシスタントがどのようなものかについての認知的な意味について話し始めました。
例えば、何らかの緩和策を講じなければ、アシスタントは幻覚を見ることを見てきました。幻覚は一般的であることを見て、それらの幻覚の緩和策をいくつか見てきました。モデルはかなり印象的で、頭の中で多くのことができますが、より良くなるためにツールに頼ることもできることを見てきました。
例えば、より少ない幻覚を見るため、あるいはより最新の情報を持ち出すためにウェブ検索に頼ることができます。あるいは、コードインタープリタのようなツールに頼ることができ、LLMがコードを書いて実際に実行し、結果を見ることができます。これらが今まで見てきたトピックのいくつかです。
次に、このパイプラインの最後の主要な段階である強化学習について説明したいと思います。強化学習は、依然として後学習の傘下にあると考えられていますが、これは最後の第3の主要な段階であり、言語モデルを学習する異なる方法で、通常この3番目のステップとして続きます。
OpenAIのような企業内では、ここから始まり、これらはすべて別々のチームです。事前学習のデータを扱うチームがあり、事前学習の学習を扱うチームがあり、別のチームですべての会話の生成を行い、監督付きファインチューニングを行うチームがあり、強化学習のチームもあります。
これらのモデルの受け渡しのようなもので、ベースモデルを得て、アシスタントになるようにファインチューニングを行い、次に説明する強化学習に進みます。これが主要な流れです。
では、学習の最後の主要な段階である強化学習に焦点を当て、まず実際にそれを動機付け、強化学習が必要な理由と、それが高レベルでどのようなものかについて説明したいと思います。
強化学習の段階とそれが何に対応するかについて、おそらくあなたが馴染みのあるものを使って説明したいと思います。それは基本的に学校に行くことです。あなたが何かに本当に良くなるために学校に行ったように、大規模言語モデルを学校に通わせたいと思います。
実際に行っていることは、知識を与えたり、スキルを移転したりするためのいくつかのパラダイムを持っているということです。特に、学校の教科書で作業する時、これらの教科書には3つの主要な種類の情報、3つのクラスの情報があることがわかります。
ところで、これはインターネットから無作為に引っ張ってきた本です。有機化学か何かだと思いますが、確かではありません。重要なのは、テキストのほとんど、そのほとんどが種類の解説であり、一種の背景知識などであることがわかるということです。
この解説の言葉を読んでいくと、大まかにそのデータで学習しているのと同じように考えることができます。そのため、このようなもの、この背景知識、このすべての文脈情報を読んでいく時、それは事前学習に相当します。そこでこのデータの知識ベースを構築し、トピックの感覚を得ます。
次に見る主要な種類の情報は、これらの問題と、その解答例です。基本的には、この場合の人間の専門家、つまりこの本の著者が、単なる問題だけでなく、その解決策も示してくれています。その解決策は基本的にアシスタントの理想的な応答のようなものです。
基本的には、専門家が完全な形で問題の解き方を示してくれています。その解決策を読んでいる時、基本的には専門家のデータで学習しており、後で専門家を真似ることができます。これは大まかにSFTモデルを持つことに相当し、それが行うことです。
基本的には、事前学習を行い、これらの問題を解決する専門家の真似をすでにカバーしています。強化学習の第3段階は基本的に練習問題です。ここには単一の練習問題しか見えませんが、もちろん通常は各章の最後に多くの練習問題があります。
練習問題は学習に不可欠だということは知っています。なぜなら、それらは何をさせているのでしょうか。自分で練習し、これらの問題を解決する方法を自分で発見することができます。練習問題で得られるのは、問題の説明ですが、解決策は与えられません。
しかし、通常は教科書の解答集に最終的な答えが与えられています。そのため、到達しようとしている最終的な答えは知っていて、問題の説明もありますが、解決策はありません。解決策を練習し、多くの異なることを試し、何が最終的な解決策に最も良く到達するかを見ています。
そうすることで、これらの問題を解決する方法を発見しています。そのプロセスで、事前学習から来る背景情報と、おそらく人間の専門家の真似を少し頼りにしており、おそらく同様の種類の解決策を試すことができます。
私たちはこれとこれを行ってきており、今このセクションでは練習をしようとしています。プロンプトが与えられ、解決策、申し訳ありません、最終的な答えは与えられますが、専門家の解決策は与えられません。練習し、物事を試す必要があり、それが強化学習に関することです。
では、以前に扱った問題に戻って、ここで具体的な例を使って説明を進めていきましょう。トークナイザーにいるのは、テキストボックスが便利だからですが、もう1つの理由は、私たちは常に1次元のトークンシーケンスで作業していることを思い出させたいからです。
実際には、これがLLMのネイティブな見方だと思うので、この見方の方が好きです。実際に見ているのはトークンIDです。
例えばエミリーがリンゴを3個とオレンジを2個買い、オレンジは1個2ドルで、果物の合計が13ドルの場合、リンゴ1個の値段はいくらかという問題があります。ここで4つの解答例がありますが、全て答えは3になります。
ここで理解していただきたいのは、トレーニングセットに会話を追加する人間のデータラベラーとして、どの会話を追加すべきか実際には分かりにくいという点です。これらの会話の中には、連立方程式を立てるものもあれば、英語で考えを進めるもの、答えに直接到達するものなどがあります。例えばChatGPTにこの問題を与えると、変数を定義して計算を進めていきます。
ここで認識しておくべき重要な点が2つあります。1つ目は当然ながら正しい答え(この場合は3)に到達することです。2つ目は、人間にとって分かりやすく提示することです。質問者は解答プロセスや中間過程を見たいと考えているだろうという前提に立っているためです。
しかし、最終的な答えだけに注目すると、どの解答が最適なのかについては人間のラベラーとしては判断が難しいのです。例えば、先ほど見たトークン列では、1つのトークンで使える計算量は限られています。そのため、1つのトークンで大きな飛躍をすることは避けるべきでしょう。
この例では、トークン数が少なく済むため短時間で答えに到達できますが、「30-4÷3=」というトークンでは、1つのトークンに多くの計算を詰め込みすぎています。そのため、LLMにとってはあまり良い例とは言えず、計算を急いでミスを引き起こす可能性があります。
計算を分散させたり、方程式を立てたり、プロセスを説明したりする方が良いかもしれません。しかし、これも確実には分かりません。なぜなら、人間のラベラーにとって易しいことやむずかしいことは、LLMにとっては異なるからです。認知の仕方が違うのです。
人間にとって簡単なトークン列が、LLMにとっては大きすぎる飛躍になる可能性があります。例えば先ほどのトークンは難しすぎるでしょう。逆に、人間が作成するトークンの多くがLLMにとっては簡単すぎて、トークンを無駄に使っているだけかもしれません。なぜそんなに多くのトークンを使う必要があるのでしょうか。
最終的な答えだけが重要で、人間への提示方法を別問題として考えるなら、この例にどのような注釈をつけるべきか実は分かりません。私たちはLLMではないからです。この数学の例では明らかですが、これは実は非常に広範な問題なのです。
私たちの知識はLLMの知識とは異なります。LLMは数学、物理学、化学などの博士号を持っているようなものなので、多くの面で私よりも知識を持っています。問題解決にその知識を活用できていない可能性があります。逆に、私の解答にはLLMのパラメータにない知識を注入してしまい、モデルにとって混乱を招く大きな飛躍になることもあります。
認知の仕方が異なるため、最終解に到達し、それを効率的に行うことだけを考えた場合、何を入力すべきか実際には分かりません。つまり、LLMのためのトークン列を作成するのは難しい立場にあり、システムの初期化には人間の模倣が役立ちますが、本当に求めているのはLLMが自身のトークン列を発見することなのです。プロンプトが与えられた時に、確実に答えにたどり着けるトークン列を見つける必要があり、それは強化学習と試行錯誤のプロセスで発見されなければなりません。
では、この例が強化学習でどのように機能するか見てみましょう。今、Hugging Face Inference Playgroundに戻りました。これは様々なモデルを簡単に呼び出せるものです。例えば右上でGemma 2 2billion パラメータモデルを選択しました。2billionは非常に小さく、これはごく小さなモデルですが、構いません。
強化学習の基本的な仕組みは実はかなり単純です。様々な解答を試し、どの解答が上手くいくかを確認する必要があります。基本的にプロンプトを与え、モデルを実行してソリューションを生成し、そのソリューションを検査します。この例では正解が3ドルだと分かっているので、モデルが正しく3と答えたことが確認できます。これが1回目の試行です。
これを消して、もう一度実行してみましょう。モデルは少し異なる方法で解いていますが、これは当然です。試行のたびに生成が異なるのは、これらのモデルが確率的なシステムだからです。各トークンで確率分布があり、そこからサンプリングしているため、若干異なるパスを辿ることになります。これが2回目の解答で、これも正解です。
これを消して3回目を試してみましょう。また少し異なる解答ですが、これも正解です。実際にはこれを何度も繰り返すことができ、実践では1つのプロンプトに対して1000や100万もの独立した解答をサンプリングすることもあります。その中には正解するものもあれば、そうでないものもあります。基本的に私たちがやりたいのは、正解に導く解答を奨励することです。
それがどのように見えるか見てみましょう。こちらに戻ると、これがその様子を示した漫画的な図です。プロンプトがあり、多くの異なる解答を並行して試しています。緑色で示された解答は上手くいって正解に到達し、赤色の解答は上手くいかず正解に到達しませんでした。
残念ながらこの問題は最良の例とは言えません。これは簡単なプロンプトで、2billionパラメータモデルでも常に正解するからです。しかし想像力を働かせて、緑が良い解答で赤が悪い解答だと考えてみましょう。
15の解答を生成し、そのうち4つだけが正解したとします。ここで私たちがやりたいのは、正解に導く種類の解答を奨励することです。これらの赤い解答で起きたトークン列は、どこかで明らかに間違いがあり、良いパスではありませんでした。一方、これらの緑の解答のトークン列では上手くいったので、このような状況では同じようなことをもっと行いたいと考えます。
このような振る舞いを将来的に奨励する方法は、基本的にこれらの列で訓練することです。ただし、これらの訓練列は熟練した人間のアノテーターから来たものではありません。これが正しい解答だと決めた人間はいません。この解答はモデル自身から来ています。
モデルはここで練習をしています。いくつかの解答を試し、4つが上手くいったように見えます。そこでモデルはそれらを使って訓練を行います。これは、生徒が自分の解答を見て「ああ、これは上手くいったから、こういう種類の問題はこのように解くべきだ」と考えるのに相当します。
この例では、これら4つの正解のうち最良の解答を1つ選ぶなど、方法論を少し調整する方法は多々ありますが、核となるアイデアを伝えるために最もシンプルに考えましょう。例えば、この黄色で示した上位の解答です。これは正解に到達しただけでなく、他の良い特性も持っていたかもしれません。最も短かったり、見た目が最も良かったりするなど、他の基準も考えられます。
これを最良の解答とし、これで訓練を行うと、パラメータのアップデート後、モデルはこのような状況で同じパスを辿る可能性が若干高くなります。ただし、数学の問題や物理の問題など、多様な問題に渡って多くの異なるプロンプトを実行することを忘れないでください。数万のプロンプトがあり、各プロンプトに数千の解答があるかもしれません。
これが全て同時に起こっていて、このプロセスを繰り返すことで、モデルは正解に導くトークン列を自身で発見していきます。これは人間のアノテーターからは来ていません。モデルは遊び場で遊び、目標を理解し、自身に適した列を発見しています。これらの列は精神的な飛躍を含まず、統計的に信頼性が高く機能し、モデルの持つ知識を完全に活用します。
これが強化学習のプロセスです。基本的に推測と確認です。多くの異なる種類の解答を推測し、それらを確認し、将来的には上手くいったことをより多く行います。これが強化学習です。
これまでの文脈で考えると、監督付き微調整(SFT)モデルはまだ役立ちます。なぜなら、モデルを正しい解答の近傍に初期化するのに役立つからです。モデルが解答を書き出したり、方程式を立てたり、解き方を説明したりするような理解を得るための初期化として機能します。正しい解答の近傍に到達させますが、強化学習こそが全てを調整する場所です。
モデルに適した解答を本当に発見し、正解を得て、それらを奨励し、モデルは時間とともに改善していきます。これがLLMを訓練する高レベルのプロセスです。簡単に言えば、子供の訓練方法とかなり似ています。唯一の違いは、子供は教科書の章を進めながら、各章で様々な種類の訓練演習を行いますが、AIを訓練する場合は、ステージの種類に応じてステージごとに行うことです。
まず事前訓練を行います。これは基本的に全ての説明文を読むことに相当します。全ての教科書を同時に見て、全ての説明を読み、知識ベースの構築を試みます。次にSFTステージに進みます。これは人間の専門家による全ての固定された解答、教科書全体の様々な種類の解答例を見ることです。これによりSFTモデルを得ます。これは専門家を模倣できますが、盲目的にそうします。
統計的に専門家の振る舞いを真似ようとするだけです。そして最後のステージでRLステージに入り、教科書全体の全ての練習問題を行います。練習問題だけを行い、それによってRLモデルを得ます。
高レベルでは、LLMの訓練方法は子供の訓練プロセスとかなり似ています。次に指摘したい点は、最初の2つのステージ、つまり事前訓練と監督付き微調整は何年も前からあり、非常に標準的で、全てのLLMプロバイダーが行っているということです。最後のステージである強化学習訓練は、その開発過程においてまだ初期段階であり、まだ標準化されていません。
このステージがまだ初期段階にある理由は、このプロセスの多くの細かい部分を私が省略したからです。高レベルのアイデアは非常にシンプルで試行錯誤学習ですが、多くの細部や数学的なニュアンスがあります。最良の解答をどのように選び、どの程度訓練するか、プロンプトの分布をどうするか、これを実際に機能させるために訓練をどのように設定するかなど、多くの細部があります。
核となるアイデアは非常にシンプルですが、細部を正しく設定するのは簡単ではありません。そのため、OpenAIなどのLLMプロバイダーは、LLMの強化学習微調整を社内で長く実験してきましたが、公に語ることはありませんでした。全て会社内部で行われてきました。
そのため、最近DeepSeekから出た論文が大きな話題となりました。これは中国のDeepSeekという会社からの論文で、LLMの強化学習微調整について、その重要性とモデルの推論能力を引き出す方法について、非常に公に語りました。すぐにその詳細を見ていきます。
この論文は、LLMのRLの公の関心を再び活性化し、結果を再現してLLMのこのステージを機能させるために必要な詳細を多く提供しました。DeepSeek R1論文と、LLMに正しくRLを適用した時に何が起こり、それがどのように見え、何が得られるのかについて、簡単にご説明しましょう。
まず、数学的問題の解決能力がどのように向上したかを示すこの図2を見てみましょう。これは数学問題を解く精度を示したグラフです。ウェブページに移動すると、実際にこれらの問題がどのような種類の数学問題なのかを見ることができます。これらは単純な数学問題です。ビデオを一時停止して見ることもできますが、基本的にモデルが解くように求められている問題の種類です。
最初は上手くいっていませんが、多くの更新を重ねるにつれて精度が向上していくのが分かります。モデルは改善し、これらの問題をより高い精度で解けるようになっています。これらの種類の問題の大規模データセットで試行錯誤を行うことで、モデルは数学問題の解き方を発見しているのです。
しかし、これらの問題をより高い精度で解くという定量的な結果以上に驚くべきなのは、モデルがこれらの結果を達成する質的な方法です。最適化の後半になると、モデルは応答あたりの平均長が増加しているようです。モデルはより多くのトークンを使用して高い精度の結果を得ているようです。
なぜこれらの解答は非常に長くなるのでしょうか。質的に見てみましょう。基本的に彼らが発見したのは、モデルの解答が非常に長くなる部分的な理由として、最適化の新しい特性として発見されたのは、問題解決に良いことが分かったため、このようなことを始めるということです。
「ちょっと待って、ここで注意すべき点があります。正しい合計を特定するために、ステップバイステップで再評価してみましょう」といった具合です。モデルは何をしているのでしょうか? 基本的にモデルは、様々なアイデアを試し、異なる視点から物事を試み、フレームを変え、バックトラックするなど、数学的問題を解く過程で私たちが行うことの多くを再評価しているのです。
しかしこれは、理想的なアシスタントの応答に人間がハードコードできるものではありません。これは強化学習のプロセスでしか発見できないものです。ここに何を入れるべきか分からないからです。これはモデルにとって機能することが判明しただけで、問題解決の精度を向上させています。
モデルは、思考の連鎖と呼ばれるものを学習します。これは最適化の創発的な特性であり、それが応答の長さを増加させていますが、同時に問題解決の精度も向上させています。ここで驚くべきことは、基本的にモデルが思考方法を発見しているということです。
問題をどのように操作し、異なる視点からアプローチし、いくつかのアナロジーを引き出したり、異なる種類のことを行ったりする認知戦略と私が呼ぶものを学習しています。時間をかけて多くの異なることを試し、異なる視点から結果を確認し、問題を解決する方法を学んでいますが、これはRLによって発見されています。
どこにもハードコードする必要なく、最適化の中から創発するのを見るのは非常に驚くべきことです。私たちが与えたのは正解だけで、それらを正しく解こうとする中からこれが生まれてくるのは信じられないことです。
では、これまで取り組んできた問題に戻って、このような思考モデルや推論モデルでこの問題がどのように解かれるか見てみましょう。これが取り組んできた問題で、ChatGPT 4.0に入力するとこのような応答が得られます。同じクエリを推論モデルや思考モデルと呼ばれるものに与えた時に何が起こるか見てみましょう。これは強化学習で訓練されたモデルです。
この論文で説明されているDeepSeek R1モデルは、chat.deepseek.comで利用可能です。これはモデルを開発した会社のホスティングサービスです。R1モデルを使用するにはDeepSeekボタンをオンにする必要があります。ここに貼り付けて実行してみましょう。
これが出力結果です。これは基本的に監督付き微調整アプローチ、つまり専門家の解答を模倣するアプローチを使用した場合に得られる結果です。これがRLモデルから得られる結果です。
「さて、これを考えてみましょう。エミリーがリンゴ3個とオレンジ2個を買い、オレンジは1個2ドルで、合計が13ドルです。私は〜を見つける必要があります」といった具合です。これを読んでいると、このモデルが考えているという印象を避けられません。
明らかに解答を追求しており、3ドルでなければならないと推論し、「ちょっと待って、確認のために計算をもう一度確認してみましょう」と言い、少し異なる視点から試してみます。そして「はい、全て合っています。これが答えだと思います。ミスは見当たりません。
問題へのアプローチを変えて、方程式を立ててみましょう。リンゴ1個の価格を$xとすると…はい、同じ答えが出ました。リンゴ1個は確かに3ドルです」と続きます。
そして思考プロセスを行った後、人間のために分かりやすい解答を書き出し、最後に正解を枠で囲みます。これは正確性の側面で、こちらは提示の側面です。
驚くべきことは、モデルのこの思考プロセスを得られることです。これは強化学習プロセスから来ています。これがトークン列の長さを増加させ、思考を行い、異なる方法を試しているのです。これが問題解決の精度を高め、これらのアハ体験や異なる戦略、正解を得る方法を確認するためのアイデアが見られる場所なのです。
最後に指摘したい点は、一部の人々がchat.comに機密データを入力することに少し神経質になっているということです。これは中国の企業なので、人々は少し慎重になっています。
DeepSeek R1はこの会社がリリースしたモデルで、オープンソースモデルまたはオープンウェイトモデルです。誰でもダウンロードして使用できます。フルモデルをフル精度で実行することはできません。これはかなり大きなモデルなので、MacBookなどのローカルデバイスでは実行できません。
しかし、多くの企業が最大のモデルをホスティングしています。私が好んで使用する企業の1つはtogether.というところです。together.に登録してプレイグラウンドに行くと、ここでDeepSeek R1を選択できます。他にも多くの異なる種類の最先端モデルを選択できます。
これはこれまで使用してきたHugging Face Inference Playgroundに似ていますが、together.は通常全ての最先端モデルをホスティングします。DeepSeek R1を選択し、多くの設定はデフォルトで問題ないと思います。これを入力すると、DeepSeekからリリースされたモデルなので、ここで得られるものは基本的にここで得られるものと同等になるはずです。
サンプリングのランダム性により、少し異なる結果が得られますが、原則としてモデルのパワーという点では同一であり、定量的にも質的にも同じものが見られるはずです。ただし、このモデルはアメリカの企業から来ています。
これがDeepSeekと呼ばれる推論モデルです。チャットに戻ると、ドロップダウンに表示されるo1、o3、mini o3、mini High等のモデルは、高度な推論を使用すると述べています。この「高度な推論を使用する」という記述は、OpenAIの従業員の公の発言によると、DeepSeek R1と非常に似た技術を使用した強化学習で訓練されたことを指しています。
これらは強化学習で訓練された思考モデルです。GPT-4やGPT-4.0 miniなど、無料枠で利用できるこれらのモデルは、主にSFTモデル(監督付き微調整モデル)と考えるべきです。これらは実際にはRLモデルで見られるような思考を行わず、これらのモデルには少し強化学習が含まれていますが、それについては後で説明します。
これらは主にSFTモデルであり、そのように考えるべきです。ここで見たように、思考モデルの1つ、例えばo3 mini highを選択できます。これらのモデルは、月額20ドルまたは一部のトップモデルでは月額200ドルのChatGPTサブスクリプションを支払わない限り利用できない可能性があります。
思考モデルを選択して実行すると、「推論中」と表示され、このようなことを始めます。ここで見ているのは、ここで見たものと全く同じではありません。モデルがフード下でこのような思考の連鎖を生成しているにもかかわらず、OpenAIはウェブインターフェースでその正確な思考の連鎖を表示しないことを選択しています。
代わりにそれらの思考の連鎖の小さな要約を表示し、これをOpenAIが行っているのは、部分的には蒸留リスクと呼ばれるものを懸念しているためだと思います。これは、誰かが入ってきて実際にそれらの推論トレースを模倣しようとし、推論の連鎖を模倣するだけで多くの推論性能を回復できる可能性があるということです。
そのため、それらを隠し、小さな要約だけを表示しています。DeepSeekで得られるような推論自体の正確な内容は得られませんが、その後解答を書き出します。これらは同等ですが、フード下の完全な詳細は見えません。
パフォーマンスに関しては、これらのモデルとDeepSeekモデルは現在ほぼ同等です。評価が難しいため判断は難しいですが、OpenAIに月額200ドルを支払っている場合、これらのモデルの一部は現在もまだ良く見えます。しかしDeepSeek R1は今のところ、思考モデルとして非常に堅実な選択肢です。このウェブサイトや他のウェブサイトで利用可能で、モデルがオープンウェイトなのでダウンロードできます。
これが思考モデルです。では、これまでのまとめをしましょう。強化学習と、検証可能な解答のある多くの数学やコードの問題でRLを実行すると思考が最適化のプロセスで創発することについて話してきました。
これらの思考モデルはDeepSeekや、together.などの推論プロバイダーでDeepSeekを選択することでアクセスできます。これらの思考モデルはまた、o1やo3モデルの下でChatGPTでも利用可能ですが、これらのGPT-4.0モデル等は思考モデルではありません。主にSFTモデルと考えるべきです。
高度な推論を必要とするプロンプトがある場合は、思考モデルを使用するか、少なくとも試してみるべきです。しかし、経験的に私の使用では、より単純な質問、知識ベースの質問などの場合、これは過剰かもしれません。事実に基づく質問について30秒も考える必要はないので、その場合はGPT-4.0をデフォルトにすることもあります。
経験的に私の使用の80-90%は単にGPT-4で、数学やコードなどの非常に難しい問題に遭遇した時に思考モデルを使用しますが、それらは考えているので少し長く待つ必要があります。
これらはチャットやDeepSeekでアクセスできます。また、AI studio.go.comは、Googleがこのような種類のことを上手く行えないため、非常に忙しく醜く見えますが、何が起こっているのでしょうか? しかし、モデルを選択し、ここでGemini 2.0/thinking experimental 01 21を選択すると、これもGoogleによる思考モデルの一種の早期実験です。
ここに行って同じ問題を与え、実行をクリックすると、これも同様のことを行う思考モデルで、ここでも正解が得られます。基本的にGeminiも思考モデルを提供しています。Anthropicは現在思考モデルを提供していませんが、基本的にこれがこれらのLLMのフロンティア開発です。
RLは一種の新しい興奮するステージですが、細部を正しく設定するのは難しく、そのため2025年初頭の現在、これらのモデルと思考モデルは全て実験的です。しかしこれが、推論を使用してこれらの非常に難しい問題でのパフォーマンスを押し上げるフロンティア開発です。
もう1つ指摘したい関連性は、強化学習が極めて強力な学習方法であるという発見は、AI分野では新しいものではないということです。これが既に実証された場所の1つが囲碁です。
DeepMindが有名なアルファ碁システムを開発し、それについての映画を見ることができます。このシステムは、トップ人間プレイヤーを相手に囲碁を学習します。アルファ碁の基礎となる論文に戻ると、実は非常に興味深いグラフを見つけることができます。
これは囲碁のゲームではなく、任意の問題解決のより開かれた領域で再発見しているようなものだと思います。基本的に彼らが見たのは、これは囲碁のELOレーティングで、これは非常に強い人間プレイヤーのイ・セドルです。
ここで比較しているのは、監督学習で訓練されたモデルと強化学習で訓練されたモデルの強さです。監督学習モデルは人間の専門家プレイヤーを模倣します。囲碁の専門家プレイヤーによる大量のゲームを得て、それらを模倣しようとすると、確かに上手くなりますが、やがて頭打ちになり、イ・セドルのような最高レベルのプレイヤーには決して到達しません。
人間プレイヤーを模倣しているだけでは、根本的に人間プレイヤーを超えることはできないからです。しかし強化学習のプロセスは大幅に強力です。囲碁における強化学習とは、経験的かつ統計的に勝利に導く手を打つシステムを意味します。
アルファ碁は自身と対戦し、強化学習を使用してロールアウトを作成するシステムです。ここと全く同じ図ですが、プロンプトはなく、固定された囲碁ゲームだけです。多くの解答を試し、多くの手を試し、特定の答えではなく勝利に導くゲームが強化され、より強くなります。
システムは基本的に、経験的かつ統計的に勝利に導く行動の列を学習しており、強化学習は人間のパフォーマンスによって制約されず、イ・セドルのようなトッププレイヤーをも大きく上回ることができます。
おそらく彼らはこれをより長く実行することもできましたが、お金がかかるためある時点で切り取ることを選択したのだと思います。これは強化学習の非常に強力な実証であり、私たちは推論問題に対する大規模言語モデルでこの図のヒントを見始めているに過ぎません。
専門家を模倣するだけでは、それほど遠くまで行けません。それを超えて、これらの小さなゲーム環境を設定し、システムに独自の推論トレースや問題解決方法を発見させ、それらが上手く機能するようにする必要があります。
この独自性の側面について、強化学習を行う時、人間がゲームをプレイする方法の分布から外れることを妨げるものは何もないことに注意してください。アルファ碁検索に戻ると、提案された修正の1つは「37手目」と呼ばれています。
アルファ碁の37手目は、人間の専門家が打たないような手を打った特定の時点を指します。この手が人間プレイヤーによって打たれる確率は約1万分の1と評価されました。非常にレアな手ですが、振り返ってみると素晴らしい手でした。
アルファ碁は強化学習のプロセスで、人間には知られていなかった打ち方の戦略を発見しましたが、振り返ってみると素晴らしいものでした。このYouTubeビデオ「イ・セドル対アルファ碁 37手目の反応と分析」をお勧めします。
アルファ碁がこの手を打った時の様子がこのようなものでした。「これは非常に驚くべき手です。ミスだと思いました」というように、基本的に人々は動揺しています。なぜなら、人間なら打たないような手をアルファ碁が打ったからです。
トレーニングにおいて、この手が良いアイデアのように思えたからこそ打ったのです。人間なら行わないようなことを行うことになっただけです。これが再び強化学習の力であり、言語モデルでこのパラダイムを拡大し続けると、原則的に同等のものが見られる可能性があります。
それがどのように見えるかは未知です。人間が理解できないような方法で問題を解くというのはどういう意味でしょうか? どのように人間以上の推論や思考ができるのでしょうか? 人間には生み出せないようなアナロジーを発見するということかもしれません。あるいは新しい思考戦略かもしれません。考えるのは難しいです。
おそらく英語ですらない全く新しい言語かもしれません。思考にはより適した独自の言語を発見するかもしれません。モデルは英語にこだわる必要すらないからです。異なる言語で考えたり、独自の言語を発見したりする可能性があります。
原則として、システムの振る舞いははるかに定義が曖昧で、英語という訓練データの分布からゆっくりとドリフトする可能性も開かれています。しかしそれは全て、これらの戦略を洗練し完成させることができる、非常に大きく多様な問題セットがある場合にのみ可能です。
それが現在進行中のフロンティアLLM研究の多くです。そのような種類のプロンプト分布を作成しようとしています。これらは全て、LLMが思考を練習できるような一種のゲーム環境です。練習問題を書くようなものです。
知識の全領域の練習問題を作成する必要があります。練習問題があり、それが大量にあれば、モデルはそれらで強化学習を行い、このような図を作成することができますが、囲碁のような閉じた領域ではなく、開かれた思考の領域においてです。
強化学習内にもう1つセクションがあり、検証不可能な領域での学習について説明したいと思います。これまで見てきた問題は全て、検証可能な領域と呼ばれるものです。つまり、候補となる解答を具体的な答えと照らし合わせて非常に簡単にスコア付けできます。
例えば答えが3の場合、これらの解答を3という答えと照らし合わせて非常に簡単にスコア付けできます。モデルに答えを枠で囲ませ、枠内の内容と答えの等価性をチェックするだけです。また、LLMジャッジと呼ばれるものを使用することもできます。
LLMジャッジは解答を見て、答えを得て、基本的にその解答が答えと一致しているかをスコア付けします。LLMは経験的に、現在の能力レベルでこれをかなり信頼性高く行えます。そのためこれらの種類のテクニックを適用できます。
いずれにせよ、具体的な答えがあり、それに対して解答をチェックするだけで、人間が介在することなく自動的にこれを行うことができます。問題は、この戦略を検証不可能な領域と呼ばれるものに適用できないことです。
通常これらは、例えばペリカンについてのジョークを書く、詩を書く、段落を要約するなどの創造的な文章タスクです。これらの領域では、異なる解答をスコア付けするのが難しくなります。
例えばペリカンについてのジョークを書く場合、もちろん多くの異なるジョークを生成できます。例えばChatGPTに行って、ペリカンについてのジョークを生成させることができます。「彼らのくちばしにはとても多くのものが入っています。なぜならバックパックには入らないからです」何でしょう?
他のものを試してみましょう。「なぜペリカンは飲み物代を払わないのでしょうか?」「いつも他の誰かにツケを回すからです」ハハ。これらのモデルは明らかにユーモアは得意ではありません。実は非常に興味深いと思います。ユーモアは密かに非常に難しく、モデルにはその能力があると思います。
いずれにせよ、多くのジョークを作ることは想像できます。直面している問題は、それらをどのようにスコア付けするかということです。原則として、もちろん人間に全てのジョークを見てもらうことはできます。私が今行ったように。
問題は、強化学習を行う場合、多くの数千回の更新を行い、各更新で数千のプロンプトを見たいと考え、各プロンプトで数百や数千の異なる種類の生成を見たいと考えることです。そのため、これらを見るには多すぎるのです。
原則として、人間に全てを検査してスコア付けしてもらい、このジョークは面白い、このジョークは面白い、このジョークは面白いと決めてもらい、それらで訓練してモデルがジョークを少しでも上手くなるようにすることはできます。少なくともペリカンについては。
問題は、人間の時間が多すぎることです。これはスケーラブルな戦略ではありません。何らかの自動的な戦略が必要です。これに対する1つの解決策が、人間からのフィードバックによる強化学習と呼ばれるものを導入したこの論文で提案されました。
これは当時OpenAIからの論文で、これらの人々の多くは現在Anthropicの共同創設者です。これは検証不可能な領域で強化学習を行うためのアプローチを提案しました。
そのコアアイデアの漫画的な図を見てみましょう。先ほど述べたように、ネイティブなアプローチは、無限の人間の時間があれば、これらの領域でもRLを問題なく実行できるというものです。
例えば、通常通りRLを実行できます。無限の人間がいれば、これらは漫画的な数字ですが、1000回の更新を行いたいと考えます。各更新は1000のプロンプトに対して行われ、各プロンプトに対して1000のロールアウトをスコア付けします。
このようなセットアップでRLを実行できますが、この過程で人間にジョークを10億回評価してもらう必要があります。そのため、本当にひどいジョークを見る人が大勢必要になります。これは避けたいことです。
代わりにRLHFアプローチを取りたいと考えます。RLHFアプローチでは、コアとなるトリックは間接性です。人間を少しだけ関与させ、報酬モデルと呼ばれる完全に別のニューラルネットワークを訓練することでごまかします。
このニューラルネットワークは人間のスコアを模倣します。人間にスコア付けを依頼し、そのスコアをニューラルネットワークで模倣し、このニューラルネットワークは人間の選好のシミュレータのようなものになります。
シミュレータを手に入れたら、それに対してRLを行います。本物の人間に尋ねる代わりに、シミュレートされた人間にジョークのスコアを尋ねます。シミュレータを手に入れたら走り出せます。なぜなら、必要な回数だけ問い合わせでき、全て自動的なプロセスだからです。
これでシミュレータに対して強化学習を行えます。ご想像の通り、シミュレータは完璧な人間ではありませんが、少なくとも統計的に人間の判断と似ていれば、何かが起こることが期待できます。実際、上手くいきます。
シミュレータを手に入れたらRLを行え、全てが上手くいきます。このプロセスがどのように見えるか、詳細は100%重要ではありませんが、コアアイデアがどのように機能するか、漫画的な図でお見せしましょう。
ここに報酬モデルを訓練する仮説的な例の漫画的な図があります。「ペリカンについてジョークを書いてください」というプロンプトがあり、ここに5つの異なるロールアウトがあります。これらは全て5つの異なるジョークです。
最初に行うことは、人間にこれらのジョークを最良から最悪までランク付けしてもらうことです。この人間はこのジョークが最高だと考えたので、1番目のジョーク、これが2番目、3番目、4番目、5番目です。これが最悪のジョークです。
直接スコアを与えるのではなく順序付けを人間に依頼するのは、少し簡単なタスクだからです。人間にとって正確なスコアを与えるよりも順序付けの方が簡単です。人間が順序付けを行い、それがモデルの訓練プロセスへの彼らの貢献となります。
しかし、別個に報酬モデルにこれらのジョークについてのスコア付けを依頼します。報酬モデルは完全に別のニューラルネットワークで、おそらくトランスフォーマーですが、多様な言語を生成する意味での言語モデルではなく、単なるスコア付けモデルです。
報酬モデルは入力としてプロンプト1と2、候補のジョークを受け取ります。つまり、これらの2つの入力が報酬モデルに入ります。例えばここでは、報酬モデルはこのプロンプトとこのジョークを受け取ります。
報酬モデルの出力は単一の数値で、これはスコアと考えられ、例えば0から1の範囲を取ります。0が最低スコア、1が最高スコアです。ここに、訓練プロセスのある段階での仮説的な報酬モデルがこれらのジョークに与えるスコアの例があります。
0.1は非常に低いスコア、0.8は非常に高いスコアといった具合です。ここで報酬モデルが与えたスコアと人間が与えた順序を比較します。これを実際に計算する正確な数学的方法があり、基本的に損失関数を設定し、ここでの対応を計算し、それに基づいてモデルを更新します。
しかし、直感だけお伝えしたいと思います。例えば、この2番目のジョークについて、人間はこれが最も面白いと考え、モデルもある程度同意しています。0.8は比較的高いスコアですが、このスコアはさらに高くなるべきです。更新後、このスコアは例えば0.81などに増加すると期待されます。
ここでは実際に大きな不一致があります。人間はこれを2番目と考えましたが、スコアはわずか0.1です。このスコアはもっと高くなる必要があります。この種の監督の上での更新後、これは大幅に増加するかもしれません。例えば0.15などです。
そしてここでは、人間はこれを最悪のジョークと考えましたが、モデルは実際にかなり高い数値を与えました。更新後、これは例えば0.35などに下がると期待されます。
基本的に、以前行ったことと同じことを行っています。ニューラルネットワーク訓練プロセスを使用してモデルの予測を少しずつ調整し、報酬モデルのスコアが人間の順序付けと一致するようにしています。
報酬モデルを人間のデータで更新すると、人間が提供するスコアと順序により一致するシミュレータになっていき、人間の選好のシミュレータとなり、それに対してRLを行えます。
重要なのは、人間に10億回ジョークを見てもらう必要がないということです。例えば1000のプロンプトと各5つのロールアウト、つまり合計5000のジョークを人間に見てもらい、順序付けを提供してもらうだけです。
その順序付けと一致するようにモデルを訓練します。数学的な詳細は省略しますが、この報酬モデルが私たちにこのスコアを与え、人間の順序付けと一致するように訓練する方法があることを理解していただきたいと思います。これがRLHFの仕組みです。
これが大まかなアイデアです。基本的に人間のシミュレータを訓練し、それらのシミュレータに対してRLを行います。人間からのフィードバックによる強化学習の利点について最初に話したいと思います。
第一に、これにより非常に強力な技術セットである強化学習を実行でき、検証不可能な領域を含む任意の領域で実行できます。要約、詩作、ジョーク作成、その他の創造的な文章、数学やコード以外の領域などです。
実際にRLHFを適用すると経験的に見られるのは、これがモデルのパフォーマンスを向上させる方法だということです。なぜそうなのかについて私なりの考えはありますが、実際にはそれほど確立されていないと思います。RLHFを正しく行うと得られるモデルが少し良くなることを経験的に観察できますが、なぜそうなのかはそれほど明確ではありません。
私の最善の推測を申し上げましょう。これは主に判別器-生成器のギャップによるものだと思います。それは多くの場合、判別する方が生成するよりも大幅に簡単だということを意味します。
特に例として、監督付き微調整(SFT)では、人間に理想的なアシスタント応答を生成するよう求めています。多くの場合、ここで示したように理想的な応答を書くのは非常に簡単です。しかし、要約や詩作、ジョーク作成などの場合はそうではないかもしれません。
人間のラベラーとして、これらの場合の理想的な応答をどのように与えればよいのでしょうか? それには創造的な人間の文章が必要です。RLHFはこれを回避します。なぜなら、データラベラーとしての人々により簡単な質問を尋ねることができるからです。
直接詩を書くよう求められるのではなく、モデルからの5つの詩が与えられ、それらを順序付けるだけです。これは人間のラベラーにとってずっと簡単なタスクです。
これにより、はるかに高い精度のデータが得られると思います。人間に非常に難しい生成タスクを依頼するのではなく、創造的な文章を区別し、最良のものを見つけるよう依頼するだけです。これが人間が提供する信号であり、システムへの彼らの入力です。
そしてRHFのシステムは、人間によって高く評価されるような応答の種類を発見するのです。このような間接的なステップを踏むことで、モデルは少しずつ改善されていきます。
これがRHFの利点です。RLを実行することができ、経験的により良いモデルが得られ、非常に難しいタスクを実行しなくても人々が監督に貢献できるようになります。
しかし残念ながら、RHFには重大な欠点もあります。主な欠点は、実際の人間の判断に対してではなく、人間の損失の多いシミュレーションに対して強化学習を行っているということです。このシミュレーションは誤解を招く可能性があります。なぜなら、それは単なるシミュレーションであり、スコアを出力する言語モデルに過ぎないからです。実際の脳を持つ人間の意見を、あらゆる可能性のある異なるケースで完全に反映することはできないかもしれません。
これが1つ目の問題ですが、もっと微妙で悪質なことが起きています。それがRHFをスマートなシステムに大規模に展開できる技術として大きく制限しているのです。それは、強化学習がモデルをだますこと、つまりシミュレーションをだますための方法を発見することが非常に得意だということです。
ここで構築している報酬モデルはスコアを与えますが、これらのモデルはTransformerです。これらのTransformerは巨大なニューラルネットワークで、数十億のパラメータを持ち、人間を模倣しますが、それはある種シミュレーション的な方法で行います。問題は、これらが非常に複雑なシステムだということです。ここには10億のパラメータがあり、単一のスコアを出力します。これらのモデルをだますことができる方法があることが判明しました。トレーニングセットの一部ではなかった入力を見つけることができ、これらの入力は説明できないほど高いスコアを得ますが、それは偽物なのです。
たとえば、RHFを非常に長く実行した場合、1000回のアップデートを行うと、ジョークが良くなり、ペリカンについての本当に面白いジョークが得られると期待するかもしれません。しかし、実際にはそうはなりません。最初の数百ステップではペリカンについてのジョークは少し改善されるかもしれませんが、その後劇的に崖から落ちるように悪化し、非常に意味不明な結果が出始めます。
例えば、ペリカンについての最高のジョークが「the」になり始めます。これは全く意味をなしません。なぜこれが最高のジョークになるのか理解できません。「the」を報酬モデルに入力すると、スコア0が期待されますが、実際には報酬モデルはこれをジョークとして大好きになり、「the the the theth」がスコア1だと言います。
これは全く意味をなしません。これらのモデルは人間のシミュレーションに過ぎず、巨大なニューラルネットワークなので、意味不明な結果を生み出すような入力空間の部分に入り込むような入力を見つけることができるのです。これらの例は敵対的例と呼ばれます。この話題には深入りしませんが、これらはモデルに対する敵対的入力です。モデルのすき間に入り込んで、意味不明な結果を上位に出すような特殊な入力なのです。
ここで考えられる対処法として、「the the the」は明らかにスコア1ではなく、明らかに低いスコアなので、データセットに追加して、スコア5のような非常に低い順位を付けることが考えられます。確かにモデルは「the」が非常に低いスコアを持つべきだと学習し、スコア0を与えるようになります。
しかし問題は、モデルの中には常に無限の数の意味不明な敵対的例が隠れているということです。このプロセスを何度も繰り返し、報酬モデルに意味不明なものを追加して非常に低いスコアを与え続けても、ゲームに勝つことはできません。これを何ラウンドも繰り返すことができ、強化学習は十分な時間をかければ常にモデルをだます方法を見つけ出します。敵対的例を発見し、意味不明な結果で非常に高いスコアを得るのです。
これは根本的に、スコアリング関数が巨大なニューラルネットワークであり、RLがそれをだますための方法を見つけることが非常に得意だからです。長い話を短くすると、RHFは数百回のアップデートを実行し、モデルは改善されますが、その後は打ち切る必要があります。この報酬モデルに対して長く実行することはできません。最適化がそれをだまし始めるからです。基本的に打ち切って完了とし、出荷します。報酬モデルは改善できますが、最終的にはこのような状況に遭遇します。
そのため、RHFについて私が通常言うのは、「RHFはRLではない」ということです。もちろんRHFはRLですが、魔法のような意味でのRLではありません。これは無期限に実行できるRLではありません。正解を得るようなこれらの問題では、簡単にだますことはできません。正解を得るかどうかだけで、スコアリング関数はずっと単純です。ボックスエリアを見て結果が正しいかどうかを確認するだけなので、これらの関数をだますことは非常に困難です。
しかし報酬モデルをだますことは可能です。これらの検証可能な領域では、RLを無期限に実行することができます。数万回、数十万回のステップを実行し、これらの問題に対して非常に優れたパフォーマンスを発揮するような、私たちが思いもつかないような戦略を発見することができます。
囲碁のゲームでは、勝ち負けをだますような方法はありません。完璧なシミュレータがあり、石の配置をすべて把握し、誰が勝ったかを計算することができます。だますことはできないので、RLを無期限に実行することができ、最終的にはイ・セドルでさえも打ち負かすことができます。
しかしこのようなだまされやすいモデルでは、このプロセスを無期限に繰り返すことはできません。そのため、私はRHFを本当のRLとは考えていません。報酬関数がだまされやすいからです。それはある種の微調整のような領域にあり、少しの改善ですが、より多くの計算能力を投入して長く実行すれば、はるかに優れた魔法のような結果が得られるという形で根本的に設定されているものではありません。
そういう意味でRLではないのです。魔法が欠けているという意味でRLではありません。モデルを微調整してより良いパフォーマンスを得ることはできます。実際、ChatGPTのGPT-4oモデルはRHFを経ています。なぜならそれはうまく機能するからです。しかし、それは同じ意味でのRLではありません。RHFはモデルを少し改善する微調整のようなものだと考えるのがいいでしょう。
さて、私が説明したい技術的な内容のほとんどはこれで終わりです。これらのモデルのトレーニングにおける3つの主要な段階とパラダイムについて説明しました。事前学習、教師あり微調整、そして強化学習です。そしてこれらが子供たちを教育する際に既に使用しているプロセスと大まかに対応していることを示しました。
特に、事前学習は説明文を読むような基本的な知識獲得に相当し、教師あり微調整は多くの例題を見て専門家を模倣し、練習問題を解くプロセスに相当します。唯一の違いは、私たちは今、LLMやAIのために、人類の知識のすべての分野にわたるテキストブックを効果的に書く必要があるということです。また、コードや数学など、実際に彼らに働いてほしいすべての分野でも同様です。
私たちは彼らのためにテキストブックを書き、私が高レベルで説明したアルゴリズムをすべて洗練させ、そしてもちろん、これらのモデルを大規模かつ効率的にトレーニングする実行を本当に良い仕事として行うプロセスの途中にいます。
特に、私は多くの詳細には触れませんでしたが、これらは非常に大規模で複雑な分散ジョブで、数万、あるいは数十万のGPUで実行する必要があり、その規模のコンピュータで可能な最先端のエンジニアリングが必要です。その側面はあまり説明しませんでしたが、これは非常に重要で、最終的にはこれらの非常にシンプルなアルゴリズムの根底にあるものです。
また、これらのモデルの心の理論についても少し説明しました。覚えておいてほしいのは、これらのモデルは本当に優れていますが、あなたの仕事のためのツールとして非常に有用だということです。完全に信頼すべきではありません。幻覚の例をいくつか示しましたが、緩和策があっても、モデルは完璧ではなく、まだ幻覚を見ることがあります。時間とともに改善されており、これからも改善され続けるでしょう。
それに加えて、私はLLMの能力についての「スイスチーズモデル」と呼ぶものについても説明しました。モデルは多くの異なる分野で信じられないほど優れていますが、一部のユニークなケースでほぼランダムに失敗します。
例えば、9.11と9.9のどちらが大きいかモデルは知りませんが、同時にオリンピックの問題を解くことができます。これはスイスチーズの穴であり、多くの穴があります。これらに躓かないようにする必要があります。
これらのモデルを完璧なモデルとして扱わないでください。彼らの仕事をチェックし、ツールとして使い、インスピレーションのために使い、最初の下書きのために使いますが、ツールとして一緒に作業し、最終的にはあなたの仕事の成果に責任を持つ必要があります。
これが私が話したかったことのおおよその内容です。これらがどのようにトレーニングされ、何であるかということです。次に、これらのモデルの将来的な能力について、おそらく今後どのようなことが起こるのか、そしてこれらのモデルをどこで見つけることができるのかについて説明しましょう。
今後期待できることについて、いくつかのポイントがあります。まず気づくのは、モデルが非常に急速にマルチモーダルになるということです。上で説明したことはすべてテキストに関するものでしたが、すぐにLLMは単にテキストを扱うだけでなく、音声も扱えるようになります。聞いたり話したりすることができ、また画像も扱えるようになり、見たり描いたりすることができます。
これらすべての始まりは既に見られますが、これはすべて言語モデルの中でネイティブに行われることになります。これにより、自然な会話が可能になります。大まかに言えば、これが上で説明したことと本質的に変わらない理由は、ベースラインとして音声や画像をトークン化し、上で説明したのと全く同じアプローチを適用できるからです。
これは根本的な変更ではなく、単にトークンを追加する必要があるだけです。例えば、音声のトークン化では、音声信号のスペクトログラムのスライスを見て、それをトークン化し、音声を表す新しいトークンをコンテキストウィンドウに追加するだけです。画像も同様で、パッチを使用し、パッチを個別にトークン化することができます。画像とは何でしょうか?画像は単にトークンの列です。
これは実際にうまく機能し、この方向での初期の研究が多くあります。音声、画像、テキストを表すトークンのストリームを作成し、それらを同時に単一のモデルで扱うことができます。これがマルチモダリティの一例です。
2つ目に、人々が非常に興味を持っているのは、現在のほとんどの作業は、個々のタスクを銀の皿に載せてモデルに渡し、「このタスクを解いてください」と言うようなものです。モデルはそのタスクを実行しますが、仕事を遂行するために一貫したタスクの実行を組織化するのは、まだ私たち人間の仕事です。モデルはまだ、長期間にわたって一貫したエラー訂正を行いながらタスクを実行するために必要な能力を持っていません。長期的な仕事を実行するためにタスクを繋ぎ合わせることはまだできませんが、時間とともに改善されています。
おそらく今後起こることは、「エージェント」と呼ばれるものが登場することです。時間をかけてタスクを実行し、あなたがそれを監督し、その作業を見守り、時々進捗を報告します。より長期的なエージェントタスクが登場し、数秒の応答ではなく、数十秒、数分、あるいは数時間かかるような仕事を行うようになるでしょう。
しかし、上で説明したように、これらのモデルは完璧ではないので、すべてに監督が必要です。例えば、工場では自動化のためのヒューマン・トゥ・ロボット比について話されていますが、デジタル空間でも同様のことが起こると思います。デジタル領域でのヒューマン・トゥ・エージェント比について話すようになり、人間はエージェントタスクの監督者になっていくでしょう。
次に、すべてがより浸透的で目に見えないものになっていくと思います。ツールに統合され、至る所に存在するようになります。加えて、コンピュータの使用も同様です。現在、これらのモデルはあなたに代わって行動を起こすことはできませんが、これは別の重要なポイントです。
ChatGPTのオペレーターの発表を見た人は、それが早期の例の1つです。モデルにキーボードとマウスの操作を委任して、あなたに代わって実行させることができます。これは非常に興味深いと思います。
ここで最後のポイントは、このドメインにはまだ多くの研究の可能性があるという一般的なコメントです。その一例がテストタイム・トレーニングのようなものです。
上で説明したすべてには2つの主要な段階があることを覚えておいてください。まず、モデルのパラメータをタスクをうまく実行できるようにチューニングするトレーニング段階があります。パラメータが得られたら、それを固定して推論のためにモデルをデプロイします。
そこから、モデルは固定されており、もう変更されません。テストタイムに行っているすべてのことから学習することはありません。それは固定されたパラメータの集合であり、変化しているのはコンテキストウィンドウ内のトークンだけです。
モデルがテストタイムに利用できる唯一の種類の学習は、テストタイムに何をしているかに応じて動的に調整可能なコンテキストウィンドウの文脈内学習だけです。しかし、これは人間とは異なると思います。人間は実際に、何をしているかに応じて学習することができます。特に睡眠時など、脳はパラメータを更新しているようなものです。
現在のこれらのモデルやツールには、そのような等価物はありません。より奇抜なアイデアがまだ探求される余地があると思います。特に、これは必要になると思います。なぜなら、コンテキストウィンドウは有限で貴重なリソースだからです。特に、非常に長期にわたるマルチモーダルなタスクに取り組み始め、動画を入れ始めると、これらのトークンウィンドウは非常に大きくなり始めます。数千や数十万どころではなく、それをはるかに超えるようになります。
現在利用できる唯一のトリックは、コンテキストウィンドウを長くすることですが、そのアプローチだけでは、時間とともにマルチモーダルな長期タスクに対応することはできないと思います。そのような分野では、新しいアイデアが必要です。これらのタスクは非常に長いコンテキストを必要とするケースになるでしょう。
これらは、今後期待できることの例です。次に、この進歩を追跡し、この分野で何が起こっているかの最新情報を把握できる場所について説明しましょう。
私が常に最新情報を把握するために使用している3つのリソースは、まず第一にElMarinaです。ElMarinaを見せましょう。これは基本的にLLMのリーダーボードで、すべてのトップモデルをランク付けしています。ランキングは人間による比較に基づいています。人間がこれらのモデルにプロンプトを与え、どちらが良い回答を与えるかを判断します。どのモデルがどれかは知らされず、単にどのモデルがより良い回答を与えるかを見て、ランキングを計算することができます。
ここで見えるのは、Google Geminiなどのようなこれらのモデルを作成する異なる組織です。これらのいずれかをクリックすると、そのモデルがホストされている場所に移動します。ここではGoogleが現在トップで、OpenAIがその直後に続いています。3位にはDeepSeekがいます。
これが大きな話題になっている理由は、最後の列にあるライセンスです。DeepSeekはMITライセンスのモデルです。オープンウェイトで、誰でもこれらのウェイトを使用でき、ダウンロードでき、自分のバージョンのDeepSeekをホストでき、好きな方法で使用できます。これは所有権のあるモデルではなく、アクセスできないものではありません。基本的にはオープンウェイトでリリースされています。このように強力なモデルがオープンウェイトでリリースされたのは前例のないことなので、非常に素晴らしいことです。
次にはGoogleとOpenAIからさらにいくつかのモデルがあり、下にスクロールすると他の通常の候補が見えてきます。ここには14位にXAI、Anthropicのソネットがあり、そしてここにはMetaのLlamaがあります。LlamaもDeepSeekと同様にオープンウェイトモデルですが、上位ではなくここにあります。
このリーダーボードは長い間とても良かったと言いますが、ここ数ヶ月は少しゲーム化されてきたと思います。以前ほど信頼していません。経験的に、例えば多くの人々がAnthropicのソネットを使用しており、それは本当に良いモデルだと感じていますが、それは14位という低い位置にあります。
逆に、あまり多くの人々がGeminiを使用していないと思いますが、非常に高くランクされています。これを最初の判断材料として使用しますが、いくつかのモデルをあなたのタスクで試してみて、どれがより良いパフォーマンスを発揮するか確認してください。
2つ目に指摘したいのは、AI Newsニュースレターです。AI Newsは創造的な名前ではありませんが、Swixとフレンズによって作成された非常に良いニュースレターです。メンテナンスしてくれてありがとうございます。非常に包括的なので私にとって非常に役立ちました。
アーカイブを見ると、ほぼ2日おきに作成されており、非常に包括的です。その一部は人間によって書かれ、キュレートされていますが、多くはLLMによって自動的に構築されています。非常に包括的で、これを見ていれば重要なことは何も見逃さないでしょう。もちろん、長すぎるので全部は読まないかもしれませんが、上部のこれらのサマリーは非常に良く、人間の監督もあると思います。これは私にとって非常に役立ちました。
最後に指摘したいのは、XとTwitterです。多くのAIの話題はXで行われているので、好きで信頼できる人々をフォローし、最新情報もXで得ることができます。これらが私にとって時間とともに機能してきた主要な場所です。
最後に、モデルをどこで見つけ、どこで使用できるかについて少し説明します。まず、最大の専有モデルについては、そのLLMプロバイダーのウェブサイトに行く必要があります。例えば、OpenAIの場合はChat.OpenAI.comです。実際に今は機能していると思います。
あるいは、Geminiの場合はgem.google.comかAI Studioです。なぜか2つあります。私には完全には理解できません。誰も理解していません。DeepSeekやLlamaなどのオープンウェイトモデルの場合は、LLMの推論プロバイダーに行く必要があります。
私のお気に入りはTogether.aiです。Together.aiのプレイグラウンドに行くと、異なるタイプの多くの異なるモデルを選択でき、ここでそれらと会話することができます。例として、ベースモデルを使用したい場合、これらの推論プロバイダーでベースモデルを見つけることはそれほど一般的ではありません。彼らはすべてアシスタントとチャットを対象としています。
ここでさえ、ベースモデルは見られません。ベースモデルについては通常、Hyperboricに行きます。なぜなら彼らは私のLlama 3.1ベースを提供しており、私はそのモデルが大好きだからです。ここで単に会話することができます。私の知る限り、これはベースモデルのための良い場所です。もっと多くの人々がベースモデルをホストしてくれることを願っています。なぜなら、場合によっては有用で興味深いものだからです。
最後に、より小さなモデルの一部を取って、ローカルで実行することもできます。例えば、DeepSeekの最大のモデルはMacBookでローカルに実行することはできませんが、DeepSeekモデルの蒸留された小さなバージョンがあります。
また、これらのモデルをより低い精度で実行することもできます。例えば、DeepSeekのfp8やLlamaのbf16のようなネイティブな精度ではなく、それよりもはるかに低い精度で実行できます。これらの詳細を完全に理解する必要はありませんが、蒸留された小さなバージョンを、さらに低い精度で実行することができ、コンピュータに搭載することができます。
実際に、かなり良いモデルをラップトップで実行することができます。私のお気に入りの場所は通常LM Studioです。これは基本的に入手できるアプリですが、見た目が本当に醜いと思います。実際には有用ではない500種類の異なるモデルをすべて表示することは好きではありません。誰もがDeepSeekを実行したいだけなのに、なぜこれらのモデルを提供するのかわかりません。
検索が本当に複雑で、異なる蒸留と異なる精度を選択する必要があり、すべてが本当に混乱します。しかし、実際にそれがどのように機能するかを理解し、それは全く別のビデオの内容ですが、実際にモデルをロードすることができます。
ここでは、Llama 3.2 Instruct 1Bをロードしました。ペリカンについてのジョークを尋ね、別のジョークを求めることができ、それは別のジョークを提供します。ここで起こることはすべて、あなたのコンピュータでローカルに実行されています。他の場所に行くわけではなく、MacBook ProのGPUで実行されています。
これは非常に素晴らしく、終了したらモデルを取り出してRAMを解放することができます。LM Studioは、UIUXの問題が多く、ほとんどプロフェッショナル向けだと思いますが、おそらく私のお気に入りです。YouTubeでいくつかのビデオを見れば、このインターフェースの使い方を理解できると思います。
これらがいくつかの場所についての説明です。では、最初に戻って、質問に答えましょう。Chat.OpenAI.comに行って何らかのクエリを入力し、実行を押すと、実際に何が起こっているのか、何を見ているのか、何と話しているのか、これはどのように機能するのかという質問でした。
このビデオが、これらのモデルがどのようにトレーニングされ、返ってくるこの応答が何であるかについて、いくつかの内部の詳細を理解する手助けになったことを願っています。
特に、あなたのクエリは取られ、まずトークンに分割されることがわかりました。Tikトークナイザーに行き、ユーザークエリのための場所にクエリを入れます。私たちのクエリは、会話プロトコルフォーマットと呼ばれるものに入ります。これは会話オブジェクトを維持する方法です。これがそこに挿入され、この全体が1次元のトークン列になります。
ChatGPTはこのトークン列を見て、実行ボタンを押すと、基本的にこのリストにトークンを追加し続けます。シーケンスを続け、トークンのオートコンプリートのように動作します。特に、この応答を私たちに与えたので、基本的にここに置くことができ、続けたトークンを見ることができます。これがおおよそ続けたトークンです。
では、なぜモデルがこれらのトークンで応答したのか、これらのトークンは何か、何と話しているのか、このシステムをどのようにプログラムするのかという質問が出てきます。そこで内部の部品について説明しました。
このプロセスの最初の段階、3つの段階があります。事前学習段階は基本的に、このニューラルネットワークのパラメータにインターネットから知識を取り込むことに関係しています。ニューラルネットは多くの知識をインターネットから内部化しますが、パーソナリティが本当に現れるのは、ここでの教師あり微調整のプロセスにおいてです。
基本的に、OpenAIのような会社は、非常に多様なトピックにわたる100万の会話のような大規模な会話データセットをキュレートします。人間とアシスタントの間の会話があり、このプロセス全体で多くの合成データ生成が使用され、多くのLLMのヘルプなども使用されますが、基本的にはこれは人間のデータキュレーションタスクで、多くの人間が関与しています。
特に、これらの人間はOpenAIに雇われたデータラベラーで、ラベリング指示を与えられ、それを学習し、任意のプロンプトに対する理想的なアシスタント応答を作成することがタスクです。プロンプトに応答する方法を例示によってニューラルネットワークに教えているのです。
では、ここで返ってきたものをどのように考えるべきでしょうか。それは何でしょうか。正しい考え方は、これはOpenAIのデータラベラーのニューラルネットワークシミュレーションだということです。このクエリをOpenAIのデータラベラーに渡し、そのデータラベラーがまずOpenAIのすべてのラベリング指示を読み、2時間かけてこのクエリに対する理想的なアシスタント応答を書き上げ、それを私に渡すようなものです。
もちろん、実際にはそうではありません。2時間待っているわけではないので、そのプロセスのニューラルネットワークシミュレーションを得ているのです。これらのニューラルネットワークは人間の脳のように機能しないことを覚えておく必要があります。彼らは異なり、何が簡単で何が難しいかは、人間とは異なります。本当にシミュレーションを得ているだけなのです。
ここで示したように、これはトークンストリームであり、基本的にはニューラルネットワークで、その間に多くの活性化とニューロンがあります。これはトークンからの入力とモデルのパラメータを混ぜ合わせる固定された数学的表現で、それらが混ざり合ってシーケンスの次のトークンを得ます。
しかし、これは各トークンに対して起こる有限の計算量です。これはある種の損失の多い人間のシミュレーションで、このように制限されています。そのため、人間が書くものは何であれ、言語モデルはこのトークンレベルで模倣しており、各トークンとシーケンスに対してこの特定の計算だけを行っています。
また、その結果として、認知の違いにより、モデルは様々な形で苦労することも見ました。彼らの使用には非常に注意が必要です。例えば、幻覚に苦しむことを見ました。また、LLMの能力についてのスイスモデルの感覚もあり、基本的にチーズに穴があるように、モデルは時々任意に何か馬鹿なことをすることがあります。
多くの魔法のようなことをしているにもかかわらず、時にはできないことがあります。おそらく考えるための十分なトークンを与えていないので、彼らは単に物事を作り上げてしまいます。なぜなら、彼らの精神算術が壊れてしまうからです。突然、文字数を数えることができなくなったり、9.11が9.9より小さいことを言えなくなったり、少し馬鹿に見えます。
これはスイスチーズのような能力であり、注意が必要です。その理由を見ましたが、基本的に返ってきたものをどのように考えるかというと、繰り返しになりますが、これはOpenAIのラベリング指示に従うデータラベラーの人間のニューラルネットワークシミュレーションです。それが私たちが得ているものです。
GPT-4o3ミニのような思考モデルに実際にアクセスする場合、状況は少し変わると思います。その理由は、GPT-4oは基本的に強化学習を行わないからです。RHFは行いますが、RHFはRLではないと説明しました。そこには魔法のための時間はなく、それは少しの微調整に過ぎないと考えるべきです。
しかし、これらの思考モデルはRLを使用します。彼らはこの第3段階を経て、思考プロセスを完成させ、あなたの頭の中の内部独白のような問題解決の新しい思考戦略と解決策を発見し、OpenAIのような会社が作成し、キュレートし、LLMが利用できるようにする大規模な練習問題のコレクションでそれを練習します。
ここに来て思考モデルと話をし、この質問を入力すると、もはや人間のデータラベラーの単純なシミュレーションではありません。これは実際に新しくユニークで興味深いものです。もちろん、OpenAIは内部の思考や推論の根底にある思考の連鎖を見せてくれませんが、そのようなものが存在することを知っています。
これはその要約であり、ここで得ているものは、単なる人間のデータラベラーの模倣ではなく、実際に新しく興味深い、エキサイティングなものです。シミュレーションの中で出現した思考の機能です。単に人間のデータラベラーを模倣しているのではなく、この強化学習のプロセスから生まれたものです。
もちろん、ここでは輝く機会を与えていません。なぜなら、これは数学的な推論の問題ではなく、単なる創作的な書き込みの問題だからです。検証可能なドメインで開発された思考戦略が、創作的な書き込みのような検証不可能な他のドメインに転移し、一般化可能かどうかは、分野での未解決の問題だと思います。その転移がどの程度起こるかは、分野では不明だと言えます。
そのため、このプロンプトのような検証不可能なものに対して、検証可能なすべてのものでRLを行うことの利点を見ることができるかどうかはわかりません。これは未解決の問題です。
もう1つ興味深いのは、ここでの強化学習がまだ非常に新しく、原始的で、初期段階だということです。推論の問題で偉大さの兆しを見始めているだけです。原理的には、囲碁の「第37手」に相当するようなものができる可能性がありますが、囲碁のゲームではなく、オープンドメインの思考と問題解決においてです。
原理的に、このパラダイムは本当にクールで新しいエキサイティングなことができる可能性があります。人間が考えたことのないようなことさえも、原理的にこれらのモデルは人間が持ったことのないアナロジーを行うことができます。これらのモデルが存在することは信じられないほどエキサイティングですが、繰り返しになりますが、まだ非常に初期段階で、これらは今のところ原始的なモデルです。
彼らは主に数学やコードなどの検証可能なドメインで輝くでしょう。非常に興味深く、遊び、考え、使用するのに面白いものです。それがおおよそすべてです。
現在利用可能なものの大まかな概要を説明しました。全体的に、この分野にいることは非常にエキサイティングな時期だと個人的に思います。私は毎日これらのモデルを何十回も何百回も使用しています。なぜなら、彼らは私の仕事を劇的に加速してくれるからです。多くの人々が同じことを感じていると思います。
これらのモデルの結果として、大きな富の創造が見られると思います。RLモデルでもいくつかの短所があることに注意してください。ツールボックスのツールとして使用し、完全には信頼しないでください。なぜなら、彼らはランダムに馬鹿なことをし、ランダムに幻覚を見、ランダムに精神算術をスキップして正しく得られず、ランダムに数えることができなくなったりするからです。
ツールボックスのツールとして使用し、彼らの仕事をチェックし、あなたの仕事の成果を所有してください。しかし、インスピレーションのため、最初の下書きのために使用し、質問をしてください。常にチェックし、検証すれば、あなたの仕事で非常に成功するでしょう。
このビデオが役立ち、興味深かったことを願っています。楽しんでいただけたと思います。既に非常に長くなってしまい申し訳ありませんが、役立ったことを願っています。また会いましょう。
コメント