# RLHF vs DPO
## RLHF
Reinforce Learning Human feedback

1. Supervised Fine-Tuning(SFT) : 採用supervised的方式來微調預先訓練的語言模型。
3. Reward model training : 目標是訓練一個模型來適應人類的偏好。在這個階段,首先從提示庫中進行取樣,並使用大型語言模型產生多個回應。然後,人工對這些反應進行排名,根據這些排名訓練一個獎勵模型
4. Reinforce learning -- PPO(Proximal Policy Optimization):根據獎勵模型優化策略。
* 從資料集中抽取一個新的prompt。
* PPO模型從監督式策略(SFT)初始化。
* 策略生成一個輸出。
* 獎勵模型為輸出計算獎勵。
* 使用PPO根據獎勵更新策略。
<!-- ### 第三階段常使用的RL方式 - PPO
1. Rollout and Evaluation:在這個階段,我們從prompt庫裡抽樣,使用語言模型產生response,然後使用獎勵模型(Reward Model, RM)給出獎勵分數。這個分數反映了產生的response的質量,例如它是否符合人類的偏好,是否符合任務的要求等。
2. Make experience:在這個階段,我們收集了一系列的“經驗”,即模型的行為和對應的獎勵。這些經驗包括了模型產生的response以及對應的獎勵分數。這些經驗將被用於下一步的最佳化過程。
3. Optimization:在這個階段,我們使用收集到的經驗來更新模型的參數。具體來說,我們使用PPO演算法來調整模型的參數,使得模型產生的response的獎勵分數能夠增加。PPO演算法的一個關鍵特性是它以KL散度限制,保持模型的行為不會發生太大的改變,這有助於確保模型的穩定性。 -->
## RLHF 的替代方案 - DPO
Paper:
[Direct Preference Optimization: Your Language Model is Secretly a Reward Model](https://arxiv.org/pdf/2305.18290.pdf)
**Why**: RLHF是一個複雜且通常不穩定的過程,涉及訓練多個LM,並在訓練循環中從LM策略中採樣,帶來顯著的計算成本。
**DPO 透過簡單的classfication objective直接最佳化語言模型以符合人類偏好,不需要建立Reward model或是使用Reinforce learning**
也就是DPO的本質在於增加了首選的responce相對於不被首選的response的relative log probability, 但是他同時包含了一個動態的,per-example important weight,防止模型因為設計的機率而退化。

### Preliminaries:
#### SFT 階段
獲得一個 $π^{SFT}$
#### Reward modeling
在SFT階段時,針對一個prompt X 會產生一對答案
$(y1, y2) ∼ π^{SFT}(y | x)$.
人工會標注出
1. $y_w$(prefered one)
2. $y_l$ (dispreferred one),
透過這些數據訓練一個reward model $r^*(y,x)$
而建立reward model時常用的損失函數為 Bradley-Terry(BT)
BT model 規定人類偏好分佈 $p^*$ 可以表示為

假設從 $p^*$ 中sample出一個資料集

同時建立reward model $r_ϕ(x,y)$ 並且對參數做maximum likelihood,將其轉變成一個二元分類問題,並且使用negative log-likelihood loss:

與RLHF相似,ϕ是logistic函數,而 $r_ϕ(x,y)$ 通常從SFT模型$π^{SFT}(y | x)$初始化,並且在transformer結構的頂部加上一個線性層,這個層是對 reward value 產生單一純量預測。
- 接下來,如果是之前ChatGPT所用的RLHF的話,會使用訓練好的獎勵模型來提供feedback並迭代,此迭代策略(也就是PPO)可以表示為:

- $π_{ref}$, $π_θ$ 都是從 $π^{SFT}$初始化而來
- 其中 $β$ 是對獎勵函數的修正,避免迭代中的策略 $π_θ(y|x)$ 與base reference policy $π_{ref}(y|x)$ 偏離太遠
<!-- - ,標準方法為: -->
<!--  -->
### DPO methodology
**利用從reward function到最優策略的分析映射,使其能夠將reward function的損失函數轉換為策略的損失函數**
具體做法是給定人工標注的reference dataset, DPO會使用simple binary cross entropy目標來優化策略,所以不需要在訓練期間學習reward function.
通過公式推導,公式三可以用以下公式表示:

其中

$Z(x)$只與 $x$ 與base policy $π_{ref}$ 有關,目的是使右邊取值在[0,1]之間。
再來公式四兩邊取對數並通過一些代數運算得到

有了此公式五就可以把公式二中的$r$ (獎勵函數)換掉,實現DPO的目的

且目標是追求括號裡的值最大化,也就是生成good response的機率提高,bad response的機率降低,使loss最小化

DPO更新公式:

### 實驗結果:

(1)在sentiment generation任務中,所有KL散度下,DPO都取得最大的reward
(2)在summarization 任務中,DPO贏過PPO的最好版本表現,並且在不同的Sampling temperature下也能維持更高的robustness

(3)在單輪對話任務中,DPO在表現好的win rate中,取得了最高的win rate
(4)同時在訓練過程中,DPO表現出較快的收斂速度,訓練也較平穩。

使用在Summarization任務中表現較好的temperate測試在CNN/DailyMail dataset,DPO的表現也較好。
## 針對RLHF設計的算法 - ReMax (取代PPO)
**Why: RLHF的主要計算開銷來自於第三階段,而瓶頸來自於PPO。**
而其中一個沈重的計算開銷來自於**Value model**

Value model可以有效的估計策略的預期長期回報,但PPO中的Value model通常與LLM大小相似,使得儲存的需求加了一倍。
此外Value model還需要儲存其梯度、啟動、優化器等狀態,進一步增加了接近四倍的GPU儲存需求。使其成為RLHF的主要計算障礙
### Problem formulation
在RLHF setup中 reward model 對於一個完整個回應提供了 $r(a_1,...,a_T)$
- Prefernce data: $r(a_1,...,a_T)$
- Negative preference data: $r(a′_1,...,a′_T)$
最佳化目標可表示如下:

對於特定任務我們會引入instructional prompts,讓$x$表示此Prompt,包含任務指令跟輸入,LLM $π_θ$產生response $a_{1:T}$,reward model評估response 跟prompt的相關性,目標是reward最大化。

**Reward maximization as Sequential Decision-making Task**
對於一個reward maximization problem,將其轉變為一個可以用RL解決的 Markov Decision Process(MDP),其中$s$跟$a$分別為state 跟action,$P$表示transition function,描述基於現在的$s$跟$a$預測出下一個狀態$s'$的probablistic transition。$r$為reward function, $ρ$為初始狀態分佈
MDP 框架的主要目標是優化預期的long-term return,也就是中間獎勵的累積總和:

在LLM中,狀態指一系列之前生成的tokens,表示為$s_t = (x,a_1,...,a_{t-1})$。action 則是從vocabulary set中選擇一個token,initial state $s1$對應於prompt $x$,與 $ρ$對齊
雖然reward model $r(x,a_{1:T})$ 評估整個response而不是token,但還是可以調整MDP框架如下。也就是指定單一token獎勵為0。

Transition function $P$ 將current token 加到歷史紀錄中,形成後續狀態

$*s_t$ 表示 tuple $s_t$ 中的元素。
到這裡,解決問題二(公式二)的RL algorithm 可以等價解決問題一(公式一)。
**Natural solution to problem 2 : PPO**

然而PPO中有三個特性,在對於LLM的RLHF是沒有用到的(因RLHF沒有這些問題)
1. fast simulation
在傳統的應用中獲得 Long-term Return成本很高,但是在RLHF中沒有這個問題,如公式二所示,對RLHF任務來說,long-term return 只是LLM一個response 的trajectory reward.而獲得這個獎勵只需要一個query跟reward model,在現代GPU上通常不超過三秒
2. deterministic transitions
在RLHF中 transition都是確定的,如在公式四中給定一個$(s_t,a_t)$ 就會知道下一個狀態$s_{t+1}$,還有reward function 中$r(s_t,a_t)$也是確定性的,因為他來自神經網路
3. trajectory-level rewards
如公式三所示,只有當整個軌跡在 $t = T$ 結束時,$r(st , at)$ 才非零。這意味著 RLHF 任務接近「單階段」最佳化問題,因為中間階段為0。因此,RL 中使用的value function在這裡可能沒有那麼有用
### Prorposed method
#### Classical algorithm -- REINFORCE
考慮一個固定的Prompt X,透過REINFORCE,我們可以決定問題一中目標的梯度為

現在給定一組prompt$(x^1,...x^N)$
可以透過將LLM model $π_θ$ 展開來導出隨機梯度估計器


作者發現REINFORCE可能很適合解決RLHF問題,特別是他需要對預期回報的估計,也就是問題一中的目標函數值,可以透過對LM及reward model的qeury獲得。
此外,REINFORCE透過僅利用$r(x,a_{1:T})$並忽略中間獎勵來更新策略,原本這種方式被認為是缺點,因為中間獎勵可能會包含豐富的訊號,但在RLHF中因為中間獎勵全部為0,所以這個缺點就消失了。
但REINFORCE並不是能解決使用PPO的所有缺點,在使用OPT-1.3B模型的實驗中就觀察到**在提高獎勵最大化的性能方面表現不好**
並且推測是實驗中觀察到有可能原因是**隨機梯度的high variance**

- 左:REINFORCE的性能較差
- 右:REINFORCE的隨機梯度值遠大於ReMax
#### 因此基於REINFORCE提出了另一個演算法 -- ReMax
為了減輕隨機梯度中的high variance,在REINFORCE的基礎上,對於梯度估計減去baseline value


為了穩定訓練,透過減去Baseline value $r(x,ā_{1:T})$,來修改獎勵分數。
##### 主要程式碼如下:

### 實驗結果
- 速度

- 有效性

- 佔用的記憶體

## 深入比較DPO 與 RLHF
[Policy Optimization in RLHF: The Impact of
Out-of-preference Data](https://arxiv.org/pdf/2312.10584.pdf)
現有的human preference alignment 方法主要分為兩大類
1. 無獎勵模型的方法,如DPO
2. 基於獎勵模型的方法,如RLHF,在這篇論文裡稱作RMB-PO(Reward-Model-Based Policy Optimization )
### Problem Formulation:
使用Contextual bandit來表述alignment問題,令$s$跟$a$分別代表狀態(Context)及決策動作
目標是獲得一個決策policy $π$可以最大化reward:

符號$ρ$表示狀態分佈,r是ground truth reward function
通常Bradley-Terry 模型會被用來定義人類偏好的分佈

$a>a'$ 表示 $a$ is more preferred compared with $a'$
而reward learning object表示為:

#### 三種方法的策略:
令$π_{ref}$為參考策略模型 $β>0$為超參數
- RMB-PO透過偏好資料集中採樣狀態來優化策略

- RMB-PO+, RMB-PO的一個變形,使用新的無偏好的資料集

新資料及通常好取得且數量大於$D_{pref}$
- DPO: 僅使用preference data

### 隨機優化的觀點
根據以上的公式,作者認為所有的方法都是公式一的隨機近似,其中誤差有三個來源
1. reward model error $|\hat{r}(s,a)-r(s,a)|$
2. 使用有限樣本計算期望值$E_{a\sim π(·|s)}[·]$的估計誤差
3. 使用有限樣本計算期望值$E_{s\sim p(·)}[·]$的估計誤差
其中第一個誤差主要是因為偏好資料有限造成的,而資料成本很高
跟DPO相比,RMB-PO目標是在減少第二個錯誤
而RMB-PO+又更進一步減少第三個錯誤

### Experiment
#### linear bandit
在linear bandit task 中,定義
其中feature 表示為:

實驗採兩種策略
1. 在reward model及 policy model中不存在特徵不匹配的情況,也就是$ϕ_π = ϕ_r$
2. 另一種設定是

Optimality gap: 目前找到的最佳解(best known solution),與最佳解的邊界(a value that bounds the best solution) 之間的距離 ->越小越好
**Ablation study**

<!-- Preference Data Size(n) : Preference-free Data Size(m) -->
#### neural bandit
在neural bandit的情況下,reward和policy模型的feature representation純粹是從給定的數據中學習的

進一步擴展preference free的資料大小並沒有太大幫助。