1. 什么是DPO?
DPO(Direct Preference Optimization)是一種用于對齊大語言模型(LLMs)的新型方法,旨在高效地將人類偏好融入模型訓練中。它提供了一種替代強化學習(如 RLHF, Reinforcement Learning with Human Feedback)的方式,能夠直接優化偏好數據,而無需顯式地引入獎勵模型(Reward Model)或策略梯度方法。
所以DPO到底是什么?
我們先看看訓練DPO需要的數據集形式:
{"prompt": "What are the benefits of meditation?","chosen": "Meditation helps reduce stress, improve focus, and enhance emotional well-being.","rejected": "Meditation is sitting quietly for a while, but it may not help everyone."
}
給一個提示詞,給兩個選擇,chosen是人選的,rejected是人不選的,現在希望LLM也能像人一樣選對,這就是對齊人類偏好。
之前的解決方案是RLHF,但是RLHF需要用到PPO算法,而PPO算法需要訓練策略網絡和價值網絡,訓練成本過高,而PPO是一種成本低很多,而且很簡單的方式。
2. 具體算法
2.1 KL散度
先上公式:
K L ( P ∣ ∣ Q ) = ∑ x ∈ X P ( x ) log ? ( P ( x ) Q ( x ) ) KL(P||Q)=\sum_{x\in X}P(x)\log\left(\frac{P(x)}{Q(x)}\right) KL(P∣∣Q)=x∈X∑?P(x)log(Q(x)P(x)?)
這個在LLM訓練中很常見,在PPO算法中也介紹過,主要約束模型在參數更新過程中不能變化太大,保證模型基本的能力。
2.2 Bradley-Terry模型
先說這個模型的作用就是根據成對比較的勝負結果估計選項的相對偏好或勝率。也就是通過兩兩比較來估計該模型中每一個相對元素的實力。
舉個例子:
已知,
對戰 | 勝 | 負 |
---|---|---|
A 對 B | 8 | 4 |
A 對 C | 3 | 5 |
顯然可以看出A比B強點,A比C弱一點,所以強度排名:C > A > B,但是我再問一句,A打敗B的概率又是多少呢?
是這樣的呢:
對戰 | 勝 | 負 |
---|---|---|
A 對 B | 4 | 7 |
A 對 C | 7 | 12 |
能不能評估出B和C誰更強一點?如果再加入D,E,F,G這些別的選手呢,對局的場數非常非常多了,有沒有什么辦法能給這些角色排個名呢?那如果我能用一個數字來量化每個角色強度的話,排名是不是就很容易了?Bradley-Terry就是用來做這個的。
首先我們用 α \alpha α來表示一個角色的實力, α i \alpha_i αi?來表示第 i i i個角色的實力,如果A比B強,那么 P ( A > B ) = α A α A + α B P(A > B)=\frac{\alpha_A}{\alpha_A+\alpha_B} P(A>B)=αA?+αB?αA??是不是就應該越大越好,最起碼得大于0.5,那這個 P ( A > B ) P(A > B) P(A>B)?就表示A打敗B的概率,回憶一下學過的最大似然估計,這個時候是不是就能派上用場了。
這里直接快進到求完對數的步驟:
ln ? L = 8 ln ? ( α A α A + α B ) + 4 ln ? ( α B α A + α B ) + 3 ln ? ( α A α A + α C ) + 5 ln ? ( α C α A + α C ) \ln L = 8\ln\left(\frac{\alpha_A}{\alpha_A+\alpha_B}\right)+4\ln\left(\frac{\alpha_B}{\alpha_A+\alpha_B}\right)+3\ln\left(\frac{\alpha_A}{\alpha_A+\alpha_C}\right)+5\ln\left(\frac{\alpha_C}{\alpha_A+\alpha_C}\right) lnL=8ln(αA?+αB?αA??)+4ln(αA?+αB?αB??)+3ln(αA?+αC?αA??)+5ln(αA?+αC?αC??)
其中 L L L是我們要估計的似然值,在這里,既然只需要量化實力,那就需要一個參照值,我們將A的實力設置為1,也就是 α A \alpha_A αA?為1,那我們分別對 α B \alpha_B αB?、 α C \alpha_C αC?求偏導等于0可以算出 α B = 0.5 \alpha_B=0.5 αB?=0.5、 α C = 5 3 \alpha_C=\frac{5}{3} αC?=35?,這樣就能算出B戰勝C的概率, P ( B > C ) = α B α B + α C ≈ 0.23 P(B > C)=\frac{\alpha_B}{\alpha_B+\alpha_C}\approx0.23 P(B>C)=αB?+αC?αB??≈0.23。
這個 α \alpha α值對應到PPO算法里面就是獎勵值 r r r,下標也不用 i i i了換一種表示形式 α i \alpha_i αi?變成了 r ( x , y l ) r(x, y_l) r(x,yl?)和 r ( x , y w ) r(x, y_w) r(x,yw?),其中 x x x表示prompt, y l y_l yl?表示人類不是很偏向的回答, y w y_w yw?表示人類偏好的回答,因此 P ( A > B ) = α A α A + α B P(A > B)=\frac{\alpha_A}{\alpha_A+\alpha_B} P(A>B)=αA?+αB?αA??就變成了
P ( y w > y l ) = r ( x , y w ) r ( x , y w ) + r ( x , y l ) P(y_w > y_l)=\frac{r(x,y_w)}{r(x,y_w)+r(x,y_l)} P(yw?>yl?)=r(x,yw?)+r(x,yl?)r(x,yw?)?
我們不喜歡負數,不妨都加一個指數,式子就變成了
P ( y w > y l ) = exp ? ( r ( x , y w ) ) exp ? ( r ( x , y w ) ) + exp ? ( r ( x , y l ) ) P(y_w > y_l)=\frac{\exp(r(x,y_w))}{\exp(r(x,y_w))+\exp(r(x,y_l))} P(yw?>yl?)=exp(r(x,yw?))+exp(r(x,yl?))exp(r(x,yw?))?
做最大似然估計,目標就變成了
E ( x , y w , y l ) ~ D [ ln ? exp ? ( r ( x , y w ) ) exp ? ( r ( x , y w ) ) + exp ? ( r ( x , y l ) ) ] \mathbb{E}_{(x,y_w,y_l)\sim D}\left[\ln\frac{\exp(r(x,y_w))}{\exp(r(x,y_w))+\exp(r(x,y_l))}\right] E(x,yw?,yl?)~D?[lnexp(r(x,yw?))+exp(r(x,yl?))exp(r(x,yw?))?]
要讓它最大化,但是我們的 l o s s loss loss值一般是最小化,所以加個負號就行。
由于sigmod函數表達式為:
σ ( x ) = 1 1 + exp ? ( ? x ) \sigma(x)=\frac{1}{1 + \exp(-x)} σ(x)=1+exp(?x)1?
因此,可以做如下變化:
Loss = ? E ( x , y w , y l ) ~ D [ ln ? exp ? ( r ( x , y w ) ) exp ? ( r ( x , y w ) ) + exp ? ( r ( x , y l ) ) ] = ? E ( x , y w , y l ) ~ D [ ln ? 1 1 + exp ? ( r ( x , y l ) ? r ( x , y w ) ) ] = ? E ( x , y w , y l ) ~ D [ ln ? σ ( r ( x , y w ) ? r ( x , y l ) ) ] = ? ln ? σ ( r ( x , y w ) ? r ( x , y l ) ) \begin{align*} \text{Loss}&=-\mathbb{E}_{(x,y_w,y_l)\sim D}\left[\ln\frac{\exp(r(x,y_w))}{\exp(r(x,y_w))+\exp(r(x,y_l))}\right]\\ &=-\mathbb{E}_{(x,y_w,y_l)\sim D}\left[\ln\frac{1}{1 + \exp(r(x,y_l)-r(x,y_w))}\right]\\ &=-\mathbb{E}_{(x,y_w,y_l)\sim D}\left[\ln\sigma(r(x,y_w)-r(x,y_l))\right]\\ &=-\ln\sigma(r(x,y_w)-r(x,y_l)) \end{align*} Loss?=?E(x,yw?,yl?)~D?[lnexp(r(x,yw?))+exp(r(x,yl?))exp(r(x,yw?))?]=?E(x,yw?,yl?)~D?[ln1+exp(r(x,yl?)?r(x,yw?))1?]=?E(x,yw?,yl?)~D?[lnσ(r(x,yw?)?r(x,yl?))]=?lnσ(r(x,yw?)?r(x,yl?))?
到此,Bradley-Terry模型就介紹完了。其中的 r r r我們可以類比成PPO里的獎勵值。
2.3. DPO
我們先看DPO的訓練目標是什么,肯定就是在盡可能拿多獎勵的同時又不至于變化太大,也就是最大化以下目標:
E x ~ D , y ~ π [ r ( x , y ) ] ? β D K L [ π ( y ∣ x ) ∣ ∣ π r e f ( y ∣ x ) ] \mathbb{E}_{x\sim D,y\sim\pi}[r(x,y)] - \beta\mathbb{D}_{KL}[\pi(y|x)||\pi_{ref}(y|x)] Ex~D,y~π?[r(x,y)]?βDKL?[π(y∣x)∣∣πref?(y∣x)]
再做一些數學變換:
max ? π E x ~ D , y ~ π [ r ( x , y ) ] ? β D K L [ π ( y ∣ x ) ∣ ∣ π r e f ( y ∣ x ) ] = max ? π E x ~ D , y ~ π [ r ( x , y ) ] ? E x ~ D , y ~ π [ β log ? π ( y ∣ x ) π r e f ( y ∣ x ) ] = max ? π E x ~ D , y ~ π [ r ( x , y ) ? β log ? π ( y ∣ x ) π r e f ( y ∣ x ) ] = min ? π E x ~ D , y ~ π [ log ? π ( y ∣ x ) π r e f ( y ∣ x ) ? 1 β r ( x , y ) ] \begin{align*} &\max_{\pi} \mathbb{E}_{x\sim D,y\sim\pi}[r(x,y)] - \beta\mathbb{D}_{KL}[\pi(y|x)||\pi_{ref}(y|x)]\\ =&\max_{\pi} \mathbb{E}_{x\sim D,y\sim\pi}[r(x,y)] - \mathbb{E}_{x\sim D,y\sim\pi}\left[\beta\log\frac{\pi(y|x)}{\pi_{ref}(y|x)}\right] \tag{1}\\ =&\max_{\pi} \mathbb{E}_{x\sim D,y\sim\pi}\left[r(x,y) - \beta\log\frac{\pi(y|x)}{\pi_{ref}(y|x)}\right] \tag{2}\\ =&\min_{\pi} \mathbb{E}_{x\sim D,y\sim\pi}\left[\log\frac{\pi(y|x)}{\pi_{ref}(y|x)}-\frac{1}{\beta}r(x,y)\right] \tag{3} \end{align*} ===?πmax?Ex~D,y~π?[r(x,y)]?βDKL?[π(y∣x)∣∣πref?(y∣x)]πmax?Ex~D,y~π?[r(x,y)]?Ex~D,y~π?[βlogπref?(y∣x)π(y∣x)?]πmax?Ex~D,y~π?[r(x,y)?βlogπref?(y∣x)π(y∣x)?]πmin?Ex~D,y~π?[logπref?(y∣x)π(y∣x)??β1?r(x,y)]?(1)(2)(3)?
步驟(1)是對KL散度的展開,步驟(3)是加了個負號然后除了一個 β \beta β,除以一個常數不影響參數更新,雖然寫的等號但是其實不相等,不過這樣做對結果沒有影響。
后續步驟:
= min ? π E x ~ D , y ~ π [ log ? π ( y ∣ x ) π r e f ( y ∣ x ) ? log ? exp ? ( 1 β r ( x , y ) ) ] = min ? π E x ~ D , y ~ π [ log ? π ( y ∣ x ) π r e f ( y ∣ x ) exp ? ( 1 β r ( x , y ) ) ] = min ? π E x ~ D , y ~ π [ log ? π ( y ∣ x ) π r e f ( y ∣ x ) exp ? ( 1 β r ( x , y ) ) 1 Z ( x ) Z ( x ) ] = min ? π E x ~ D , y ~ π [ log ? π ( y ∣ x ) 1 Z ( x ) π r e f ( y ∣ x ) exp ? ( 1 β r ( x , y ) ) ? log ? Z ( x ) ] \begin{align*} &=\min_{\pi} \mathbb{E}_{x\sim D,y\sim\pi}\left[\log\frac{\pi(y|x)}{\pi_{ref}(y|x)}-\log\exp\left(\frac{1}{\beta}r(x,y)\right)\right] \tag{4}\\ &=\min_{\pi} \mathbb{E}_{x\sim D,y\sim\pi}\left[\log\frac{\pi(y|x)}{\pi_{ref}(y|x)\exp\left(\frac{1}{\beta}r(x,y)\right)}\right] \tag{5}\\ &=\min_{\pi} \mathbb{E}_{x\sim D,y\sim\pi}\left[\log\frac{\pi(y|x)}{\pi_{ref}(y|x)\exp\left(\frac{1}{\beta}r(x,y)\right)\frac{1}{Z(x)}Z(x)}\right] \tag{6}\\ &=\min_{\pi} \mathbb{E}_{x\sim D,y\sim\pi}\left[\log\frac{\pi(y|x)}{\frac{1}{Z(x)}\pi_{ref}(y|x)\exp\left(\frac{1}{\beta}r(x,y)\right)}-\log Z(x)\right] \tag{7} \end{align*} ?=πmin?Ex~D,y~π?[logπref?(y∣x)π(y∣x)??logexp(β1?r(x,y))]=πmin?Ex~D,y~π? ?logπref?(y∣x)exp(β1?r(x,y))π(y∣x)? ?=πmin?Ex~D,y~π? ?logπref?(y∣x)exp(β1?r(x,y))Z(x)1?Z(x)π(y∣x)? ?=πmin?Ex~D,y~π? ?logZ(x)1?πref?(y∣x)exp(β1?r(x,y))π(y∣x)??logZ(x) ??(4)(5)(6)(7)?
步驟(4)對 r ( x , y ) r(x, y) r(x,y)同時取指數和對數,步驟(5)利用對數函數的性質,步驟(6)引入了一個 Z ( x ) Z(x) Z(x),由于是恒等變換,只要這個 Z ( x ) Z(x) Z(x)不等于0,取什么都是可以的,因此作者取 Z ( x ) = ∑ y π r e f ( y ∣ x ) exp ? ( 1 β r ( x , y ) ) Z(x)=\sum_y \pi_{ref}(y|x)\exp\left(\frac{1}{\beta}r(x,y)\right) Z(x)=∑y?πref?(y∣x)exp(β1?r(x,y)),為什么這么取,因為這么取完之后 π r e f ( y ∣ x ) exp ? ( 1 β r ( x , y ) ) ∑ y π r e f ( y ∣ x ) exp ? ( 1 β r ( x , y ) ) \frac{\pi_{ref}(y|x)\exp\left(\frac{1}{\beta}r(x,y)\right)}{\sum_y\pi_{ref}(y|x)\exp\left(\frac{1}{\beta}r(x,y)\right)} ∑y?πref?(y∣x)exp(β1?r(x,y))πref?(y∣x)exp(β1?r(x,y))?是一個概率, ∑ y π r e f ( y ∣ x ) exp ? ( 1 β r ( x , y ) ) ∑ y π r e f ( y ∣ x ) exp ? ( 1 β r ( x , y ) ) = 1 \sum_y{\frac{\pi_{ref}(y|x)\exp\left(\frac{1}{\beta}r(x,y)\right)}{\sum_y\pi_{ref}(y|x)\exp\left(\frac{1}{\beta}r(x,y)\right)}} = 1 ∑y?∑y?πref?(y∣x)exp(β1?r(x,y))πref?(y∣x)exp(β1?r(x,y))?=1。
現在我們處理步驟(7)第一個log下面那一坨復雜的東西,不妨給它一個代號 π ? \pi^* π?,即:
1 Z ( x ) π r e f ( y ∣ x ) exp ? ( 1 β r ( x , y ) ) = π r e f ( y ∣ x ) exp ? ( 1 β r ( x , y ) ) ∑ y π r e f ( y ∣ x ) exp ? ( 1 β r ( x , y ) ) = π ? ( y ∣ x ) \frac{1}{Z(x)}\pi_{ref}(y|x)\exp\left(\frac{1}{\beta}r(x,y)\right)=\frac{\pi_{ref}(y|x)\exp\left(\frac{1}{\beta}r(x,y)\right)}{\sum_y\pi_{ref}(y|x)\exp\left(\frac{1}{\beta}r(x,y)\right)}=\pi^*(y|x) Z(x)1?πref?(y∣x)exp(β1?r(x,y))=∑y?πref?(y∣x)exp(β1?r(x,y))πref?(y∣x)exp(β1?r(x,y))?=π?(y∣x)
先往下推理:
= min ? π E x ~ D , y ~ π [ log ? π ( y ∣ x ) π ? ( y ∣ x ) ? log ? Z ( x ) ] = min ? π E x ~ D , y ~ π [ log ? π ( y ∣ x ) π ? ( y ∣ x ) ] = min ? π E x ~ D [ D K L ( π ( y ∣ x ) ∣ ∣ π ? ( y ∣ x ) ) ] ? π ( y ∣ x ) = π ? ( y ∣ x ) = 1 Z ( x ) π r e f ( y ∣ x ) exp ? ( 1 β r ( x , y ) ) \begin{align} &=\min_{\pi} \mathbb{E}_{x\sim D,y\sim\pi}\left[\log\frac{\pi(y|x)}{\pi^*(y|x)}-\log Z(x)\right] \tag{8}\\ &=\min_{\pi} \mathbb{E}_{x\sim D,y\sim\pi}\left[\log\frac{\pi(y|x)}{\pi^*(y|x)}\right] \tag{9}\\ &=\min_{\pi} \mathbb{E}_{x\sim D}\left[\mathbb{D}_{KL}(\pi(y|x)||\pi^*(y|x))\right]\Rightarrow \pi(y|x)=\pi^*(y|x)=\frac{1}{Z(x)}\pi_{ref}(y|x)\exp\left(\frac{1}{\beta}r(x,y)\right) \tag{10} \end{align} ?=πmin?Ex~D,y~π?[logπ?(y∣x)π(y∣x)??logZ(x)]=πmin?Ex~D,y~π?[logπ?(y∣x)π(y∣x)?]=πmin?Ex~D?[DKL?(π(y∣x)∣∣π?(y∣x))]?π(y∣x)=π?(y∣x)=Z(x)1?πref?(y∣x)exp(β1?r(x,y))?(8)(9)(10)?
對于步驟9,我們要更新的是策略 π \pi π的參數,而 π r e f \pi_{ref} πref?是參照模型,是不需要更新參數的,也就是說在優化目標式中它是一個常數,可以直接丟掉,對于步驟(10),我們發現步驟(9)就是符合KL散度定義的,其實不這么引入也行,要最小化步驟(9)的式子,我們使 π ( y ∣ x ) = π ? ( y ∣ x ) \pi(y|x)=\pi^*(y|x) π(y∣x)=π?(y∣x)即可。因此得到了步驟(10)的最后一個式子也就是
π ( y ∣ x ) = π ? ( y ∣ x ) = 1 Z ( x ) π r e f ( y ∣ x ) exp ? ( 1 β r ( x , y ) ) \pi(y|x)=\pi^*(y|x)=\frac{1}{Z(x)}\pi_{ref}(y|x)\exp\left(\frac{1}{\beta}r(x,y)\right) π(y∣x)=π?(y∣x)=Z(x)1?πref?(y∣x)exp(β1?r(x,y))
也就是
π ( y ∣ x ) = 1 Z ( x ) π r e f ( y ∣ x ) exp ? ( 1 β r ( x , y ) ) \pi(y|x)=\frac{1}{Z(x)}\pi_{ref}(y|x)\exp\left(\frac{1}{\beta}r(x,y)\right) π(y∣x)=Z(x)1?πref?(y∣x)exp(β1?r(x,y))
推理一下:
π ( y ∣ x ) = 1 Z ( x ) π r e f ( y ∣ x ) exp ? ( 1 β r ( x , y ) ) ? exp ? ( 1 β r ( x , y ) ) = π ( y ∣ x ) π r e f ( y ∣ x ) Z ( x ) ? r ( x , y ) = β ln ? ( π ( y ∣ x ) π r e f ( y ∣ x ) Z ( x ) ) ? r ( x , y ) = β ln ? π ( y ∣ x ) π r e f ( y ∣ x ) + β ln ? Z ( x ) \begin{align*} \pi(y|x)&=\frac{1}{Z(x)}\pi_{ref}(y|x)\exp\left(\frac{1}{\beta}r(x,y)\right)\tag{1}\\ \Rightarrow\exp\left(\frac{1}{\beta}r(x,y)\right)&=\frac{\pi(y|x)}{\pi_{ref}(y|x)}Z(x)\tag{2}\\ \Rightarrow r(x,y)&=\beta\ln\left(\frac{\pi(y|x)}{\pi_{ref}(y|x)}Z(x)\right)\tag{3}\\ \Rightarrow r(x,y)&=\beta\ln\frac{\pi(y|x)}{\pi_{ref}(y|x)}+\beta\ln Z(x)\tag{4} \end{align*} π(y∣x)?exp(β1?r(x,y))?r(x,y)?r(x,y)?=Z(x)1?πref?(y∣x)exp(β1?r(x,y))=πref?(y∣x)π(y∣x)?Z(x)=βln(πref?(y∣x)π(y∣x)?Z(x))=βlnπref?(y∣x)π(y∣x)?+βlnZ(x)?(1)(2)(3)(4)?
那我們現在知道 r ( x , y ) r(x,y) r(x,y)了,我們之前提到過 P ( y w > y l ) = r ( x , y w ) r ( x , y w ) + r ( x , y l ) P(y_w > y_l)=\frac{r(x,y_w)}{r(x,y_w)+r(x,y_l)} P(yw?>yl?)=r(x,yw?)+r(x,yl?)r(x,yw?)??,那給了我們很多偏好數據,也就是兩兩比較的數據,我們是不是也能對他們做一個最大似然估計呢?之前我們提到的Bradley-Terry模型的損失函數:
L o s s = = ? ln ? σ ( r ( x , y w ) ? r ( x , y l ) ) Loss = =-\ln\sigma(r(x,y_w)-r(x,y_l)) Loss==?lnσ(r(x,yw?)?r(x,yl?))
這里將 r ( x , y ) r(x, y) r(x,y)帶入
? ln ? σ ( r ( x , y w ) ? r ( x , y l ) ) = ? ln ? σ ( β ln ? π ( y w ∣ x ) π r e f ( y w ∣ x ) + β ln ? Z ( x ) ? β ln ? π ( y l ∣ x ) π r e f ( y l ∣ x ) ? β ln ? Z ( x ) ) = ? ln ? σ ( β ln ? π ( y w ∣ x ) π r e f ( y w ∣ x ) ? β ln ? π ( y l ∣ x ) π r e f ( y l ∣ x ) ) \begin{align*} &-\ln\sigma(r(x,y_w)-r(x,y_l))\\ =&-\ln\sigma\left(\beta\ln\frac{\pi(y_w|x)}{\pi_{ref}(y_w|x)}+\beta\ln Z(x)-\beta\ln\frac{\pi(y_l|x)}{\pi_{ref}(y_l|x)}-\beta\ln Z(x)\right)\\ =&-\ln\sigma\left(\beta\ln\frac{\pi(y_w|x)}{\pi_{ref}(y_w|x)}-\beta\ln\frac{\pi(y_l|x)}{\pi_{ref}(y_l|x)}\right) \end{align*} ==??lnσ(r(x,yw?)?r(x,yl?))?lnσ(βlnπref?(yw?∣x)π(yw?∣x)?+βlnZ(x)?βlnπref?(yl?∣x)π(yl?∣x)??βlnZ(x))?lnσ(βlnπref?(yw?∣x)π(yw?∣x)??βlnπref?(yl?∣x)π(yl?∣x)?)?
就得到了DPO的最終優化目標。