---
# System prepended metadata

title: RLHF(DPO)
tags: [LLM]

---

#  RLHF
對於LLM的訓練階段，主要會分為以下四個部分:

### Pre-train-model 預訓練模型（base model）
- 預訓練階段是讓模型在大規模未標記的文本數據上學習語言的基本結構、邏輯關係和語義理解。
- 結果也就是我們常說的 base-model，例如 ChatGPT、LLaMA、BERT 等。
- 補充: 
    - ChatGPT、Lamma屬於auto-regressive的訓練方式，讓模型自行去預測每個序列的"下一個可能出現的token"。
        - 範例：input - "我今年12"，模型可能高機率預測下一個字將出現 "歲"，這樣模型將逐步學會生成完整且合乎邏輯的句子。

    - Bert則是屬於mask-language-model(MLM)，在一段語句中遮住一些詞，讓模型通過上下文信息來預測被遮蔽的詞語，從而學會語境理解。
        - 範例：input - 生日要吃蛋糕，並且遮住當中的某些詞，例如:"XX要吃蛋糕"(X表被遮住的詞)，讓模型學會預測出當吃蛋糕出現時，高機率要生成生日。

    - 因此ChatGPT 在「生成連貫句子、文字」方面表現出色，而 BERT 則是在上下文理解和句子分析上具備優勢。

### Fine-tune-model 微調模型(SFT-model，Supervised-Fine-Tune model) 
- Fine-tuning 是在預訓練模型的基礎上進行微調。預訓練模型學習了語言的基本概念，但在具體任務（如問答、翻譯、摘要生成等）上，仍需要進一步調整。
- 監督式微調（Supervised Fine-Tuning, SFT）通過帶有標註數據（問題-答案配對的dataset）監督學習，使模型在特定任務上的表現超過原始預訓練模型。
- 因此，微調後的模型在該任務上表現會更好，因為它通過人類的標注數據，學習了如何給出合適的回應。（例如：讓模型學停車場資訊、特定語句分析等等。）

### Reward-model 獎勵模型
- Reward model 獎勵模型是獨立訓練的"一個模型"，用於評估生成模型的輸出質量，基於標註數據學習為輸出打分。基於標註的數據（例如 "A 比 B 好" 或 對應回答的具體分數）來學習如何為輸出打分。
- 訓練方式依賴人類的反饋數據：透過比較模型的輸出、具體的分數，模型將學會如何給新輸出分配獎勵分數。
- 為原先模型提供一個獎勵機制，用來給生成模型的輸出打分，透過分數的好壞來"強化"原先模型的學習過程。

### Reinforcement-model 強化學習
- RLHF（Reinforcement-Learning-Human-Feedback），中文也就是"基於人類反饋"的強化學習模型。
- RLHF 通常是在微調後的模型基礎上，通過 Reward model 提供的獎勵信號，使用強化學習（例如 PPO、DPO 等算法）進一步優化模型，使其更傾向於生成符合人類偏好的回應。
- 具體流程:
    - 先使用人類的反饋dataset訓練一個 Reward model，用於評估模型生成的回應。
    - 透過強化學習的方式(PPO)對模型進行進一步的優化，使其生成的回應能夠獲得更高的獎勵分數。

### 總結
- **Base model**: 通過自我監督學習（self-supervised learning）來進行的，即利用無標記的數據並從中構建監督信號。
- **Fine tune model**: 透過帶有標記的數據集讓模型在特定任務上，表現得比原先預訓練模型好。
- **Reward model**: 透過帶有標記的分數數據，產生一個獎勵模型機制，用以評斷模型產生的結果好壞。
- **RLHF**: 使得預訓練後的模型更接近人類偏好，特別是在生成回應時使模型產生更高質量和更符合人類期望的輸出。

# DPO
### 基本介紹
DPO，全名為直接偏好優化（Direct Preference Optimization），顧名思義，這是一種直接根據語言模型生成結果的偏好來優化模型的方法。原始論文的作者通過此方法在特定任務上取得了比強化學習人類反饋（RLHF）更優的效果。在這裡，可以將RLHF理解為一種繁瑣且複雜的訓練過程，它需要大量的人為標註資料來強化模型的學習。

我們可以看到下方的圖片（出處為原始論文）。左邊是傳統的強化學習人類反饋（RLHF）過程，透過獎勵模型（Reward Model）標註的獎勵不斷對fine-tune model進行參數更新，以強化模型的學習。以下將以PPO作為對比。

- 首先，我們需要對大量的資料進行標記，例如對於同一個問題，可能需要生成多個答案，並為每個答案分配對應的分數，以此訓練一個合適的獎勵模型（使問題丟進LLM後，產生的結果將有個對應的分數）。
- 獲得獎勵模型後，我們可以透過不斷的優化和更新參數，使模型能夠生成得分較高的答案。
- 因此，傳統RLHF的過程對於DPO來說相當複雜且繁瑣，因此作者提出了一種「簡單分類（Simple Classification）」的方法，以達到類似RLHF的效果。
    - 這邊的簡單分類是指丟進LLM兩個問題，產生出的兩個隨機答案之間的好壞。

