從 RLHF 到 DPO:不訓練 reward model,直接用偏好資料對齊生成模型
guidance 讓樣本符合條件,但符合條件不等於符合人的偏好。對齊的標準做法 RLHF 分三段:監督式微調、訓練一個 reward model、再用強化學習最大化 reward 並用 KL 拉住模型。DPO 發現 KL 正則化的最佳策略有閉式解,反過來就能把「策略對參考模型的 log 比值」當成一個隱含的 reward;代進 Bradley–Terry 模型,整個 RLHF 變成一個在偏好對上的 logistic 損失。diffusion model 的樣本概似算不動,所以 Diffusion-DPO 改在整條去噪路徑上定義 reward,再用兩次 Jensen 不等式和前向過程的後驗,把損失化成「贏家的去噪誤差比參考模型降得比輸家多」的單步形式。這一頁也收尾第 8 章。
讀完這頁你應該能夠
- 說出 RLHF 的三個階段和它的三個缺點。
- 寫出 reward model 的 Bradley–Terry 損失,說明它為什麼只看分數差,以及它等於標籤與預測勝率之間的 KL。
- 推出 KL 正則化目標的閉式解 \(\pi^*\propto\pi_{\text{ref}}e^{r/\beta}\),說明 \(\beta\) 的作用,並由它定義隱含 reward、推出 DPO 損失。
- 說明 DPO 為什麼不能直接用在 diffusion model 上,以及 Diffusion-DPO 怎麼一步一步把路徑層級的損失化成單步的 \(\bm\epsilon\)-MSE 差。
前置知識
- B21 第 2 節最後:偏好傾斜 \(\widetilde p_0\propto p_0(\mathbf x_0\mid\mathbf c)\exp(\lambda_{\text{pref}}r)\) 的預告。這一頁說明它就是 KL 正則化問題的解,\(\lambda_{\text{pref}}=1/\beta\)。
- B04:DDPM 的反向馬可夫鏈、前向後驗 \(p(\mathbf x_{t-1}\mid\mathbf x_t,\mathbf x_0)\),以及「兩個同變異數高斯的 KL = 平均值差的平方」怎麼變成 \(\bm\epsilon\)-MSE。
- KL 散度、交叉熵 = 熵 + KL、Jensen 不等式:補充課 A。
「書 §」標出原文位置。灰框「轉述者補充」是書裡沒有的內容;藍框「推導」展開書中省略的步驟。
01為什麼要繞開 RLHF書 §8.5 開頭、§8.5.1
要讓生成模型符合人的意圖,主流的做法是基於人類回饋的強化學習(RLHF)。它有效,但是一個複雜、多階段、可能不穩定的流程。這一節介紹 Direct Preference Optimization(DPO;Rafailov et al. 2023):一個更精簡、更穩定的方法,達到同樣的目標,卻不需要明確的 reward 建模,也不需要強化學習。接著說明它怎麼延伸到 diffusion model,也就是 Diffusion-DPO(Wallace et al. 2024)。
RLHF 的三個階段
對齊的目標,是把一個預訓練的基礎模型(例如 SFT 模型)推向人比較喜歡的輸出。RLHF 分三段:
- 監督式微調(SFT):在「提示–回應」對上訓練基礎模型。
- Reward 建模(RM):在偏好資料上擬合一個模型。偏好資料由提示 \(\mathbf c\) 和一對回應組成:被偏好的「贏家」\(\mathbf x_w\) 和不被偏好的「輸家」\(\mathbf x_l\)。學到一個純量 \(r(\mathbf c,\mathbf x)\),使 \(r(\mathbf c,\mathbf x_w)>r(\mathbf c,\mathbf x_l)\)。
- RL 微調:用 PPO(Schulman et al. 2017)之類的演算法最佳化 SFT 模型(策略 \(\pi\);書的註腳:策略把一個提示或歷史(狀態)對應到回應或動作的分佈),最大化 \(r\) 的期望 reward,同時用 KL 懲罰讓 \(\pi\) 留在參考(SFT)分佈附近。
三個缺點
- 不穩定又昂貴:RL 階段是 on-policy 的,每次更新都要用目前的模型重新生成樣本。
- 要養好幾個大模型:SFT 模型、reward model,有時還有 value model,都要訓練和部署。
- 只最佳化代理:reward model 只是人類偏好的代理,它的缺陷可能被策略鑽漏洞。
DPO 把多階段的 RLHF 換成單一個監督式風格的步驟:不另外訓練 reward model、不跑 PPO,而是用一個簡單的 logistic 損失,直接讓策略去擬合偏好對,同時留在一個固定的參考模型附近。關鍵洞見是:KL 正則化的 RLHF 目標可以改寫,使「策略和參考模型之間的 log 概似比」扮演一個隱含的 reward。這保留了往參考策略的同一個正則化,又省掉昂貴的 rollout 和明確的 reward 建模。
接下來:第 2 節簡短回顧 RLHF 和它對大型 reward model、RL 微調的依賴;第 3 節介紹原本為語言模型提出的 DPO;第 4 節把它延伸到 diffusion model,得到 Diffusion-DPO。
02RLHF:Bradley–Terry 觀點書 §8.5.2
RLHF 簡介
RLHF 從一個學出來的評審開始:reward model \(r_{\bm\psi}\),替同一個提示 \(\mathbf c\) 的候選回應打一個純量的偏好分數。資料集 \(\mathcal D\) 由回應對 \((\tilde{\mathbf x},\mathbf x)\) 組成,附一個標籤 \(y\) 表示 \(\tilde{\mathbf x}\) 是否比 \(\mathbf x\) 好。標籤可以是二元的 \(y\in\{0,1\}\),也可以是彙整多位標註者得到的軟標籤 \(y\in[0,1]\)。訓練目標是一個簡單的 logistic 損失:
實務上,\(\mathcal D\) 裡的偏好對可以有各種來源:人工整理的回應、不同 checkpoint 的模型,或一個預訓練條件 diffusion model 的生成結果。標準的慣例是把它們存成有序的(贏家, 輸家)格式。這時直接取 \(y=1\),上式化成特例(\(\tilde{\mathbf x}=\mathbf x^w\)、\(\mathbf x=\mathbf x^l\)):
Bradley–Terry 觀點與 KL 的關係
標準的解讀是透過 Bradley–Terry(BT)模型(Bradley & Terry 1952),把兩個純量分數轉成一個勝率:
$$p_{r_{\bm\psi}}(\tilde{\mathbf x}\succ\mathbf x\mid\mathbf c):=\sigma\big(r_{\bm\psi}(\mathbf c,\tilde{\mathbf x})-r_{\bm\psi}(\mathbf c,\mathbf x)\big).$$這個表述凸顯兩個性質:(i) 只有分數的差有影響,所以 \(r_{\bm\psi}(\mathbf c,\cdot)\) 加上任何常數都不變;(ii) 損失會把預測的贏家分數推高到輸家之上。要直觀看 (ii),取一對、標籤 \(y\in\{0,1\}\),定義
$$\Delta r:=r_{\bm\psi}(\mathbf c,\tilde{\mathbf x})-r_{\bm\psi}(\mathbf c,\mathbf x),\qquad p:=\sigma(\Delta r).$$單一範例的 logistic 損失是 \(\ell=-\big[y\log p+(1-y)\log(1-p)\big]\),而
$$\frac{\partial\ell}{\partial\Delta r}=\sigma(\Delta r)-y.$$這個導數
sigmoid 滿足 \(\sigma'(u)=\sigma(u)(1-\sigma(u))\),所以 \(\frac{d}{du}\log\sigma(u)=1-\sigma(u)\)、\(\frac{d}{du}\log(1-\sigma(u))=-\sigma(u)\)。於是 \(\frac{\partial\ell}{\partial\Delta r}=-\big[y(1-p)-(1-y)p\big]=p-y\)。
用步長 \(\eta>0\) 做梯度下降,分數差的更新是 \(\Delta r\leftarrow\Delta r-\eta\big(\sigma(\Delta r)-y\big)\)。所以 \(y=1\)(\(\tilde{\mathbf x}\) 贏)時 \(\sigma(\Delta r)-1\le0\),\(\Delta r\) 增加(贏家上升、輸家下降);\(y=0\) 時 \(\Delta r\) 減少。
\(\mathcal L_{\text{RM}}\) 的每一項,可以看成「觀察到的 Bernoulli 標籤」和「模型預測的勝率」之間的交叉熵:
$$-\big[y\log p_{r_{\bm\psi}}+(1-y)\log(1-p_{r_{\bm\psi}})\big]=\mathcal D_{\text{KL}}\big(\mathrm{Bern}(y)\,\big\|\,\mathrm{Bern}(p_{r_{\bm\psi}})\big)+\mathcal H\big(\mathrm{Bern}(y)\big),$$\(\mathcal H\) 是目標 Bernoulli 分佈的熵。對資料集平均得到
所以最小化 logistic 損失,等價於最小化「人類標籤的經驗 Bernoulli 分佈」和「模型預測的 Bernoulli 分佈」之間的 KL。二元標籤(\(y\in\{0,1\}\))時這個等價是精確的(熵為 0);軟標籤(\(y\in[0,1]\))時差一個熵常數。直觀地說,reward model 被訓練成調整它的勝率,直到和資料裡觀察到的人類勝率一致。
從這裡開始,書採用最常見的慣例:\(\mathcal D\) 存有序的對 \((\mathbf x^w,\mathbf x^l,\mathbf c)\sim\mathcal D\),標籤永遠是 \(y=1\),損失化成上面的有序形式。
KL 正則化的策略最佳化(reward 固定)
有了用有序損失訓練好的 reward \(r:=r_{\bm\psi^\times}\),以及一個條件預訓練 diffusion model \(p_{\bm\phi^\times}(\mathbf x\mid\mathbf c)\),RLHF 接著調整一個可學的策略 \(\pi_{\bm\theta}(\mathbf x\mid\mathbf c)\)(通常從 \(p_{\bm\phi^\times}\) 開始微調),推向 reward 較高的回應。同時用 KL 懲罰把策略拉在參考模型附近,參考模型取為預訓練 diffusion model \(\pi_{\text{ref}}(\mathbf x\mid\mathbf c):=p_{\bm\phi^\times}(\mathbf x\mid\mathbf c)\):
它把兩股力量寫得很明白:去找評審喜歡的樣本,但留在預訓練的參考模型附近。
書提醒:reward 的目標只用到有標籤的對,並不要求 \(\mathcal D\) 由參考模型(預訓練的條件 diffusion model)生成。雖然不是必要,從接近目標策略的模型收集偏好對,可以減少分佈偏移,讓學到的 reward 在它實際會被用到的區域更可靠。
總結:RLHF 分兩個階段:先最小化有序損失(等價於期望的二元 KL)擬合 reward \(r^*\),再解上面的 KL 正則化問題,得到策略 \(\pi^*\)。
03DPO書 §8.5.3
從 RLHF 過橋
給定擬合好的 reward \(r:=r_{\bm\psi^\times}\),KL 正則化的策略目標對每個提示 \(\mathbf c\) 都有一個簡單的閉式解,寫成能量模型的形式(Peters et al. 2010):
其中 \(\pi_{\text{ref}}(\mathbf x\mid\mathbf c):=p_{\bm\phi^\times}(\mathbf x\mid\mathbf c)\),\(Z(\mathbf c)\) 是讓 \(\int\pi^*(\mathbf x\mid\mathbf c)\,d\mathbf x=1\) 的配分函數。
閉式解的推導(書引用、沒有展開)
固定 \(\mathbf c\),省略它。對任何分佈 \(\pi\),把 \(-\beta\) 提出來再整理:
$$\mathbb E_\pi[r]-\beta\,\mathcal D_{\text{KL}}(\pi\|\pi_{\text{ref}})=-\beta\,\mathbb E_\pi\Big[\log\frac{\pi(\mathbf x)}{\pi_{\text{ref}}(\mathbf x)e^{r(\mathbf x)/\beta}}\Big]=-\beta\,\mathcal D_{\text{KL}}(\pi\|\pi^*)+\beta\log Z.$$第二個等號把分母寫成 \(Z\pi^*\):\(\log\frac{\pi}{Z\pi^*}=\log\frac{\pi}{\pi^*}-\log Z\)。\(\beta\log Z\) 和 \(\pi\) 無關,而 \(\mathcal D_{\text{KL}}(\pi\|\pi^*)\ge0\)、等號只在 \(\pi=\pi^*\) 成立,所以最大值在 \(\pi=\pi^*\),最大值是 \(\beta\log Z\)。這就是統計物理裡的 Gibbs 變分原理。
\(\beta\) 小時,\(\exp(r/\beta)\) 變得尖銳,\(\pi^*\) 集中在高 reward 的區域:reward 主導,策略離 \(\pi_{\text{ref}}\) 更遠、多樣性下降,訓練也可能變得不穩定或容易被鑽漏洞(reward hacking)。\(\beta\) 大時,\(\exp(r/\beta)\) 變平,\(\pi^*\) 留在 \(\pi_{\text{ref}}\) 附近:KL 項主導,更新保守,多樣性跟著參考模型,但 reward 的提升有限。
因為目標是直接微調策略、不另外訓練 reward model,上面的閉式解讓我們可以從任何策略定義一個隱含 reward。
反解閉式解,定義隱含 reward
閉式解可以直接反過來:對任何策略 \(\pi\)(支撐集包含在 \(\pi_{\text{ref}}\) 的支撐集裡),定義
那麼閉式解在 \(\pi\) 取代 \(\pi^*\) 時成立,也就是說,對 reward 函數 \(r_\pi\) 而言,\(\pi\) 就是 KL 正則化問題的最佳解。在這個意義上,\(r_\pi\) 是一個隱含的(由策略誘導的)reward:它只確定到一個依賴提示的常數 \(\beta\log Z(\mathbf c)\),而這個常數在任何成對比較(例如 BT 模型)裡都會消掉:
$$r_\pi(\mathbf c,\mathbf x_w)-r_\pi(\mathbf c,\mathbf x_l)=\beta\Big(\log\frac{\pi(\mathbf x_w\mid\mathbf c)}{\pi_{\text{ref}}(\mathbf x_w\mid\mathbf c)}-\log\frac{\pi(\mathbf x_l\mid\mathbf c)}{\pi_{\text{ref}}(\mathbf x_l\mid\mathbf c)}\Big).$$正是這個抵消讓常數對偏好學習無關緊要,直接導出建立在 log 機率差上的 DPO 損失。
為什麼這不是循環論證(轉述者補充)
反解本身是一個恆等式:任何 \(\pi\) 都是「它自己的隱含 reward」的最佳策略。重點在下一步:我們不去學 \(r\),而是把 reward model 的 BT 損失裡的 \(r\) 換成 \(r_{\pi_{\bm\theta}}\),直接對 \(\bm\theta\) 最小化。如果最佳化成功,\(r_{\pi_{\bm\theta}}\) 就是 BT 損失的最小化解(也就是 RLHF 第一階段會學到的 reward,差一個常數),而 \(\pi_{\bm\theta}\) 依構造就是這個 reward 的 KL 正則化最佳策略(第二階段的答案)。兩個階段被壓成一個。前提是策略的參數化夠有彈性,能表示所需的 log 比值;Demo A 在一個每個 \(\mathbf x\) 都有自己參數的離散例子裡驗證這件事。
DPO 的訓練損失
把隱含 reward 代入有序的 BT 損失,取同一個提示 \(\mathbf c\) 下的一個標註對 \((\mathbf x_w,\mathbf x_l)\)。贏家和輸家的常數 \(\log Z(\mathbf c)\) 互相抵消,得到建立在 log 機率差上的單一 logistic 損失:
用白話說:DPO 推高贏家相對於輸家的(溫度縮放過的)優勢,這個優勢用「相對參考模型,log 概似改進了多少」的差來量:
$$-\log\sigma\Big(\beta\big[\,\tfrac{\pi_{\bm\theta}}{\pi_{\text{ref}}}\text{ 在 }\mathbf x_w\text{ 與 }\mathbf x_l\text{ 的 log 比值差}\,\big]\Big).$$這在單一個穩定的、分類式的微調階段裡達成 RLHF 的目標,不需要訓練明確的 reward model。
DPO 的梯度在做什麼(轉述者補充)
記 \(u=\beta\big(\log\frac{\pi_{\bm\theta}(\mathbf x_w)}{\pi_{\text{ref}}(\mathbf x_w)}-\log\frac{\pi_{\bm\theta}(\mathbf x_l)}{\pi_{\text{ref}}(\mathbf x_l)}\big)\)。用上一節的導數,
$$\nabla_{\bm\theta}\big(-\log\sigma(u)\big)=-\beta\,\big(1-\sigma(u)\big)\Big(\nabla_{\bm\theta}\log\pi_{\bm\theta}(\mathbf x_w)-\nabla_{\bm\theta}\log\pi_{\bm\theta}(\mathbf x_l)\Big).$$所以每一步都在提高贏家的 log 概似、降低輸家的,權重是 \(1-\sigma(u)\):隱含 reward 已經把這一對排對、而且差距夠大時,權重趨近 0,這一對就不再推。KL 正則化沒有明寫在損失裡,而是藏在這個飽和的權重和 \(\pi_{\text{ref}}\) 的比值裡。
Demo ARLHF 和 DPO 走到同一個策略轉述者補充
一個離散的玩具:回應只有 16 種(\(x\) 軸上的 16 格),參考策略 \(\pi_{\text{ref}}\) 是兩個高斯混合的離散版(左邊一大團、右邊一小團)。人的真實偏好是 \(r_{\text{true}}(x)=2\tanh x\)(越右越好,但到右邊就飽和),標註者依 BT 模型 \(\sigma(r_{\text{true}}(x)-r_{\text{true}}(x'))\) 選贏家;回應對從 \(\pi_{\text{ref}}\) 抽。
- RLHF:先用有序 BT 損失擬合一個表格式的 reward \(r_{\bm\psi}\)(每格一個參數,Adam 3,000 步),再直接用閉式解 \(\pi_{\text{RLHF}}\propto\pi_{\text{ref}}e^{r_{\bm\psi}/\beta}\)。
- DPO:策略本身是表格式的 softmax(每格一個 logit,從 \(\log\pi_{\text{ref}}\) 開始),直接最小化 DPO 損失(Adam 3,000 步),完全不碰 reward。
- 對照:用真實 reward 的最佳策略 \(\pi^*_{\text{true}}\propto\pi_{\text{ref}}e^{r_{\text{true}}/\beta}\)。
瀏覽器實測(「真實目標」是 \(\mathbb E_\pi[r_{\text{true}}]-\beta\,\mathcal D_{\text{KL}}(\pi\|\pi_{\text{ref}})\),也就是 RLHF 真正想最大化、但沒辦法直接算的量;\(\pi^*_{\text{true}}\) 是它的最大值):
| 偏好對 | \(\beta\) | TV(DPO, RLHF) | TV(RLHF, \(\pi^*_{\text{true}}\)) | KL:RLHF / \(\pi^*_{\text{true}}\) | 真實目標:RLHF / \(\pi^*_{\text{true}}\) |
|---|---|---|---|---|---|
| 2,000 | 0.25 | \(1.5\times10^{-8}\) | 0.158 | 1.469 / 1.370 | 1.425 / 1.446 |
| 1 | \(4.3\times10^{-10}\) | 0.038 | 0.727 / 0.686 | 0.692 / 0.700 | |
| 4 | \(2.5\times10^{-7}\) | 0.013 | 0.079 / 0.070 | −0.004 / −0.002 | |
| 300 | 0.25 | \(8.3\times10^{-5}\) | 0.775 | 3.422 / 1.370 | 1.074 / 1.446 |
| 1 | \(6.3\times10^{-10}\) | 0.182 | 0.940 / 0.686 | 0.556 / 0.700 | |
| 4 | \(3.4\times10^{-4}\) | 0.039 | 0.082 / 0.070 | −0.033 / −0.002 |
(1) DPO 和 RLHF 走到同一個策略。每個設定下兩者的總變差距離(TV)都在 \(10^{-3}\) 以下,只剩最佳化沒有完全收斂的差距;上面第一張圖的藍色長條(DPO)和橘點(RLHF)重合,第二張圖裡 DPO 的隱含 reward \(\beta\log(\pi_{\bm\theta}/\pi_{\text{ref}})\) 和擬合的 reward 也疊在一起。這是因為策略每格都有自己的參數:DPO 損失把 \(r\) 換成隱含 reward 之後,和 reward model 的損失是同一個函數,最小化解也就相同。最右邊那格從沒出現在偏好對裡,兩種方法都讓它停在初始值(reward 0,比真實的 1.99 低得多)。(2) \(\beta\) 越小,reward model 的誤差被放得越大。2,000 對時,\(\beta=4\) 的策略和真實最佳策略只差 TV 0.013,\(\beta=0.25\) 時差 0.158。(3) 資料少時,策略去鑽 reward model 的漏洞。300 對、\(\beta=0.25\) 時,擬合的 reward 把 \(x\approx2.06\) 那格高估成 3.22(真實值 1.94,數值已平移到在 \(\pi_{\text{ref}}\) 下平均相同),策略把 94.3% 的質量放在那一格(真實最佳策略只放 16.8%),KL 是 3.42,真實最佳的 2.5 倍。它的 \(\mathbb E[r_{\text{true}}]\) 反而比較高(1.929 對 1.789),因為 reward 在右邊飽和、那一格本來就不差;但扣掉 KL 的真實目標從 1.446 掉到 1.074。這就是書說的「只最佳化代理,缺陷可能被鑽漏洞」,而且它對 RLHF 和 DPO 一樣成立:DPO 拿掉的是 reward model 的訓練階段,不是有限資料的問題。
04Diffusion-DPO書 §8.5.4
這一小節沿用上一節的策略記號:\(\pi_{\bm\theta}\) 和 \(\pi_{\text{ref}}\) 表示學習中和參考的 diffusion 策略,包括它們的路徑分佈和轉移分佈;\(p_t(\mathbf x_t\mid\mathbf x_0)\) 仍然表示固定的前向加噪過程。
為什麼直接套 DPO 會失敗
在 diffusion model 裡算樣本概似 \(\pi_{\bm\theta}(\mathbf x\mid\mathbf c)\),要用 ODE 求解時的瞬時變數變換公式(漂移的散度;見 B09 第 5 節),計算量很大。(書的註腳:在離散時間的 diffusion model,例如 DDPM,算 \(\pi_{\bm\theta}(\mathbf x_0\mid\mathbf c)\) 要對潛在的反向軌跡 \(\mathbf x_{1:T}\) 取邊際。)而且對整條取樣軌跡微分,可能遇到梯度消失或爆炸。為了避開這些問題,Diffusion-DPO 在路徑層級上操作。書以離散時間的 diffusion model(例如 DDPM)為例,連續時間的情形類似。
定義路徑上的隱含 reward
令軌跡 \(\mathbf x_{0:T}:=(\mathbf x_T,\dots,\mathbf x_0)\) 來自條件分佈為 \(\pi(\mathbf x_{t-1}\mid\mathbf x_t,\mathbf c)\) 的反向馬可夫鏈。\(\mathbf x_T\) 是雜訊最大的狀態,\(\mathbf x_0\) 是乾淨的輸出。
人的偏好定義在最終輸出上:\(r(\mathbf c,\mathbf x_0)\)。因為 \(\mathbf x_0\) 是每條 diffusion 軌跡的一部分,搬到路徑空間時 reward 本身不必改。有用的一步,是改成對整個反向過程做正則化。由 KL 的鏈鎖律,整條路徑分佈之間的 KL,至少和終點邊際之間的 KL 一樣大。這啟發了路徑層級的目標
這裡 \(\pi_{\bm\theta}(\cdot\mid\mathbf c)\)、\(\pi_{\text{ref}}(\cdot\mid\mathbf c)\) 表示對應的路徑分佈。reward 項不變,KL 懲罰現在還控制潛在的去噪軌跡偏離參考的程度。
KL 的鏈鎖律:路徑 KL ≥ 終點 KL
把路徑分佈拆成「終點」乘「給定終點的其餘路徑」:\(\pi(\mathbf x_{0:T})=\pi(\mathbf x_0)\,\pi(\mathbf x_{1:T}\mid\mathbf x_0)\)。對兩個路徑分佈取 log 比值再對 \(\pi_{\bm\theta}\) 取期望:
$$\mathcal D_{\text{KL}}\big(\pi_{\bm\theta}(\mathbf x_{0:T})\|\pi_{\text{ref}}(\mathbf x_{0:T})\big)=\mathcal D_{\text{KL}}\big(\pi_{\bm\theta}(\mathbf x_0)\|\pi_{\text{ref}}(\mathbf x_0)\big)+\mathbb E_{\mathbf x_0\sim\pi_{\bm\theta}}\Big[\mathcal D_{\text{KL}}\big(\pi_{\bm\theta}(\mathbf x_{1:T}\mid\mathbf x_0)\|\pi_{\text{ref}}(\mathbf x_{1:T}\mid\mathbf x_0)\big)\Big].$$第二項非負,所以路徑 KL ≥ 終點 KL。換句話說,路徑層級的懲罰比原本的終點懲罰更嚴:它不只要終點分佈接近,還要「怎麼走到終點」也接近。(條件省略了 \(\mathbf c\)。)
在分佈層級上,假設配分函數有限,對每個提示 \(\mathbf c\) 的最佳解有能量模型的形式
$$\pi^*(\mathbf x_{0:T}\mid\mathbf c)=\frac{1}{Z(\mathbf c)}\,\pi_{\text{ref}}(\mathbf x_{0:T}\mid\mathbf c)\exp\big(r(\mathbf c,\mathbf x_0)/\beta\big).$$(推導和第 3 節完全一樣,只是把 \(\mathbf x\) 換成整條路徑。)和一般的 DPO 一樣,可以反解這個關係,定義任何策略 \(\pi\) 誘導的隱含路徑 reward:
$$R_\pi(\mathbf c,\mathbf x_{0:T}):=\beta\log\frac{\pi(\mathbf x_{0:T}\mid\mathbf c)}{\pi_{\text{ref}}(\mathbf x_{0:T}\mid\mathbf c)}+\beta\log Z(\mathbf c).$$在路徑最佳解,\(R_{\pi^*}(\mathbf c,\mathbf x_{0:T})=r(\mathbf c,\mathbf x_0)\)。但對一般的策略,\(R_\pi\) 也可能依賴潛在軌跡。因為偏好資料只比較乾淨的終點,書因此對每個終點,把隱含路徑 reward 在對應的軌跡上取平均。
路徑最佳解的終點邊際(轉述者補充)
對 \(\pi^*(\mathbf x_{0:T})\) 把 \(\mathbf x_{1:T}\) 積掉:\(\pi^*(\mathbf x_0)=\frac1Z\pi_{\text{ref}}(\mathbf x_0)e^{r(\mathbf x_0)/\beta}\int\pi_{\text{ref}}(\mathbf x_{1:T}\mid\mathbf x_0)\,d\mathbf x_{1:T}=\frac1Z\pi_{\text{ref}}(\mathbf x_0)e^{r(\mathbf x_0)/\beta}\)。所以終點的邊際和第 3 節的 \(\pi^*\) 完全一樣,而且給定終點時,路徑最佳解的其餘軌跡就是參考模型的 \(\pi_{\text{ref}}(\mathbf x_{1:T}\mid\mathbf x_0)\)。換了更嚴的懲罰,最佳的終點分佈卻沒變:因為 reward 只看終點,最佳解沒有理由去改變中間怎麼走。
從路徑隱含 reward 到 DPO
對同一個提示 \(\mathbf c\) 下的一個標註終點對 \((\mathbf x_0^w,\mathbf x_0^l)\),比較兩者隱含路徑 reward 的條件平均,得到 BT 的差距:
這裡的期望 \(\mathbb E_{\mathbf x_{1:T}\sim\pi_{\bm\theta}(\cdot\mid\mathbf x_0,\mathbf c)}[\cdot]\) 的意思是:給定資料集裡一個固定的終點 \(\mathbf x_0\)(例如贏家 \(\mathbf x_0^w\)),對模型誘導的條件路徑分佈取期望。這是反向軌跡的後驗:在核 \(\pi_{\bm\theta}(\mathbf x_{t-1}\mid\mathbf x_t,\mathbf c)\) 下,所有可能走到 \(\mathbf x_0\) 的潛在去噪軌跡 \(\mathbf x_{1:T}\)。因為這些中間狀態觀察不到,就對它們全部取平均。
為什麼這個損失不實用
- 以終點為條件,得到算不動的路徑後驗。\(\mathbb E_{\pi_{\bm\theta}(\mathbf x_{1:T}\mid\mathbf x_0,\mathbf c)}[\cdot]\) 是在「必須走到 \(\mathbf x_0\)」的反向路徑上平均,但取樣器跑 \(\mathbf x_T\to\cdots\to\mathbf x_0\) 時沒有這個限制。以終點為條件會產生一個 diffusion bridge 的後驗,一般沒有閉式,取樣也很貴。
- 巢狀、和 \(\bm\theta\) 耦合的期望。損失 \(-\log\sigma(\Delta R(\mathbf c;\bm\theta))\) 裡的 \(\Delta R=\mathbb E_{\text{路徑}\mid\mathbf x_0^w,\mathbf c}[R_{\pi_{\bm\theta}}]-\mathbb E_{\text{路徑}\mid\mathbf x_0^l,\mathbf c}[R_{\pi_{\bm\theta}}]\),路徑的聯合分佈和被積分的 \(R_{\pi_{\bm\theta}}\) 都依賴 \(\bm\theta\)。所以 \(\nabla_{\bm\theta}\) 必須對取樣分佈本身微分,導致 REINFORCE 或 pathwise 的耦合,梯度變異數很高。
- 長鏈、大量加總、昂貴的反向傳播。在 \(R_{\pi_{\bm\theta}}(\mathbf c,\mathbf x_{0:T})\) 裡算 \(\beta\big[\log\pi_{\bm\theta}(\mathbf x_{0:T}\mid\mathbf c)-\log\pi_{\text{ref}}(\mathbf x_{0:T}\mid\mathbf c)\big]\),需要 \(\mathcal O(T)\) 個逐步的 log 密度,\(T\sim10^2\)–\(10^3\),而且策略和參考、贏家和輸家的路徑都要算。對這些隨機鏈(或 bridge 取樣器)反向傳播,記憶體和計算量都很大,也可能不穩定;每一對要取很多樣本、再對所有三元組重複,訓練就超出實際的預算。
走向可算的代理損失
為了讓它可以算,書用一個關鍵的數學觀察:利用 diffusion model 的性質加上 Jensen 不等式,可以最佳化這個損失的一個可算上界。問題從「算整條路徑的概似」變成「對路徑裡個別的單步轉移取期望」。
第一次 Jensen。因為 \(-\log\sigma(\cdot)\) 是凸函數,把內層期望移到非線性函數外面,得到上界:
$$\mathcal L_{\text{Diff-DPO}}(\bm\theta;\pi_{\text{ref}})\le-\mathbb E_{(\mathbf c,\mathbf x_0^w,\mathbf x_0^l)\sim\mathcal D}\;\mathbb E_{\substack{\mathbf x^w_{1:T}\sim\pi_{\bm\theta}(\cdot\mid\mathbf x_0^w,\mathbf c)\\\mathbf x^l_{1:T}\sim\pi_{\bm\theta}(\cdot\mid\mathbf x_0^l,\mathbf c)}}\Big[\log\sigma\Big(R_{\pi_{\bm\theta}}(\mathbf c,\mathbf x^w_{0:T})-R_{\pi_{\bm\theta}}(\mathbf c,\mathbf x^l_{0:T})\Big)\Big].$$\(-\log\sigma\) 為什麼是凸的,以及 Jensen 怎麼用
\(f(u)=-\log\sigma(u)=\log(1+e^{-u})\)。\(f'(u)=\sigma(u)-1\)、\(f''(u)=\sigma(u)(1-\sigma(u))>0\),所以 \(f\) 凸。Jensen:\(f(\mathbb E[U])\le\mathbb E[f(U)]\)。取 \(U=R^w-R^l\),兩條路徑獨立地從各自的後驗抽,\(\mathbb E[U]=\mathbb E[R^w]-\mathbb E[R^l]=\Delta R\),所以 \(-\log\sigma(\Delta R)\le\mathbb E[-\log\sigma(R^w-R^l)]\)。再對資料取期望就是上式。
用隱含 reward 的恆等式 \(R_{\pi_{\bm\theta}}=\beta\log\frac{\pi_{\bm\theta}}{\pi_{\text{ref}}}+\beta\log Z(\mathbf c)\),並讓常數在贏家和輸家之間抵消,上界變成
可算的代理(逐步形式)
接著利用反向過程的馬可夫性質,把上界拆開:路徑層級的偏好變成逐步貢獻的總和,算不動的路徑損失變成可算的單步估計量。結果是一個 DPO 風格的 log-sigmoid 損失,內層的差距化成 DSM 風格的 MSE 差。具體地,反向鏈滿足
$$\pi_{\bm\theta}(\mathbf x_{0:T}\mid\mathbf c)=\pi_{\bm\theta}(\mathbf x_T\mid\mathbf c)\prod_{t=1}^T\pi_{\bm\theta}(\mathbf x_{t-1}\mid\mathbf x_t,\mathbf c),\qquad\pi_{\text{ref}}(\mathbf x_{0:T}\mid\mathbf c)=\pi_{\text{ref}}(\mathbf x_T\mid\mathbf c)\prod_{t=1}^T\pi_{\text{ref}}(\mathbf x_{t-1}\mid\mathbf x_t,\mathbf c).$$所以路徑比值是先驗比值乘上逐步比值。如果兩個模型在時刻 \(T\) 的先驗相同,\(\pi_{\bm\theta}(\mathbf x_T\mid\mathbf c)=\pi_{\text{ref}}(\mathbf x_T\mid\mathbf c)\),第一個因子是 1,取 log 得到
$$\log\frac{\pi_{\bm\theta}(\mathbf x_{0:T}\mid\mathbf c)}{\pi_{\text{ref}}(\mathbf x_{0:T}\mid\mathbf c)}=\sum_{t=1}^T\log\frac{\pi_{\bm\theta}(\mathbf x_{t-1}\mid\mathbf x_t,\mathbf c)}{\pi_{\text{ref}}(\mathbf x_{t-1}\mid\mathbf x_t,\mathbf c)}.$$因此上界可以寫成 \(\mathcal L_{\text{Diff-DPO}}\le-\mathbb E\big[\log\sigma\big(\beta\sum_{t=1}^T\Delta_t\big)\big]\),每一步的貢獻是
$$\Delta_t=\log\frac{\pi_{\bm\theta}(\mathbf x^w_{t-1}\mid\mathbf x^w_t,\mathbf c)}{\pi_{\text{ref}}(\mathbf x^w_{t-1}\mid\mathbf x^w_t,\mathbf c)}-\log\frac{\pi_{\bm\theta}(\mathbf x^l_{t-1}\mid\mathbf x^l_t,\mathbf c)}{\pi_{\text{ref}}(\mathbf x^l_{t-1}\mid\mathbf x^l_t,\mathbf c)}.$$第二次 Jensen。要把對時間步的總和化成單一個隨機選的轉移,注意 \(\beta\sum_{s=1}^T\Delta_s=\mathbb E_{t\sim\mathcal U\{1,\dots,T\}}[\beta T\Delta_t]\)。因為 \(-\log\sigma(\cdot)\) 是凸的,Jensen 不等式在加上原有的外層期望之後給出
$$\mathcal L_{\text{Diff-DPO}}(\bm\theta;\pi_{\text{ref}})\le-\mathbb E\Big[\log\sigma\big(\beta T\Delta_t\big)\Big],$$期望對 \((\mathbf c,\mathbf x_0^w,\mathbf x_0^l)\sim\mathcal D\)、\(t\sim\mathcal U\{1,\dots,T\}\),以及 \(\mathbf x_{t-1:t}^w\sim\pi_{\bm\theta}(\cdot\mid\mathbf x_0^w,\mathbf c)\)、\(\mathbf x_{t-1:t}^l\sim\pi_{\bm\theta}(\cdot\mid\mathbf x_0^l,\mathbf c)\) 取。現在上界只依賴一個轉移,但抽這些「以終點為條件」的轉移對仍然算不動。
換成前向過程的後驗
依照 Diffusion-DPO,用固定的前向加噪過程,近似那個算不動的模型誘導條件路徑。對每個乾淨的終點 \(\mathbf x_0\),先抽 \(\mathbf x_t\sim p_t(\mathbf x_t\mid\mathbf x_0)\)。給定 \((\mathbf x_0,\mathbf x_t)\),前向過程誘導一個可算的後驗 \(p(\mathbf x_{t-1}\mid\mathbf x_t,\mathbf x_0)\)。在這個後驗下平均反向轉移的 log 比值:
$$\mathbb E_{p(\mathbf x_{t-1}\mid\mathbf x_t,\mathbf x_0)}\Big[\log\frac{\pi_{\bm\theta}(\mathbf x_{t-1}\mid\mathbf x_t,\mathbf c)}{\pi_{\text{ref}}(\mathbf x_{t-1}\mid\mathbf x_t,\mathbf c)}\Big]=-\mathcal D_{\text{KL}}\big(p(\mathbf x_{t-1}\mid\mathbf x_t,\mathbf x_0)\,\big\|\,\pi_{\bm\theta}(\mathbf x_{t-1}\mid\mathbf x_t,\mathbf c)\big)+\mathcal D_{\text{KL}}\big(p(\mathbf x_{t-1}\mid\mathbf x_t,\mathbf x_0)\,\big\|\,\pi_{\text{ref}}(\mathbf x_{t-1}\mid\mathbf x_t,\mathbf c)\big).$$這個等式
記 \(q=p(\mathbf x_{t-1}\mid\mathbf x_t,\mathbf x_0)\)。在 log 比值裡加減 \(\log q\):\(\log\frac{\pi_{\bm\theta}}{\pi_{\text{ref}}}=\log\frac{q}{\pi_{\text{ref}}}-\log\frac{q}{\pi_{\bm\theta}}\)。對 \(q\) 取期望,兩項分別是 \(\mathcal D_{\text{KL}}(q\|\pi_{\text{ref}})\) 和 \(\mathcal D_{\text{KL}}(q\|\pi_{\bm\theta})\)。
對反向變異數相同、事先規定好的高斯反向核,這些 KL 化成加權的去噪回歸誤差。在 \(\bm\epsilon\)-prediction 下,
其中 \(\mathbf x_t=\alpha_t\mathbf x_0+\sigma_t\bm\epsilon\)、\(\bm\epsilon\sim\mathcal N(\mathbf 0,\mathbf I)\),\(\lambda_t>0\) 收集了依時程而定的權重因子。
KL 怎麼變成 \(\bm\epsilon\)-MSE,以及 \(\lambda_t\) 是什麼
這裡用 B04 的 DDPM 記號:每步的雜訊 \(\beta_t\)(這是 DDPM 的 \(\beta_t\),不是 DPO 的 \(\beta\))、\(\alpha_t^{\text{DDPM}}=1-\beta_t\)、\(\bar\alpha_t=\prod_{s\le t}\alpha_s^{\text{DDPM}}\),所以書的 \(\alpha_t=\sqrt{\bar\alpha_t}\)、\(\sigma_t=\sqrt{1-\bar\alpha_t}\)。前向後驗是高斯 \(q=\mathcal N(\tilde{\bm\mu}_t,\tilde\sigma_t^2\mathbf I)\);兩個反向核是 \(\mathcal N(\bm\mu_{\bullet},s_t^2\mathbf I)\),變異數 \(s_t^2\) 相同、事先規定。
同一個分佈對兩個「變異數相同的高斯」取 KL,只有平均值那一項不同:
$$\mathcal D_{\text{KL}}\big(q\|\mathcal N(\bm\mu,s_t^2\mathbf I)\big)=\frac{\|\tilde{\bm\mu}_t-\bm\mu\|^2}{2s_t^2}+(\text{只依賴 }\tilde\sigma_t,s_t\text{ 的常數}).$$常數在兩個 KL 相減時消掉。\(\bm\epsilon\)-參數化寫成 \(\bm\mu_\bullet=\frac{1}{\sqrt{\alpha_t^{\text{DDPM}}}}\big(\mathbf x_t-\frac{\beta_t}{\sqrt{1-\bar\alpha_t}}\hat{\bm\epsilon}_\bullet\big)\),而 \(\tilde{\bm\mu}_t\) 可以寫成同樣的式子、把 \(\hat{\bm\epsilon}\) 換成真正的 \(\bm\epsilon\)(B04)。所以
$$\|\tilde{\bm\mu}_t-\bm\mu_\bullet\|^2=\frac{\beta_t^2}{\alpha_t^{\text{DDPM}}(1-\bar\alpha_t)}\|\hat{\bm\epsilon}_\bullet-\bm\epsilon\|^2,\qquad\lambda_t=\frac{\beta_t^2}{2s_t^2\,\alpha_t^{\text{DDPM}}(1-\bar\alpha_t)}.$$代入 \(-\mathcal D_{\text{KL}}(q\|\pi_{\bm\theta})+\mathcal D_{\text{KL}}(q\|\pi_{\text{ref}})\) 就是上面的式子。這和 B04 從 ELBO 推出 DDPM 損失的那一步完全相同。
為了記號簡單,對任何加噪樣本 \((\mathbf x_t,\bm\epsilon)\) 定義
$$\Delta\mathrm{MSE}(\mathbf x_t;\bm\epsilon):=\big\|\hat{\bm\epsilon}_{\bm\theta}(\mathbf x_t,t,\mathbf c)-\bm\epsilon\big\|^2-\big\|\hat{\bm\epsilon}_{\text{ref}}(\mathbf x_t,t,\mathbf c)-\bm\epsilon\big\|^2.$$這給出實用的單步 Diffusion-DPO 代理損失:
實務上也可以讓兩者共用雜訊 \(\bm\epsilon^w=\bm\epsilon^l\),作為減少變異數的變體;這不改變目標整體的 DPO 形式,只稍微改變隨機估計量。
直觀地說,最小化 \(\tilde{\mathcal L}_{\text{Diff-DPO}}\) 會加大「以參考模型為基準、贏家勝過輸家」的差距。等價地,它鼓勵模型在贏家上降低的去噪誤差比在輸家上多,兩者都以凍結的參考模型為基準。參考模型不提供直接的梯度項,但它留在 \(\log\sigma(\cdot)\) 非線性裡面的差距中,所以仍然決定 DPO 風格的逐範例權重。
這一路做了哪些近似(轉述者補充)
- 兩次 Jensen:都是上界,最小化上界不保證最小化原本的損失。
- 先驗相同:\(\pi_{\bm\theta}(\mathbf x_T\mid\mathbf c)=\pi_{\text{ref}}(\mathbf x_T\mid\mathbf c)\),對標準 diffusion 通常成立(兩者都用同一個高斯先驗)。
- 把模型誘導的路徑後驗 \(\pi_{\bm\theta}(\mathbf x_{t-1},\mathbf x_t\mid\mathbf x_0,\mathbf c)\) 換成前向過程的 \(p_t(\mathbf x_t\mid\mathbf x_0)\,p(\mathbf x_{t-1}\mid\mathbf x_t,\mathbf x_0)\):這不是不等式,是真正的近似。它在模型和前向過程一致時是對的(diffusion 訓練好時,反向鏈的後驗就接近前向過程),但 \(\pi_{\bm\theta}\) 被推離參考時就越來越不準。
所以 \(\tilde{\mathcal L}_{\text{Diff-DPO}}\) 的最小化解不必是 \(\pi^*\propto\pi_{\text{ref}}e^{r/\beta}\)。Demo B 量到:微調後的分佈確實往贏家那邊移,但移多少由「\(\beta T\lambda_t\)」這個整體係數和訓練長度決定,不能直接讀成某個 \(\beta\) 的 \(\pi^*\)。
Demo B用 Diffusion-DPO 微調一個 diffusion model轉述者補充
一維的參考模型:資料 \(0.65\,\mathcal N(-1,0.5^2)+0.35\,\mathcal N(1.2,0.4^2)\),DDPM 式 VP 時程;參考的 \(\hat{\bm\epsilon}_{\text{ref}}\) 用精確的(高斯混合可以算),所以不必先訓練。偏好和 Demo A 一樣:\(r_{\text{true}}(x)=2\tanh x\),2,000 個從 \(\pi_{\text{ref}}\) 抽的回應對依 BT 模型標註。可學的模型是 \(\hat{\bm\epsilon}_{\bm\theta}=\hat{\bm\epsilon}_{\text{ref}}+\big(\text{MLP}_{\bm\theta}-\text{MLP}_{\bm\theta_0}\big)\):一個 MLP(兩層、每層 32 個神經元)減去它自己凍結的初始副本,所以一開始 \(\hat{\bm\epsilon}_{\bm\theta}=\hat{\bm\epsilon}_{\text{ref}}\) 完全相同。用上面的代理損失訓練 1,500 步、每批 64 對(\(t\) 連續均勻、贏家和輸家各自抽雜訊);整體係數 \(k=\beta T\lambda_t\) 取常數。取樣用 PF-ODE(RK4 60 步、600 個起點)。
瀏覽器實測(每個 \(k\) 訓練加取樣約 3 秒;參考模型用同一個取樣器的平均是 −0.309,真值 −0.23,差距是 600 個樣本的抽樣誤差;\(\mathbb E[r_{\text{true}}]\) 是 −0.422,\(x>0.1\) 的比例 33.5%):
| \(k=\beta T\lambda_t\) | 平均 | \(\mathbb E[r_{\text{true}}]\) | \(x>0.1\) | 最後的排對比例 |
|---|---|---|---|---|
| 20 | 2.008 | 1.846 | 98.0% | 68.4% |
| 100 | 0.382 | 0.396 | 58.2% | 67.3% |
| 500 | −0.154 | −0.241 | 38.7% | 66.0% |
(1) 只用偏好對和一個凍結的參考模型,沒有 reward model、沒有從微調中的模型取樣,代理損失就把生成的分佈往贏家那邊推:三個設定的 \(\mathbb E[r_{\text{true}}]\) 都比參考模型的 −0.422 高。(2) \(k\) 扮演 \(\beta\) 的角色:\(k=500\) 時只微微右移(右邊的比例從 33.5% 到 38.7%),\(k=20\) 時幾乎所有樣本都到了右邊。原因可以從梯度看:損失的權重是 \(1-\sigma(\text{差距})\),\(k\) 大時差距很快就大到讓 sigmoid 飽和,那一對就不再推;\(k\) 小時一直推不飽和,模型就一直走。(3) \(k=20\) 時樣本的平均到了 2.01,比參考模型右邊那一團的中心 1.2 還遠,許多樣本落在 \(x>2\),也就是那一團 2 個標準差以外、\(\pi_{\text{ref}}\) 質量很少的地方。這是上面補充框說的:代理損失的最小化解不必是某個 \(\beta\) 的 \(\pi^*\),把模型推離參考越遠,「用前向後驗代替模型的路徑後驗」這一步就越不準。在 Node 原型裡,\(k=500\) 的結果訓練 750 步和 3,000 步幾乎一樣(已收斂),\(k=20\) 的平均則在 1.7 到 2.0 之間隨訓練長度變動。(4) 訓練中「差距 > 0」的比例很快升到約 66–68% 就停住:這是在雜訊樣本上的單步估計,加上偏好標籤本身依 BT 模型帶有隨機性,所以不會接近 100%。
05第 8 章結語書 §8.6
這一章把焦點從基礎原理移到可控生成的實務挑戰。我們建立了一個以條件 score 的貝氏分解為基礎的統一 guidance 框架,它把生成過程俐落地拆成一個無條件方向和一個引導項。
這個原則表現在好幾個強大的技術裡:需要專門訓練的方法,例如用外部分類器的 classifier guidance(CG),以及在單一模型裡同時學條件和無條件 score、更有效率的 classifier-free guidance(CFG);還有彈性的 training-free guidance,從特定任務的損失定義一個代理 guidance 位勢,在推論時引導預訓練模型,應用從藝術控制到解逆問題,都不需要重新訓練。
在單純的條件化之外,書也深入了把模型輸出和人類偏好對齊這個更細緻的任務。回顧標準但複雜的 RLHF 流程之後,介紹了 DPO 和它在 diffusion 上的新改編 Diffusion-DPO,作為更直接、更穩定的替代:直接從偏好資料推出損失,俐落地繞開明確的 reward model 和強化學習。
這些技術組成了一套引導生成過程的工具。但有一個重大的實務障礙還沒處理:反覆取樣本身的計算成本和延遲。處理完「生成什麼」之後,接著要問同樣重要的「能生成多快」。下一章直接處理這個挑戰:
- 利用「取樣等價於解 ODE」的洞見,探討能大幅減少所需步數的精巧數值解法。
- 研究一系列有影響力的方法,包括 DDIM、DEIS 和 DPM-Solver 家族,它們把取樣加速了好幾個數量級,讓 diffusion model 實用得多。