【Datawhale】大模型基础与量化微调-t5
奖励模型构建(RM): 由于我们希望根据人类偏好优化模型,但又因为成本和延迟,在强化学习训练期间无法与人类进行交互查询,所以我们首先训练一个单独的模型(通常与微调语言模型架构类似,核心是在LLM最后一层(hidden state)添加一个线性层,输出一个标量表示在提示语境下给定相应的预测奖励或偏好分数,规模可大可小一般来说是使用比RL策略模型大得多的,可以提供质量更好的奖励信号)来预测人类偏好,这
RLHF
无论是全量微调还是PEFT,本质都是有监督微调(supervised fine-tuing),即用问答对数据来微调模型,但单独的SFT往往难以涵盖人类偏好的全部范围,尤其是在处理复杂指示、安全性或像实用性这类细微或没有准确答案的情况时:
- 缺乏泛化能力:模型只能很好地相应书籍及中出现过的指令模式,对于人类的复杂意图并不能做到完全覆盖
- 对于人类的风格的对齐不足,无法更像一个人
所以需要人类反馈去直接对齐,使其懂得人类的偏好,而不是增加更大的参数规模
RLHF首先拟合反映人类偏好的奖励模型,然后使用强化学习对大型无监督 LM 进行微调,以最大限度地提高这个估计的奖励,而不会偏离原始模型太远
对齐训练通常分为三个阶段:
-
监督微调(SFT): 这一初始阶段使用精心整理的高质量提示和期望响应数据集,将预训练的LLM适应到目标应用方向或风格。可以将其看作是教授模型预期的基本格式和风格。其成果是一个“SFT模型”,作为后续强化学习阶段的起点。
-
SFT通过精选的高质量问答对数据集来微调基础lm,来提高lm默认参数下对于具体任务的对齐和具体指令的遵循能力,从而带来更稳定的RL训练
经验上,高质量数据集一般遵循:
- 对齐: 必须直接反应期望的特征,例如无害性、诚实性、特定角色、特定语气等
- 指令遵循: 应完整的、写作风格、语法正确的、逻辑清晰的回答问题(即便篇幅不够用),对于复杂的提示,应体现提示中所有的重点
- 准确性: 对于需要事实的提示,应给出对应事实准确的回答
- 多样性: 不同输出风格的提示、不同提示长度和复杂程度、多样性的用户意图、拥有长尾分布的提示数据集、但不能包括拒绝回答合理提示的问答对
-
除了构建适应性的llm,sft也定义了行为“baseline”,教导模型:
- 遵循指令:如何去理解提示中给出的指令
- 输出格式:如markdown,是否使用列表等
- 风格:学习SFT数据中隐含或明示的角色等,使用输出的风格
-
经过SFT之后的模型,也作为RL阶段PPO算法中使用的KL散度惩罚的参考策略
- 保持SFT阶段学习到的通用能力和知识,保持SFT阶段设定的偏好
- 类似于正则化,防止模型钻RM的漏洞
-
评估:一般需要结合量化指标和人工评估
- 困惑度(PPL):在之前的NLP应用中,PPL简单理解就是模型说的是不是人话,在SFT阶段可能表示重复文本过多,表示过拟合情况的指标
- ROUGE、BLEU:常用于机器翻译,BLEU 衡量 n-gram 精度,对过短的生成进行惩罚、ROUGE常用于摘要任务,ROUGE 变体(ROUGE-1, ROUGE-2, ROUGE-L)分别衡量一元词、二元词和最长公共子序列的重叠,在有关生成应与特定参考文本密切匹配的SFT任务中使用,对于开放任务无意义
- 使用GPT等更好的模型去评价SFT模型的输出
- 人工评估:衡量定性的评价、也可以对SFT模型输出定量结果给出1-5星或者排序、也可以由使用者选择并解释两个输出中更好的(rm)
-
-
奖励模型构建(RM): 由于我们希望根据人类偏好优化模型,但又因为成本和延迟,在强化学习训练期间无法与人类进行交互查询,所以我们首先训练一个单独的模型(通常与微调语言模型架构类似,核心是在LLM最后一层(hidden state)添加一个线性层,输出一个标量表示在提示语境下给定相应的预测奖励或偏好分数,模型规模可大可小一般来说是使用比RL策略模型大得多的,可以提供质量更好的奖励信号)来预测人类偏好,这就是奖励模型(RM)
从概率选择模型(如Bradley-Terry模型)中获得启发,针对一个给定的提示,会向人类展示由SFT模型(或其他模型)生成的多个响应,并要求他们进行排序或选择最佳响应。这种偏好数据(例如,其中一个响应优于另一个的响应对)用于训练RM RM以提示和生成的响应作为输入,输出一个标量奖励分数,该分数理想情况下与人类偏好该响应的可能性相关
rϕr_{\phi}rϕ是RM、ywy_wyw是比yly_lyl更受偏好的回答、σ\sigmaσsigmoid函数
P(yw≻yl∣x)=σ(r(x,yw)−r(x,yl)) P(y_w\succ y_l|x)=\sigma(r(x,y_w)-r(x,y_l)) P(yw≻yl∣x)=σ(r(x,yw)−r(x,yl))
损失函数:
loss(θ)=−E(x,yw,yl)∼D[log(σ(rθ(x,yw)−rϕ(x,yl)))] \mathrm{loss}(\theta)=-\mathbb{E}_{(x,y_w,y_l)\sim\mathcal{D}}\left[\log(\sigma(r_\theta(x,y_w)-r_\phi(x,y_l))\right)] loss(θ)=−E(x,yw,yl)∼D[log(σ(rθ(x,yw)−rϕ(x,yl)))] -
近端策略优化(PPO): 在最后阶段,SFT模型(现在作为初始策略)使用强化学习进行进一步微调。环境包括接收提示、生成响应,并从RM获得奖励。目标是调整最后策略模型的参数,以最大化RM预测的预期奖励,有效地教导模型生成RM评分高的响应,也不要偏离原始的sft模型策略,防止内容不合理或风格不一致的输出和作弊
ppo常在此处使用,客服传统RL的高方差、训练不稳定问题-
它的核心机制无论是通过KL散度惩罚还是通过目标裁剪,都限制策略模型在每个更新步骤中可以改变的程度
-
在线策略允许收集多个批次数据来进行多个优化周期
RLHF的PPO优化过程包含了这个双重目标。对于从分布
DDD中采样得到的给定提示xxx以及当前策略πθ(y∣x)\pi_\theta(y|x)πθ(y∣x)生成的响应yyy每个问答对的期望都包含了奖励以及基于当前策略与参考SFT策略之间KL 散度的惩罚
期望(x,y)=rϕ(x,y)−βDKL(πθ(y∣x)∣∣πSFT(y∣x)) ① 期望(x,y)=r_\phi(x,y)-\beta D_{KL}(\pi_\theta(y|x)||\pi_{SFT}(y|x)) \text{ ①} 期望(x,y)=rϕ(x,y)−βDKL(πθ(y∣x)∣∣πSFT(y∣x)) ①
rϕ(x,y)r_\phi(x,y)rϕ(x,y)是训练好的奖励模型分配给问答对(x,y)的奖励,我们要最大化这个值
DKL(πθ(y∣x)∣∣πSFT(y∣x))D_{KL}(\pi_\theta(y|x)||\pi_{SFT}(y|x))DKL(πθ(y∣x)∣∣πSFT(y∣x))是在当前策略πθ\pi_\thetaπθ给定提示xxx的回答yyy的概率分布与参考sft策略πsft\pi_{sft}πsft之间的KL散度,较低的值表示更相似
β\betaβ超参数,控制KL惩罚的强度 -
PPO的Actor-critic风格(style)实现
-
Actor策略网络就是语言模型本身,在给定提示输入后,生成token
-
价值网络(critic)估计给定状态下的预期累计未来奖励,PPO中依据它减少策略梯度更新的方差,在模型最终hidden state后添加一个线性层以输出此值,随机初始化参数
函数定义Vθ(S)V_\theta(S)Vθ(S),给定状态s(问题/提示加上现在已生成的序列),它预测策略从该状态起的动作a预期获得的总奖励
通常使用广义优势估计GAE等方法,量化某个动作相对于该状态下平均动作aaa的价值大致为:A(s,a)≈R(s,a)+γVϕ(s′)−Vϕ(s) ②A(s,a)\approx R(s,a)+\gamma V_\phi(s^{\prime})-V_\phi(s) \text { ②}A(s,a)≈R(s,a)+γVϕ(s′)−Vϕ(s) ②其中R(s,a)R(s,a)R(s,a)是rθr_\thetarθ(RM)结果,s′s \primes′下一个状态超参数γ\gammaγ是折扣因子(Discount=0.99)
最小化Vθ(s)V_\theta(s)Vθ(s)与在PPO推演阶段计算出的结果之间的MSE -
策略网络和价值网络之间会共享参数,以SFT模型作为基础,在强化学习的每次前向传播中,输入提示用共享的LLM处理,最终的hidden state随后送到两个单独的head
- 策略head:通常是原始的语言模型head,输出词表Logits,即董总采样
- value head:线性层,输出标量,用于优势估计
-
广义优势估计 (GAE) 是一种旨在通过融合多个时间步的信息来降低这种方差的技术,它有效地将单步TD(Temporal-Difference时序差分,利用已获得的即时奖励和后续状态的预估价值来更新当前状态的价值估计,这个过程被称为“自举”(Bootstrapping) )误差与更长期的蒙特卡洛回报相结合,GAE引入了λ∈[0,1]\lambda\in[0,1]λ∈[0,1](GAE lambda)
PPO的优化目标评估了生成特定token(动作)在当前已生成的token序列(状态)下的价值,忽略了长期影响,所以必须考虑总累计奖励(回报)并与V(S)V(S)V(S)提供的基准比较
- 回报计算
回报GtG_tGt表示从时间步ttt开始倒结束生成的序列所获得的总折扣奖励,对于总长度为TTT的序列
Gt=∑k=0T−t−1γkrt+k+1G_t=\sum_{k=0}^{T-t-1}\gamma^kr_{t+k+1}Gt=k=0∑T−t−1γkrt+k+1
rt+k+1r_{t+k+1}rt+k+1是在状态st+ks_{t+k}st+k中采取动作后获得的奖励(式①),在完成最后一步时,添加RM模型得分
折扣因子γ∈[0,1]\gamma\in[0,1]γ∈[0,1]决定了未来奖励的现值。接近1的γ\gammaγ赋予未来奖励更多权重,而接近0的γ\gammaγ则优先考虑即时奖励。对于文本生成任务γ\gammaγ通常设为接近1(例如0.99、1.0,论文为1),因为质量评估(通过奖励模型)常依赖于完整序列 - 优势函数
A(s,a)衡量在状态sts_tst中采取动作ata_tat相对于策略πθ\pi_\thetaπθ状态V(St)V(S_t)V(St)的预期值的相对价值(式②),其中Q(st,at)≈rt+1+γV(st+1)Q(s_t,a_t)\approx r_{t+1}+\gamma V(s_{t+1})Q(st,at)≈rt+1+γV(st+1) rt+1r_{t+1}rt+1是即时奖励,Q(st,at)Q(s_t,a_t)Q(st,at)是动作-值函数,表示在状态sgsgsg中采取动作ata_tat并随后遵循策略πθ\pi_θπθ后的预期回报,带入式②得到时序差分误差δt\delta_tδt,标准式记为,A^t≈δt=rt+1+γV(st+1)−V(st)\hat{A}_t\approx\delta_t=r_{t+1}+\gamma V(s_{t+1})-V(s_t)A^t≈δt=rt+1+γV(st+1)−V(st)常用作基本的优势估计器,显示观察到的结果(rt+1+γV(st+1))(r_{t+1}+\gamma V(s_{t+1}))(rt+1+γV(st+1))是否比V(st)V(s_t)V(st)更好 - 用GAE处理高方差
尽管是优势的无偏估计(当V准确),可因他严重依赖单步奖励rt+1r_{t+1}rt+1和下一次状态值估计V(st+1)V(s_{t+1})V(st+1),导致可能出现高方差问题,导致PPO更新不稳定
GAE的优势估计函数:
A^tGAE(γ,λ)=∑k=0T−t−1(γλ)kδt+k\hat{A}_t^{GAE(\gamma,\lambda)}=\sum_{k=0}^{T-t-1}(\gamma\lambda)^k\delta_{t+k}A^tGAE(γ,λ)=k=0∑T−t−1(γλ)kδt+k
δt+k=rt+k+1+γV(st+k+1)−V(st+k)\delta_{t+k}=r_{t+k+1}+\gamma V(s_{t+k+1})-V(s_{t+k})δt+k=rt+k+1+γV(st+k+1)−V(st+k)是时间步t+k的TD误差 - 若λ=0\lambda=0λ=0,A^tGAE(γ,0)=δt\hat A_t^{GAE(\gamma,0)}=\delta_tA^tGAE(γ,0)=δt,即高方差低偏差的一步TD误差
- 若λ=1\lambda=1λ=1,A^tGAE(γ,1)=∑k=0T−t−1γkδt+k\hat A_t^{GAE(\gamma,1)}=\sum_{k=0}^{T-t-1}\gamma^k\delta _{t+k}A^tGAE(γ,1)=∑k=0T−t−1γkδt+k,这扩展为∑k=0T−t−1γk(rt+k+1+γV(st+k+1)−V(st+k))\sum_{k=0}^{T-t-1}\gamma^k(r_{t+k+1}+\gamma V(s_{t+k+1})-V(s_{t+k}))∑k=0T−t−1γk(rt+k+1+γV(st+k+1)−V(st+k)),此和项可小区并近似蒙特卡洛优势估计Gt−V(st)G_t-V(s_t)Gt−V(st),后者通常具有较低的方差,但值函数V不准确,可能出现偏差,对于长序列TTT尤其如此
- 0<λ<10<\lambda<10<λ<1,平衡了偏差与方差,实践中,λ=0.95\lambda=0.95λ=0.95比较常见

