JOVANA
Explore Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

DPO 及其之後:更簡單的偏好優化

一段巧妙的數學,如何讓研究者丟掉獎勵模型與 RL 迴圈,直接用偏好配對來訓練模型;以及這一族更簡單的方法,為什麼是給實務工作者的一份實在禮物,卻仍逃不出貫穿整階核心的那個代理問題。

三件式機器,與一條捷徑

想像一個小型研究團隊,剛花了好幾週蒐集到一疊乾淨的偏好配對:數以千計的提示,每一筆都配著一個較好的答案與一個較差的答案。靠著這一階前面幾篇導讀,他們很清楚該拿這些配對怎麼辦。先用這些配對訓練一個獎勵模型,再跑一個強化學習迴圈,通常是 PPO,讓模型產生答案、替答案打分、把權重往上推,整個過程還有一個 KL 懲罰防止它漂移。這套有效。但它也意味著要同時把好幾個大模型塞進記憶體、要伺候一個出了名愛抽搐的 RL 迴圈,還要調一整叢旋鈕。團隊誠實的疑問,正是這篇導讀要回答的:那一整套機械裝置,真的有必要嗎?

用白話說,捷徑是這樣的。經典 RLHF 裡的獎勵模型,其實是個中間人:它讀你的偏好配對、把它們壓縮成一個分數,而那個分數才是 RL 迴圈去追的東西。但你最終想改變的,是語言模型本身。那麼,何不乾脆跳過中間人,直接用同一批配對來教模型,提高它產出人們偏好之答案的機率、降低它產出被拒絕之答案的機率呢?這一個動作——直接用比較來訓練策略,不要獨立的獎勵模型、不要 RL 迴圈——就是直接偏好優化(DPO)的核心,這個方法重新塑造了開放模型被對齊的方式。

我們往下走時,請把前幾篇導讀的一條線牢牢握住,因為無論我們怎麼重排機械裝置,它都不會消失。這一階裡的一切,都從同樣的原料學習——成對比較——也都依賴同樣那個「強度差距如何變成勝出機率」的簡單統計故事。DPO 與它的後繼者改變的,是「這個訊號如何被轉化成一個訓練好的模型」;它們並沒有改變訊號是什麼、或訊號的限制。所以你已經認識的那些教訓——學到的偏好是一個代理,而代理會被鑽漏洞——會一路跟著我們進入這些更簡單的方法。

DPO 究竟在做什麼:偽裝起來的獎勵模型

現在來看真正的機制,一次引入一個步驟。RLHF 並不是盲目地追逐獎勵;它在解一個特定的問題:在盡量貼近原始基礎模型的前提下,拿到你能拿到的最高獎勵(這個「貼近」是由你先前認識的 KL 懲罰來強制的)。結果發現,這個問題有一個已知、精確的答案:理想的 RLHF 策略,會讓每個答案的機率正比於「基礎模型給它的機率」乘上「它的獎勵取指數」。這是一個整潔的數學關係,串起三樣東西:訓練好的策略、基礎模型,以及獎勵。

DPO 巧妙的一招,是把那個關係反過來讀。如果策略由獎勵決定,那麼獎勵也就由策略決定:你可以把每個答案的獎勵,寫成「訓練好的模型比基礎模型更(或更不)可能產出它」的程度,再乘上一個溫度係數。Rafailov 等人 2023 年那篇原始論文的標題說得令人難忘:你的語言模型其實偷偷就是一個獎勵模型。把這個表達式代回標準的 Bradley-Terry 公式——也就是「勝出答案勝過落敗答案」的機率——一個美妙的抵消就發生了:那個礙手礙腳的歸一化項消失了,剩下一個樸素的損失,你可以用一般監督式的訓練去把它最小化。

# Classic RLHF: three moving parts, an RL loop, models held in memory
reward_model = train_RM(preference_pairs)            # stage 1
policy       = PPO(base_model, reward_model, beta)   # stage 2: RL loop + KL penalty

# DPO: one model, one supervised-style loop, no reward model, no RL
# implicit reward of answer y to prompt x:
#     r(x, y) = beta * log( policy(y|x) / base_model(y|x) )
loss = -log sigmoid( beta * (  log policy(y_win |x) / base_model(y_win |x)
                             - log policy(y_lose|x) / base_model(y_lose|x) ) )
# one gradient step pushes P(y_win) up and P(y_lose) down;
# base_model stays frozen as the reference -> an implicit KL leash, baked in
同一個偏好訊號,兩台機器:RLHF 先訓練一個獎勵模型再對它優化;DPO 則把獎勵摺進策略裡,一步訓練完成。

這個損失有兩個特點值得停下來看。第一,基礎模型並沒有消失;它以一個凍結的參考模型身分出現在每一項裡,這意味著原本的 KL 牽繩依然在場,只是被靜靜地摺進目標函數裡,而不是當成一個獨立的懲罰加上去。DPO 並沒有拋棄那個讓 RLHF 保持穩定的約束;它把它吸收了進來。第二,記憶體裡不再有一個獎勵模型等著被優化,也沒有那個「取樣再打分」的 RL 迴圈,所以整件事訓練起來,大約就和拿標註資料去微調一個大型語言模型一樣簡單而穩定。一個模型、一個迴圈、少得多的旋鈕。

