LLM —— RL4LLM
从本质看为什么需要做RLHF
大语言模型的核心能力来源于对海量文本数据的预训练,训练过程是一种自监督学习,比如语言建模任务中的预测下一个token。SFT使用自然语言形式的指令数据对预训练LLM进行参数微调,激活模型的指令遵循能力。SFT的训练方式导致模型仅仅学习数据中的统计模式,没有考虑人类价值观、社会伦理或用户真实意图,可能生成具有偏见、冒犯性、事实错误甚至有害的内容。产生这个问题的原因一是数据偏差:SFT的训练数据来源于互联网文本,其中不可避免地会包含社会偏见、错误信息和不当内容;原因二是目标函数不匹配:预训练目标比如最大似然估计与人类期望之间缺乏对齐机制,模型在追求泛化能力的同时,可能会牺牲安全性和可控性。人类对齐标准3H 有用性Helpfulness、诚实性Honesty、无害性Harmlessness难以通过SFT直接形式化建模,因此人类反馈的强化学习(Reinforcement Learning from Human Feedback, RLHF)引入人类反馈对大语言模型的行为进行指导。
以上是经典的解释做RLHF的原因:需要做人类对齐。那我们从本质上看,为什么需要做RLHF?
从学习方式来看,SFT采用“行为克隆”(Behavior Cloning)方法,本质上是模仿学习的一种,目标是最小化模型分布和专家分布的差异,通过教师强制直接优化模型对示例输出的token级预测概率。SFT的训练过程是一个让模型学习条件概率的过程,训练中预估最大概率的next token,孤立错误token概率的生成,是没办法提供负反馈的。更新token时只参考前面的信息,是一种局部有偏的训练,这种局部优化依赖高质量的示例数据模仿教师行为。当指令数据超出模型知识范围时,容易产生幻觉。
RLHF的监督信息从生成式退化为验证式,使用偏好标注的方式减轻了不一致问题,降低了对监督信息质量和标注难度的要求。RLHF将语言模型视为一个策略,动作是选择下一个token,状态是已经生成的token序列,奖励由奖励模型提供,目标是最大化累计奖励,这个奖励函数就反应了人类偏好。RLHF的文本生成被建模为序列决策过程,在每个token更新概率时可以观察到整个句子,通过奖励模型提供文本级的全局优化信号,这种奖励信号避免了SFT的token级短视优化,这种token级的reward不准也导致了RL训练更难。本质上RLHF的训练是一种加权的监督学习,reward的权重是负数是相当于加入惩罚,提供了负反馈,引入了策略优化和探索,能处理更复杂的偏好关系。
从强化学习策略学习的角度看,On-policy与Off-policy,这两种策略的区别在于用于学习的策略和用于与环境交互并生成数据的策略是否是同一个。
SFT的本质是行为克隆,它要求训练数据分布与要学习的理想策略分布一致,这完全符合on-policy的定义:用目标策略本身(专家)产生的数据来优化这个目标策略。模型学习所使用的数据是由“专家”这个完美策略产生的。我们无法用一个随机的、没有训练好的模型生成的数据来训练它自己,因为那样会学到错误的行为。模型必须遵循(on)我们想要它学习的那个完美策略(policy)所产生的数据来进行学习。
RLHF结合了off-policy学习,也就是on-off都可以。PPO是Off-policy的,PPO通过重要性采样来修正 行为策略 和 评估策略 之间的分布差异,允许从旧策略中采样的数据被反复利用来优化新的策略,极大地提高了数据利用率和训练稳定性。
RLHF
2022年3月OpenAI在论文《Training Language Models to Follow Instructions with Human Feedback》中提出使用RLHF方法对齐LLM,利用RLHF训练的1.3B的InstructGPT模型在多项任务上超越175B的GPT-3。RLHF的整体流程是首先收集人类对模型输出的偏好反馈,训练一个奖励模型,再利用这个奖励模型通过强化学习算法微调语言模型,让它生成更符合人类偏好的内容。所以RLHF的三个主要阶段就是:
- 监督微调:使用高质量的指令-输出对数据对预训练模型进行有监督微调,让它具备基本的指令遵循能力。
- 奖励模型训练:使用人类对多个模型输出的偏好数据训练一个奖励模型,让它能够预测人类对模型输出的偏好程度。
- 强化学习训练:使用奖励模型作为奖励信号,通过强化学习算法进一步微调语言模型,让它生成更符合人类偏好的内容。
人类反馈数据的收集
标注人员需具备高教育背景和语言能力。比如Sparrow要求标注者为英国本土英语母语者,且至少拥有本科学历。InstructGPT通过评估标注者与研究人员之间的一致性来筛选标注者,确保反馈数据的可靠性。反馈数据的形式通常有2种:1种是基于评分的,标注者根据预设标准对输出打分,比如对无害性标准,违反规则扣分,遵守规则加分,也可使用已对齐的LLM比如GPT4进行自动化评分。第2种是基于排序的:标注者对多个输出进行排序,常用的是Elo评分系统,通过两两比较计算每个输出的相对得分,最终形成排序。
奖励模型的训练
奖励模型的目标是拟合人类偏好,为强化学习提供稳定的奖励信号。常用的奖励模型训练方法包括:
- 打分式:标注者为输出打分,奖励模型学习预测这个分数。损失函数通常是均方误差。𝑥,𝑦 和 $\bar{r}$ 分别表示问题输入、输出和人类标注者对输出的打分,函数 $𝑟_{𝜃}$ 表示参数为 𝜃 的奖励模型,用来对模型输出打分。这种打分方法缺点是主观性强,因为不同标注者打分标准不一致。
$$
\mathcal{L} = -\mathbb{E}_{(x,y,\bar{r})~D} \left[ (r_\theta(x,y) - \bar{r})^2 \right]
$$ - 对比式:标注者对两个输出排序,奖励模型学习区分正例和负例。这种方法降低了标注难度,提高一致性。损失函数中 𝑥,$𝑦^+$ 和 $𝑦^−$ 分别表示模型输入、正例和负例。
$$
\mathcal{L} = -\mathbb{E}_{(x,y^+,y^-)~D} \left[ \log \sigma(r_\theta(x,y^+) - r_\theta(x,y^-)) \right]
$$ - 排序式:标注者对多个输出排序,奖励模型学习全局排序关系,适用于多个输出之间的排序关系学习。假设有一个包含 𝐾 个不同输出的集合 D,这 𝐾 个不同的输出已经按照人类偏好进行排序,损失函数如下:
$$
\mathcal{L} = -\frac{1}{\binom{K}{2}} \mathbb{E}_{(x,y^+,y^-)~D} \left[ \log \sigma(r_\theta(x,y^+) - r_\theta(x,y^-)) \right]
$$
在奖励模型的训练中,我们可以通过修改训练过程的目标函数、选取合适的基座模型和设置合理的奖励计算形式等来优化训练过程。可以将最佳的模型输出所对应的语言模型损失(模仿学习损失)作为正则项,在学习最大化正负例分数差距的同时也学习基于输入 𝑥 生成正例 $𝑦^+$,缓解奖励模型在二元分类任务上的过拟合。对于基座模型的选取,使用与待对齐模型相同或更大规模的模型作为奖励模型,可以更好地理解知识和能力。针对不同对齐标准训练多个奖励模型,再加权组合。这里有一个reward hacking的概念:模型以训练者不期望的方式找到了提高reward的方式。SFT注重的是训练数据质量,RLHF的reward设计很重要。
强化学习训练
强化学习训练是一个策略梯度(Policy Gradient)优化的问题,训练策略模型在与外部环境交互的过程中学习到较好的更新策略。因为决策空间很大,通常采样算法会选取多条决策轨迹,通过计算这些决策轨迹的平均奖励来近似所有决策轨迹的期望奖励。传统的策略梯度方法(如REINFORCE)存在两个主要问题:1是样本效率低:它们是on-policy的,为了保证采样得到的策略轨迹能够近似策略模型做出的决策的期望,需要每次策略更新后用新策略重新采样数据,旧数据被丢弃;2是训练不稳定:策略的更新步长很难控制,步长太小学习缓慢,步长太大,一次糟糕的更新就可能摧毁策略性能,而且难以恢复。
PPO因此引入离线策略和更新约束。PPO使用Off-policy的训练方式,即训练过程中负责交互与负责学习的策略模型不同。也就是说,负责学习的策略模型通过另一个模型与环境交互产生的轨迹进行优化。使用离线策略的训练方法,由于采样的模型是固定的,所以同一批数据可以对负责学习的策略模型进行多次优化,来提升数据的使用效率,使训练过程更稳定。另外RLHF的训练不稳定性部分源于策略梯度方法的高方差,PPO通过裁剪和KL散度惩罚缓解这个问题,但训练过程中的超参数(如学习率、裁剪阈值)需要精细调整。PPO有以下几个技术点:
重要性采样:原理是使用在一个分布 $p$ 上采样得到的样本,来近似另一个分布 $q$ 上样本的分布。在Off-policy的强化学习训练中,需要使用策略模型 $\pi_{\theta_{old}}$ 与环境进行交互并采样决策轨迹,然后用这批采样数据多次更新新策略,使用采样得到的决策轨迹近似估算策略模型 $\pi_\theta$ 与环境交互时能获得的奖励的期望。总结一句话就是使用旧策略采样,新策略学习:
$$
J(\theta) = E_{a_t \sim \pi_{\theta_{\text{old}}}} \left[ \frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_{\text{old}}}(a_t|s_t)} \hat{A}_t \right]
$$优势估计:PPO不直接使用原始奖励,而是使用优势函数评估决策轨迹能获得的奖励。优势函数衡量的是在某个状态下采取某个特定动作相比平均情况有多好。策略梯度算法的采样具有随机性,模型优化可能并非最优决策。$ Q(s_t, a_t) $ 是动作价值函数,表示在状态 $ s_t $ 下执行动作 $ a_t $ 后能获得的期望总奖励。$ V(s_t) $ 是状态价值函数,表示从状态 $ s_t $ 开始能获得的期望总奖励。PPO中使用评价模型估计 $V(s_t)$。如果 $ \hat{A}_t > 0 $,说明这个动作比平均动作好,应该被鼓励;反之则应被抑制。优势函数提供了更稳定、更低方差的梯度信号。
$$
\hat{A}_t = Q(s_t, a_t) - V(s_t)
$$目标函数梯度裁剪:直接裁剪重要性采样比率,限制策略更新幅度防止策略更新过大。
min操作取的是未裁剪目标和裁剪后目标的较小值,这是一个悲观估计,确保不会因为某个动作的估计优势值很高而进行过度的优化。clip操作将重要性采样比率 $ r_t(\theta) $ 限制在区间 $ [1-\epsilon, 1+\epsilon] $ 内。$ \epsilon $ 是一个超参数,通常设为0.1或0.2。当优势值为正时 $ \hat A_t > 0 $,我们希望增加这个动作的概率 $ r_t(\theta) > 1 $。但如果 $ r_t(\theta) > 1+\epsilon $,它会被裁剪到 $ 1+\epsilon $,防止更新步长过大。反之同理。
$$
J_{\text{CLIP}}(\theta) = E_t \left[ \min\left( r_t(\theta) \hat{A}_t, \text{clip}(r_t(\theta), 1-\epsilon, 1+\epsilon) \hat{A}_t \right) \right]
$$奖励函数 KL 散度惩罚:这是另一种约束方式,在奖励函数中加入新旧策略之间的KL散度作为惩罚项,限制策略偏离初始模型。其中 β 是惩罚系数。KL散度衡量的是两个概率分布的差异。这个项会惩罚与旧策略差异过大的新策略,从而保证稳定性。
$$
J_{\text{KLPEN}}(\theta) = E_t \left[ r_t(\theta) \hat A_t - \beta \cdot \text{KL}[\pi_{\theta_{\text{old}}}, \pi_\theta] \right]
$$
最后总结下PPO的训练流程:第一步模型初始化:用SFT模型初始化策略模型 $ \pi_\theta $ 和参考模型 $ \pi_{\theta_{old}} $。第二步生成样本拒绝采样:用 $ \pi_{\theta_{old}} $ 生成一批文本,也就是决策轨迹,采样多个输出。第三步评估:用奖励模型为生成的文本打分,并计算优势估计 $ \hat A_t $,选择最优进行监督微调。最后进入 RL 优化更新阶段:固定 $ \pi_{\theta_{old}} $,用采样的数据,通过最小化PPO-Clip或PPO-Penalty损失函数,对 $ \pi_\theta $ 进行多轮梯度更新。将更新后的 $ \pi_\theta $ 参数复制给 $ \pi_{\theta_{old}} $,回到第二步,开始新一轮迭代。
进阶RLHF工作
- 基于过程监督的RLHF:强化学习训练的监督信号主要分为结果监督信号和过程监督信号两类。在结果监督的RLHF算法中,使用一个单独的分数来评估模型生成的整个文本的质量。而在过程监督的RLHF算法中,针对模型输出内容的每个组成部分(如句子、单词或推理步骤)分别进行评估,从而提供细粒度的监督信号来加强大语言模型的训练,引导模型尽可能高质量地生成每个组成部分,帮助模型改进不理想的生成内容。OpenAI发布的 PRM800K 数据集中,包含了数学问题细粒度标注的解题步骤,可以用于训练过程奖励模型。
- 基于AI反馈的强化学习:Anthropic提出Constitutional AI算法,使用大语言模型自我评价与修正,生成对齐数据。这是基于已经对齐的LLM的反馈,无需人工标注,降低了对齐成本。对比没有对齐的LLM的自我反馈,模型需要对自身输出打分,选择正负例,使用 DPO 进行训练,实现自我对齐。基于AI反馈的强化学习在部分任务上超越 RLHF,展现出替代人类反馈的潜力。
非强化学习的对齐方法
在RLHF的训练过程中,需要同时维护和更新多个模型,包括策略模型、奖励模型、参考模型以及评价模型。这不仅会占用大量的内存资源,而且整个算法的执行过程也相对复杂。此外,RLHF 中常用的PPO算法在优化过程中的稳定性较差,对超参数的取值比较敏感,增加了模型训练难度和不确定性。为此研究者提出一系列非强化学习对齐方法,主要基于SFT,构建高质量的对齐数据集,直接训练模型区分“对齐”和“未对齐”的行为,从而实现对人类价值观的遵循。核心是利用人类偏好数据,通过SFT直接优化模型输出,避免复杂的强化学习训练流程。下面将从数据收集、代表性算法DPO及其他监督对齐方法三个方面展开说明。
对齐数据的收集
常用的数据构造方法包括基于奖励模型的方法和基于大语言模型自我修正的方法。基于奖励模型的方法利用已训练的奖励模型对模型同一输入下的多个不同输出打分或排序,筛选出符合人类偏好的数据作为正例,不符合的作为负例。基于大语言模型的方法利用已对齐的LLM(如ChatGPT)自我生成或修正输出,模型首先生成初始回复,然后根据预设的“对齐提示”自我评价,识别有害或不一致内容,最后进行修正构造对齐数据,无需依赖外部奖励模型。
代表性监督对齐算法:DPO
DPO(Direct Preference Optimization)是一种无需奖励建模的对齐算法,通过直接优化策略模型来拟合人类偏好,避免了RLHF中复杂的奖励模型训练和强化学习过程。DPO将强化学习中的奖励函数 $ r(x, y) $ 与策略函数 $ \pi_\theta(y|x) $ 建立数学关系,从而直接使用策略函数表示人类偏好。DPO本质上是一种隐式奖励建模方法,它通过策略比率 $ \frac{\pi_\theta}{\pi_{\text{old}}} $ 间接表示奖励,避免了显式奖励模型的不稳定性。数学推导如下:
从带KL惩罚的PPO目标出发,推导出最优策略 $ \pi^*(y|x) $ 与奖励函数的关系如下,$Z(x)$是一个只与状态 $x$ 和旧的策略函数 $\pi_{\text{old}}(y|x)$ 相关的配分函数。
$$
\pi^*(y|x) = \frac{1}{Z(x)} \pi_{\text{old}}(y|x) \exp\left( \frac{1}{\beta} r(x,y) \right)
$$通过取对数并代入Bradley-Terry偏好模型,得到DPO损失函数如下,其中 $ \beta $ 是控制对齐强度的超参数,$ \sigma $ 是sigmoid函数。
$$
L_{\text{DPO}} = -E \left[ \log \sigma \left( \beta \log \frac{\pi_\theta(y^+|x)}{\pi_{\text{old}}(y^+|x)} - \beta \log \frac{\pi_\theta(y^-|x)}{\pi_{\text{old}}(y^-|x)} \right) \right]
$$DPO的梯度会增大正例 $ y^+ $ 的似然,降低负例 $ y^- $ 的似然。梯度系数 $ \sigma(\hat{r}(x,y^-) - \hat{r}(x,y^+)) $ 动态调节更新步长:当模型更倾向于负例时,梯度增大,更新更激进;反之则更新更保守。
DPO的训练稳定,超参数少,易于调优;无需采样解码,训练效率高;仅需策略模型和参考模型,资源占用低。但DPO依赖高质量的偏好数据,对初始策略模型 $ \pi_{\text{old}} $ 敏感,需要使用SFT模型初始化。
以下是基于Hugging Face TRL 库的DPO训练示例代码。
1 | from dataclasses import dataclass |
其他有监督对齐算法
除了DPO,还有多种基于监督学习的对齐方法,主要通过辅助损失函数增强模型对正负例的区分能力。
- 基于质量提示的训练目标:在正负例输出前添加前缀,如正例前缀:“好的回复:”,负例前缀:“差的回复:”。模型根据“输入 + 前缀”生成对应输出,学习区分高质量与低质量回复。还可以使用“奖励标记”如“5分回复:”或“排名第一的回复:”进一步增强模型对输出质量的理解。
- 基于质量对比的训练目标:利用多个输出之间的偏序关系,构建对比学习目标。具体说,从同一输入的多个输出中采样正负例对 $ (y^+, y^-) $,使用对比损失(如InfoNCE)或排序损失(如Pairwise Ranking Loss)训练模型。这类方法本质上是一种表示学习,通过对比正负例,模型学习到更符合人类偏好的输出表示。近年来,像IPO(Identity Preference Optimization)、KTO(Kahneman-Tversky Optimization) 等方法也基于类似思想,进一步优化了对比对齐的稳定性和效率。
PPO和DPO之间的平衡:GRPO
Deepseek在2024年的DeepseekMath论文中提出了GRPO(Group Relative Policy Optimization),在一定程度上能够通过去掉Value Model,缓解PPO对于显存的瓶颈,确保策略更新的稳定性和高效性;同时保留了Reward Model,避免了DPO因为直接拟合人类偏好数据,而容易造成的过拟合和效果不佳。
PPO的优势函数基于Value Model计算,GRPO去掉了Value Model,使用Policy Model的多个output采样的Reward Model输出的多个奖励的平均值作为优势函数,它计算的是每个策略相对其他策略的相对优势,而不是绝对的累计奖励。
PPO的KL散度约束在奖励函数中,GRPO直接在损失函数中计算KL散度,降低了奖励函数的计算复杂度。并且它的计算方案能保证归一化的KL值每次都是正值。
GRPO实现的代码示例可以看👉github aburkov
关于GRPO的各种魔改工作可以看👉【知乎】PPO、DPO、GRPO及其变体(Dr. GRPO、DAPO、GSPO、GMPO、GFPO、LitePPO)策略优化算法综述






