偏好優化(preference optimization )算法大全:
本篇介紹下SimPO
SimPO(Simple Preference Optimization)的設計核心在于簡化偏好優化過程,同時提升模型的表現。其設計主要圍繞兩個關鍵點展開:長度歸一化的獎勵和目標獎勵邊際。以下是對SimPO設計的詳細展開:
1.?長度歸一化的獎勵(Length-Normalized Reward)
1.1 背景與問題
在傳統的偏好優化方法(如DPO)中,獎勵函數通常基于模型生成的對數概率。然而,直接使用對數概率作為獎勵會導致長度偏差(length bias):較長的序列往往具有較低的對數概率,因為每個額外的token都會降低整體的對數概率。這可能導致模型傾向于生成較短的響應,從而影響生成質量。
1.2 SimPO的解決方案
SimPO通過長度歸一化來解決這一問題。具體來說,SimPO使用平均對數概率作為獎勵,而不是總對數概率。公式如下:
其中:
-
πθ(y∣x) 是模型在給定輸入?x?下生成響應?y?的概率。
-
∣y∣是響應?y 的長度(token數量)。
-
β?是一個縮放因子,用于控制獎勵的幅度。
通過將獎勵歸一化為每個token的平均對數概率,SimPO避免了長度偏差,使得模型不會因為生成長度較長的響應而受到懲罰。
1.3 長度歸一化的優勢
-
消除長度偏差:長度歸一化確保模型不會傾向于生成過長或過短的響應,從而提升生成質量。
-
與生成過程對齊:在生成過程中,模型通常使用平均對數概率來評估候選序列的質量(如beam search中的排序)。SimPO的獎勵設計與生成過程一致,避免了訓練和推理之間的不一致性。
2.?目標獎勵邊際(Target Reward Margin)
2.1 背景與問題
在偏好優化中,模型需要區分“獲勝響應”和“失敗響應”。傳統的Bradley-Terry模型通過最大化獲勝響應和失敗響應之間的獎勵差異來實現這一點。然而,這種方法可能會導致模型在優化過程中過于關注微小的獎勵差異,從而影響泛化能力。
2.2 SimPO的解決方案
SimPO引入了目標獎勵邊際(target reward margin),確保獲勝響應和失敗響應之間的獎勵差異至少超過一個預設的邊際值?γ。具體來說,SimPO的Bradley-Terry目標被修改為:
其中:
-
yw 是獲勝響應,yl 是失敗響應。
-
σ是sigmoid函數。
-
γ是目標獎勵邊際,通常設置為一個正數。
2.3 目標獎勵邊際的優勢
-
提升泛化能力:通過引入目標獎勵邊際,SimPO鼓勵模型在獲勝響應和失敗響應之間保持更大的獎勵差異,從而提升模型的泛化能力。
-
防止過擬合:目標獎勵邊際可以防止模型過度擬合訓練數據中的微小獎勵差異,從而提升在未見數據上的表現。
3.?SimPO的最終目標函數
結合長度歸一化的獎勵和目標獎勵邊際,SimPO的最終目標函數如下:
其中:
-
DD?是偏好數據集,包含輸入?x、獲勝響應?yw?和失敗響應?yl?。
-
β?是獎勵的縮放因子。
-
γ?是目標獎勵邊際。
4.?SimPO的設計優勢
4.1?無需參考模型
SimPO的一個顯著優勢是它不需要參考模型。傳統的DPO方法依賴于一個參考模型來計算獎勵,而SimPO直接使用當前策略模型的對數概率作為獎勵。這不僅簡化了訓練過程,還減少了內存和計算開銷。
4.2?與生成過程對齊
SimPO的獎勵設計與生成過程中的平均對數概率度量一致,避免了訓練和推理之間的不一致性。這使得SimPO在生成任務中表現更好。
4.3?防止長度偏差
通過長度歸一化,SimPO避免了模型傾向于生成長度較長或較短的響應,從而提升了生成質量。
4.4?提升泛化能力
目標獎勵邊際的引入使得SimPO在優化過程中更加穩健,能夠更好地泛化到未見數據。
5.?SimPO與DPO的對比
5.1?獎勵設計的差異
-
DPO:DPO的獎勵基于當前策略模型和參考模型的對數概率比值:
這種設計依賴于參考模型,并且可能導致獎勵與生成過程中的對數概率度量不一致。
-
SimPO:SimPO的獎勵基于當前策略模型的平均對數概率:
這種設計直接與生成過程對齊,且不需要參考模型。
5.2?性能差異
實驗結果表明,SimPO在多個基準測試上顯著優于DPO,尤其是在AlpacaEval 2和Arena-Hard上。SimPO的生成質量更高,且沒有顯著增加響應長度。
6.?總結
SimPO通過長度歸一化的獎勵和目標獎勵邊際兩個關鍵設計,簡化了偏好優化過程,并顯著提升了模型的表現。其優勢在于:
-
無需參考模型,降低了計算和內存開銷。
-
獎勵設計與生成過程一致,避免了訓練和推理之間的不一致性。
-
通過長度歸一化和目標獎勵邊際,提升了生成質量和泛化能力。
SimPO的設計為偏好優化提供了一種簡單而有效的方法,展示了其在模型對齊任務中的巨大潛力。
附錄:較長的序列往往具有較低的對數概率
這句話可以從概率模型和對數概率的性質來理解。為了更清楚地解釋這一點,我們需要從以下幾個方面展開:
1.?概率模型的鏈式法則
在語言模型中,生成一個序列的概率是通過鏈式法則計算的。假設我們有一個序列?y=(y1,y2,…,yn),其中?yiyi??是第?ii?個token,那么生成這個序列的概率可以表示為:
每個?P(yi∣x,y<i)是模型在給定上下文?x?和前面的token?y<i下生成第?i?個token的概率。由于每個概率值都在?[0,1] 之間,多個概率值相乘會導致整體概率?P(y∣x)隨著序列長度的增加而指數級下降。
2.?對數概率的性質
為了簡化計算,語言模型通常使用對數概率(log probability)而不是原始概率。對數概率的性質如下:
-
原始概率?P(y∣x)P(y∣x)?是一個很小的值(因為多個小于1的數相乘)。
-
取對數后,乘積變為求和:
l這樣,對數概率的計算更加穩定,且避免了數值下溢問題。
然而,即使使用對數概率,隨著序列長度的增加,對數概率的總和?log?P(y∣x)也會逐漸減小。這是因為每個token的對數概率?log?P(yi∣x,y<i)通常是一個負數(因為?P(yi∣x,y<i)<1),隨著序列長度的增加,這些負數會累加,導致總對數概率變得更小(即更負)。
3.?長度偏差(Length Bias)
由于較長的序列具有更低的對數概率,如果直接使用總對數概率作為獎勵(如DPO中的獎勵設計),模型可能會傾向于生成較短的序列,因為較短序列的總對數概率通常較高(負得較少)。這種現象被稱為長度偏差(length bias)。
例子:
假設有兩個序列:
-
序列A:長度為5,每個token的對數概率為 -0.5,總對數概率為??2.5?2.5。
-
序列B:長度為10,每個token的對數概率為 -0.4,總對數概率為??4.0?4.0。
盡管序列B的每個token的對數概率更高(-0.4 > -0.5),但由于序列B更長,其總對數概率更低(-4.0 < -2.5)。如果直接使用總對數概率作為獎勵,模型可能會傾向于選擇序列A,盡管序列B的每個token生成質量更高。
4.?SimPO的解決方案:長度歸一化
為了消除長度偏差,SimPO引入了長度歸一化,即使用平均對數概率作為獎勵,而不是總對數概率。具體公式為:
通過將總對數概率除以序列長度?∣y∣,SimPO消除了長度對獎勵的影響,使得模型不會因為生成長度較長的序列而受到懲罰。
例子(續):
-
序列A的平均對數概率:?2.5/5=?0.5。
-
序列B的平均對數概率:?4.0/10=?0.4。
在這種情況下,序列B的平均對數概率更高(-0.4 > -0.5),因此模型會更傾向于選擇序列B,而不是序列A。
5.?總結
-
較長的序列具有較低的對數概率:這是因為多個小于1的概率值相乘會導致整體概率指數級下降,而對數概率是這些概率的對數和,隨著序列長度的增加,對數概率的總和會變得更小(更負)。
-
長度偏差:如果直接使用總對數概率作為獎勵,模型可能會傾向于生成較短的序列,因為較短序列的總對數概率通常較高。
-
SimPO的解決方案:通過長度歸一化(使用平均對數概率),SimPO消除了長度偏差,使得模型能夠公平地評估不同長度的序列,從而提升生成質量。
這種設計使得SimPO在偏好優化任務中表現更加穩健,尤其是在生成長度較長的響應時,能夠避免模型過度傾向于生成短響應。