本文將根據Direct Preference Optimization: Your Language Model is Secretly a Reward Model一文,說明為大型語言模型微調的目的以及DPO在微調過程中發揮的作用,並配合“Build a Large Language Model (From Scratch)”一書,整理DPO實際操作流程重點。 ✨ Inspired by “Direct Preference Optimization: Your Language Model is Secretly a Reward Model”(Rafailov, 2024), Build a Large Language Model (From Scratch)(Raschka, 2024) ✨ 團隊成員來自國震中心與台大土木合設AI研究中心(NCREE — NTUCE Joint Artificial Intelligence Research Center) DPO是什麼? 為大型語言模型微調的目的 如下圖的第二階段到第三階段之過程,微調(Fine-tuning)為將第二階段已完成訓練之大型語言模型(pre-trained large language model),如ChatGPT,客製化至特定資料和任務上,較只利用提示(prompting)更進一步,雖然提示可有效引導語言模型,但微調可讓模型更貼合資料定義的專門任務,包括調整語調和風格,藉由自己的資料專門化既有的語言模型,無需大量資料和運算資源從零訓練語言模型。 基本微調方法 在語言模型的微調過程中,常見的方法包括基於監督學習的方式,例如使用標註好的資料集來訓練模型以優化特定任務表現,然而,這些方法通常依賴於高品質的已標註資料,對於一些情境複雜或目標難以明確量化的任務,可能存在局限性。 這時,從人類反饋中學習的強化學習(Reinforcement Learning from Human Feedback, RLHF)展現了其重要意義。 RLHF核心價值 通過整合人類偏好和判斷,將其轉化為獎勵訊號,建立獎勵模型(Reward model)用以微調模型,使其更符合人類需求和價值觀。 其特點如下:
RLHF在實現人類價值對齊方面展現了優勢,但也面臨一些挑戰,如:
DPO的出現 因前小節提及之原因,直接偏好優化(Direct Preference Optimization, DPO)應運而生,作為一種改進和替代方法。 DPO核心價值 直接使用人類的偏好進行微調,不依賴強化學習過程中獎勵模型的間接優化,簡化訓練過程,避免RLHF中可能出現的獎勵模型偏差和強化學習不穩定性,同時能更直接地利用人類偏好數據對模型進行優化,降低計算和訓練成本。 其特色在於:
DPO實作與計算原理解釋 【PreferenceDataset Class and Batch Processing Function】本文提及之程式碼擷取自“LLMs-from-scratch”,以下為文本範例:
2. 定義 functioncustom_collate_fn,並以fuctools.partial包裝custom_collate_fn,定義成customized_collate_fn
3. 以InstructionDataset包裝 Training data、Validation data、tokenizer,並Dataloader作基礎設置 【DPO Alignment】 首先,來拆解 DPO 的損失函數(loss function),看看 DPO 是如何評估大型語言模型回覆的表現:
3. 以此類推,將兩model較不符合人類偏好之回覆相除並取對數 log、乘上超參數,則形成圖 2粉色標註區 4. 將偏好對應機率與不偏好對應機率相減並放入logistic-sigmoid function logσ,即可產生一個0~1的標準化數值 5. 在實際計算上,示意如下: 6. 接下來在於如何為每個batch計算 log probabilities,以下將簡介compute_logprobs的流程與設置:
以上為本文根據Direct Preference Optimization: Your Language Model is Secretly a Reward Model與配合“LLMs-from-scratch”一書所整理DPO實際操作流程重點,歡迎大家參考!
參考文獻: Rafailov, R., Sharma, A., Mitchell, E., Manning, C. D., Ermon, S., & Finn, C. (2024). Direct preference optimization: Your language model is secretly a reward model. Advances in Neural Information Processing Systems, 36. Raschka, S. (2024). Build a Large Language Model (From Scratch). Simon and Schuster.
0 評論
發表回覆。 |