DPOとPPOの違いとは?RLHFの選好最適化を仕組み・性能・実装で比較
DPOとPPOは、大規模言語モデル(LLM)を人間の好みに合わせる「アライメント(選好最適化)」で使われる2つの代表的な手法です。PPOは報酬モデルと強化学習を組み合わせる従来のRLHF標準で、DPOは報酬モデルを使わずに選好データから直接学習します。どちらも「良い応答を強め、悪い応答を弱める」目的は同じですが、必要なモデル数・計算コスト・学習の安定性・到達できる性能が異なり、選ぶべき場面も分かれます。本記事はGSCで実際にこの記事へ集まる検索意図(dpo ppo/ppoとは/dpoとは/rlhf ppo など)に沿って、両者の仕組みと違い、使い分け、TRLでの実装、GRPOなど周辺手法との関係まで整理します。
まとめ:DPOとPPOはどちらを選ぶべきか
結論から言うと、手早く・低コストでアライメントしたいならDPO、性能を最優先する本番アライメントならPPOが基準になります。DPOは報酬モデルの学習とオンラインのサンプリングを省き、選好ペア(prompt・chosen・rejected)に対する分類損失だけで最適化するため、学習が安定し計算資源が少なく済みます。一方PPOは報酬モデルと価値モデルを含む4モデルを動かすオンライン強化学習で、実装・チューニングは重い代わりに、適切に調整すれば対話やコード生成でDPOを上回る到達性能が報告されています(ICML 2024)。ChatGPTをはじめ商用LLMの多くがPPO系のオンライン強化学習を採る一方、学術ベンチではDPOが好成績を出すという乖離も、この性質の違いから生まれます(ClaudeはRLAIF系でPPOそのものとは異なりますが、オンライン最適化寄りという点は共通します)。以下で仕組み・違い・使い分け・実装を順に見ていきます。
PPO(Proximal Policy Optimization)とは:RLHFの学習エンジン
PPOは、OpenAIのSchulmanらが2017年に提案した強化学習アルゴリズムです。もとはロボット制御やゲームなど一般的な強化学習で使われる方策勾配(policy gradient)系の手法で、方策の更新幅を抑えて学習を安定させる点が特徴です。LLMの文脈では、RLHF(人間フィードバックによる強化学習)の「学習エンジン」としてPPOが使われます。「強化学習 ppo」「ppoとは」で調べる場合、この2つの文脈(古典的RLとRLHF)が混在するため、まず用途を切り分けて理解すると混乱しません。
PPOの仕組み:クリップ付き目的関数で更新幅を抑える
PPOは、新しい方策と古い方策の確率比を一定範囲に「クリップ(clip)」した代理目的関数を最大化します。更新が大きくなりすぎると学習が発散するため、比率を切り詰めることで1回の更新で方策が暴れないようにするのが核心です。RLHFではこれに加えて、参照モデル(学習前のSFTモデル)からのKLダイバージェンスをペナルティとして課し、元のモデルから離れすぎて出力が崩壊するのを防ぎます。学習中は方策モデル自身から応答をサンプリングし、その応答を報酬モデルで採点してフィードバックする「オンライン」方式である点が、後述するDPOとの本質的な違いです。
RLHFパイプラインでのPPOの位置づけ(事後学習の3段階)
PPOによるRLHFは、InstructGPT(Ouyangら, 2022)で確立された次の3段階の事後学習(post-training)として構成されます。第1段が教師あり微調整(SFT)、第2段が人間の選好ラベルから報酬モデルを学習する段階、第3段がその報酬を最大化するようPPOで方策を最適化する段階です。「rlhf ppo」「事後学習」「選好学習」で求められるのはこの全体像で、PPOはあくまで最終段の最適化アルゴリズムに当たります。学習時にはメモリ上に方策モデル・参照モデル・報酬モデル・価値(critic)モデルの4つを同時に保持する必要があり、これが後述する計算コストの重さに直結します。この3段階それぞれのデータ要件と実装上の分担はRLHFとは?人間のフィードバックで言語モデルを調整する3段階の仕組みと採用判断で詳しく整理しています。
DPO(Direct Preference Optimization)とは:報酬モデルを使わない選好最適化
DPOは、Rafailovらが2023年に提案した選好最適化手法です(NeurIPS 2023、論文「Direct Preference Optimization: Your Language Model is Secretly a Reward Model」)。名称は「Direct Preference Optimization(直接選好最適化)」で、”Direct Policy Optimization” ではありません。旧来の解説で「Policy」と書かれることがありますが、DPOの要点は報酬(preference)を明示的に学習せず暗黙化することにあるため、正確な語を押さえておくと論文との対応が取れます。
DPOの仕組み:報酬モデルを暗黙化する分類損失
DPOは、RLHFの「報酬モデル+強化学習」を数式的に整理し直し、最適方策を閉じた形で導出できることを示しました。その結果、報酬モデルを別に学習しなくても、選好ペアに対する単一の分類損失(ロジスティック回帰に相当するsigmoid損失)を最小化するだけで方策を最適化できます。損失は「選ばれた応答(chosen)の対数尤度比を上げ、選ばれなかった応答(rejected)の対数尤度比を下げる」形で、参照モデルとの比を取ります。強さを制御するのがハイパーパラメータβで、TRL実装の既定値は0.1、値を大きくするほど参照モデルから離れにくくなります。実務上は「好ましくない応答の尤度を抑える」方向に効くことが多いのも特徴です。
SFTと選好データだけで完結する学習フロー
DPOのパイプラインは「SFT → DPO」の2段で、RLHFから報酬モデル学習とPPO段を丸ごと省けます。学習中に方策モデルから応答をサンプリングする必要がなく、あらかじめ用意した選好ペアデータ(prompt・chosen・rejected)を教師あり学習のように流すオフライン方式です。参照モデルの対数確率は事前計算してメモリを節約でき、動かすモデルは方策と参照の2つで済みます。「dpo sft」「選好学習」で問われる関係はここに当たり、DPOは強化学習の枠組みを借りつつ実装は教師あり分類に近いという二面性を持ちます。
DPOとPPOの違いを比較(仕組み・コスト・安定性・性能)
両者を「dpo ppo」「ppo vs dpo」で比較する際の軸を、報酬モデルの有無・学習方式・計算コスト・安定性・到達性能で整理します。まず主要な違いを一覧で示します。
| 観点 | PPO(RLHF) | DPO |
|---|---|---|
| 報酬モデル | 明示的に学習して使う | 不要(暗黙化) |
| 学習方式 | オンライン強化学習(サンプリングあり) | オフラインの教師あり分類 |
| 必要モデル数 | 4(方策・参照・報酬・価値) | 2(方策・参照) |
| 計算コスト・メモリ | 大きい | 小さい |
| 実装・調整の難度 | 高い(ハイパラに敏感) | 低い |
| 学習の安定性 | 発散しやすい | 安定しやすい |
| 提唱年・出典 | 2017(Schulmanら) | 2023(Rafailovら) |
この表の各行を、以下のh3で「なぜそうなるのか」まで踏み込みます。
報酬モデルの有無とオンライン/オフラインの違い
最大の分岐点は報酬モデルを明示的に持つかどうかです。PPOは人間の選好から報酬モデルを学習し、その報酬を最大化するようオンラインで方策を更新します。DPOは報酬モデルを数式的に方策へ吸収し、選好ペアからオフラインで直接学習します。この差は運用にも効きます。PPOの報酬モデルは一度作れば複数の学習で使い回せる資産になりますが、報酬モデルの誤差や「報酬ハッキング」のリスクを抱えます。DPOは報酬モデルを持たない分その工程を丸ごと省けますが、選好データの質がそのまま結果に反映されます。
計算コスト・実装難易度・学習の安定性
PPOは学習中に4モデルをメモリに載せ、方策からのサンプリングと報酬採点を繰り返すため、計算コストとGPUメモリの要求が大きく、学習率やクリップ幅・KL係数などのハイパーパラメータに敏感で発散しやすいのが実務上の難点です。DPOは動かすモデルが2つ(参照は事前計算可)で、サンプリングも不要なため、同規模のアライメントをより少ない資源で安定して回せます。「手早くアライメントしたい」「限られたGPUで試したい」という要件では、この差がそのままDPO採用の理由になります。
アライメント性能の違い(DPO論文とICML 2024の逆転)
性能評価は一枚岩ではありません。DPOの原論文は、DPOがPPOベースのRLHFと同等以上で、特に生成文の感情(sentiment)制御ではPPOを上回り、要約や単一ターン対話でも同等以上と報告しました。一方、ICML 2024の「Is DPO Superior to PPO for LLM Alignment? A Comprehensive Study」は、適切にチューニングしたPPOが対話(HH-RLHF・SafeRLHF)でも難度の高いコード生成(APPS・CodeContest)でもDPOを一貫して上回ると示し、DPOには分布外の応答を突いて偏った解に陥る、モデル出力と選好データの分布シフトに弱い、といった限界があると指摘しました。商用LLM(ChatGPTなど)がPPO系のオンライン最適化を採る一方で学術ベンチではDPOが好成績を出す「ベンチマークの乖離」も、この研究が論点にしたところです。つまり「どちらが上か」は前提条件次第で、DPOは手軽さ、PPOはチューニング前提の到達性能に強みがあると理解するのが実態に近い評価です。
DPOとPPOの使い分け:条件で選ぶ
比較を踏まえ、どちらを選ぶべきかを具体的な条件で言い切ります。玉虫色に「ケースバイケース」で終えず、要件から逆算するのが失敗を避ける近道です。
DPOを選ぶべき場面
質の高い選好ペアデータが用意でき、限られた計算資源で手早く・安定してアライメントしたい場合はDPOが第一候補です。報酬モデルの構築・保守を避けたい、オフラインで再現性を担保したい、まず小さく検証してから拡張したい、といった要件にも合います。研究・PoCや、対話トーンの調整のように選好が明快なタスクで効率よく成果を出せます。
PPOを選ぶべき場面
到達性能を最優先する本番アライメントや、コード生成のように出力の正しさが厳密に問われる難タスクでは、チューニング体制を用意できるならPPOが有利です。既存の報酬モデルを使い回したい、オンラインの報酬信号を学習に取り込みたい、分布シフトへの頑健性を高めたい場合もPPOの土俵です。商用グレードの品質を狙うほど、報酬モデル+PPOの重さに見合うリターンが出やすくなります。
採用を避けるべき場面(失敗パターン)
選好データの質が低い、あるいは分布外の応答を含むデータでDPOを回すと、モデルがその弱点を突いて不自然な解へ寄る劣化(報酬ハッキングに近い挙動)が起きやすく、この条件でのDPOは避けるべきです。逆に、学習率・KL係数などを詰める体制がないままPPOを本番導入するのも危険で、発散や品質崩壊を招きます。「資源が乏しいのに最高性能をPPOで狙う」「品質検証なしにDPOへ一本化する」のいずれも失敗の典型です。
実装例:TRLでDPOを動かす
Hugging FaceのTRLライブラリを使うと、DPOは数行で試せます。PPO(RLHF)は報酬モデルや価値モデルの準備が要るぶん手順が増えるため、まずは動かしやすいDPOのコードで最小構成を確認します。
DPOTrainerの最小実装とβ・loss_type
選好データセット(prompt・chosen・rejectedの列)を渡し、モデルと合わせてDPOTrainerに与えるだけで学習が始まります。
from trl import DPOTrainer, DPOConfig
from datasets import load_dataset
# prompt / chosen / rejected を持つ選好データセット
dataset = load_dataset("trl-lib/ultrafeedback_binarized", split="train")
trainer = DPOTrainer(
model="Qwen/Qwen3-0.6B",
args=DPOConfig(output_dir="dpo-out", beta=0.1, loss_type="sigmoid"),
train_dataset=dataset,
)
trainer.train()
上記は近年のTRL(モデルを文字列で渡すとトークナイザを自動読み込みする版)を前提にした最小例で、旧版ではoutput_dirやトークナイザの明示が必要になる場合があるため、実行前に使用中のTRLバージョンのドキュメントで引数を確認してください。betaは参照モデルからの逸脱を抑える強さで、既定は0.1、大きくするほど元のモデルに近い挙動を保ちます。loss_typeの既定は"sigmoid"で、ここを差し替えるだけでIPO("ipo")、hinge損失("hinge")、ノイズ耐性のRobust DPO("robust")、長さバイアスを抑える正規化版("sigmoid_norm")といったDPO派生へ切り替えられます。TRLではDPOの学習率の既定が1e-6と通常の微調整より小さく設定される点も、そのまま使う際の目安になります。なお省メモリ化したい場合は、peft_configを渡してLoRA/QLoRAと併用でき、その仕組みはPEFTとLoRAの違いで解説しています。
PPO(RLHF)実装で押さえる要点
PPOをTRLで動かす場合は、SFT済みモデルに加えて、選好から学習した報酬モデルと、優位性を見積もる価値モデルを用意し、方策モデルからの生成を報酬で採点しながら更新します。DPOのように単一のTrainerへデータを流すだけでは完結せず、報酬モデルの準備・KL係数や生成長の調整・オンライン生成のコストが実装負担として乗ります。まずDPOでアライメントの効果を検証し、性能要件がDPOで頭打ちになった段階でPPOへ進む、という順序が現実的です。
DPO・PPOと周辺手法(GRPO・DPO派生)
選好最適化の周辺には、PPOやDPOから派生した手法が複数あります。「dpo grpo」「grpo ppo」で並べて調べられることが多いので、位置づけを整理します。GRPO(Group Relative Policy Optimization)はDeepSeekが提案したPPOの派生で、PPOの価値(critic)モデルを廃し、同一プロンプトへの複数応答をグループ内で相対比較して優位性を推定します。価値モデルを省くぶんPPOより軽く、推論系タスクで成果を上げました。仕組みや公式、PPOとの詳しい違いはGRPOとは?DeepSeekの強化学習アルゴリズムの公式・仕組みとPPOとの違いで解説しています。
DPO側にも、過学習を抑えるIPO、報酬モデルを使わず不均衡データに強いKTO、SFTと選好を1段で扱うORPO、参照モデルを不要にして長さバイアスを抑えるSimPOなどの派生があります。このうちIPOはTRLのDPOTrainerでloss_type="ipo"として切り替えられますが、KTO・ORPO・SimPOはそれぞれ専用のTrainer(KTOTrainer・ORPOTrainer・CPOTrainer)で扱う点に注意してください。なお「dqn ppo」のように古典的強化学習の文脈で比較される場合、DQNは行動価値を学ぶ値ベース、PPOは方策を直接学ぶ方策ベースという系統の違いになり、RLHFでのPPO/DPOの対比とは軸が異なります。実際に強化学習エージェントを動かす実装面はML-Agentsの特徴:柔軟性と拡張性に優れた強化学習ツールも参考になります。
よくある質問(FAQ)
PPOとは強化学習で何をする手法ですか?
PPOは方策の更新幅をクリップして安定化させる強化学習アルゴリズムで、2017年にOpenAIが提案しました。LLMではRLHFの最終段(SFT→報酬モデル→PPO)として、報酬モデルの採点を最大化する形で方策を最適化する役割を担います。ロボット制御やゲームなど一般的な強化学習でも広く使われます。
DPOとは何の略ですか?
DPOはDirect Preference Optimization(直接選好最適化)の略です。”Direct Policy Optimization” と誤記されることがありますが、正しくは「Preference」で、報酬モデルを明示的に学習せず選好データから直接最適化する点が名称の由来です。
DPOとPPOはどちらが優れていますか?
前提次第です。DPOの原論文は同等以上(感情制御ではPPO超)としましたが、ICML 2024の研究は適切にチューニングしたPPOが対話・コード生成でDPOを上回ると示しました。手軽さ・安定性・低コストならDPO、チューニング前提の到達性能ならPPOと考えるのが実態に近い評価です。
DPOはPPOよりなぜ計算コストが低いのですか?
PPOは方策・参照・報酬・価値の4モデルを同時に動かし、学習中に応答を生成して採点するオンライン方式です。DPOは報酬モデルと価値モデルが不要で、動かすのは方策と参照の2モデル、サンプリングもしないオフライン方式のため、メモリと計算量を大きく抑えられます。あわせて、多腕バンディット問題についても解説しています。
GRPOはPPO・DPOとどう違いますか?
GRPOはPPOの派生で、PPOが持つ価値(critic)モデルを廃し、同一プロンプトへの複数応答をグループ内で相対比較して優位性を推定します。報酬モデルを使う点はPPO寄りですが価値モデルを省くぶん軽く、報酬モデル自体を使わないDPOとは設計思想が異なります。詳細はGRPOの解説記事を参照してください。