使用 TRL 進行 Direct Preference Optimization (DPO) 來微調 Llama 2
Hugging Face 已將直接偏好優化 (DPO) 整合到 TRL 函式庫中,讓開發者能夠使用簡化的二元交叉熵損失來對齊如 Llama 2 這樣的大型語言模型 (LLMs)。此方法消除了對額外獎勵模型的需求,以及通常用於來自人類回饋的強化學習 (RLHF) 的複雜強化學習 (RL) 機制。
DPO vs. PPO: 簡化對齊流程
直接偏好優化 (DPO) 透過繞過獎勵建模和 RL 優化步驟來簡化對齊過程。在傳統的來自人類回饋的強化學習 (RLHF) 流程中,例如使用近端策略優化 (PPO) 的流程,會訓練獎勵模型來估計人類偏好,並使用帶有 KL 懲罰的凍結參考模型,以防止策略模型偏離過遠而產生無意義的輸出。
DPO 以獎勵函數到最佳 RL 政策的解析映射來取代此步驟。這使得獎勵模型和參考模型上的 RL 損失可以直接轉換為參考模型上的損失。因此,語言模型會在偏好資料上使用直接似然目標進行優化,從而消除了對單獨獎勵模型或繁瑣的 RL 基礎優化的需求。
使用 TRL 函式庫實作 DPO
TRL 函式庫提供了輔助函式來實作 DPO 工作流程。雖然傳統的來自人類回饋的強化學習 (RLHF) 流程包含四個步驟——監督微調 (SFT)、偏好資料標註、獎勵模型訓練和 RL 優化——但 DPO 將後兩個步驟合併為一個步驟。
資料需求
要在 TRL 中使用 DPOTrainer,必須以字典格式提供偏好資料,該字典需包含三個特定的鍵:
prompt: 模型在推理時所提供的上下文提示。chosen: 首選的生成回應。rejected: 非首選的回應。
訓練器配置
DPOTrainer 需要一個基礎模型(來自 SFT 流程)、一個參考模型(通常是 SFT 訓練後的基礎模型的副本),以及一個溫度超參數 beta(通常介於 0.1 和 0.5 之間)。beta 參數控制參考模型的影響;較小的 beta 值表示參考模型被更多地忽略。
案例研究:對齊 Llama 2 7B
Hugging Face 透過在 stack-exchange 偏好資料集上微調 Llama 2 7B 參數模型來展示 DPO 的應用,該資料集包含針對問題的排名答案。
步驟 1:監督微調 (SFT)
模型首先透過使用 SFTTrainer 和經由 bitsandbytes 庫的 QLoRA 技術進行 SFT。這包括以 4 位元量化載入基礎模型,並在目標模組 (q_proj, v_proj) 上添加 LoRA 層。
步驟 2:DPO 訓練
在 SFT 之後,得到的模型同時作為 DPO 訓練的基礎模型和參考模型。使用 AutoPeftModelForCausalLM,模型以 4 位元配置載入,並透過 QLoRA 方法進行訓練。DPOTrainer 透過評估資料集評估進度,並報告隱含獎勵指標。
監控 DPO 效能
在訓練和評估期間,DPOTrainer 會追蹤四個關鍵獎勵指標來衡量對齊進度:
rewards/chosen:政策模型與參考模型在被選回應上的對數機率平均差異,經beta放大。rewards/rejected:政策模型與參考模型在被拒絕回應上的對數機率平均差異,經beta放大。rewards/accuracies:被選獎勵高於對應被拒絕獎勵的百分比。rewards/margins:被選獎勵與被拒絕獎勵的平均差異。
成功的訓練表現為邊際值增加且準確度接近 1.0,表示模型會持續將更高的獎勵分配給首選回應。
Sources
- OriginalFine-tune Llama 2 with DPO