ORPO(オッズ比選好最適化)(オーアールピーオー)
SFT(教師あり学習)とDPO(選好最適化)を1ステップに統合したアライメント手法。通常2段階が必要なSFT後のDPOを、オッズ比ペナルティを組み込んだ単一の損失関数で同時達成し、学習コストを約半分に削減する。2024年POSTECH発表。
ORPO(オッズ比選好最適化)とは
ORPO(Odds Ratio Preference Optimization)は、韓国POSTECH(浦項工科大学)のJiwoo Hong らが2024年3月に発表した論文「ORPO: Monolithic Preference Optimization without Reference Model」で提案されたLLMアライメント手法。SFTとDPOを1つの損失関数に統合し、参照モデルなしでアライメントを達成する。
従来の2段階パイプラインの問題
従来のアライメント(SFT→DPO)は:
- 合計学習時間: SFT 3〜6時間 + DPO 6〜12時間 = 合計最大18時間
- VRAM: DPO段階では参照モデルとトレーニングモデルの2つを同時ロード
- ハイパーパラメータ: SFTとDPOで別々に調整が必要
ORPOの統合損失関数
オッズ比(Odds Ratio)はP/(1-P)で表す「起こりやすさ」の比率。ORPO損失はSFTの交差エントロピーにオッズ比ベースのペナルティ項を加算する:L_ORPO = L_SFT + λ · L_OR。chosen応答のオッズをrejected応答のオッズより高めることで選好学習を実現する。
ORPO vs DPO スペック比較
| 項目 | 従来SFT+DPO | ORPO |
|---|---|---|
| 学習段階数 | 2段階 | 1段階 |
| 参照モデル | 必要(VRAM 2倍) | 不要 |
| VRAM使用量(7B) | 約80GB | 約40GB |
| 学習時間(7B・A100) | 12〜18時間 | 6〜9時間 |
| λパラメータ | なし | 0.1〜1.0 |
| TRL実装 | DPOTrainer | ORPOTrainer |
具体的なコード例(TRL ORPOTrainer)
from trl import ORPOTrainer, ORPOConfig
training_args = ORPOConfig(
lambda_orpo=0.1, # L_ORの重み(デフォルト0.1)
learning_rate=8e-6,
per_device_train_batch_size=2,
gradient_accumulation_steps=8,
num_train_epochs=1,
output_dir="./orpo-model",
)
trainer = ORPOTrainer(
model=model,
args=training_args,
train_dataset=dataset,
tokenizer=tokenizer,
)
trainer.train()
ベンチマーク比較(論文・2024年値)
| モデル・手法 | MT-Bench | AlpacaEval 2.0 | IFEval |
|---|---|---|---|
| Llama-3-8B + SFT only | 7.2 | 5.3% | 36.4% |
| Llama-3-8B + DPO | 8.0 | 15.1% | 52.3% |
| Llama-3-8B + ORPO | 8.1 | 16.2% | 53.7% |
| Mistral-7B + ORPO | 7.9 | 14.8% | 51.2% |
自作PC環境での実行要件
- 7B ORPO: RTX 4090 24GB単体でQLoRA(4bit量子化)+ORPO可能。
- 13B ORPO: RTX 4090×2(48GB)またはA100 40GB。
- 70B ORPO: H100 80GB×4または4090 24GB×8。
- 学習時間目安: 7BモデルをRTX 4090で1エポック実施時、5万件で約8〜12時間。
よくある質問(FAQ)
Q1: ORPOはDPOを完全に置き換えられますか? A: 多くのケースで置き換え可能。特に計算リソースが限られた環境や、SFTデータとDPOデータを別々に管理するコストを削減したい場合に有効。各段階を細かくチューニングしたい上級ユーザーには、分離した2段階の方が制御しやすい。
Q2: λパラメータはどう設定すべきですか? A: デフォルト0.1が推奨出発点。λを上げるとアライメント(選好最適化)を重視し、下げるとSFT(能力獲得)を重視する。0.05〜0.5の範囲で実験することが多い。
Q3: データはどう準備しますか? A: SFTデータとDPOデータを統合した形式(prompt/chosen/rejected)が必要。HuggingFaceのUltraChat+UltraFeedbackを結合した形式が実績多数。
まとめ
- ORPOはSFT+DPOを1段階に統合し、学習コストを約50%削減するアライメント手法
- 参照モデルが不要なためVRAM使用量・実装複雑度が大幅に低減
- TRLのORPOTrainerで実装されており、DPOTrainerからの移行は比較的容易
- 2025〜2026年の効率的なLLMファインチューニングの有力選択肢