齊指南:從強(qiáng)化學(xué)習(xí)原理到 RLHF 獎(jiǎng)勵(lì)模型構(gòu)建)
happy-llm 偏好對(duì)齊指南從強(qiáng)化學(xué)習(xí)原理到 RLHF 獎(jiǎng)勵(lì)模型構(gòu)建【免費(fèi)下載鏈接】happy-llm 從零開(kāi)始構(gòu)建大模型項(xiàng)目地址: https://gitcode.com/GitHub_Trending/ha/happy-llm導(dǎo)讀本文是 happy-llm 開(kāi)源倉(cāng)庫(kù)第六章的進(jìn)階補(bǔ)充專(zhuān)題圍繞通過(guò)強(qiáng)化學(xué)習(xí)進(jìn)行偏好對(duì)齊展開(kāi)。你將完整掌握強(qiáng)化學(xué)習(xí)RL的核心概念與數(shù)學(xué)目標(biāo)理解為何在指令微調(diào)SFT之后還需要訓(xùn)練獎(jiǎng)勵(lì)模型Reward Model并學(xué)會(huì)按照 RLHFReinforcement Learning from Human Feedback的標(biāo)準(zhǔn)流程構(gòu)建chosen / rejected偏好數(shù)據(jù)集、借助 TRL 框架訓(xùn)練獎(jiǎng)勵(lì)模型為后續(xù)開(kāi)展 DPO、PPO 等后訓(xùn)練實(shí)驗(yàn)打下基礎(chǔ)。6.4.0 前置知識(shí)為什么 SFT 之后還需要偏好對(duì)齊大語(yǔ)言模型如 Llama 系列、Qwen 系列經(jīng)過(guò)預(yù)訓(xùn)練后已經(jīng)具備強(qiáng)大的文本理解和生成能力但預(yù)訓(xùn)練模型并不總能直接滿(mǎn)足特定業(yè)務(wù)需求和人類(lèi)價(jià)值觀。因此業(yè)界通常先對(duì)預(yù)訓(xùn)練模型進(jìn)行指令微調(diào)Instruction Tuning即向模型提供特定的指令prompts和示例使其在對(duì)話(huà)、問(wèn)答、文本生成等任務(wù)中表現(xiàn)得更符合人類(lèi)期望。在 happy-llm 倉(cāng)庫(kù)中這一步的完整實(shí)踐對(duì)應(yīng) 第六章正文 的 6.2 節(jié)配套腳本為 docs/chapter6/code/finetune.py。從該腳本可以看到指令微調(diào)的核心機(jī)制使用|im_start|human/|im_start|assistant等角色標(biāo)識(shí)符組織多輪對(duì)話(huà)在labels中通過(guò)IGNORE_TOKEN_ID屏蔽 user 側(cè)文本只對(duì) assistant 側(cè)回答計(jì)算損失通過(guò)TrainerTrainingArguments完成標(biāo)準(zhǔn)的交叉熵式有監(jiān)督訓(xùn)練。但指令微調(diào)只解決回答格式與大致內(nèi)容正確的問(wèn)題。我們還希望模型的回答不僅能正確還能最大程度上滿(mǎn)足人類(lèi)的審美、價(jià)值觀和安全標(biāo)準(zhǔn)——這正是偏好對(duì)齊Preference Alignment要解決的問(wèn)題也是本文的核心主題。6.4.1 強(qiáng)化學(xué)習(xí)的基本原理從行為心理學(xué)到計(jì)算強(qiáng)化學(xué)習(xí)在進(jìn)入強(qiáng)化學(xué)習(xí)的細(xì)節(jié)之前先看看它的起源。強(qiáng)化學(xué)習(xí)Reinforcement Learning簡(jiǎn)稱(chēng) RL其實(shí)并不是什么新鮮事物它的理論基礎(chǔ)可以追溯到 20 世紀(jì)初的行為心理學(xué)尤其是 Edward Thorndike 和 B.F. Skinner 對(duì)動(dòng)物學(xué)習(xí)的研究。Thorndike 提出了效果律如果一個(gè)行為帶來(lái)積極的結(jié)果那么這種行為重復(fù)發(fā)生的概率會(huì)增加。Skinner 則進(jìn)一步發(fā)展了這一思想提出操作性條件作用學(xué)說(shuō)通過(guò)獎(jiǎng)勵(lì)和懲罰來(lái)塑造行為。計(jì)算機(jī)科學(xué)領(lǐng)域的強(qiáng)化學(xué)習(xí)正是從這些心理學(xué)原理中生發(fā)出來(lái)的。20 世紀(jì) 80 年代隨著計(jì)算能力提升和數(shù)學(xué)理論發(fā)展人們開(kāi)始嘗試將生物心理學(xué)的學(xué)習(xí)概念應(yīng)用于機(jī)器和計(jì)算機(jī)程序從而發(fā)展出現(xiàn)代意義上的強(qiáng)化學(xué)習(xí)。核心要素在強(qiáng)化學(xué)習(xí)中以下五個(gè)要素構(gòu)成了最基本的框架狀態(tài)State系統(tǒng)在某一時(shí)刻的具體狀況。比如棋盤(pán)游戲中狀態(tài)可以表示棋盤(pán)上所有棋子的當(dāng)前排列情況對(duì)自動(dòng)駕駛汽車(chē)來(lái)說(shuō)狀態(tài)可能包括汽車(chē)的速度、位置以及周?chē)系K物的位置等。動(dòng)作Action智能體在給定狀態(tài)下可執(zhí)行的操作。以自行車(chē)為例動(dòng)作可能包括前進(jìn)、停止、轉(zhuǎn)彎等。在復(fù)雜系統(tǒng)中動(dòng)作集可以非常龐大。獎(jiǎng)勵(lì)Reward智能體執(zhí)行某個(gè)動(dòng)作后獲得的反饋通常是一個(gè)數(shù)值。獎(jiǎng)勵(lì)可以是立即的也可以是延后的好的動(dòng)作獲得正獎(jiǎng)勵(lì)不好的動(dòng)作獲得負(fù)獎(jiǎng)勵(lì)。策略Policy一套指導(dǎo)智能體如何選擇動(dòng)作的規(guī)則即告訴智能體在每個(gè)狀態(tài)下應(yīng)該做什么。價(jià)值函數(shù)Value Function對(duì)策略的評(píng)估工具用于預(yù)測(cè)從當(dāng)前狀態(tài)出發(fā)、長(zhǎng)期來(lái)看能夠獲得的總獎(jiǎng)勵(lì)幫助智能體權(quán)衡短期與長(zhǎng)期的收益。模型Model在部分強(qiáng)化學(xué)習(xí)系統(tǒng)中我們會(huì)建立一個(gè)環(huán)境模型幫助智能體預(yù)見(jiàn)其動(dòng)作的結(jié)果這在許多復(fù)雜計(jì)算場(chǎng)景下非常有用。這些元素共同作用幫助智能體通過(guò)在虛擬環(huán)境中不斷試錯(cuò)來(lái)學(xué)習(xí)最佳行動(dòng)策略智能體與環(huán)境的交互循環(huán)在強(qiáng)化學(xué)習(xí)中智能體是學(xué)習(xí)和決策的主體它通過(guò)以下步驟與環(huán)境交互觀察狀態(tài)智能體首先觀察當(dāng)前的狀態(tài)State。選擇動(dòng)作根據(jù)觀察到的狀態(tài)和預(yù)先確定的策略智能體選擇一個(gè)動(dòng)作Action。執(zhí)行動(dòng)作智能體執(zhí)行所選的動(dòng)作。接收獎(jiǎng)勵(lì)和新?tīng)顟B(tài)執(zhí)行動(dòng)作后智能體從環(huán)境中接收到相應(yīng)的獎(jiǎng)勵(lì)Reward和更新后的新?tīng)顟B(tài)State。更新策略智能體使用獲得的獎(jiǎng)勵(lì)信息來(lái)調(diào)整策略以便在未來(lái)獲得更好的結(jié)果。將這個(gè)過(guò)程不斷重復(fù)智能體在反復(fù)交互中不斷優(yōu)化策略目標(biāo)是在給定任務(wù)中表現(xiàn)得越來(lái)越好。上圖倉(cāng)庫(kù) docs/images/6-images/7.1-1.png直觀展示了這一閉環(huán)智能體基于當(dāng)前狀態(tài) $s_t$ 選擇動(dòng)作 $a_t$環(huán)境接收動(dòng)作后更新?tīng)顟B(tài)并返回獎(jiǎng)勵(lì) $r_t$如此往復(fù)進(jìn)入下一輪迭代。6.4.2 強(qiáng)化學(xué)習(xí)的目標(biāo)強(qiáng)化學(xué)習(xí)的目標(biāo)十分明確通過(guò)在給定環(huán)境中反復(fù)試探和學(xué)習(xí)使得智能體能夠選擇一系列動(dòng)作從而最大化其總累計(jì)獎(jiǎng)勵(lì)。可以用玩游戲來(lái)類(lèi)比玩家的目標(biāo)是通過(guò)一系列操作走路、跳躍、打怪來(lái)贏得高分或完成關(guān)卡在強(qiáng)化學(xué)習(xí)中這種高分或成功通過(guò)關(guān)卡的概念就對(duì)應(yīng)于最大化獎(jiǎng)勵(lì)。數(shù)學(xué)表達(dá)在數(shù)學(xué)上這個(gè)目標(biāo)可以表示為訓(xùn)練一個(gè)策略 $\pi$使得在所有狀態(tài) $s$ 下智能體選擇的動(dòng)作能夠使回報(bào) $R(\tau)$ 的期望值最大化。具體來(lái)說(shuō)我們希望最大化以下期望值$$ E(R(\tau)){\tau \sim P{\theta}(\tau)} \sum_{\tau} R(\tau) P_{\theta}(\tau) $$其中$E(R(\tau)){\tau \sim P{\theta}(\tau)}$表示在策略 $P_{\theta}(\tau)$ 下軌跡 $\tau$ 的回報(bào) $R(\tau)$ 的期望值$R(\tau)$軌跡 $\tau$ 的回報(bào)即從起始狀態(tài)到終止?fàn)顟B(tài)獲得的所有獎(jiǎng)勵(lì)的總和$\tau$一條軌跡即智能體在環(huán)境中的狀態(tài)和動(dòng)作序列$P_{\theta}(\tau)$在參數(shù) $\theta$ 下生成軌跡 $\tau$ 的概率通常由策略或策略網(wǎng)絡(luò)確定$\theta$策略的參數(shù)控制著策略 $P_{\theta}$ 的行為。為了找到這個(gè)策略我們使用梯度上升的方法不斷更新策略參數(shù) $\theta$使得 $E(R(\tau)){\tau \sim P{\theta}(\tau)}$ 不斷增大。適用領(lǐng)域與典型代表這種學(xué)習(xí)方式非常有效因?yàn)樗灰蕾?lài)于大量標(biāo)注數(shù)據(jù)而是通過(guò)對(duì)環(huán)境直接進(jìn)行交互和反饋進(jìn)行學(xué)習(xí)。這使得強(qiáng)化學(xué)習(xí)在機(jī)器人控制、自動(dòng)駕駛、金融交易乃至游戲中都展現(xiàn)出巨大潛力。在大模型領(lǐng)域AlphaGo、AlphaZero 等系統(tǒng)正是通過(guò)強(qiáng)化學(xué)習(xí)不斷優(yōu)化策略最終在圍棋、象棋等項(xiàng)目中擊敗人類(lèi)頂尖選手。強(qiáng)化學(xué)習(xí)同樣可以用于偏好對(duì)齊問(wèn)題例如讓大模型學(xué)習(xí)模仿人類(lèi)的交流方式它也廣泛應(yīng)用于自動(dòng)駕駛等領(lǐng)域。未來(lái)強(qiáng)化學(xué)習(xí)的應(yīng)用場(chǎng)景還會(huì)更加廣泛。6.4.3 獎(jiǎng)勵(lì)模型讓偏好可量化從人類(lèi)反饋到自動(dòng)打分在完成初步的指令微調(diào)后我們還希望模型的回答不僅正確還能最大程度滿(mǎn)足人類(lèi)的審美、價(jià)值觀和安全標(biāo)準(zhǔn)。為此引入了RLHFReinforcement Learning from Human Feedback基于人類(lèi)反饋的強(qiáng)化學(xué)習(xí)。在 RLHF 中我們首先從人類(lèi)標(biāo)注者那里獲得對(duì)模型回答的偏好例如給出多個(gè)模型回答讓人類(lèi)標(biāo)注者對(duì)它們進(jìn)行排名然后通過(guò)這些反饋來(lái)指導(dǎo)模型學(xué)習(xí)從而不斷提高模型生成內(nèi)容與人類(lèi)偏好的契合度。為了在 RLHF 流程中自動(dòng)對(duì)模型的回答進(jìn)行打分賦予獎(jiǎng)勵(lì)需要構(gòu)建一個(gè)專(zhuān)門(mén)的獎(jiǎng)勵(lì)模型Reward Model。這個(gè)獎(jiǎng)勵(lì)模型會(huì)根據(jù)人類(lèi)標(biāo)注的數(shù)據(jù)進(jìn)行訓(xùn)練并在實(shí)際部署中獨(dú)立對(duì)模型輸出進(jìn)行自動(dòng)評(píng)分從而減少持續(xù)人工參與的成本和延遲。獎(jiǎng)勵(lì)模型在整體管線中的位置可以這樣理解完整的后訓(xùn)練管線預(yù)訓(xùn)練在無(wú)標(biāo)注語(yǔ)料上學(xué)習(xí)語(yǔ)言能力SFT指令微調(diào)學(xué)會(huì)按人類(lèi)指令和對(duì)話(huà)格式生成內(nèi)容對(duì)應(yīng) docs/chapter6/code/finetune.py 的實(shí)踐獎(jiǎng)勵(lì)模型訓(xùn)練用人類(lèi)偏好數(shù)據(jù)訓(xùn)練一個(gè)自動(dòng)評(píng)分器替代人工打分強(qiáng)化學(xué)習(xí)優(yōu)化以獎(jiǎng)勵(lì)模型的分?jǐn)?shù)作為獎(jiǎng)勵(lì)信號(hào)通過(guò)強(qiáng)化學(xué)習(xí)如 PPO、DPO 等算法進(jìn)一步優(yōu)化策略模型。其中獎(jiǎng)勵(lì)模型是承上啟下的關(guān)鍵組件——它將模糊的人類(lèi)喜好轉(zhuǎn)化為可優(yōu)化的數(shù)值信號(hào)。6.4.4 偏好數(shù)據(jù)集構(gòu)建在構(gòu)建獎(jiǎng)勵(lì)模型之前首先需要準(zhǔn)備高質(zhì)量的人類(lèi)反饋數(shù)據(jù)集。此數(shù)據(jù)集的核心目標(biāo)是為每條給定的提示prompt提供多個(gè)候選回答completion并由人類(lèi)標(biāo)注者對(duì)這些回答進(jìn)行細(xì)致的評(píng)定與排序。通過(guò)對(duì)回答的對(duì)比和篩選我們可以為機(jī)器模型提供明確的參考標(biāo)準(zhǔn)幫助其學(xué)習(xí)在給定任務(wù)下如何生成更符合人類(lèi)期望的輸出。數(shù)據(jù)收集三步走收集初始回答首先從一個(gè)已經(jīng)過(guò)基本微調(diào)的大模型往往是具有一定指令理解和生成能力的預(yù)訓(xùn)練模型中為一組精心設(shè)計(jì)的提示生成多條回答這些回答將作為后續(xù)人類(lèi)標(biāo)注工作的基礎(chǔ)。人工標(biāo)注與評(píng)估擁有多條候選回答后邀請(qǐng)專(zhuān)業(yè)標(biāo)注人員或眾包標(biāo)注者對(duì)每條回答的質(zhì)量進(jìn)行評(píng)價(jià)。評(píng)估通常會(huì)基于一系列預(yù)先設(shè)計(jì)的評(píng)價(jià)標(biāo)準(zhǔn)如回答的準(zhǔn)確性、完整性、上下文相關(guān)性、語(yǔ)言流暢度以及是否遵循道德與安全準(zhǔn)則。對(duì)不同回答的比較與排序幫助識(shí)別最佳和最差的回答從而形成有價(jià)值的訓(xùn)練數(shù)據(jù)。數(shù)據(jù)格式化與整理標(biāo)注完成后將數(shù)據(jù)進(jìn)行整理與格式化通常采用 JSON、CSV 或其他便于計(jì)算機(jī)處理的結(jié)構(gòu)化數(shù)據(jù)格式。數(shù)據(jù)集中需明確標(biāo)識(shí)每個(gè)問(wèn)題prompt、其對(duì)應(yīng)的多個(gè)回答completions以及人類(lèi)標(biāo)注者對(duì)這些回答的選擇如標(biāo)記為 chosen 的最佳答案與 rejected 的較差答案。這些標(biāo)記信息可直接作為獎(jiǎng)勵(lì)模型學(xué)習(xí)的監(jiān)督信號(hào)使其在訓(xùn)練中自動(dòng)傾向于生成高質(zhì)量回答。數(shù)據(jù)示例下面是一個(gè)簡(jiǎn)單的數(shù)據(jù)示例展示兩個(gè)問(wèn)題question及其對(duì)應(yīng)的回答和人類(lèi)評(píng)價(jià)結(jié)果。通過(guò) chosen 與 rejected 字段的對(duì)比可以直觀看出哪條回答更為優(yōu)質(zhì)[ { question: Python中的列表是什么, chosen: Python中的列表是一種有序的可變?nèi)萜髟试S存儲(chǔ)多個(gè)元素并且可以通過(guò)索引訪問(wèn)。, rejected: Python中的列表用于存儲(chǔ)數(shù)據(jù)。 }, { question: Python中的元組是什么, chosen: Python中的元組是一種有序的不可變?nèi)萜髟试S存儲(chǔ)多個(gè)元素并且一旦創(chuàng)建就不能修改。, rejected: Python中的元組用于存儲(chǔ)數(shù)據(jù)。 } ]在上述示例中人類(lèi)標(biāo)注者認(rèn)為 chosen 字段下的回答相對(duì)于對(duì)應(yīng)的 rejected 回答在描述、準(zhǔn)確性和信息量等方面都更為優(yōu)質(zhì)。例如對(duì)于列表的定義chosen 答復(fù)更清晰地解釋了列表的特征有序、可變、支持索引訪問(wèn)而非僅僅停留在用于存儲(chǔ)數(shù)據(jù)這種籠統(tǒng)描述。從 SFT 數(shù)據(jù)到偏好數(shù)據(jù)的差異對(duì)比倉(cāng)庫(kù) docs/chapter6/code/finetune.py 中 SFT 數(shù)據(jù)的conversations多輪對(duì)話(huà)格式可以發(fā)現(xiàn)偏好數(shù)據(jù)集的結(jié)構(gòu)差異非常明顯SFT 數(shù)據(jù)關(guān)注給定指令標(biāo)準(zhǔn)回答是什么監(jiān)督信號(hào)是唯一的目標(biāo)文本偏好數(shù)據(jù)關(guān)注多個(gè)回答中哪個(gè)更好監(jiān)督信號(hào)是回答之間的相對(duì)優(yōu)劣chosen vs rejected這正是獎(jiǎng)勵(lì)模型排序式訓(xùn)練所需的輸入形式。6.4.5 獎(jiǎng)勵(lì)模型訓(xùn)練基于 TRL 框架說(shuō)明原文此節(jié)編號(hào)為 7.2.2與本章章節(jié)號(hào)6.4不一致本文按章節(jié)順序修正為 6.4.5內(nèi)容保持一致。我們可以借助大模型強(qiáng)化學(xué)習(xí)框架TRLTransformer Reinforcement Learning來(lái)訓(xùn)練獎(jiǎng)勵(lì)模型。TRL 是一個(gè)基于強(qiáng)化學(xué)習(xí)的訓(xùn)練框架旨在通過(guò)人類(lèi)反饋指導(dǎo)模型生成更符合人類(lèi)期望的回答。在 TRL 中我們會(huì)將獎(jiǎng)勵(lì)模型作為一個(gè)獨(dú)立的組件用于評(píng)估模型生成的回答并根據(jù)評(píng)估結(jié)果給予獎(jiǎng)勵(lì)或懲罰。獎(jiǎng)勵(lì)模型的核心思想獎(jiǎng)勵(lì)模型的訓(xùn)練本質(zhì)上是排序?qū)W習(xí)Learning to Rank輸入同一條 prompt 下的兩條回答chosen 與 rejected模型為兩條回答各輸出一個(gè)標(biāo)量分?jǐn)?shù)訓(xùn)練目標(biāo)就是讓 chosen 回答的分?jǐn)?shù)顯著高于 rejected 回答的分?jǐn)?shù)。在 happy-llm 中的實(shí)踐定位需要注意的是當(dāng)前 happy-llm 倉(cāng)庫(kù)第六章的配套代碼docs/chapter6/code主線覆蓋的是預(yù)訓(xùn)練pretrain.py與指令微調(diào)finetune.py兩部分環(huán)境依賴(lài)見(jiàn) requirements.txt其中已包含transformers、datasets、torch、deepspeed等訓(xùn)練基礎(chǔ)組件。偏好對(duì)齊RLHF / 獎(jiǎng)勵(lì)模型 / DPO / KTO 等屬于進(jìn)階后訓(xùn)練主題建議的學(xué)習(xí)路徑是先完成第六章正文 6.16.3Pretrain、SFT、PEFT/LoRA的實(shí)踐掌握Trainer、TrainingArguments與 DeepSpeed 的用法再按本文內(nèi)容準(zhǔn)備好偏好數(shù)據(jù)集chosen / rejected 格式最后在現(xiàn)有訓(xùn)練環(huán)境中引入 TRL 框架將獎(jiǎng)勵(lì)模型作為獨(dú)立組件接入即可銜接 PPO、DPO 等偏好優(yōu)化算法。小結(jié)本文圍繞 happy-llm 倉(cāng)庫(kù)第六章的偏好對(duì)齊專(zhuān)題系統(tǒng)梳理了從強(qiáng)化學(xué)習(xí)原理到 RLHF 獎(jiǎng)勵(lì)模型構(gòu)建的完整鏈條原理層面掌握狀態(tài)、動(dòng)作、獎(jiǎng)勵(lì)、策略、價(jià)值函數(shù)五大要素理解智能體與環(huán)境的交互閉環(huán)以及最大化累計(jì)獎(jiǎng)勵(lì)的數(shù)學(xué)目標(biāo)與梯度上升優(yōu)化思路動(dòng)機(jī)層面理解指令微調(diào)SFT與偏好對(duì)齊的分工明確獎(jiǎng)勵(lì)模型在 RLHF 管線中的承上啟下作用數(shù)據(jù)層面掌握人類(lèi)偏好數(shù)據(jù)集的收集、標(biāo)注、格式化流程以及 chosen / rejected 字段的標(biāo)準(zhǔn) JSON 結(jié)構(gòu)訓(xùn)練層面了解基于 TRL 框架訓(xùn)練獎(jiǎng)勵(lì)模型的定位與后續(xù)銜接方式。倉(cāng)庫(kù)第六章的代碼資源docs/chapter6/code為上述內(nèi)容提供了 Pretrain 與 SFT 的落地實(shí)踐基礎(chǔ)偏好對(duì)齊可作為掌握訓(xùn)練主線后的進(jìn)階方向繼續(xù)深入?!久赓M(fèi)下載鏈接】happy-llm 從零開(kāi)始構(gòu)建大模型項(xiàng)目地址: https://gitcode.com/GitHub_Trending/ha/happy-llm創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考