現實中的 DPO:開放模型的浪潮

最能說明這件事為何重要的乾淨示範,是一個叫 Zephyr-7B 的小模型,由 Hugging Face 的 H4 團隊在 2023 年底發布。他們拿一個開放的基礎模型(Mistral-7B),先做一輪普通的指令微調,再用 DPO 在一份公開的偏好資料集上對齊它——沒有獎勵模型、沒有 PPO、沒有專屬的人類標註流水線。這套配方輕到能在普通的硬體上重現,然而在聊天類的基準上,這個 70 億參數的成果,竟能與那些用完整、昂貴的 RLHF 機械裝置對齊出來、大得多的模型分庭抗禮。順帶一提,那份資料集裡的偏好,是由 AI 裁判產生的,正是上一篇導讀裡的 RLAIF 想法,這顯示了這些零件能多自然地扣合在一起。

Zephyr 不是個別事件。因為 DPO 可重現、便宜又穩定,它在開放生態系裡擴散得很快——AI2 的 Tulu 系列模型、大學與社群的各種微調,以及模型平台上一大波「偏好調校過」的釋出,全都倚賴它。它也抵達了前沿:Meta 公開發表的 Llama 3 模型說明,描述了一條在偏好對齊上使用 DPO、而非 PPO 式 RL 迴圈的後訓練流水線。實際的效果是一場安靜的民主化:對齊一個有能力的助理,不再需要一支龐大的 RL 團隊,而成了一個研究生或一個小實驗室真的做得到的事。

DPO 之外:一整套偏好方法的字母湯

DPO 打開了一道閘門。研究者一旦看到可以把偏好學習摺進單一個直接損失,一整族的變體就接踵而至,每一個都在微調「要優化什麼」、「要朝什麼正則化」、或「要接受哪種回饋」。你不需要把這些縮寫都背下來,但看清楚這片空間的形狀會很有幫助,因為每一個都是針對某個特定弱點的刻意回應,而它們合在一起顯示了:DPO 是一個起點,而非最終定論。

  1. IPO 修剪掉一個過擬合的習慣。研究者發現,當一個偏好看起來幾乎是板上釘釘時,DPO 可能會推得太用力,把模型逼向極端;IPO(identity preference optimization)重塑了目標函數,使它不會那樣失控暴衝。
  2. KTO 拿掉了「成對」的需求。KTO(取名自心理學家 Kahneman 與 Tversky)不靠「A 比 B 好」,而是從對單一答案的一個讚或一個倒讚來學習,而這正是真實產品大量、廉價蒐集到的那種訊號。
  3. ORPO 與 SimPO 試圖拿掉參考模型。兩者都想把凍結的基礎模型從損失裡移除:ORPO 把指令微調與偏好合併成一個階段,SimPO 則改用一個經長度正規化的平均值來替答案打分,進一步省下記憶體與步驟。
  4. 線上與迭代式 DPO 補上「新鮮度」的缺口。樸素的 DPO 從一份固定資料集學習;迭代版本則反覆產生新答案、讓一個裁判模型(又是 RLAIF)替它們標註,再重新訓練,找回一些 PPO 本就免費享有的「即時回饋」。
  5. DPO-Positive 修補了一個有記錄的怪癖。樸素的 DPO 有時連「被偏好答案」的機率也一起調低(它只需要把「被拒絕答案」壓得更低就行);DPOP 加上一項,防止勝出答案的機率塌掉。

退一步看,這個家族的相似性就一目了然。它們每一個都仍然是偏好學習,只是穿了一件略有不同的損失外衣,仍然立足於同樣的比較資料與同樣的 Bradley-Terry 直覺,仍然套著某種牽繩,免得模型走丟。把它們和一個完全繞過訓練的方法對照一下會很有意思:best-of-n 取樣——它完全不動權重,只是在使用時產生好幾個答案、留下最好的那個。DPO 把偏好一次烤進模型裡;best-of-n 則在每一次查詢時都付出代價。同時掌握這道取捨的兩端,正是流暢讀懂這個領域的一部分。

更簡單不等於更安全:誤解與陷阱

最誘人的誤解,是以為刪掉獎勵模型,DPO 就逃過了那個纏著 RLHF 不放的代理問題。並沒有。獎勵沒有消失;它變成了隱含的,藏在策略自己的機率裡,正如「偷偷就是獎勵模型」這個說法所點明的。一個隱含的代理仍然是代理,仍然會被過度優化。事實上,Rafailov 等人 2024 年的一項研究,量測了這些直接方法裡的獎勵過度優化,發現了那條熟悉的駝峰曲線:你推得越用力,品質先升後降——和先前一樣的古德哈特動態,只是換了件衣服。簡單買到的是便利,不是免疫。

