Skip to main content

DPO

DPO (Direct Preference Optimization) は、reward model も PPO も使わず、preference data から policy を直接最適化する 方法です。Rafailov ら (2023) によって提案され、open-source LLM alignment の de facto standard になりました。

核心: reward model を消す

DPO の出発点は、PPO RLHF の最適 policy が closed-form で書ける という観察です。

KL 制約付きの reward 最大化問題

maxπExD,yπ(x)[r(x,y)]βKL(ππref)\max_\pi \mathbb{E}_{x \sim \mathcal{D},\, y \sim \pi(\cdot \mid x)}[r(x, y)] - \beta\, \mathrm{KL}\bigl(\pi \,\|\, \pi_{\text{ref}}\bigr)

の最適 policy は、

π(yx)=1Z(x)πref(yx)exp ⁣(1βr(x,y))\pi^*(y \mid x) = \frac{1}{Z(x)}\, \pi_{\text{ref}}(y \mid x)\, \exp\!\left(\frac{1}{\beta} r(x, y)\right)

これを reward について解くと、

r(x,y)=βlogπ(yx)πref(yx)+βlogZ(x)r(x, y) = \beta\, \log \frac{\pi^*(y \mid x)}{\pi_{\text{ref}}(y \mid x)} + \beta\, \log Z(x)

つまり、reward は policy と reference の log-ratio で表せる のです。Z(x)Z(x) は preference の差を取ると消えます。

Bradley-Terry preference を policy 損失に変換

Preference probability の Bradley-Terry は

P(ywylx)=σ(r(x,yw)r(x,yl))P(y_w \succ y_l \mid x) = \sigma\bigl(r(x, y_w) - r(x, y_l)\bigr)

ここに上の reward 表現を代入すると、Z(x)Z(x) が消えて、

P(ywylx)=σ ⁣(βlogπ(ywx)πref(ywx)βlogπ(ylx)πref(ylx))P(y_w \succ y_l \mid x) = \sigma\!\left(\beta \log \frac{\pi(y_w \mid x)}{\pi_{\text{ref}}(y_w \mid x)} - \beta \log \frac{\pi(y_l \mid x)}{\pi_{\text{ref}}(y_l \mid x)}\right)

これを最大化する負の対数尤度が DPO loss です。

LDPO=E(x,yw,yl) ⁣[logσ ⁣(βlogπθ(ywx)πref(ywx)βlogπθ(ylx)πref(ylx))]\mathcal{L}_{\text{DPO}} = -\mathbb{E}_{(x, y_w, y_l)}\!\left[\log \sigma\!\left(\beta \log \frac{\pi_\theta(y_w \mid x)}{\pi_{\text{ref}}(y_w \mid x)} - \beta \log \frac{\pi_\theta(y_l \mid x)}{\pi_{\text{ref}}(y_l \mid x)}\right)\right]

直感

直感的には、

  • Winner の log-ratio は 上げる
  • Loser の log-ratio は 下げる
  • 両方が reference から離れすぎないように β\beta で制御

という、preference の対照学習 です。

PPO RLHF との比較

観点PPO RLHFDPO
Reward model必要 (別 model)不要 (policy log-ratio で代替)
Online sampling必要不要 (offline preference data でよい)
学習対象Policy + value + reward + refPolicy + ref のみ
メモリ重い軽い
実装複雑SFT とほぼ同じ複雑度
安定性チューニング難比較的安定
性能強いが繊細多くの open LLM で同等以上

これが、DPO が広く採用された理由です。

β の役割

β\beta は KL 強度に相当します。

  • β\beta 小: policy が reference から大きく離れる (preference に強く適合、forget リスク)
  • β\beta 大: 保守的、preference 効果が弱い

典型的には β=0.1\beta = 0.1 前後がよく使われます。

実装上の注意

Tip内容
Reference model凍結し、必要なら別 GPU に置く (gradient 不要)
SFT の質DPO は SFT がしっかり済んでいることを前提
Length biasDPO は長 response を好む傾向 → length normalization が有用
Distribution shiftOffline preference の policy 外領域に注意
Catastrophic forgettingSFT data を mix した DPO や NLL 補正が有効
On-policy 化Iterative DPO / online DPO で性能が伸びる

DPO の変種

DPO 以降、多くの variants が登場しました (詳細)。

名前キーアイデア
IPODPO の overfitting を防ぐ identity-preference 損失
KTOPair でなく単一 response の good / bad で学習
ORPOSFT と preference を 1 stage に統合
SimPOReference model を省く
cDPOLabel noise に robust な variant

数式で見る DPO の暗黙 reward

DPO は、reference policy πref\pi_{ref} からのずれを使って、policy πθ\pi_\theta の暗黙 reward を定義します。

rθ(x,y)=βlogπθ(yx)πref(yx)r_\theta(x,y)=\beta\log\frac{\pi_\theta(y\mid x)}{\pi_{ref}(y\mid x)}

Preference pair (x,y+,y)(x,y^+,y^-) に対する DPO loss は次の通りです。

LDPO=logσ(βlogπθ(y+x)πref(y+x)βlogπθ(yx)πref(yx))\mathcal{L}_{\mathrm{DPO}} =-\log\sigma\left( \beta\log\frac{\pi_\theta(y^+\mid x)}{\pi_{ref}(y^+\mid x)} - \beta\log\frac{\pi_\theta(y^-\mid x)}{\pi_{ref}(y^-\mid x)} \right)

この式の気持ちは、「chosen response の log ratio を rejected response より大きくする」というものです。明示的な reward model や PPO rollout を使わず、preference data から policy を直接更新できる点が DPO の大きな利点です。

β\beta は reference policy からどれくらい離れることを許すかを決めます。β\beta が大きいほど preference 差を強く反映し、小さいほど reference からの変化が抑えられます。

関連ページ

主なソース