![RLHF對比DPO的示意圖](https://hackmd.io/_uploads/S1zQsMCgJg.png)

上圖右側是DPO的簡單構圖。它直接針對一對數據集進行好壞的分類。
- **PPO**: 需要針對同一個問題生成多個「不同分數的答案」，並建立一個能生成合適分數的獎勵模型
- **DPO**: 直接生成成對的答案，只需判斷哪個答案較好、哪個較差，使模型能夠更好地模擬人類的選擇傾向。

這樣一來，DPO便可以省略獎勵模型的建立，直接通過人類的偏好來訓練模型參數。這種方法簡化了微調過程，降低了需求，使模型得以輕量化地進行強化學習。

### DPO的演變
#### RLHF的介紹
我們可以看到下圖，下方為RLHF-finetune的過程。將先進行簡單的符號介紹：

$D$ 是資料集，$x$ 是輸入的問題，$y$ 是模型產生的答案。
$r_\phi(x, y)$ 是獎勵函數，評估模型對於問題 $x$ 的答案 $y$ 的得分。
$\pi_\theta(y | x)$ 是當前模型的策略，用來生成答案 $y$。
$\pi_{\mathrm{ref}}(y | x)$ 是參考策略，代表模型更新前的行為。
$\beta$ 是 KL 懲罰的係數，控制新舊策略間的差異，避免模型變動過大。（用以避免訓練後的模型與原先模型差異太大，白話文也就是：只會選擇高分的答案，卻忘了原先的特性！），確保更新後的模型不會過度偏離原始模型，保持模型的一致性。

![DPO論文當中，RLHF 獎勵模型的function](https://hackmd.io/_uploads/HkJdkdy-Jx.png)

因此上述過程我們需要:
1. **訓練 Reward Model**(上圖紅色方框)：需要先有大量的資料集，用來訓練一個可以評估模型輸出質量的獎勵模型（Reward Model）。這個模型的作用是給每個答案打分，判斷該答案的好壞，以此幫助模型學習。

2. **策略優化**（上圖橘色方框）：在獎勵模型訓練完成後，我們可以使用PPO（Proximal Policy Optimization）或類似的方法來優化策略。這樣能讓模型的輸出分數最大化，同時透過 KL 係數懲罰項，確保更新後的策略不會偏離原先模型太多，保持穩定性和一致性。

這樣的流程可以使模型在獲得高分的同時，避免過度調整，維持原有的語言模型特性。但作者認為這樣實在太麻煩，因此想出了DPO

#### DPO的重要改變
1. 相對好壞的比較方法取代獎勵模型: DPO 透過兩個答案之間進行比較好壞，來取代原先的reward model。（參考Bradley-Terry的theoretical preference model），它比較兩個答案，選出優質答案，而不需要明確的獎勵評分。這樣可以更直接地學習人類偏好的策略，而不需要額外地訓練一個獨立的獎勵模型。
3. 策略參數的控制: 透過比較 $\theta$ 模型策略、 $ref$ 模型策略（訓練的模型、訓練前的模型）兩者間的差異。目的是在調整當前策略時，保留選擇高分答案的能力，同時不讓模型過度偏離原來的參考模型。這確保了模型既能滿足人類偏好，又不會完全脫離原來的生成行為。

因此，以下為改變後的DPO Loss function：

![DPO的Loss function](https://hackmd.io/_uploads/S1YeJuyWJl.png)

1. $x$ 代表給定的問題，$y_w$ 表示兩個答案中相對較好的答案，$y_l$ 則是相對較差的答案。
2. 左邊橘色框框的 $\log\frac{\pi_\theta(y_w|x)}{\pi_{ref}(y_w|x)}$ 可以視為在 "新策略中，好答案出現的相對可能性"；右邊橘色框框的 $\log\frac{\pi_\theta(y_l|x)}{\pi_{ref}(y_l|x)}$ 則是壞答案出現的相對可能性。
3. 整個紅色大框表示好答案機率和壞答案機率的差距。我們的目標是最大化好答案的出現可能性，同時最小化壞答案的出現可能性。而這樣的設計旨在讓模型更傾向選擇優質答案，同時避免過度偏離原始模型。

## 總結
在訓練大型語言模型（LLM）時，強化學習（RLHF）可以有效利用人類的反饋來優化模型，使其輸出更符合使用者的期望。然而，傳統RLHF需要大量標記資料來生成獎勵模型，這會增加訓練的複雜性和成本。

因此，DPO（直接偏好優化）作為一種新方法，簡化了訓練過程。它直接利用人為標記的好壞比較，省略了獨立的獎勵模型，從而減少了對標記數據的需求，使模型能更快學會符合人類偏好的輸出。

1. **獎勵模型的替代**：DPO通過人為標記的好與壞直接取代了傳統RLHF中的獎勵模型，減少了對大量標記資料的需求，並使LLM的回答更符合使用者的偏好。
2. **保留原有特性**：透過比較DPO模型與參考模型（ref模型），DPO保留了原RLHF中的KL懲罰項，確保模型在學習新策略時仍然保有原先的特徵。
3. **減少模型複雜性**：DPO顯著減少了參數和模型的需求，即使不需要獎勵模型，仍然可以通過帶標記的數據來實現監督學習，使模型學會強化學習的人類偏好（RLHF）。

# 備註
- [DPO原始論文](https://arxiv.org/pdf/2305.18290)
- [前人的智慧，DPO論文介紹](https://datasciocean.tech/paper-intro/direct-preference-optimization/)
- 圖片皆為網路上抓取，當中內容也有參考部分介紹網站，若有違反版權之疑慮，請來信告知: tyteng064@gmail.com，若造成您的不便，請見諒。