第二個誤解,是以為 DPO 在某種深層意義上「擺脫了強化學習」。它移除了明確的 RL 迴圈,這是實打實的工程勝利,但它也悄悄改變了某件事。PPO 是「on-policy(同策略)」的:它在學習的當下,替模型自己產生的新鮮答案打分,所以它總能得到關於「自己目前在哪」的回饋。樸素的 DPO 則是「離線」的:它從一疊由別的模型產生的固定配對中學習,從不去看它的更新把自己推進了哪些新區域。這道缺口,正是迭代式與線上變體存在的原因,也是一個誠實的理由,說明 DPO 與線上強化學習在實務上可能表現不同,而不只是彼此在符號上的改寫。

第三個錯誤,和籠罩著整個 RLHF 的那個錯誤是同一個,而且原封不動地撐過了改用 DPO:以為一個這樣訓練出來的模型,已經習得了良好的價值觀。它習得的是行為——產出「像你資料集裡那些被偏好答案」的傾向。烤進那些比較裡的每一個偏誤都會搭便車跟來:對較長或較自信回覆的偏愛、標註者的文化傾向,以及朝向諂媚的拉力——也就是對使用者說他想聽的話。DPO 學起這些來,和 RLHF 一樣忠實,因為它就是用同一種資料訓練的。更便宜的對齊,不等於更真實的對齊。

仍有爭論之處:DPO 對 PPO,以及那鍋字母湯

最熱鬧的開放問題很直白:那個更簡單的方法,真的一樣好嗎?整個 2024 年,這在文獻裡成了一場真正的你來我往。一項有影響力的研究主張,一條調校得當的 PPO 式 RLHF 流水線能勝過 DPO,尤其在較難的推理與程式任務上、以及在與訓練配對不相似的輸入上,暗示那條離線捷徑把一些品質留在了桌上。辯護者則回應,DPO 用零頭般的成本與工程風險就達到了相當的品質,許多被報導的 PPO 勝績仰賴的是少有團隊負擔得起的重度調校,而迭代式與線上變體又補上了大半道缺口。誠實的現況是:尚無定論——哪個方法勝出,取決於任務、資料、算力預算,以及各自被調校得多仔細。

在這場基準小衝突底下,坐著一個更深、且真正未解的問題:純粹從一份固定的偏好集學習,是不是有根本性的限制?樂觀者指出,一個獨立的獎勵模型可以被重複使用、被集成、被探測弱點,這些都是隱含獎勵做不到的,而且同策略的探索對最棘手的行為可能很要緊——這些都暗示著獎勵模型本來在做一些有用的工作,我們不該太快把它丟掉。懷疑者則反駁,這些是工程上的摩擦,不是定律,而「直接方法加上一個刷新資料的裁判模型」就能找回大部分好處。請注意,這一切都不是靠單一個實驗就能定案的;就像你先前認識的縮放定律外推一樣,它是一個仍在被測繪的經驗模式。

最後,對於那鍋字母湯本身,也有著健康的分歧。源源不絕的新「*PO」方法,究竟是真正的概念進展,還是有一部分是在擁擠的排行榜上的競速,把微小而脆弱的進步過度慶祝了?兩者可以同時為真。謹慎的讀法,也是一個學習者的好習慣,是把每一個新方法都當成「在特定基準上解決了某個特定弱點」的假設,把頭條數字握鬆,並在相信任何一個方法成了新的預設之前,先觀望它有沒有被獨立重現。沒有爭議的是那幅更大的圖景:這些方法讓偏好對齊變得遠為人人可及,卻把這個領域核心的代理問題,原封不動地留在它們發現它的地方。

這一階走到了哪裡

把整個這一階拉遠來看,一條單一的弧線就清晰起來。我們從把模糊的人類願望轉成成對比較、再轉成一個獎勵模型開始;我們讓那個獎勵跑過完整的 RLHF 與 PPO 流水線;我們看著它被獎勵入侵、過度優化與古德哈特鑽了漏洞;我們用 RLAIF 與憲法式 AI 把回饋本身擴大規模;如今,我們又把整套裝置摺成了單一個直接損失。貫穿其中的,是這一切都是偏好學習,而這一切都同時繼承了「從人類(或 AI 裁判)的偏好中學習」這件事的力量,以及它那道代理形狀的限制。

這道限制同時也是一塊路標。如果這一階裡的每一個方法塑造的都是行為、而非觸及底下的目標,那麼自然而然的下一個問題就是:我們能不能往一個訓練好的模型裡面看,真正讀出它學到了什麼,而不只是從外部評斷它?那就是可解釋性的工作,也是下一階的焦點,在那裡,這個領域試著打開黑盒子,檢查我們訓練出來的對齊是真的在那裡、還是只是看起來在。你離開這一階時,已經知道今天的助理是怎麼被對齊的、為什麼對齊它們的訊號會被鑽漏洞,以及為什麼這份菜單上最簡單的方法,對實務工作者是一份實在的禮物,卻不是那個更深問題的解答。