01 論文概述
論文名稱:
Direct Preference Optimization: Your Language Model is Secretly a Reward Model
—— DPO:你的語言模型,其實就是個獎勵模型
論文鏈接:https://arxiv.org/pdf/2305.18290
👉Lab4AI 鏈接:
https://www.lab4ai.cn/paper/detail?utm\_source=jssq\_sf&id=b7f869b397904e6a95f01b7e3ad6f044&type=paper
🌟 簡介
在大型語言模型(LLM)的對齊技術中,基於人類反饋的強化學習(RLHF)曾是黃金標準。然而,RLHF 流程極其複雜:它需要先訓練一個獨立的獎勵模型(Reward Model)來學習人類偏好,然後再使用強化學習(如 PPO)來微調語言模型以最大化這個獎勵。這個過程不僅計算昂貴,而且訓練過程極不穩定。
於 2023 年發佈的 "直接偏好優化" (Direct Preference Optimization, DPO) 論文提出了一種顛覆性的、更簡單的對齊範式。DPO 的核心洞見是:我們完全不需要一個顯式的獎勵模型,也不需要強化學習。通過一個精妙的數學推導,作者證明了可以直接利用人類偏好數據(即“選擇的”和“拒絕的”回答對),通過一個簡單的分類損失函數來直接優化語言模型本身。這篇論文揭示了,在優化的過程中,語言模型自身就隱式地充當了獎勵模型的角色,從而極大地簡化了對齊過程。
🔍 優勢
- 極致簡化DPO 將 RLHF 複雜的“獎勵建模 -> 強化學習”兩階段流程,簡化為一步式的、類似監督微調(SFT)的直接優化過程。
- 穩定高效完全摒棄了強化學習,從而避免了其訓練不穩定、超參數敏感等問題。DPO 的訓練過程像常規微調一樣穩定,且計算成本更低。
- 性能卓越實驗證明,DPO 不僅在實現上更簡單,其最終模型的性能通常能與甚至超越經過複雜 RLHF 調優的模型。
- 理論優雅為偏好學習提供了堅實的理論基礎,清晰地揭示了語言模型策略與隱式獎勵函數之間的直接關係。
🛠️ 核心技術
- 偏好模型的重新參數化 (Reparameterization of the Reward Model)DPO 的理論基石。它首先基於 Bradley-Terry 等偏好模型建立獎勵函數與最優策略(LLM)之間的關係。
- 從獎勵優化到直接偏好優化通過數學推導,DPO 將最大化獎勵的目標函數,巧妙地轉換為了一個直接在偏好數據上進行優化的損失函數。這個損失函數的形式類似於一個簡單的二元分類任務。
- 隱式獎勵函數 (Implicit Reward Function)推導出的 DPO 損失函數表明,優化過程實際上是在最大化一個由當前策略(被優化的 LLM)和參考策略(初始 SFT 模型)的比值所定義的隱式獎勵。這意味着語言模型自身的變化直接反映了獎勵的變化,無需外部獎勵模型。
- 類似 SFT 的實現 (SFT-like Implementation)DPO 的最終損失函數非常簡潔,可以直接用於微調語言模型。訓練數據是
(prompt, chosen_response, rejected_response)三元組,模型的目標是最大化chosen_response的概率,同時最小化rejected_response的概率。
02 論文原文閲讀
您可以跳轉到Lab4AI.cn上進行查看。👉 文末點擊閲讀原文,即可跳轉至對應論文頁面\~
- Lab4AI.cn 提供免費的AI 翻譯和AI 導讀工具輔助論文閲讀;
- 支持投稿復現,動手復現感興趣的論文;
-
論文復現完成後,您可基於您的思路和想法,開啓論文創新。
03 一鍵式論文復現
Lab4AI.cn上已上架了此篇復現案例,【登錄平台】即可體驗論文復現。
👉Lab4AI 平台復現鏈接(或者點擊閲讀原文):
https://www.lab4ai.cn/paper/detail?utm\_source=jssq/_sf&id=5ff4513f94e1408aae0afd05f797d242&type=paper
🛠️ 實驗部署
本實驗環境已為您精心配置,開箱即用。
- 💻 代碼獲取:項目復現代碼已存放於
/codelab/direct-preference-optimization/code文件夾中。 - 🧠 模型説明:
/codelab/direct-preference-optimization/model文件夾中存放了用於 DPO 訓練的初始 SFT 模型。 - 📊 數據説明:
/codelab/direct-preference-optimization/dataset文件夾中包含了用於實驗的人類偏好數據集(如 Anthropic HH-RLHF)。 - 🌐 環境説明:運行所需的所有依賴已預安裝在
/envs/dpo/環境中,您無需進行任何額外的環境配置。
🚀 環境與內核配置
請在終端中執行以下步驟,以確保您的開發環境(如 Jupyter 或 VS Code)能夠正確使用預設的 Conda 環境。
1. 在 Jupyter Notebook/Lab 中使用您的環境
- 為了讓 Jupyter 能夠識別並使用您剛剛創建的 Conda 環境,您需要為其註冊一個“內核”。
-
首先,在您已激活的 Conda 環境中,安裝
ipykernel包:conda activate dpopip install ipykernel -
然後,執行內核註冊命令。
# 為名為 dpo 的環境註冊一個名為 "Python(dpo)" 的內核kernel_install --name dpo --display-name "Python(dpo)" - 完成以上操作後,刷新您項目中的 Jupyter Notebook 頁面。在右上角的內核選擇區域,您現在應該就能看到並選擇您剛剛創建的
"Python(dpo)"內核了。
2. 在 VS Code 中使用您的環境
- VS Code 可以自動檢測到您新創建的 Conda 環境,切換過程非常快捷。
-
第一步: 選擇 Python 解釋器
- 確保 VS Code 中已經安裝了官方的 Python 擴展。
- 使用快捷鍵
Ctrl+Shift+P(Windows/Linux) 或Cmd+Shift+P(macOS) 打開命令面板。 - 輸入並選擇
Python: Select Interpreter。
-
第二步: 選擇您的 Conda 環境
- 在彈出的列表中,找到並點擊您剛剛創建的環境(名為
dpo的 Conda 環境)。 - 選擇後,VS Code 窗口右下角的狀態欄會顯示
dpo,表示切換成功。此後,當您在 VS Code 中打開 Jupyter Notebook (.ipynb) 文件時,它會自動或推薦您使用此環境的內核。
- 在彈出的列表中,找到並點擊您剛剛創建的環境(名為
Lab4AI.cn 來送禮啦\~
✅ 註冊有禮,註冊即送 30 元代金券
https://www.lab4ai.cn/register?utm\_source=jssq/_sf立即體驗
✅ 入羣有禮,入羣即送 20 元代金券
👇