概要
モデルに求める多くの要素は、書き出すよりも判断する方が容易です。2つの回答のうち、どちらがより明確か、より具体的か、よりブランドに合っているか、存在しない機能を捏造する可能性が低いか。どちらの回答も完璧でなくとも、レビュアーは数秒でそれに答えることができます。選好チューニングは、これらの判断をトレーニングデータに変換します。各レコードはペアであり、1つのプロンプトに対して好ましい回答と好ましくない回答が含まれます。
2023年にRafailovらによって発表された直接選好最適化(Direct Preference Optimization: DPO)は、このようなペアでトレーニングを行う最も広く使用されている手法です。彼らの論文の副題がそのアイデアを要約しています。「あなたの言語モデルは、密かに報酬モデルである」。
由来:RLHF
DPOが何を簡略化しているかを理解するために、InstructGPTや第一世代のチャットアシスタントの基盤となった人間のフィードバックからの強化学習(RLHF)から始めましょう。事前学習の後、RLHFには3つの段階があります:
- 適切な形式で回答するモデルを得るための、デモンストレーションに基づく教師ありファインチューニング。
- 報酬モデルのトレーニング:プロンプトと回答を読み取ってスコアを出力する独立したネットワーク。好ましい回答がそうでない回答よりも高いスコアになるように適合させます。
- 強化学習(通常はPPO):モデルが回答を作成し、報酬モデルがそれをスコアリングします。教師ありモデルから離れすぎた場合のペナルティを伴いつつ、より高いスコアを獲得するようにモデルが更新されます。
これは有効です。InstructGPTの論文では、この方法でトレーニングされた13億パラメータのモデルの出力が、1750億パラメータのGPT-3の出力よりも好まれました。しかし、これは負荷が高い手法です。強化学習の段階では、トレーニングループ内でテキストを生成し、複数のモデルを同時にメモリに保持するため、設定に敏感です。
複数のモデル(トレーニング中のモデル、その参照モデル、報酬モデル、価値モデル)が同時に稼働し、トレーニングループ内でテキストが生成されます。強力ですが、処理が遅く、設定に敏感です。
報酬モデルなし、トレーニング中のサンプリングなし。ペアに対する教師あり学習のように実行されるため、コストが低く、はるかに安定しています。
DPOの仕組み
RLHFの報酬モデルとDPOはどちらも、人間の選択に関する同じモデルであるBradley–Terryモデルに基づいています。これは、2つの回答に隠された品質スコアがある場合、人が最初の回答を好む確率は、スコアの差のシグモイド関数になるというものです:
P(A preferred over B) = σ(r_A − r_B) = 1 / (1 + e^−(r_A − r_B))
r_A − r_B = 0 → 0.50
r_A − r_B = 1 → 0.73
r_A − r_B = 2 → 0.88重要なのは差のみです。両方のスコアに同じ値を足しても確率は変わりません。差が0の場合はコイントスと同じであり、差が2の場合は最初の回答が88%の確率で勝つことを意味します。
RLHFの強化学習段階では、参照モデルから離れることに対するペナルティ(2つのモデル間のKLダイバージェンス)をβで重み付けして支払いながら、報酬を最大化します。DPOの著者らは、この目的に厳密解があることを示しました。つまり、可能な限り最良のモデルは、報酬 ÷ βの指数関数で再重み付けされた参照モデルです。裏を返せば、すべてのモデルは暗黙の報酬を定義します。これは、参照モデルと比較して、そのモデルが回答をどれだけ尤もらしいと判断するかの対数にβを掛けたものです。これをBradley–Terryモデルに当てはめると、計算が困難な部分が相殺され、ペアごとに4つの数値のみを必要とする損失が残ります:
loss = −ln σ( β × [ (log π(chosen) − log π_ref(chosen))
− (log π(rejected) − log π_ref(rejected)) ] )
implicit reward of an answer = β × (log π(answer) − log π_ref(answer))- log π(chosen) および log π(rejected):トレーニング中のモデルが各回答全体をどの程度生成しやすいかを示す、トークンの対数確率の合計。
- log π_ref(…):トレーニング開始時のモデルの凍結されたコピーである参照モデルからの同じ数値。
- β:モデルがその参照にどの程度強く拘束されるか。低いほど、より大きく変化できます。
- σ:シグモイド関数。その出力は「モデルの暗黙の報酬が人間の選好と一致する確率」として解釈されます。損失はその対数のマイナスであるため、モデルが一致しない場合は大きくなり、明確に一致する場合は0に近づきます。
トレーニングでは、参照モデルと比較して選択された回答の尤度を上げるか、拒否された回答の尤度を下げるか、あるいはその両方を行うことで損失を減らします。また、勾配はモデルの現在の誤りの度合いによって各ペアに重み付けを行います。すでに大きな差で正しく順位付けされているペアはほとんど寄与せず、誤って順位付けされているペアが最も寄与します。論文では、この重み付けがないとモデルが退化する可能性があると報告されています。
- モデルの対数確率:chosen −42.0、rejected −51.0。参照モデルの対数確率:chosen −45.0、rejected −50.0。
- 参照モデルに対する対数比:chosen −42.0 − (−45.0) = +3.0、rejected −51.0 − (−50.0) = −1.0。
- マージン:3.0 − (−1.0) = 4.0。これにβ = 0.1を掛けると0.4になります。同様に分割すると、暗黙の報酬はchosenが+0.30、rejectedが−0.10となります。
- σ(0.4) ≈ 0.60であるため、損失は−ln 0.60 ≈ 0.51となり、両方の対数比が0であった開始時の0.69から低下します。
実践における意味
- RLHFよりも低コストで安定している。 報酬モデルのトレーニングが不要で、トレーニング中にテキストが生成されることもありません。初期モデルの凍結されたコピーを並行して配置し、ペアに対する教師ありジョブのように実行されます。
- オフライン。 固定されたペアのセットから学習します。回答はトレーニング中のモデルから生成されたものである必要はありませんが、モデルが実際に記述するものに近いペアが最も学習効果を高めます。
- 絶対的ではなく相対的。 回答間の差を広げます。研究によると、拒否された回答の尤度がより速く低下する限り、トレーニング中に選択された回答自体の尤度が低下すること(「尤度の変位」)がよくあると判明しています。
- 知識を追加することはできない。 DPOは、モデルがすでに生成できる振る舞いを再順位付けします。どちらの回答もモデルが記述できないようなものであれば、学習できることはほとんどありません。これが、通常は教師ありファインチューニングの後にDPOが行われる理由です。
データフォーマット
プロバイダーによってフィールドの名称は異なりますが、どのフォーマットでも同じ3つの要素(プロンプト、より良い回答、より悪い回答)が保存されます。ホスト型フォーマットの例:
{
"input": {"messages": [
{"role": "system", "content": "You are Scalata's support assistant."},
{"role": "user", "content": "How do I reset my password?"}
]},
"preferred_output": [
{"role": "assistant", "content": "Open Settings → Security and choose Reset password. You'll get an email link valid for 30 minutes."}
],
"non_preferred_output": [
{"role": "assistant", "content": "Please contact support to reset your password."}
]
}Hugging Face TRLなどのオープンソースのトレーナーは、prompt、chosen、rejectedを使用し、それまでの会話全体をプロンプトとして受け入れます:
{"prompt": [
{"role": "user", "content": "I uploaded a CSV yesterday."},
{"role": "assistant", "content": "Thanks — it's in Local Storage."},
{"role": "user", "content": "Can I use it in a dashboard?"}],
"chosen": [{"role": "assistant", "content": "Yes: open Dashboards → Add widget → pick the file."}],
"rejected": [{"role": "assistant", "content": "Maybe."}]}一部のホスト型実装では1ターンのみでトレーニングを行うため、それ以前のターンをコンテキストとして最後のユーザーメッセージに組み込む必要があります。他の実装では、会話を個別のメッセージとして保持します。
よくある間違い
- 自社製品について何も知らないプレーンなベースモデルでDPOを実行すること。各ペアの両方の回答が等しく情報不足であることが多いため、シグナルはほとんど得られません。
- 「自信満々だが間違っている」:ペアが少ない場合、モデルは背景知識を持たないまま、好ましい回答のスタイル(具体的な名称、番号付きの手順、長い文章)を模倣し、具体的な内容を捏造します。
- 回答が言い回しのみ異なるペア。モデルはノイズを学習するか、あるいは文章の長さが好まれると学習してしまいます。
- DPO損失の低下を回答が改善された証拠として扱うこと。これはモデルがペアを区別していることを示すだけであり、回答が改善されたかどうかは評価によってのみ確認できます。
- エポック数が多すぎる、または学習率が高すぎること。選好チューニングでは通常、1〜2エポックで、教師あり学習よりも低い学習率が必要です。
参考文献および関連資料
外部ソースは新しいタブで開きます。
- 01Direct Preference Optimization: Your Language Model is Secretly a Reward ModelRafailov et al., 2023 · arXiv · arxiv.org原論文:RLHFからの導出、損失、およびPPOとの比較実験。
- 02Training language models to follow instructions with human feedbackOuyang et al., 2022 · arXiv · arxiv.orgInstructGPT:DPOが簡略化する3段階のRLHFパイプライン。
- 03Deep reinforcement learning from human preferencesChristiano et al., 2017 · arXiv · arxiv.org人間の比較から報酬を学習する手法を、ゲームやロボット工学向けに初めて導入した論文。
- 04Bradley–Terry modelWikipedia · en.wikipedia.org報酬モデルとDPOの背後にある一対比較の統計モデル。
- 05DPO TrainerHugging Face TRL docs · huggingface.co広く使用されているオープンソース実装:データ形式、損失のバリエーション、記録される指標。