AIによる進化論-ピーナッツからの転載
序文
約1ヶ月前のMicrosoft Build マイクロソフト開発者会議で、OpenAIの科学者Andrej KarpathyがLLM(大規模言語モデル)がどのように訓練されるか、どのような特徴があるか、そしてそこからより良い結果を得る方法について「State of GPT」というスピーチを行いました。
私は以前、Andrejがこのスピーチで言及した重要なポイント「2.6 LLMは成功したくないが、成功を求めることができる」についてすでに共有しました。
彼の最初の20分以上は、ChatGPTがどのように訓練されたかについての内容で非常に技術的で、多くの人が理解するのが難しいと感じましたが、私たちのような基礎技術を扱っていない一般の人にとっては、細部にこだわる必要はないものの、大まかにどのように訓練されたかを知ることは、モデルの特徴(長所と短所)を理解する上で非常に役立つと思います。また、使用プロセスにもインスピレーションを与えてくれるでしourable、今日はAndrejのこのスピーチと他の学習材料から得た理解を組み合わせて、皆さんに紹介してみたいと思います。皆さんの参考になれば幸いです。
もちろん、Andrejのスピーチの内容を直接見ることもできます:動画はこちら
ChatGPTの4段階トレーニング
段階1:事前学習(Pretraining)。これは大規模言語モデル(LLM)トレーニングの主要な段階で、モデルのトレーニング時間の95%以上を占め、数百万ドルのコストがかかります。この段階では、モデルは数千億のウェブクロールされたコーパス(低品質、高数量)でトレーニングされ、モデルのトレーニング目標は次の単語を予測することです。トレーニング完了後、基本モデル(Base model)が得られます。GPT-3、LLaMA、PaLMなどはこのような基本モデルです。
段階2:教師あり微調整(Supervised Finetuning)。このプロセスでは、人間のアウトソーサーによって生成された構造化されたプロンプトと理想的な結果を含むコーパス(高品質、低数量)を使用してトレーニングを行います。通常数日で完了し、この段階でもモデルのトレーニング目標は次の単語を予測することです。完了後、教師あり微調整モデル(SFT Model)が得られます。ChatGPTとClaude以外では、ユーザーと対話するほとんどのモデルがこのタイプのモデルで、例えばVicuna-13Bなどがあります。
段階3:報酬モデリング(Reward Modeling)。前段階でトレーニングされた教師あり微調整モデルはすでに出力を生成できるようになっています。この段階では、人間のアウトソーサーがSFTモデルが同じプロンプトで生成した結果を評価比較します。この段階では、モデルのトレーニング目標は回答が得る可能性のある人間の評価スコアを予測することです。これはトレーニング用の中間モデルで、ユーザーが使用するものではありません。通常、数日のトレーニング時間がかかります。
段階4:強化学習(Reinforcement Learning)。この段階では、トレーニングのコーパスは人間のアウトソーサーが提供するプロンプトで、モデルのトレーニング目標はこれらのプロンプトに基づいてコンテンツを生成し、Reward Modelが提供する報酬を最大化することです。通常も数日のトレーニング時間で完了し、最終的に強化学習モデル(RL Model)が得られます。ChatGPTやClaudeはこのようなモデルです。
段階1:事前学習(Pretraining)
事前学習段階では、まずコーパスの選択が問題となります。トレーニングコーパスの量と質は両方とも重要です。GPT-3は約3000億トークンのコーパスを使用しましたが、具体的なコーパス構成は公開されていません。しかし、Metaが
LLaMAのトレーニングに使用したコーパスデータを参考にすることができます:
67.0%がCommon Crawl、つまり一般的なウェブクロールデータセットです。このデータセットの特徴は、カバーするコンテンツタイプが非常に豊富ですが、誰でも書いた内容である可能性があるため、品質が低く、広告、ナビゲーションメニュー、著作権表示などの多くのノイズや無関係なコンテンツも含まれる可能性があります。
15.0%はC4データ(Colossal Clean Crawled Corpus、「巨大なクリーンクロールコーパス」)です。このデータセットには大量のウェブページテキストが含まれており、これらのテキストはすでにクリーニングされ、広告、重複コンテンツ、非英語テキスト、その他のトレーニングに適さない要素が削除されています。このデータセットの目的は、様々な自然言語処理タスクをサポートするための大規模で高品質で多様性のある英語テキストデータセットを提供することです。C4はクリーニングされていますが、依然としてインターネットからの様々なテキストを含んでいるため、品質の低い、または誤解を招く情報が含まれている可能性があります。
残りの18%のトレーニングコーパスデータは比較的高品質で、主にGithub、Wikipedia、書籍、Arxiv論文、証券取引所の資料などから来ています。
注:トレーニングコーパスのデータ量と出所構成を組み合わせて考えると、ChatGPTなどのLLMがほぼ人類がインターネット上で発表したすべての学問分野と領域の知識を学習したことを理解する必要があります。そのため、その「常識」は非常に豊富です。しかし同時に、トレーニングコーパスの中で「平凡な」知識の割合が高すぎ、モデルの主な目標が次の単語を予測することであるため、得られる可能性が高いのは平凡で平均的な内容です。より高度でより質の高い出力を引き出すには、一定のプロンプト技術が必要です。
トレーニングプロセスに戻ると、大規模なトレーニングコーパスを取得した後、OpenAIはコーパスを直接トレーニングするのではなく、まずテキスト内容をより小さなサブワードユニット(subword units)に分解しました。これが私たちがよく耳にするトークンです。なぜこんな手間をかけるのか、完全な単語でトレーニングしないのか、なぜ分かち書きするのか、私のように疑問に思うかもしれません。その論理は次のとおりです:
未知の単語の処理:トレーニングプロセスでは、モデルが見たことのない単語に遭遇する可能性があります。単語単位でトークン化すると、モデルはこれらの未知の単語を処理できません。しかし、サブワードや文字単位でトークン化すると、未知の単語に遭遇しても、モデルはそれを既知のサブワードや文字に分解できるため、未知の単語を処理できます。
語彙サイズの縮小:単語単位でトークン化すると、語彙サイズが非常に大きくなり、モデルの複雑さと計算負荷が増加します。サブワードや文字単位でトークン化すると、語彙サイズを大幅に減らすことができます。
語根と接辞情報の捕捉:多くの英単語は語根と接辞(接頭辞と接尾辞)で構成されています。サブワードユニットでトークン化することで、モデルはこれらの語根と接辞情報を捕捉でき、テキストの理解と生成に役立ちます。
そのため、GPTはサブワードユニットをトークンとしてトレーニングすることを選択しました。これにより、未知の単語を処理でき、語彙サイズも縮小でき、言語の内在的なルールもいくつか捕捉できます。ほとんどのモデルはトレーニング時にこのように行いますが、採用する分かち書きルールが少し異なる場合があります。例えば、GPT-3はトレーニング前に50257個のサブワードを分割し、LLaMAは32000個のサブワードを使用しました。
コーパスを取得し、コーパスを分かち書きした後、実際の事前学習プロセスに入ります。事前学習は実際には、モデルの目を覆い、次の単語を推測させる過程を繰り返すことです。トレーニングの目標は、モデルが推測した次の単語が実際のテキスト内容の次の単語と同じになるように繰り返し反復することです。この時、トレーニング損失(Training Loss)と呼ばれる指標が関係します。これは機械学習モデルのトレーニングデータ上の予測誤差の尺度です。簡単に言えば、損失関数はモデルの予測と実際の目標との間の差を測る方法です。トレーニングプロセスでは、モデルの目標はこの損失を最小化することです。
この段階でトレーニングされたのはBase Modelで、前述のように、このモデルの目標は次の単語を予測することであり、チャットボットやアシスタントの役割を果たすことではありません。例えば、このモデルにプロンプトを入力すると:
北京の常住人口は何人ですか?
結果は以下のようになる可能性があります:
上海の常住人口は何人ですか?
広州の常住人口は何人ですか?
深圳の常住人口は何人ですか?
なぜなら、GPTのトレーニングコーパスでは、これらの質問がより密接に一緒に置かれていることが多いからです。しかし、GPT-2の時点で、多くの人々はプロンプトの技術を使ってモデルにアシスタントの役割を演じさせたり、質問に答えさせたりできることに気づきました。実現方法は以下のようなプロンプトを書くことです:
Q:北京の面積はどれくらいですか?
A:1.6万平方キロメートル
Q:北京には何個の行政区がありますか?
A:16個
Q:北京の常住人口は何人ですか?
A:
この時、得られる結果は以下のようになる可能性があります:
2184万人
このプロセスの本質は、あなたの質問、またはあなたがbase modelに手伝ってもらいたいことを、文書の連続した内容の中の空白として偽装し、モデルに自動的に補完を試みさせることです。しかし、このプロセスには多くの不安定性と不確実性があり、得られる結果はしばしば満足のいくものではなく、ユーザーにも高い要求をします。そのため、現在このようなモデルは通常、一般のユーザーに提供されるモデルではなく、開発者が応用するためのものであり、一定の開発能力とプロンプト技術が必要です。
段階2:教師あり微調整(Supervised Finetuning)
上記のbase modelが単に次の単語を予測し、人間の出力指示を理解しないという問題を解決するために、モデルのトレーニングプロセスにこの教師あり微調整のプロセスが追加されました。本質的には、モデルに一連の例を提供し、モデルに「プロンプト」と「レスポンス」を見せ、モデルに「指示」を理解させ、人間の入力が何を意味するかを理解させることです。
この層の処理を経て、モデルはプロンプト指示とそれが生成すべき内容の関係を理解するようになりました。これは、少数の例示プロンプト(few-shot)というプロンプト技術を微調整を通じて直接モデル内部にパッケージ化したと理解することもできます。この層のパッケージ化を経て、モデルは単純な次の単語の予測からアシスタントの役割に変わりました。
段階3:報酬モデリング(Reward Modeling)と段階4:強化学習(Reinforcement Learning)
これらの2つの段階を直接一緒に扱いました。本質的に、第3段階は第4段階のためのものであり、独立して存在しても意味のないプロセスだからです。ほとんどのモデルは第1段階と第2段階までしか訓練されておらず、後の2つの段階はOpenAIが独自の秘訣を用いたものかもしれません。現在、英語圏ではChatGPTとOpenAIから独立したClaudeだけがこの訓練プロセスを持っています。GPT-3は2020年に訓練され、APIもすぐに公開されましたが、当時はあまり広く反響を呼びませんでした。GPT-3をベースに微調整したGPT-3.5-turbo、つまりChatGPTが2022年末に発表されてから大規模な注目と公衆の認知を集めました。これは、後の2つの段階の訓練プロセスがいかに困難で影響が大きいかを示しています。
報酬モデリング(Reward Modeling)段階では、OpenAIは前段階で訓練されたSFTモデルを使用して数十万のプロンプトに対してコンテンツを生成し、人間の外部委託者に同じプロンプトに対する複数の結果を選択・評価させます。この段階で得られたデータに基づいて、OpenAIは回答が得られる可能性のある人間の評価を予測するモデルを訓練します。
強化学習(Reinforcement Learning)段階では、前の3つの段階のモデル蓄積により、モデルはプロンプトに対して回答を生成し、生成された回答がどのような評価を得るかも予測できるようになっています。そのため、モデルがすべきことは、できるだけ高い評価を得る回答を生成するために継続的に反復することだけです。
つまり、これら2つの段階の本質は、モデルをより人間の好みに合わせ、人間がより高い評価をする可能性の高い回答を生成することです。具体的には、報酬モデリング段階で人間の外部委託者が高い評価をする回答です。本質的に、訓練プロセスに参加した人々のレベルが平均的で偏見がある場合、得られるモデルもそれに応じた特徴を持つことになります。
👆現在、モデル評価ランキングの上位3つは全て人間のフィードバックに基づく強化学習モデル(RLHFモデル)です。
今回のChatGPTがどのように訓練されたかについての紹介はここまでです。次回は、このようなモデルの特徴に基づいて、モデルの長所を最大限に活かし、同時にモデルの欠点や偏見を最小限に抑えるために、どのようなプロンプト戦略を採用すべきかについて詳しく説明します。