概要
すべてのDPOの実行には参照モデル(Preference学習前のモデルの凍結されたコピー)が存在します。ベータ(β)は、実行によってそこからどの程度離れることができるかを決定します。リード(引き綱)を想像してください。ペアはモデルを好ましい回答へと引っ張りますが、βはそのリードの短さを設定します。
なぜリードが必要なのでしょうか。用意したペアは、モデルが質問される内容のごく一部しかカバーしていません。制約を設けない場合、好ましい回答とそうでない回答を区別する最も安易な方法は、特定の言い回しをほぼ不可能にする、すべてを長くする、あるいは誰もレビューしていない方向に逸脱するといった極端なものになり得ます。参照モデルに近い状態を保つことで、モデルのその他の振る舞い(一般的な知識、流暢さ、教師あり学習の段階で学習した内容)をほぼそのまま維持できます。
仕組み
DPOが導出される目的関数において、βはKLダイバージェンスとして測定される、参照モデルからの逸脱に対するペナルティに乗算されます。その目的関数における最適なモデルは、報酬をβで割った値を指数とするネイピア数(e)によって再重み付けされた参照モデルです。βが大きい場合、報酬に大きな差があっても確率はわずかしか変化しません。βが小さい場合、小さな差が増幅されます。
objective: maximise reward − β × KL(model ‖ reference)
best model: π*(answer) ∝ π_ref(answer) × e^(reward(answer) / β)
large β → rewards barely move the probabilities
small β → small reward differences are amplified損失の内部では、シグモイド関数の前でβが対数比のマージンに乗算されます。β × マージンが十分に正の値になると、そのペアの損失は平坦になるため、ペアはモデルを引っ張るのをやめます。βが高い場合、参照モデルから少し離れただけでそのポイントに到達します。βが低い場合、モデルがさらに大きく動くまで引っ張り続けます。
- 学習によって対数比のマージン(選択されたものから拒否されたものを引いた値、それぞれ参照モデルに対する比)が4.0に移動したペアを例に挙げます。
- β = 0.05の場合: β × マージン = 0.2となり、損失は0.60です。初期値の0.69にまだ近いため、このペアは引き続き強くモデルを牽引します。
- β = 0.1の場合: 0.4となり、損失は0.51です。目標の途中にあります。
- β = 0.5の場合: 2.0となり、損失は0.13です。ほぼ満たされており、このペアがこれ以上の変化に寄与することはほとんどありません。
- このペアの損失を0.1まで下げるには、マージンはβ = 0.1で約22.5に達する必要がありますが、β = 0.5では約4.5で済みます。βが低いほど、同じペアでモデルをより大きく動かすことができます。
これが、損失値がβに依存する理由でもあります。β = 0.5での損失0.3と、β = 0.05での損失0.3は、まったく異なる変化量を示しています。損失曲線の比較は、同じβを使用した実行間でのみ行ってください。
選択方法
| β | 効果 | 使用するタイミング |
|---|---|---|
| 0.05 | Preferenceがモデルをより大きく変化させます。効果は早く現れますが、異常な振る舞いをするリスクが高まります。 | クリーンで豊富なペアがあり、0.1ではモデルがほとんど動かなかった場合。 |
| 0.1 | 通常のバランス。 | 最初の実行。DPOの論文の実験やHugging Face TRLにおけるデフォルト値です。 |
| 0.3–0.5 | 元のモデルに近い状態を保ちます。より安全で、効果は小さくなります。 | ペアが少ないかノイズが多い場合。損失が非常に早く0付近まで低下した場合。回答が逸脱したり、詳細を捏造し始めたりした場合。 |
DPOの論文では、ほとんどの実験でβ = 0.1が使用され、要約タスクではβ = 0.5が使用されました。ホスト型プラットフォームでは、より広い範囲(あるドキュメントでは0から2)を受け入れたり、値を自動的に選択したりする場合があります。
選好チューニング中に、開始時のモデルへ引き戻す強さです。値を低くするとペアによるモデルの変更が大きくなり、高くすると元のモデルに近い状態が維持されます。βは損失のスケールを変化させるため、損失ではなく評価を比較しながら、小さなステップで変更してください。
βは他の設定と連動して機能します。学習率とエポック数は、モデルをどれだけ強く、どれだけ長く推進するかを決定します。βは、どの程度の動きで十分と見なすかを決定します。実行が行き過ぎた場合は、βを上げるか学習率を下げますが、両方を同時に行わないでください。どちらが効果的であったか分からなくなります。
よくある間違い
- 少数またはノイズの多いペアに対してDPOを「より強く機能」させるためにβを下げること。これにより、間違いを含め、ペアが報酬を与えるあらゆる要素が増幅されます。
- 異なるβを使用した実行間で損失値を比較すること。
- β、学習率、エポック数を同時に変更すること。どの変更が影響したのか判断できなくなります。
- 非常に高いβが常に安全であると思い込むこと。極端な値に設定すると、実行による変化がほとんど生じず、効果のない学習にコストを支払うことになります。
参考文献および関連資料
外部ソースは新しいタブで開きます。
- 01Direct Preference Optimization: Your Language Model is Secretly a Reward ModelRafailov et al., 2023 · arXiv · arxiv.orgセクション4では閉形式の最適解を導出しています。付録には、デフォルトでβ = 0.1、要約タスクでは0.5と記載されています。
- 02DPO TrainerHugging Face TRL docs · huggingface.coβのデフォルトは0.1です。ドキュメントでは、βが高いほど参照モデルからの逸脱が少なくなると説明されています。
- 03Direct preference optimizationOpenAI API docs · developers.openai.comホスト型プロバイダーによるベータの説明:値が高いほど保守的になり、低いほど新しい選好が優先されます。
- 04A General Theoretical Paradigm to Understand Learning from Human PreferencesAzar et al., 2023 · arXiv · arxiv.org選好がほぼ決定論的である場合、参照モデルへの引き戻しが弱まり、DPOが過学習する可能性があることを示しています。