- 实现细节
通常使用TRL等库的RLHF实现中,PPO的rollout阶段,对于策略直到生成完毕的序列的每个token,会存储以下:- 状态sts_tst(已生成序列)
- 所选动作做(token)的对数概率logπθ(at∣st)log\pi\theta(a_t|s_t)logπθ(at∣st)
- 评论critic网络得到的值估计V(st)V(s_t)V(st)
- 奖励中KL散度惩罚部分,记为rKL,tr_{KL,t}rKL,t
直到生成一批完整的序列
- 计算每个序列xxx的最终奖励模型得分R(x)R(x)R(x),并添加到最终步TTT的奖励中
- 使用值函数V(st)V(s_t)V(st)计算每个序列中所有步tttTD误差δt=rt+1+γV(st+1−V(st))\delta_t=r_{t+1}+\gamma V(s_{t+1}-V(s_t))δt=rt+1+γV(st+1−V(st))(从T−1T-1T−1向后计算,将V(sT)V(s_T)V(sT)=0)
- 用计算出的TD误差δt,δt+1,...,δT−1\delta t,\delta_{t+1},...,\delta_{T-1}δt,δt+1,...,δT−1以及选定的γ\gammaγ和λ\lambdaλ计算所有步ttt的GAE优势估计A^tGAE\hat A_t^{GAE}A^tGAE,通过对序列进行另一次反向传播完成
- 初始化A^TGAE\hat A_T^{GAE}A^TGAE=0
- 对于t=T−1t=T-1t=T−1到0
A^tGAE=δt+γλA^t+1GAE\hat A_t^{GAE}=\delta_t+\gamma\lambda\hat A_{t+1}^{GAE}A^tGAE=δt+γλA^t+1GAE
- 计算出的回报GtG_tGt(常使用Gt≈A^tGAE+V(st)G_t\approx\hat{A}_t^{GAE}+V(s_t)Gt≈A^tGAE+V(st))被用作训练值函数V(st)V(s_t)V(st)的目标,通过MSE等损失函数进行LVF=E[(Vϕ(st)−Gttarget)2]L_{VF}=\mathbb{E}[(V_{\phi}(s_{t})-G_{t}^{target})^{2}]LVF=E[(Vϕ(st)−Gttarget)2]
- 计算出的GAE优势A^tGAE\hat A_t^{GAE}A^tGAE直接用于PPO策略损失函数中,以更新策略参数θ\thetaθ
在PPO损失计算中使用优势之前,通常会将一个批次内的优势进行归一化。这包括减去均值并除以批次内优势的标准差,有助于通过防止过大的策略更新来稳定训练。
通过仔细计算回报并使用GAE估计优势,我们为PPO算法提供了一个稳定且提供信息的信号,以引导LLM策略生成与奖励模型所捕获偏好更一致的响应,同时减轻与高方差梯度估计相关的不稳定性
ref: https://zhuanlan.zhihu.com/p/22431139619 - 回报计算
-
-
DPO
上述的RLHF流程(SFT->奖励模型->PPO)虽然有效但是比较复杂,训练RM会带来校准和潜在不确定性方面的问题,随后的PPO微调需仔细调整参数以保持稳定
DPO重新定义了对齐问题,绕过了显式RM训练和PPO等在线强化学习优化的复杂,直接用人类偏好与策略更新之间的直接对应关系,DPO推导出一个损失函数,允许直接使用偏好数据(x,yw,yl)(x,y_w,y_l)(x,yw,yl)优化πθ\pi\thetaπθ- DPO损失函数
通过KL约束奖励最大化问题的最优解LDPO(πθ;πref)=−E(x,yw,yl)∼D[logσ(βlogπθ(yw∣x)πref(yw∣x)−βlogπθ(yl∣x)πref(yl∣x))].(7)\mathcal{L}_{\mathrm{DPO}}(\pi_\theta;\pi_{\mathrm{ref}})=-\mathbb{E}_{(x,y_w,y_l)\sim\mathcal{D}}\left[\log\sigma\left(\beta\log\frac{\pi_\theta(y_w\mid x)}{\pi_\mathrm{ref}(y_w\mid x)}-\beta\log\frac{\pi_\theta(y_l\mid x)}{\pi_\mathrm{ref}(y_l\mid x)}\right)\right].\quad(7)LDPO(πθ;πref)=−E(x,yw,yl)∼D[logσ(βlogπref(yw∣x)πθ(yw∣x)−βlogπref(yl∣x)πθ(yl∣x))].(7)
- DPO损失函数
-
更多推荐


所有评论(0)