テストタイム・スケーリングに関する考察(o1)

21,678 文字

Speculations on Test-Time Scaling (o1)
Tutorial on the technical background behind OpenAI o1. Talk written with Daniel Ritter.Slides: The “large” in LLM is...

スペキュレーションズ・オン・テストタイム・スケーリング。OpenAIについて何を言おうとも、彼らは象徴的なグラフを作り出します。このグラフはGPT-3の論文から取られたもので、言語モデルのパラメータが大きくなるにつれて、モデルがゼロショットタスクでより良いパフォーマンスを発揮することを示す複数のグラフの1つです。このグラフと、それに類似した多くのグラフは、過去5年間、言語モデルコミュニティの関心を集めてきました。
これは私たちが多くの異なる問題についてどのように考え、モデルをどのように構築し、設計し、スケールし、投資するかを本当に変えました。実際、現在では、このグラフをサポートするために原子力発電所が建設されているとさえ言えます。
最近、OpenAIは新しいグラフをリリースしました。彼らの以前のグラフの影響を考えると、私はこれをかなり真剣に受け止めています。このグラフの左側では、私たちが以前見たカーブに似たカーブが見られます。このカーブでは、より多くのトレーニング時間の計算が、困難なタスクでの一貫して良い精度につながることを示しています。
グラフの右側では、新しいカーブが見られます。このカーブは、計算と比較してモデルのパフォーマンスを示している点で似ていますが、異なるのは、このカーブがテスト時の計算を示していることです。そして私たちが見ているのは、システムにより多くのテスト時の計算を加えることで、このタスクでのパフォーマンスが大幅に向上することです。これは新しいことです。言語モデリングではこれまで見られなかったことで、大きな関心を集めているトピックです。
このトピックについてさらに深く掘り下げる前に、これらの問題が実際にどのようなものかを説明する価値があります。それらはかなり難しいものです。単なる検索や、パターンマッチングに似たようなことをしているだけではありません。技術的な数学の問題で、本格的な推論を行っているのです。
このようなスケーリングの課題を議論する際によく取り上げられるエッセイの1つに「The Bitter Lesson(苦い教訓)」があります。おそらくこのブログ記事を読んだことがあると思いますが、それが何を言っているのか、そしてこの問題にどのように適用されるのかを理解する価値があります。
Bitter Lessonは、AI研究者がしばしばエージェントに知識を組み込もうとしてきたという歴史的な観察に基づいています。これは常に短期的には役立ち、研究者個人にとっては満足のいくものですが、長期的には行き詰まり、さらなる進歩を妨げることさえあります。そして、画期的な進歩は最終的に、計算による検索と学習に基づくアプローチによってもたらされます。
今日これを取り上げるのは、この分野の研究者の間で人気のある会話になっているからです。私たちが過去5年間見てきたのは、モデルの学習能力の向上です。今私たちが見ているかもしれないのは、検索への移行です。特に、これらのより技術的な問題のいくつかでスケールアップすることを可能にする学習によって促進される種類の検索です。
このトークの準備にあたって、このシステムの貢献者の1人であるNoam Brownの最近のトークもいくつか見ました。自身の過去の研究について話す際、彼が言った最も重要な教訓は、「私や他の研究者たちは、検索をスケールアップすることがどれほどの違いを生むかを単純に知らなかった」ということです。「もし私が博士課程の開始時にこれらのスケーリング結果を見ていたら、ポーカーの検索アルゴリズムの研究にもっと早く移行していただろう。おそらく、超人的なポーカーボットももっと早く実現していただろう」と彼は述べています。
ここで彼はゲームプレイについて話していますが、彼の会話の目的は、一般的にこの分野に検索についてもっと考えることを促すことです。
彼が取り上げるもう1つの論文は、あまり広く知られていないにもかかわらず、この分野の人々に非常に影響を与えたと私が感じた論文です。これは2021年のボードゲームのスケーリング法則について論じた論文です。この設定では、より多くのトレーニングとより多くのテスト時の検索との間を行き来することが容易で、論文ではこれら2つの用語がどのように関連しているかを説明しています。
特に、ここでのこれらのカーブでは、モデル自体でより多くのトレーニング時間を費やすことでより良いシステムを学習できることを示していますが、これだけではテスト時の計算に取って代わることはできません。これら2つの点を一緒にプロットすることで、これら2つの相対的な関係を理解し、実際にそれらを適用する方法を学ぶことができます。
言語モデルの同様のテクニックについて話す際、人々はしばしば2021年のOpenAIの論文を取り上げます。この論文では、学習された検証器(learned verifier)と呼ばれるものを訓練します。これを行うために、生成モデルを使用して何百もの異なる解決策を生成し、次に専門家にそれらの解決策を見てもらい、どれが正しくどれが間違っているかを選択します。この情報を使用して、検証器を訓練することができます。
この検証器は、問題でうまくいっているかどうかを教えてくれ、テスト時に答えを改善するために使用することができます。論文自体には多くの詳細がありますが、最も重要な結果の1つは、この学習された検証器に対して検索を行うことで、実際の良い答えだけで訓練することよりも改善が見られることを示していることです。
このグラフでは、オレンジの線が検証器に対して実行しているモデルの精度を、軌跡自体で訓練されたモデルと比較して示しています。これは、標準的な教師あり微調整(SFT)を超えて、学習された検証器を使用してモデルに新しい信号を注入するシステムに移行する論拠となっています。これにより、テスト時にモデルを改善するために検証器を利用することができます。
後で見るように、これは正確にOpenAIが行っていることだとは考えていませんが、彼らがシステムを開発する際にテスト時の計算の初期の使用をどのように探索していたかについての感覚を与えてくれます。
実際、その点について、私たちはOpenAIで何が起こっているのかについてほとんど何も知りません。実際、私は彼らが実際に何をしているのかを予測することにはあまり焦点を当てませんが、このモデルのリリースを、オープンな研究分野で何が起こっているかについての調査を提供する機会として使用したいと思います。
このトークでは、OpenAIのo1に関連する公開文献の調査を提供します。このプロセスの一環として、私は多くの異なる研究者に電話をかけることもしました。教授であることの良い特典は、多くの異なる人々が私と話をしてくれることです。このトークのために、私は約25人の異なる人々と、彼らが何が起こっていると考えているかについて話をしました。
最後に、ソーシャルメディアからの噂もいくつか含めます。実際に何が起こっているのか誰にもわからないので、これらをあまり重視はしませんが、システムが何をしている可能性があるかについて考えるための制約を与えてくれます。
トーク自体にはさらに4つの部分があります。まず、o1の背後にあるいくつかの手がかりについて話します。次に、これらのシステムで実際に使用されているテクニックの技術的背景を提供します。その後、4つの異なる容疑者について議論します。なぜそれらが興味深いのか、それらについてどのような論文が書かれているのか、そして実際に何が起こっているのかもしれないのかについてです。最後に、この分野の研究者やオープンソースの実践者にとっての影響について話をして締めくくります。
手がかりを集めるために、まずOpenAI自身の言葉から始めましょう。o1のリリースに関するブログ記事で、彼らはこのトピックについて多くを書きましたが、その多くは主にマーケティングです。しかし、何が起こっている可能性があるかについての感覚を与えてくれる2つの文があります。
まず、彼らは「私たちの大規模な強化学習アルゴリズムは、非常にデータ効率的な訓練プロセスで、思考の連鎖を生産的に使用する方法をモデルに教えます」と述べています。この文は、起こっている可能性のあることについて3つの手がかりを与えてくれます。
1つ目は、システムが強化学習を使用しているということです。強化学習の正確な定義は非常に難しくなっており、人によって異なる意味を持ちます。私は最も緩い定義を採用し、何らかの種類の検証可能な問題からの何らかの信号を必要とするだけだと言うことにします。私たちは教師あり学習データを持っていないと仮定し、他の方法で信号を獲得する必要があります。
2つ目は、この方法が思考の連鎖(Chain of Thought)を使用しているということです。具体的には、テスト時の計算を増やす方法として思考の連鎖を使用しています。これは、テスト時に何らかの種類の検索を行っているのではなく、実際にはシステムが非常に長い出力ストリームを生成し、それを使用して最終的な予測を行っているということを意味します。これについては、トークを通じてさらに議論します。
3つ目は、システムがデータ効率的だということです。これは、比較的少数のデータ例から学習したということを意味します。これは計算効率やパラメータ効率についての主張ではなく、必要な実際の問題の量が比較的少ないということだけです。ここでの「比較的」とは、インターネット全体での訓練と比較してということです。
この文に加えて、これらのモデルについて人々が行っているいくつかの他の仮定があります。1つ目は、これが非常に長く一貫した思考の連鎖を生成する単一の最終的な言語モデルだということです。もう一度明確にするために言えば、これは難しい問題に対する答えを推測するのに十分な情報があると考えるまで、自分自身とおしゃべりをするだけのモデルです。
2つ目は、このモデルが専門家の例に従っていないと仮定していることです。これは、大量の人間による監督がないということではありません。単に、その監督が質問に対する直接的な人間の答えの形で与えられていないということです。人間が行ったことをコピーしているわけではありません。
最後に、示す振る舞いが学習されているという仮定があります。これは、データや自己対戦から何らかの形で来ているということを意味し、モデルに明示的に与えられているわけではありません。
これらの仮定の中で最も重要なのは、この思考の連鎖というアイデアです。非公式な定義から始めて、後でトークでもっと形式的な説明に入りましょう。
非公式な定義は、モデルが答えを生成するプロセスで中間的なステップを生成するということです。これらの中間ステップは教師ありではなく、単に進行中の言語モデルからサンプリングされるだけです。したがって、右の例では、赤で書かれた質問が与えられ、その下に緑で書かれた4つの思考の連鎖のステップを生成します。これらの各ステップは、プロセスにおいて何らかの中間的な項を計算します。最後に、問題でのパフォーマンスを評価するために使用される最終的な答えを生成します。
同じブログ記事で、OpenAIは思考の連鎖のこの使用を強調しています。彼らは「o1は思考の連鎖を磨き、使用する戦略を洗練させることを学習します。間違いを認識し修正することを学習します。厄介なステップをより単純なものに分解することを学習します。現在のアプローチがうまくいっていない場合、別のアプローチを試すことを学習します。」と述べています。この文からあまり多くの信号を引き出すのは難しいですが、思考の連鎖がアクションが起こっている場所であることを本当に強調しています。
テスト時に複雑な検索を組み込む他のシステムとは異なり、このモデルは単にステップを進めながら思考の連鎖を利用しているだけです。
ブログ記事で、OpenAIはさらにシステムの思考の連鎖の例をいくつか含めています。リリースされたモデルではこの思考の連鎖を実際には見ることができませんが、彼らが提供した連鎖のいくつかを見ることはできます。
まず、プログラミングの問題に対する思考の連鎖を見ることができます。もう一度注意しておきますが、これは問題を解くプロセスでモデル自体が生成したものです。私たちが見ることができるのは、モデルが生成したいすべてのステップの概要を作成したということです。概要は番号付けされており、複雑なサブステップを含んでいます。思考の連鎖の残りを読めば、答えを生成するプロセスでこの概要に従っていることがわかります。
別の例では、初歩的な計画の形式があります。システムが問題に答えるために必要な時間制約を認識していることがわかります。また、異なるオプションを提案し、どれに従いたいかを選択することもできます。これはすべて英語で書かれていますが、中間的なステップを指定するために「まず」や「オプション1」のような手がかりを使用しています。
これらの連鎖で見られるもう1つの能力は、バックトラッキングの形式です。この数学の問題の例では、計算する必要があるかもしれない中間的な項を説明し、途中で停止して「実際、これは直接役立たないかもしれない」と言います。これにより、モデルは戻って、別のことを言いたいかもしれないと判断することができます。これは検索に少し似ていますが、実際には従来の検索で実行されているわけではありません。単にモデルが答えを決定するために自分自身と話をしているだけです。
最後に見られる能力は、自己評価のようなものです。ここでは「各オプションを分析しましょう」と言っているのが分かります。次に、考慮したいオプションを指定し、「これは良い説明ですか?」と自問します。答えは少し非公式で、「H」と言って次のオプション自体に進みますが、これもモデルが異なる可能性を探索し、どれが意味をなすかを判断するために使用できる能力です。
要約すると、ここでの思考の連鎖は、テスト時のスケーリングの方法を提供しています。思考の連鎖の実際の言葉は古典的な意味での検索や計画のように見えますが、これは実際にはモデルのテスト時に実行されているわけではありません。
これをどのように学習するのでしょうか?これが大きな謎です。彼らは、この振る舞いを引き出すために強化学習が必要だと主張しています。トークの残りの部分では、これが実際にどのように起こる可能性があるのか、そして文献にある論文のいくつかを見て、モデルがこのようなことを学習できるようにする方法について探索したいと思います。
しかし、そこに到達するには、いくつかの技術的な背景が必要です。したがって、このセクションでは、思考の連鎖というこのアイデアを形式化することに焦点を当てます。学習は行わず、単に質問から始めて、中間的な推論の4、5ステップを経て、答えにたどり着くとはどういうことかについて話すだけです。
形式的には、問題仕様をXと呼ぶことにします。これは単に、解決する必要がある質問が尋ねられているものです。最終的な解決策をyと呼びます。これは、例えば数学の問題の結論や答えを表します。その間に、一連のステップZ1からZTを生成しようとします。これらは個々の単語ではなく、代わりに最終的な答えを生成する途中の完全なステップです。
これが言語モデルであるという事実から少し抽象化し、単にこの連鎖に沿ってステップを生成することについて考えます。このスライドの一番下にある最終的な目標は、入力Xを条件とする答えyの分布を生成することです。この分布は、これらの潜在的な思考の連鎖のステップZにわたる期待値を取ることによって定義されます。
ウォームアップとして、標準的な思考の連鎖がどのように行われるかを考えてみましょう。実際にはすべての可能な中間ステップにわたる期待値を計算することはできないので、代わりに先祖サンプリングを実行します。これは派手な用語ですが、単に答えを生成するまで言語モデルに生成させることを意味します。
具体的には、小さな図の中の緑の点で表されるステップZをサンプリングし、右の点で表される答えyに到達するまでこれを行います。ここで適用されているテスト時の計算の量をTとして考えることができます。ここでTは、答えに至る途中の中間的なステップの各1つを表します。
一般的に、私はこれらの右側のグラフを使用して、これらのプロセスで思考の連鎖がどのように使用されているかを示します。
多くの論文が、これらの問題により良い答えを得る方法があることを指摘しています。単一の思考の連鎖を取って答えを生成するのではなく、代わりにn個の思考の連鎖をサンプリングすることができます。これらのn個の異なる思考の連鎖を持ったら、多数決を取って多数派の答えを決定することができます。
このグラフでは、これらの思考の連鎖の各々が独立にサンプリングされ、その後何らかの種類の正規化を行います。最も一般的な答えが、私たちが決定する答えです。これは強力なベースラインを提供し、より多くのテスト時の計算を利用して答えを少し改善する方法を提供します。
これを大規模に行うことができることは明らかですが、人々は、o1のブログ記事で見られるような驚くべき結果にはつながらないことを発見しています。
必要な2つ目の機械は検証器です。明示的に、自動検証器を持っていると仮定しますが、トレーニング時にのみ持っています。この自動検証器を、ある答えyを取って、それが間違っているか正しいかを教えてくれるものとして定義します。この検証器は、例えば数学の問題を解いたかどうかをチェックする正規表現であったり、コードの場合はユニットテストのような、もっと複雑なものかもしれません。
もう一度明確にしておきますが、これはテスト時には持っていませんが、より良いモデルを生成するためのトレーニング信号を提供する方法として利用します。
このトークを通じて、自動検証器を持っていると仮定します。これは多くの研究での一般的な仮定であり、これらの問題を解くための合理的な仮定だと思います。
とはいえ、OpenAIが実際に自動検証器を利用しているのか、それとも学習された検証器を使用しているのかは明確ではありません。彼らのいくつかの論文では、いくつかの技術的な問題に対して明示的に検証器を学習しようとしています。彼らの議論は、これがより一般的な目的のモデルを生成でき、大規模な注釈施設を利用してモデルを改善する方法だというものです。
学習された検証器の場合、いくつかの興味深い研究課題があります。例えば、1つの課題は、学習された検証器では、生成器が例えばクレイジーな解決策を生成した場合、学習された検証器が混乱してそれらを受け入れてしまうことです。
右のグラフでは、数学の問題に対して、モデルは改善し続けますが、より多くのサンプルを取るにつれて停滞し、さらには悪化することを示しています。彼らは、これが学習された検証器との課題であると議論し、多くのデータを収集し、この問題についてもっと考えたに違いないと私は考えなければなりません。
しかし、GPUもデータ注釈も乏しい私たちは、代わりに自動検証器の状況に焦点を当てます。
検証器を持っていれば、多くの新しいことができます。1つのアイデアは、棄却サンプリングを行うことです。これは、正しい答えをもたらす思考の連鎖の分布を得る方法です。これを行うために、再びn個の異なる連鎖をサンプリングし、単に検証された連鎖を保持します。
右側の表記では、上の図で私たちが選んだすべての異なるサンプルを見て、下の図で検証された解決策に至った思考の連鎖を見ています。右側の小さな四角いボックスを使用して、正常に検証された解決策を示します。
このプロセスは計算的に非常に集約的かもしれませんが、検証された解決策に至る良い思考の連鎖を得る方法を提供します。今のところ、この手順を使用して何らかの解決策を得ることができると仮定しますが、難しい問題に対してこれが正しい答えをもたらすことは明らかではありません。
できるもう1つのことは、同じプロセスを適用しますが、連鎖の中間的なステップから始めることです。したがって、この例では、思考の連鎖の3つのステップを実行し、そこから「ロールアウト」と呼ばれるものを行います。このロールアウトは棄却サンプリングと同じですが、単にプロセスの中間的な場所から始まります。
これを使用して、連鎖の任意のステップでどれだけうまくいっているかを教えることができます。良い問題や悪い問題に対して常に機能することは保証されていませんが、少なくともシステムで移動する方向を与えてくれます。
この形式的な背景を踏まえて、今や私たちの主な目標に到達します。これらの潜在的な思考の連鎖を考慮に入れることができるモデルを学習したいと思います。これを明示的に、検証された解決策を生成することができる限り良くパフォーマンスを発揮するモデルを学習することを目的とした最大尤度問題として書き下すことができます。
これを、正しい答えに至るすべての可能な思考の連鎖にわたる周辺化として考えることができます。もちろん、この問題は組み合わせ的に非常に難しいものです。無限に近い計算でさえ、実際にこの周辺化を行うことはできません。各ポイントで多くの異なるステップがあり、数千のステップの長い連鎖について話し始めるとき、これは非常に扱いにくくなります。したがって、これを実際にどのように行うかを理解することが、問題の楽しい部分です。
いくつかの方法に入る前に、強化学習について簡単な注意をしたいと思います。先ほど述べたように、私は強化学習をかなり難しい分野だと感じています。これらのシステムがどのように機能し、実際にどのように訓練されるかについて、多くの異なる矛盾する定義があります。多くの詳細は実際に、個々の企業がシステム設計で行う必要があった特定の選択だと思います。これらの多くのことは、大規模な強化学習研究所内で行われる場合と、オープンソースでは全く異なって見えることがよくあります。
それを念頭に置いて、私はこれらの選択が非常に重要だと思いますが、このトークのために、その大部分を省略します。物事をバッチ処理する方法、オンポリシーまたはオフポリシーで行う方法、システムが制御不能にならないようにするためにK制約を使用する方法について、特定の選択があります。しかし、私が話す予定のほとんどのアルゴリズムについて、シンプルな方法でも、より複雑でスケーラブルな方法でも実装することができます。
これらの詳細が重要ではないということではありません。専門家と話をすると、これらは実際にこれらのシステムを機能させるために学ぶべき最も重要なことの一部だと言います。ただ、私がそれらについて話す適切な人ではないと思いますし、これらのシステムの詳細に入らなくても興味深いアイデアがあると思います。
最後に、OpenAIからの最後の引用で、私は本当に興味深いと感じたものがあります。彼らは「推論のためにモデルを訓練する際、すぐに思い浮かぶのは、人間に思考プロセスを書き出してもらい、それで訓練することです。RLを使用してモデルに独自の思考の連鎖を生成し磨かせると、人間が思考の連鎖を書くよりもさらに良い結果が得られることがわかりました。それが、これを本当にスケールできるという”アハ”モーメントでした」と述べています。
私はこの引用は非常に驚くべきものだと思います。おそらく、初めてモデルが問題を推論し、正しい答えを得たのを見たときは非常に衝撃的だったのでしょう。私は単純すぎるのかもしれませんが…
さて、この背景を踏まえて、実際に起こっている可能性のある容疑者に移ることができます。私はこれを4つの異なる容疑者に絞り込みました:推測とチェック、プロセス報酬、検索またはAlpha Zero、そして修正の学習です。
これらは形式的に異なる分野ではありませんが、この文献を読む際、私はそれを少し圧倒的に感じました。これらの問題について考える多くの異なる論文があり、誰もが自分の方法が本当に起こっていることだと確信しています。とはいえ、私はこの問題について考えるのを助けるのに、これら4つが有用な概要だと感じました。
容疑者1は最もシンプルです。3つのステップがあります:思考の連鎖をサンプリングし、どれが成功したかをチェックし、良いものについて訓練します。
私たちの図の観点から考えると、いくつかの連鎖を独立にサンプリングし、そのいくつかは大きく外れ、いくつかは解決策に到達します。解決策に到達したものが私たちが望むものであり、それらを言語モデルに訓練することができます。
私のような人なら、ここで何が起こっているのかを形式化するのが役立つかもしれません。これを棄却サンプリングの形式と考えることができます。EMは機械学習における非常に伝統的なアルゴリズムであり、数十年にわたってこの種の強化学習アルゴリズムに適用されてきました。
期待値ステップを、先ほどトークで見たような棄却サンプリングを実行することと考えることができ、最大化ステップを、私たちの事後分布に適合するサンプルに私たちの言語モデルを適合させることと考えることができます。この期待値ステップをより多く実行すれば実行するほど、より真の期待値に近づき、最終ステップでより良い答えを得ることができます。
伝統的にEMはバッチ処理されたオフラインプロセスで行われますが、オンラインまたは他の形式の強化学習で機能するバージョンもあります。
この方法のシンプルさを考えると、MLPで何度も発見され、機能することが指摘されています。これは自己訓練の形式として機能し、この方法は1995年に説明され、後に最先端の構文パーサーを生成するために使用されました。
もちろん、この方法は異なる分野で異なる名前を持っています。OpenAIはこれを「best of n training」と呼んでいます。最近の人気のあるバリアントは「STaR」または「Self-Taught Reasoning」と呼ばれています。私の形式化は「ReAct-EM」論文からのものです。
ある意味で、ここでの名前は実際にはそれほど重要ではありません。私がそれらをすべて列挙したのは主に、あなたが威圧されたり、実際に起こっていることよりも多くのことが起こっていると考えたりしないようにするためです。
ハイレベルでは、これらの論文はすべて同様の結論に達しています:この方法はシンプルですが、機能し、かなりうまく機能します。特に、より少ないサンプルで、多くの異なる問題にわたって比較的一貫した改善を得ることができます。もし何かあるとすれば、これはほとんどの論文で必要なベースラインであるべきです。
もちろん、ここでの仮定は、検証器にアクセスできるということです。トレーニング時にのみこれを持っている場合、テスト時の計算をスケールすることは難しいように見えます。
もちろん、私たちが生成したものを使用して、検証器も訓練しようとすることができます。棄却サンプリングから多くのサンプルを持っているので、テスト時に保持できる何らかの種類の学習された検証器をさらに訓練しようとすることができます。
このアイデアは、しばしば「償却化」と呼ばれ、基本的に何らかの複雑なシステムを表現するために学習されたモデルを使用します。テスト時に私たち自身の学習された検証器を作成することができます。これは思考の連鎖の一部として、またはある種のテスト時の棄却サンプリングのために使用できるかもしれません。
では、o1は単なる推測とチェックのRLシステムなのでしょうか?それを示すいくつかの兆候があります。1つの興味深いのは、このアプローチが非常にシンプルでスケーラブルだということです。OpenAIが過去に行ってきたことの1つは、人々がかなりうまく機能すると考えていたものの、より大規模で強力なバージョンを構築することです。
また、これで肯定的な結果を見ており、検証器を使用して大量のデータ収集を行えば、このようなシステムがうまく機能する可能性があります。しかし、私たちが欠いているのは、単にサンプリングすることで、先ほど見たような思考の連鎖が生成されるという証拠がないことです。これは、システムから自動的にこれが起こるという大きな変化のように見えます。
さらに、ここでの仮定は、十分な棄却サンプリングを行えば、いくつかの良い連鎖が得られるということですが、より難しい問題に対してはこれは計算効率的でない、あるいは不可能に見えます。
そこで、これらのシステムにもう少し構造を組み込んでみましょう。次のセクションはプロセス報酬についてです。容疑者2では、思考の連鎖のサンプリング中に、学習と軌跡の改善の両方に使用するガイダンスがあります。その後、同じプロセスを実行し、最終的または部分的なバージョンが成功したかどうかをチェックし、良いものについて訓練します。
「プロセス報酬」という用語は、GoogleとOpenAIの2つの論文から来ています。これらの論文では、PRMまたはプロセス報酬モデルと呼ばれる早期検証モデルを学習します。この中間モデルを学習することで、完全な解決策を得たモデルと比較して、棄却サンプリングが改善できることを示しています。
右のグラフは、学習された中間モデルを多数決投票および完全な解決策でのみ訓練されたモデルと比較しています。このグラフは学習プロセスについて何も主張しておらず、中間の学習された検証関数を利用することで、より多くの思考の連鎖を正常に完了できることを示しているだけです。
このプロセス報酬モデルを獲得する方法はいくつかあります。1つは単にモデルから軌跡をサンプリングし、人間の注釈者にこれらにラベルを付けてもらうことかもしれません。
文献でより一般的になりつつある別のアプローチは、モデルから部分的な思考の連鎖を取り、そしてロールアウトを実行することです。先ほど議論したように、これらのロールアウトは、与えられた時点での思考の連鎖がどれだけ良いかを教えてくれます。その後、これらのロールアウトを使用して、RIと呼ぶ学習されたプロセス報酬モデルを訓練することができます。これは私たちがどれだけうまくいっているかについての感覚を与え、さらにテスト時にも使用することができます。
この学習されたプロセス報酬モデルをパラメータ化する方法はたくさんあります。1つの興味深いアイデアは、それを大規模な言語モデルとして学習することです。ここでのアイデアは、どれだけうまくいっているかをチェックする実際のプロセス報酬モデル自体が思考の連鎖を使用できるということです。個々のステップについて推論し、それらを使用して答えを決定しようとするかもしれません。
このステップで重要なのは、これが生成器と検証器を統合するアイデアだということです。推論を試みながら、その推論を検証しようとする単一のモデルを持つことができます。これは最近、生成的検証器を構築するいくつかのアプローチで文献で探索され始めたアイデアです。
中規模な問題では、このような学習されたプロセス報酬スタイルが機能するように見えます。この「Math Sheeper」と呼ばれる論文では、ロールアウトを使用してモデルを訓練します。このモデルで、学習された中間ガイドでより良い解決策を見つけることができ、また数学でより良いパフォーマンスを発揮する最終モデルを学習することもできることを示すことができます。
このアプローチはまた、全体の物語をよりフォーカスしています。思考の連鎖を使用する検証器を使用し、それを単一のストリームに統合しようとするなら、生成と検証を交互に行い、それを使用してテスト時の解決策を改善することができると想像できます。
例えば、先ほど言及した思考の連鎖の1つを見返すと、「これは良い説明ですか?」というような文が見られます。伝統的には、これを生成器の一部と考えるかもしれませんが、これは同じモデルに統合された検証器の一部かもしれません。単一の言語モデル内で、生成と検証の間を行き来することができます。
では、これはo1なのでしょうか?これらの中間ガイドが効果的であるという証拠がいくつかあります。また、単一の学習された検証器を持つという課題も取り除きます。
否定的な面では、私たちが見てきたような高度な計画を説明するものはまだ何も見ていませんし、生成器とプロセス報酬モデルのこの組み合わせを単一の思考の連鎖に完全に統合する方法も本当にはわかっていません。これは魅力的なアイデアですが、まだ多くの詳細が残っています。私が推測するなら、これが個人的にはo1である可能性が最も高いと思います。これはOpenAIが公開している研究論文と、システム自体のシンプルさに関する噂に合致します。とはいえ、私の確信度はかなり低く、私が話をした多くの人々は、これよりもかなり高度な何かだと考えています。
そこで、もっと検索ベースの解決策を見てみましょう。特に、Alpha Zeroがどのように機能するかを思い出してみましょう。これは深層学習とRLの歴史において非常に重要な論文でした。
AlphaGoのフォローアップであるこの論文で、彼らは自己対戦だけで訓練されたシステムが、非常に難しいタスクで専門家レベルのパフォーマンスを達成できることを実証しました。
カジュアルなレベルでは、このシステムは複雑な検索アルゴリズムを使用して碁のゲームをプレイし、このシステムの軌跡に基づいてニューラルネットワークを訓練します。その後、そのニューラルネットワークを使用してさらにいくつかのゲームをプレイし、このプロセスを繰り返します。
これは、広範な専門家のデモンストレーションを必要とせずにスケーリングを実証する、非常にシンプルなRLベースのアルゴリズムの成功事例の典型的な例です。
このシステムが議論に関連する理由はいくつかありますが、より最近の1つはAlpha Proofに関する研究です。Alpha Proofがどのように機能するかについての詳細はそれほど多くありません。ただ、非常に難しい数学のコンペで非常に良い成績を収め、ブログ記事では次のように述べています:
「問題が提示されると、Alpha Proofは解決策の候補を生成し、その後、証明アシスタントであるLeanで可能な証明ステップを検索することで、それらを証明または反証します。見つかり検証された各証明は、Alpha Proofの言語モデルを強化するために使用され、その後のより困難な問題を解決する能力を向上させます。」
目を細めて見ると、これはOpenAIのブログで見た言葉とかなり似ているように見えます。では、これはどのように機能するのでしょうか?
探索を伴う何らかの種類のガイド付き検索を使用する自己対戦があると仮定します。次に、これらの自己対戦ゲームの最終的な結果にラベルを付け、ガイドと生成器を訓練し、繰り返します。
文献ではこれは「expert iteration(専門家の反復)」として知られています。これは、学習されたモデルと複雑な専門家の検索を組み合わせたアルゴリズムの反復プロセスを指します。
基本的な目標は、検索プロセスをモデルに蒸留することです。これを行うために、多くのサンプルを生成し、報酬モデルを使用してそれらを改善し、良いものにラベルを付けます。このプロセスを繰り返し、生成器とガイドモデルの両方を再訓練して、次の反復でより良いパフォーマンスを発揮します。
言語モデリングでこれを行う一般的な方法は、ビーム検索として知られる検索アルゴリズムを使用し、そしてプロセス報酬モデルと非常によく似たガイドを使用することです。
ここで、ガイドは、これまでの部分的な思考の連鎖を見ることで、どれだけうまくいっているかを教えてくれます。このガイドが与えられると、ビーム検索を実行することができます。
ビーム検索の仕組みは、プロセスの各ステップで、可能なすべての次の思考の連鎖に拡張し、そしてガイドに基づいてどれだけうまくいっているかに基づいてトップ4だけを保持します。これにより、良い最終的な答えを生成することにどれだけ近いかに基づいて、同じ長さの4つの異なる可能な解決策を保持します。
もちろん、ここには私が指定していない多くの詳細があります。新しい可能な思考の連鎖にどのように拡張するか、また異なるパスを与える可能性が高い、いくつか異なる思考の連鎖を生成する方法を決定する必要があります。
また、ガイドと言語モデルが次のパスとして考えるものをどのように重み付けするかを決定する必要があります。しかし、ハイレベルでは、この専門知識をどのようにモデルに訓練できるかを見ることができます。
ガイドの代わりに、直接ロールアウトを使用することも検討できます。ここでの例では、各ステップでビーム検索を実行し、トレーニング時にロールアウトを使用してどれだけうまくいっているかを教えています。ここには最初のステップ、2番目のステップ、3番目のステップ、そして4番目のステップがあります。
AlphaGoのようなシステムでは、これらのロールアウトは学習されたガイド関数と組み合わされます。これらは一緒になって問題についての良い感覚を与え、学習されたガイド関数と明示的なロールアウトをどれだけ信頼できるかを学習します。
テスト時の目標は、ロールアウトを完全に取り除くことを忘れないでください。
いくつかの最近の論文は、良い推論システムを生成するためにこの形式の専門家の反復を使用することを実験しています。ここでも、やや中規模の数学の問題に取り組んでいますが、これを行うことで大きな利点があるという予備的な証拠がいくつかあります。
具体的には、先ほど見た素朴な推測とチェックシステム(ここではSTaRとして表されています)と比較して、精度が大幅に向上しています。
ビーム検索は言語モデルで効率的に検索を行うための一般的なアプローチですが、AlphaGoのようなシステムは、ゲームプレイにはずっと複雑な形式の検索を使用しました。
特に、これらの論文で有名な検索アルゴリズムは、MCTSまたはMonte Carlo Tree Searchとして知られています。これは検索と探索を組み合わせた複雑なアルゴリズムです。
その仕組みは以下の通りです:与えられた数学の問題に対して、最初から始めます。そして、葉ノードに到達するまでツリーを下っていきます。そのノードに到達したら、可能な次の5つのステップに展開します。
私たちの場合、そのノードは部分的な思考の連鎖で構成され、次の5つのステップは試すことができる5つの他の展開のステップになります。
その後、それらの1つをランダムに選択します。そのステップに到達したら、思考の連鎖の次のステップのロールアウトを行います。これらが成功したかどうかに応じて、そのロールアウトを実行し、どれだけうまくいったかという事実に基づいて、すべての親ノードを更新します。
このプロセスを継続し、ツリーを成長させ、異なるロールアウトを適用することができます。アルゴリズムのキーは、単に可能な限り早く終了に到達しようとするのではなく、ツリーの異なる部分を探索しようとすることです。
デモを見てみましょう:この例では、選択プロセスを実行し、ツリーの黄色いノードを下っていきました。次に、3つのステップの思考の連鎖である一番下のノードを見て、可能な3つの次のステップに展開します。
ここで展開を見ることができ、黄色いノードはロールアウトするために選択した展開を表しています。次に、ロールアウトを実行します。ここでは8つの独立したロールアウトを示しており、そのいくつかは解決策に到達し、いくつかは到達しませんでした。
このロールアウトに基づいて、ノードとそのすべての親を更新し、どれだけうまくいったかを伝えます。さて、プロセスを再び開始します。次に展開するノードを選択する必要があります。
異なる選択ノードのセットを選び、異なる葉に到達しました。この選択プロセスは、どのノードが成功し、どのノードがまだ探索されていないかの両方に基づいています。
次に、このノードを展開し、別のロールアウトのセットを行います。これらのロールアウトの成功に基づいて、各親を更新します。
先ほど述べたように、このプロセスの主な利点は、選択を行う際に、これらのノードがどれだけうまくいったか、そしてどれだけ良く探索されたかの両方に基づいているということです。ここでの利点は、多くの異なる可能な思考の連鎖を探索し、過去に探索していない可能性のあるものを見つけることができることです。
では、o1で何らかの種類の検索アルゴリズムが探索されているのでしょうか?これはRLにおける主要な実証結果の歴史に合致し、システムにより多くのトレーニング時間を追加する特に良い方法です。
覚えておいてください、o1はデータ効率的であることはわかっていますが、トレーニングのために信じられないほどの量の計算を使用した可能性があります。
さらに、私たちが実際にo1から見ている思考の連鎖が、バックトラッキングや高レベルの概要作成などのプロパティを持つ検索のように少し見えることを考えると、それらはトレーニング時の検索のような何かを通じてモデルに入ってきた可能性があります。
しかし、このプロセスにはいくつかの否定的な面もあります。アルゴリズム的にはずっと複雑で、最初の2つのシステムと比べてオープンな状態を維持するのはコストがかかります。スケールするのもずっと難しく見えます。さらに、OpenAIのリリース資料には、このような複雑なトレーニングツリー検索について何も触れられていません。
他に興味深いのは、言語モデリングのためのMCTSを探索する論文がたくさんありますが、少なくともオープンな研究コミュニティでは、あまり成功を見ていないということです。これらの問題に対しては、よりシンプルな方法の方がうまく機能するように見えます。
最後の方法は、修正を学習することです。これらのアルゴリズムを動機づけるために、ゲームプレイと言語の違いについて指摘したいと思います。
ゲームプレイでは、固定された手があり、主な探索源は単にこれらの代替的な手を探索することです。言語では本当に多くの可能性があります。サンプリングや次に取りうるステップを固定することでこれをある程度回避できますが、実際には多くの探索がこのプロセス自体にあるべきだと思います。
異なる次の思考の連鎖を決定する方法、どれがより多くの探索を引き起こすか、またはより多くのバックトラッキングを引き起こすかという方法です。これは修正を学習する一連の方法の動機となります。
ハイレベルでは、システムからの失敗した思考の連鎖から始めます。その後、この失敗の成功した修正を見つけるために何らかの検索を行います。この結果に基づいて、修正だけでなく、元のものも含めて、プロセス全体について訓練します。
動機付けとなる例は、自己修正に関する研究です。ここでのアイデアは、思考の連鎖のペアを分離することです。1つをZ’、もう1つをZ”と呼びます。これらの思考の連鎖は似ていますが、1つは正しい答えにつながり、もう1つはつながりません。
これら2つを分離できれば、Z’を改善してZ”により近づけるモデルを訓練できます。これを大規模に行うことができれば、この能力を生成器自体に組み込むことができると期待できます。
このアプローチは単純に聞こえますが、実際には多くの課題があります。1つの問題は、最初の思考の連鎖があまり良くなかった場合、モデルはしばしば単にそれを無視して、単に2番目のものを直接生成しようとするようになることです。
もう1つの問題は、分布のシフトに非常に注意する必要があるということです。多くの例を収集しても、それらがモデルが実際に生成するものと異なって見える場合、実際には自己修正しない可能性があります。例について学習しますが、モデルが実際に間違いで生成するものについては学習しません。
この問題を回避する1つのアプローチは、できるだけオンポリシーに近づけようとすることです。この設定では、Z’を生成し、そしてZ’から目標までのすべての可能な継続を取ります。モデルの元の出力を固定し、その与えられた点から修正がどうなるかを学習しようとします。
これを正しく行うにはいくつかの微妙な点があります。例えば、リストされた論文では、まずモデルの修正部分のみを学習する訓練ラウンドを実行します。その後、2番目のステージで、モデルの元の部分も学習します。
これは、モデルの最初の部分が変化するにつれて、修正部分が適応し、良い修正を生成し続けることを確実にするために行われます。正しく行われた場合、このアプローチは例での訓練や推測とチェックのアプローチの両方を上回ります。また、単に例をペアにして、それらから修正を学習するよりもうまくスケールします。
もちろん、私たちの最終的な目標は個々の修正ではなく、単一の連鎖で繰り返し適用される修正です。これが「stream of search(検索のストリーム)」の背後にある動機です。
この研究では、まず最適なZ*を見つけます。これを行うために、右のツリーを生成するトレーニング時の検索アルゴリズムを適用します。このツリーは非常に良い思考の連鎖を見つけますが、間違った方向に進む中間的な枝も見つけます。
しかし、このツリーを持ったら、最終的な答えへのパスだけを訓練するのではなく、代わりにこのツリーを単一のストリームに線形化します。下の図は、何が起こっているかを図式的に示しています。
基本的に、最終的な答えに至る曲がりくねった道を進む合成的な思考の連鎖をテンプレート構築します。ツリーで実際のバックトラッキングを見ると、これはストリームの中の言葉になります。これにより、実際には単に開始から終了までの単一のパスであっても、検索を行っているように見えるものが得られます。
その後、これらのストリームについて訓練を行い、検索のような振る舞いを得ることができます。
それをもう少し非公式にまとめると、ツリーからストリームへの変換を試みます。複数のパスを探索するためにツリー検索を行い、このストリームを線形シーケンスに変換し、そしてモデルがストリームの中で自分の間違いを見ることを許可します。
この種の方法は、各個々のステップをより良く、よりオンポリシーにするために、修正の学習のような方法と組み合わせることができます。
このアプローチは比較的複雑ですが、私が話をした多くの専門家は、このような何かがo1の背後にあると確信していました。
では、長所と短所を議論しましょう。修正と計画を学習することは、プロセスの非常に重要な部分のように見えます。これは、実際のo1からの思考の連鎖が行うことと似ているものを見た最初の例です。
また、これを使用して検索のような振る舞いを単一のテスト時モデルに誘導できることも妥当に思えます。否定的な面では、これも非常に複雑な訓練手順です。システムが崩壊したり、収縮したりする可能性のある部分が多くあります。
これは、これらの修正が合成的な例を与えたり、モデルをオンポリシーに保とうとしたりする必要があるためです。また、オープンな研究文献では、これがこの種の興味深い振る舞いを引き起こすことができるという経験的証拠も限られています。
特に、stream of searchのような方法は比較的単純な問題にのみ適用されています。それでも、これは潜在的なアイデアの中で最も興味深いものだと思いますし、人々がこれを実践で構築するのを見るのは本当に素晴らしいことでしょう。
この研究の意味についていくつか結論を述べさせてください。まず、私が最も気にかけているのは実際に複製することです。オープンソースコミュニティとして、このような大規模なRLベースのシステムの構築をより良くし、それらが本当に機能することを示す必要があります。
何が起こっているのかを探索し、より良いまたはより効率的なものを構築できるように、これらのモデルのオープンソースバージョンを持つことが重要です。
オープンソースシステムと企業が設計したものとでは、重要なシステムの側面が異なる可能性があり、オープンソースバージョンは実際に同じように見えないかもしれませんし、異なる方法でパフォーマンスを発揮する可能性があります。
それでも、たとえOpenAIが行ったことを正確に複製できなくても、彼らがこの結果を実証したという事実は、それが可能であり、私たち自身のものを構築できることを知るようにコミュニティを動機付けるべきだと思います。
さらに、この研究の背後には信じられないほど刺激的な研究の意味があります。考慮する必要があると思ういくつかの分野について話したいと思います。
まず、過去5年間は本当にスケーリングが何を意味するか、そしてそれが言語モデルのパフォーマンスをどのように変えるかを理解することに専念してきました。これの多くは少し謎めいていました。これらの能力は、私たちが進むにつれてこれらのモデルから出てきます。
テスト時の計算がどのように理解され、これらの物語のいくつかをどのように変更するかを理解することに本当にワクワクしています。テスト時の計算はずっと透明に見えます。思考の連鎖が何をしているのかを理解し、それが生成する結果を説明または反証する方法を理解することができます。
もう1つの非常に興味深いのは、これらのシステムが推論時間のケイパビリティによってボトルネックになっているという事実です。チャットボット設定でより安価または高速にすることを目指して推論に焦点を当ててきましたが、この設定では、推論は本当に優先されます。
システムを1000倍高速にできれば、それは3桁または推論能力の増加です。これは単にモデルをより安価に提供するよりもずっと興味深いケイパビリティの変化です。
もう1つ本当にワクワクしているのは、プロンプトから解放されることです。プロンプトは知的に本当につまらない分野だと思いますし、実践的な使用を支配してきた分野だと思います。
誤解しないでください。プロンプトは本当に有用で、それを使って多くのクールなことができると思います。しかし、研究の観点からは、それについてもう言うことはあまりありません。
プロンプトから何らかの形式的な仕様への移行に本当に興味があります。難しい問題に対する興味深い検証器を生成し、それらに対して最適化する言語モデルを使用できれば、それは多くの興味深い新しい研究分野を開きます。
次に、これらのモデルは本当に評価の新しいパスを多く開くと思います。私のグループは、本当にやりたいけれども、最高の言語モデルでさえはるかに能力を超えているタスクで、非常に難しい評価について多く考えてきました。
例えば、ユニットテストだけに基づいて完全な新しいコーディングパッケージを書かなければならないベンチマークに取り組んでいます。このような超人的な評価は、永遠に実行でき、答えを生成する際にそのフィードバックを考慮に入れることができるモデルを持つと本当に刺激的になります。
現在の世代が何ができると思うかではなく、これらのシステムに何をしてほしいかという観点から評価について本当に考える必要があると思います。
最後に、これは明白かもしれませんが、このトーク全体を通じて、ニューラルネットワークについて本当に一度も話しませんでした。検索ベースのシステムへの移行は本当に、これらのシステムがどのように利用されるか、それらが中間ステップとして何を生成するか、そしてそれをどのように変更または探索するかについてです。
これは、モデル自体に深く入り込み、その種の連続値の重みを解釈しようとする解釈可能性とは非常に異なります。これが問題をどのように考えるか、モデルを理解するか、それらが何をするかを変えるかを見るのが本当に楽しみです。
ご清聴ありがとうございました。このトークの完全な参考文献、スライド、課題についてのGitHubページがあります。新しい論文が出たり入ってきたりするにつれて、おそらく今後数ヶ月間更新していくでしょう。
これが研究をどこに導くかについて考えがあれば、コメントや課題ページに残してください。あるいはTwitterで私を見つけることもできます。ありがとうございました。

コメント

タイトルとURLをコピーしました