DPO(直接選好最適化)(ディーピーオー)
人間の選好データから直接LLMをファインチューニングする手法。従来のRLHFと異なり報酬モデルを必要とせず、選好ペア(chosen/rejected)を直接学習してモデルを人間の意図に合わせる。2023年Stanford大学が提案。
DPO(直接選好最適化)とは
DPO(Direct Preference Optimization)は、2023年9月にStanford大学のRafailov らが発表した論文「Direct Preference Optimization: Your Language Model is Secretly a Reward Model」で提案されたLLMアライメント手法。従来のRLHFが必要としていた報酬モデルの事前学習とPPO強化学習の2段階プロセスを、1つの分類損失関数に統合した。2025年現在、Llama 3・Mistral・Qwen2.5・Gemma 2など主要OSSモデルのファインチューニングで最も広く採用されるアライメント手法となっている。
RLHFとの違い・仕組み
従来のRLHF手法(InstructGPT・ChatGPTで採用)は報酬モデル学習・PPO強化学習の2段階が必要だった。RLHFの課題はPPOの不安定性・報酬ハッキング・メモリ使用量(4モデル同時ロード)・実装複雑性。
DPOはBradley-Terryモデルの閉形式解を導出し、報酬モデルを損失関数内に暗黙的に組み込む。chosenとrejectedの対数確率差をβ温度パラメータでスケールした値を最大化する。実装はSFTと同様の教師あり学習ループで実現でき、追加モデル不要。
主な特徴・技術仕様
- データ形式: {"prompt": "...", "chosen": "...", "rejected": "..."} の選好ペア
- βパラメータ: デフォルト0.1〜0.5(KL正則化強度。低いほど参照モデルから自由に逸脱)
- 参照モデル(π_ref): SFT済みベースモデルをfrozenで保持
- 学習率: 1e-6〜5e-6(SFTより低め。過学習しやすいため)
- バッチサイズ: 32〜128ペア
主要実装ライブラリ比較
| ライブラリ | 特徴 | 対応モデル | 難易度 |
|---|---|---|---|
| HuggingFace TRL DPOTrainer | 最も標準的 | Llama/Mistral/Phi/Gemma | ★★☆ |
| Axolotl | YAML設定ベース | 上記全て | ★☆☆ |
| LLaMA-Factory | WebUI付き・量子化DPO対応 | 幅広いHF対応モデル | ★☆☆ |
| OpenRLHF | 大規模分散学習・Ray対応 | 70B+の大規模モデル | ★★★ |
| unsloth | 高速・省メモリ(2〜5倍速) | Llama/Mistral/Gemma | ★★☆ |
主要データセット(2024〜2026年)
| データセット | ペア数 | 言語 | 特徴 |
|---|---|---|---|
| UltraFeedback | 64K | 英語 | GPT-4採点・4モデル比較 |
| Nectar | 183K | 英語 | 7段階スコア付き |
| HH-RLHF | 169K | 英語 | Anthropic公開・対話型 |
| Dolly-15K DPO | 15K | 英語 | Databricks公開 |
| BELLE | 多数 | 日本語・中国語 | 多言語選好データ |
自作PCでの実行環境要件
- 7B モデルのDPO: RTX 4090 (24GB) 単体またはRTX 3090×2で実施可能。QLoRA(4bit量子化)+DPOで16GB VRAM対応。
- 13B モデルのDPO: RTX 4090×2(48GB)またはA100 40GBが目安。
- 70B モデルのDPO: 8×A100 80GB(640GB VRAM)または4×H100推奨。
- フルパラメータDPOはSFT比1.3〜1.5倍のVRAMが必要(参照モデル保持のため)
DPOの発展型・派生手法
2023〜2026年にかけて多くの改良手法が提案されている:
- IPO(Identity Preference Optimization): DPOのオーバーフィット問題を正則化で解決
- KTO(Kahneman-Tversky Optimization): ペアデータ不要・スカラー報酬で学習
- ORPO(Odds Ratio Preference Optimization): SFT+DPOを1ステップ統合
- SimPO(Simple Preference Optimization): 参照モデル不要・長さペナルティ付き
よくある質問(FAQ)
Q1: DPOとSFTはどちらを先にやるべきですか? A: 通常はSFT→DPOの順序。SFTで基本的な指示追従能力を獲得させた後、DPOで人間の選好に合わせる。SFTとDPOを1ステップに統合したい場合はORPOが選択肢となる。
Q2: βパラメータはどう設定すればいいですか? A: β=0.1がデフォルト推奨値。βを下げるとモデルは参照ポリシーから大きく逸脱できるが過学習しやすい。β=0.01〜0.5の範囲で検証集合のKL divergenceをモニタリングしながら調整する。
Q3: 選好データはどう収集しますか? A: 既存の公開データセット(UltraFeedback等)利用が最も手軽。自社データの場合は複数モデル(GPT-4o・Claude等)で回答を生成し、人間またはGPT-4oで品質評価してchosen/rejectedのペアを作成する。最低1,000ペア以上、理想は10,000ペア以上が推奨。
まとめ
- DPOはRLHFの複雑さを解消しつつ同等以上の性能を実現するアライメント手法
- 報酬モデル不要でSFTと同様の実装ループで学習可能
- TRL・Axolotl・LLaMA-Factoryで標準化されており、RTX 4090でも7B規模なら実施可能
- 2025〜2026年の標準的なLLMファインチューニングパイプラインに不可欠