SimPO(シンプル選好最適化)(シムポ)
参照モデルを使わず、シーケンス長で正規化した平均対数確率を報酬代理として使うアライメント手法。DPOやORPOより実装がシンプルで、2024年Princeton大学が提案。長い応答への偏りを防ぐ長さペナルティも内蔵し、AlpacaEval 2.0で当時SOTA達成。
SimPO(シンプル選好最適化)とは
SimPO(Simple Preference Optimization)は、Princeton NLPグループのMengzhou Xia らが2024年5月に発表した論文「SimPO: Simple Preference Optimization with a Reference-Free Reward」で提案されたLLMアライメント手法。2024年6月時点でLlama-3-8B + SimPOがAlpacaEval 2.0ベンチマークで80.5%のWin rateを達成し、当時のSOTA(State of the Art)として注目を集めた。
参照モデルなし報酬の革新
DPOは参照モデル(πref)との対数確率比を報酬として使う。SimPOはシーケンス長|y|で正規化した平均対数確率を報酬として使う。この変更により:
- 参照モデル不要: πrefが消えるためVRAMと計算コストを削減
- 長さ正規化: 長い応答が有利になる「length bias」を防止
- γマージン: chosen/rejectedの報酬差に最小マージンγを設定
主要手法との技術比較
| 手法 | 参照モデル | 長さ正規化 | ペアデータ | VRAM効率 |
|---|---|---|---|---|
| DPO | 必須 | なし | 必須 | 低 |
| IPO | 必須 | なし | 必須 | 低 |
| KTO | 必須 | なし | 不要 | 低 |
| ORPO | 不要 | なし | 必須 | 高 |
| SimPO | 不要 | あり | 必須 | 高 |
SimPOの実装(TRL CPOTrainer使用)
from trl import CPOTrainer, CPOConfig
training_args = CPOConfig(
loss_type="simpo", # SimPOモード指定
simpo_gamma=0.5, # マージンγ(0.5〜1.5が目安)
beta=2.5, # 温度パラメータ(DPOより高め)
learning_rate=1e-6,
per_device_train_batch_size=2,
gradient_accumulation_steps=4,
output_dir="./simpo-model",
)
trainer = CPOTrainer(
model=model, # 参照モデル不要
args=training_args,
train_dataset=dataset,
tokenizer=tokenizer,
)
trainer.train()
ベンチマーク実績(2024年論文値)
| モデル・手法 | AlpacaEval 2.0 Win% | MT-Bench | ArenaHard |
|---|---|---|---|
| Llama-3-8B + SFT | 4.7% | 7.0 | 4.3 |
| Llama-3-8B + DPO | 44.3% | 8.1 | 46.3 |
| Llama-3-8B + ORPO | 52.6% | 8.1 | 48.1 |
| Llama-3-8B + SimPO | 80.5% | 8.1 | 65.0 |
| Llama-3-70B + SimPO | 86.3% | 8.5 | 82.1 |
ハイパーパラメータ設定指針
| パラメータ | 推奨値 | 説明 |
|---|---|---|
| β | 2.0〜2.5 | DPOの10〜25倍(損失スケールが異なる) |
| γ(simpo_gamma) | 0.5〜1.5 | 低すぎると効果薄、高すぎると不安定 |
| learning_rate | 1e-6〜5e-6 | DPOと同程度 |
| max_length | 4096 | 長さ正規化を有効活用するため長めに設定 |
よくある質問(FAQ)
Q1: SimPOはDPOより常に優れていますか? A: AlpacaEval 2.0では大差でSimPOが上回るが、これはAlpacaEval自体がGPT-4-Turboと比較するため、SimPOの長さペナルティが「簡潔で明確な回答」として高評価されやすい可能性がある。MT-BenchではDPOと同スコア。用途に合わせて選択する。
Q2: βをDPOと同じ0.1にしたら動きませんでした。なぜですか? A: SimPOは損失関数のスケールがDPOと異なるため、β=0.1では効果が出にくい。SimPO論文はβ=2.5を推奨。βはDPOの20〜25倍程度の値が適切。
Q3: 参照モデルなしで品質が下がりませんか? A: 参照モデルはKL正則化に使われるが、SimPOはγマージンがその役割を代替する。実験ではDPO同等以上の品質が報告されているが、特定のドメインでは参照モデルあり手法の方が安定する場合もある。
まとめ
- SimPOは参照モデル不要・長さ正規化内蔵の最新アライメント手法(2024年Princeton)
- AlpacaEval 2.0でLlama-3-8B+SimPOが80.5%Win rateを達成しSOTA記録
- TRLのCPOTrainerでloss_type=simpoを指定するだけで実装可能
- β=2.5・γ=0.5から始めて検証セットの長さとスコアを見ながら調整
- VRAM効率と高スコアを両立した2025〜2026年の注目アライメント手法