
DPO 捨棄 RLHF 中笨重的 reward model, 並將 RL 問題直接轉換成對好壞兩個 responses 的 supervised training. [圖片產生自 ChatGPT]
Pre-trained model 經過 SFT (Supervised Fine-Tuning) 再經過 RLHF (Reinforcement Learning from Human Feedback) 的這一套組合拳在 2023 年堪稱顯學
網路上甚至產生了一個很有名的修格斯(Shoggoth)怪物梗圖. (wiki: 形態無定的原生質生物,是克蘇魯神話中最駭人的存在之一)
Elon Musk 也在 twiitter 發了一張帶著笑臉面具的修格斯對人類說著 [ref]:
“As an AI language model, I have been trained to generate responses that are intended to be helpful, informative, and objective…”
第一步的 pre-trained phase 就是大力出奇蹟硬 train 一發, 模型長得像觸手怪的修格斯般, 什麼都有可能也很難控制其行為 (產生人類要的笑臉). 因此需要第二階段的 SFT, 而這很好做, 只要藉由篩選或人工介入得到比較高品質的資料後, 重新 supervised fine tuning 一下就結束了.
不過若要達到最終更好的效果或是人類喜歡的輸出等等, 還是得依靠最後一階段的 RLHF
相比 SFT, RLHF 對超參數敏感許多, 同時 RLHF 必須依賴一個事先訓練好的 reward 模型來為每個 output tokens 打分數, 才能訓練 LLM, 這種兩階段訓練也是模型調整的一大困難點之一.
2023 年 Stanford 團隊提出 DPO (Direct Preference Optimization) [arxiv]
成功將 LLM 偏好對齊的問題從 RL 轉換成 supervised training, 一舉改善 RLHF 的缺點的同時, 效果仍然卓著.
究竟 DPO 怎麼將 RL 變 supervised training 的? 這數學魔術怎麼變的?
帶著好奇心讓我們讀下去, 不過還得先從 RLHF 說起
得先說 RLHF 才行
看一下 RLHF 的目標函式
$$\begin{align}
J(\theta) = \mathbb{E}_{x \sim \mathcal{D}, y \sim \pi_\theta} [\underbrace{r_\phi(x, y)}_{\text{1. Maximize Reward}} - \underbrace{\beta \log \frac{\pi_\theta(y|x)}{\pi_{ref}(y|x)}}_{\text{2. KL Penalty}}]
\end{align}$$ 要求 $\arg\max_\theta J(\theta)$.
其中 $(x,y)$ 分別是 input prompt 以及 LLM 的 output tokens; $r_\phi(x,y)$ 是參數為 $\phi$ 的 reward model, 其物理意義是代表 $(x,y)$ 這樣的 pair 人類來看有多少分, 愈高分愈好.
$\pi_\theta(y|x)$ 和 $\pi_{ref}(y|x)$ 分別是欲訓練的模型 (參數 $\theta$) 及初始模型 (這裡指經過 SFT 後的模型).
$\pi$ 在 RL 的術語就是 policy model 而如果套用在 LLM 情境裡正好就是語言模型. 因為 LLM 是 next token prediction, 翻譯到 RL 就是 next action prediction
其實滿直觀的, (1) 第一個 term (Maximize Reward) 是原本強化學習 RL 的目標函式, 請參考 [Ch9] Policy Gradient 的 metric expression 3.
而 RL 的最終目的就是找出能最大化 expected total rewards 的 policy model. 因此這裡一個重點是, 我們要有一個 “事先訓練好的” reward model $r_\phi(x,y)$.
Bradley-Terry 模型: Reward Model 的訓練
給一個 pair $(x,y)$ 要給幾分對人來說不僅難且沒個統一標準. 而如果要人對比哪個 output tokens 好 ($y_w$) 或壞 ($y_l$) 就容易多了.
因此花了一些 cost 去標記出很多的偏好數據集 $\{(x,y_w,y_l)\}$, 這就是 reward model $r_\phi(x,y)$ 依賴的訓練資料.
有了偏好數據集 $\{(x,y_w,y_l)\}$ 要怎麼變成給一個 pair $(x,y)$ 要給幾分呢?
最直覺的想法就是訓練一個模型 $r_\phi$ 希望 $r_\phi(x,y_w)$ 比 $r_\phi(x,y_l)$ 愈高分愈好, 這就是 Bradley-Terry 模型的目標函式
定義 $y_w$ 勝過 $y_l$ 的機率取決於兩者的獎勵差:
$$\begin{align}
P(y_w \succ y_l | x) = \sigma(r_\phi(x, y_w) - r_\phi(x, y_l))
\end{align}$$ 簡單講, 做 MLE (Maximum Likelihood Estimation) 找出 $\phi$ 能最大化機率就結束了.
Reward Hacking
回到 RLHF 目標函式 (1), 第二個 term (KL Penalty) 表明訓練的 LLM 模型, $\pi_\theta(y|x)$, 不要跟初始模型, $\pi_{ref}(y|x)$, 差異太大.:
$$\begin{align*}
D_{KL}(\pi_\theta || \pi_{ref}) = \mathbb{E}_{y \sim \pi_\theta} \left[ \log \frac{\pi_\theta(y|x)}{\pi_{ref}(y|x)} \right]
\end{align*}$$ 為什麼不希望差異太大?
因為 reward model $r_\phi(x,y)$ 是事先訓練好的模型, 也只是個近似, 如果說模型訓練後有些缺陷, 例如對很多 emojio 符號會給很高的 reward, 則基於 RL 追求最大化 reward 的行為就會瘋狂輸出 emojio.
這種行為稱為 Reward Hacking. 因此加個 KL 約束項來希望避免.
RLHF 總結和缺點
在 DPO 出現之前, 我們使用 RLHF 來讓模型符合人類喜好. 這是一個兩階段且不穩定的過程:
- 訓練 Reward Model (RM): 收集成對數據 $(x, y_w, y_l)$, 其中 $x$ 是 prompt, $y_w$ 是勝出的回答 (winner), $y_l$ 是落敗的回答 (loser). 訓練一個神經網路 $r_\phi(x, y)$ 來預測哪個回答更好 (使用 Bradley-Terry 模型)$$\begin{align*} \mathcal{L}_{RM} = -\log \sigma(r_\phi(x, y_w) - r_\phi(x, y_l)) \end{align*}$$
- 加上 KL-divergence 優化 Policy: 固定 RM, 加上 KL-divergence 更新語言模型 $\pi_\theta$,最大化獎勵並防止模型偏離初始模型 $\pi_{ref}$ 太遠
總結來說 RLHF 有以下缺點:
- 需要同時維護 3~4 個模型在記憶體中 (Policy $\pi_\theta(y|x)$, Reference $\pi_{ref}(y|x)$, Reward Model $r_\phi(x,y)$, Critic value function in RL (如果有的話))
- 目標函式 (1) 對超參數極度敏感, 或許要使用如 PPO-clip 等的做法來維持訓練穩定
- Reward Model 本身也是個近似, 優化它可能會導致上面提到的 Reward Hacking 現象
DPO (Direct Preference Optimization) 登板救援
DPO 是一種將「人類偏好對齊 (Alignment)」視為「分類問題」而非「強化學習問題」的方法. 它在 2023 年由 Stanford 團隊提出 [arxiv], 迅速成為微調 LLM (如 Llama-3, Mistral) 的主流方法
轉換成單純的監督式學習好處是避開使用 RL 兩階段且不穩定的過程, 且無須同時維護 3~4 個模型在記憶體中, 又因為不使用 RL 自然也就沒有 Reward Hacking problem.
聽起來太神奇了吧? 來一步步拆解怎麼辦到的.
回顧目標函數 (1) (為了簡化符號, 省略期望值 $\mathbb{E}_x$, $r_\phi$ 的 $\phi$, $\pi_\theta$ 的 $\theta$)
$$\begin{align}
\max_{\pi}J(\pi) \doteq \max_\pi \mathbb{E}_{y \sim \pi} \left[ r(x, y) - \beta \log \frac{\pi(y|x)}{\pi_{ref}(y|x)} \right]
\end{align}$$ 這個形式其實可以重寫, 對公式內的項進行代數變換:
$$\begin{aligned}
\therefore J(\pi) &= \sum_y \pi(y|x) \left( r(x, y) - \beta \log \pi(y|x) + \beta \log \pi_{ref}(y|x) \right) \\
&= \beta \sum_y \pi(y|x) \left( \frac{r(x, y)}{\beta} + \log \pi_{ref}(y|x) - \log \pi(y|x) \right) \\
&= \beta \sum_y \pi(y|x) \log \left( \frac{\pi_{ref}(y|x) \exp(\frac{r(x, y)}{\beta})}{\pi(y|x)} \right)
\end{aligned}$$ 這其實就是負的 KL-divergence. 為了讓這裡面的 $\pi_{ref}(y|x) \exp(\dots)$ 變成一個合法的機率分佈, 我們需要除以一個歸一化常數 (Partition Function) $Z(x)$.
根據 KL-divergence 性質, 我們知道 if and only if $\pi$ 等於以下分佈時, 上述目標函數達到最大值:
$$\begin{align}
\pi^*(y|x) = \frac{1}{Z(x)} \pi_{ref}(y|x) \exp\left( \frac{r(x, y)}{\beta} \right)
\end{align}$$ 其中 $Z(x) = \sum_y \pi_{ref}(y|x) \exp\left( \frac{r(x, y)}{\beta} \right)$.
所以給定一個 reward $r$ 我們知道對應這個 $r$ 的最佳 policy $\pi^*$ (使得 (3) 達到最大) 長怎樣
反過來說, 給一個策略 $\pi^*$, 讓這個策略成為最佳策略的那個 reward $r$ 是不是也找的到? 可以的
代數反推一下 (4) 得到
$$\begin{align}
\Longrightarrow \log \pi^*(y|x) = -\log Z(x) + \log \pi_{ref}(y|x) + \frac{1}{\beta} r(x, y) \\
\Longrightarrow r(x, y) = \beta \log \frac{\pi^*(y|x)}{\pi_{ref}(y|x)} + \beta \log Z(x)
\end{align}$$ 現在回到我們的偏好數據集, 我們有 $\{(x, y_w, y_l)\}$. Bradley-Terry 模型 (式 (2)) 告訴我們, $y_w$ 勝過 $y_l$ 的機率取決於兩者的獎勵差:
$P(y_w \succ y_l | x) = \sigma(r(x, y_w) - r(x, y_l))$ 現在把 $r$ 式 (6) 代入這個 $r(x, y_w) - r(x, y_l)$ 中:
$$\begin{align}
r(x, y_w) - r(x, y_l) &= \left( \beta \log \frac{\pi^*(y_w|x)}{\pi_{ref}(y_w|x)} + \beta \log Z(x) \right) - \left( \beta \log \frac{\pi^*(y_l|x)}{\pi_{ref}(y_l|x)} + \beta \log Z(x) \right) \\
&= \beta \log \frac{\pi^*(y_w|x)}{\pi_{ref}(y_w|x)} - \beta \log \frac{\pi^*(y_l|x)}{\pi_{ref}(y_l|x)}
\end{align}$$ $\beta \log Z(x)$ 因為跟 $y$ 無關, 抵銷掉了.
現在, 我們把理論上的 $\pi^*$ 替換成我們正在訓練的神經網路 $\pi_\theta$. 我們的目標是最大化偏好數據的 Log Likelihood (也就是最小化 Negative Log Likelihood):
$$\begin{align}
\mathcal{L}_{DPO}(\pi_\theta; \pi_{ref}) = -\mathbb{E}_{(x, y_w, y_l) \sim \mathcal{D}} \left[ \log \sigma \left( \beta \log \frac{\pi_\theta(y_w|x)}{\pi_{ref}(y_w|x)} - \beta \log \frac{\pi_\theta(y_l|x)}{\pi_{ref}(y_l|x)} \right) \right]
\end{align}$$ 這就是最終 DPO 的 loss 👏🏻
總結來說, 優化 DPO loss (9) 使得我們能盡量對偏好數據集中的 $y_w$ 勝過 $y_l$ 的機率愈高愈好.
而 (9) 又是基於 $\pi$ 與 $r$ 的 closed form solution 關係 (式 (4)&(6)) 推導出來的, 該關係直接保證了 RL 的目標函式 (3) 達到最大.
論文還有許多內容, 包含 “Theoretical Analysis of DPO” 段落, 有興趣可以深入閱讀
Appendix 1: 成對比較 V.S. 單點回饋
偏好數據集 $\{(x,y_w,y_l)\}$ 需要給兩個回答來讓人們比較優劣, 相信在 2024 年的時候使用過 AI 的人都有過那種經驗:
兩個回答落落長, 看完都累了哪有能力評分好壞 🤮. 或是兩個回答都差不多, 也不想仔細評價誰好誰壞.
在 2025 年的時候, 筆者自己的經驗就比較少看到這種成對比較的回饋, 取而代之的是針對單個回答給 thumbs up/down:
如果數據集改成這樣又該怎麼做 DPO 呢? 看起來無法套用 Bradley-Terry 模型了
基於這個好奇心, 我詢問了 Gemini:
目前 RLHF 領域從 Pairwise (成對比較) 轉向 Pointwise (單點/一元回饋) 的趨勢
簡單的回答是:如果有單點的 Thumbs Up/Down 資料,我們不能直接「硬套」標準的 Bradley-Terry 模型(因為它數學上就是設計給 A vs B 的),但是我們有專門針對這種資料的替代方案,最著名的就是 KTO (Kahneman-Tversky Optimization)。
… (略)
AI 給出的參考論文是這篇: KTO (Kahneman-Tversky Optimization) [arxiv]
非常概略的講, 它不再計算 $r(y_w) - r(y_l)$, 而是將目標函數拆開, 定義了一個 「參考點 (Reference Point)」
- 對於 Thumbs Up (Desirable) 的資料: 我們希望它的 Implicit Reward 高於某個參考值
- 對於 Thumbs Down (Undesirable) 的資料: 我們希望它的 Implicit Reward 低於某個參考值
KTO 的 Loss 看起來很像把 DPO 拆成兩半:
$$\begin{align*}
L_{KTO} \approx \underbrace{\mathbb{E}_{x, y \sim D_{good}} [\text{Loss}(\text{Reward}(x,y) > \text{Target})]}_{\text{鼓勵好回答}} + \lambda \underbrace{\mathbb{E}_{x, y \sim D_{bad}} [\text{Loss}(\text{Reward}(x,y) < \text{Target})]}_{\text{懲罰壞回答}}
\end{align*}$$ 詳細就要去讀論文了, 先大致了解到這.
Appendix 2: DPO 延伸改進
DPO 仍面臨那些缺點? 以及有哪些方法提出來改進? 可自行查閱相關資料, 也滿有趣的.
請 Gemini 幫忙給個參考如下:
| 問題點 | 解決方案 | 核心思路 |
|---|---|---|
| 過度懲罰 Loser | IPO | 使用 MSE Loss + Margin,不再使用 Sigmoid 強推極限。 |
| 顯存不夠 (OOM) | SimPO | 丟掉 Reference Model,改用長度歸一化。 |
| 數據有噪聲 | cDPO / rDPO | 引入 Label Smoothing 或閾值,變得更保守。 |
| 推理能力變差 | Iterative DPO | 像 PPO 一樣多輪迭代,自己生成數據自己學。 |
| 流程太慢 | ORPO | SFT + Alignment 合二為一,不需要 Ref Model。 |
您的下一步建議:
如果您是自己在做實驗或微調小模型(如 Mistral-7B, Llama-3-8B):
- 資源受限:強烈推薦試試 ORPO 或 SimPO,省顯存且效果好。
- 追求極致效果:如果是做數學或邏輯任務,建議使用 Iterative DPO(前提是您有一個好的 Reward Model 或 GPT-4 當裁判)。