3.4 强化学习与人类反馈:PPO、RLOO、GRPO 与 RLHF

2 阅读1分钟

基于《大规模语言模型:从理论到实践(第2版)》第6章 强化学习

爆款小标题:RLHF 不是玄学:策略梯度、奖励模型与对齐原书第6章拆解


为什么这一节重要

指令微调(SFT)让模型「会按指令输出」,但无法系统性地让模型在多个都合理的回复中选人类更喜欢的那个、或在不该回答时拒绝。基于人类反馈的强化学习(RLHF) 正是用来解决这个问题:通过人类对多条回复的偏好(或打分)训练一个奖励模型,再用强化学习更新策略模型,使其在「高奖励」方向优化的同时不偏离基座太远。原书第 6 章系统讲了 RLHF 的三阶段、PPO 在其中的角色,以及 RLOO、GRPO 等无需单独奖励模型的简化方案。本节把这些内容拆成「数据—模型—目标」的清晰链条,并给出工程上的注意点与常见误区。


学习目标

学完本节,你将能够:

  • 说清 RLHF 三阶段:用「数据—模型—目标」简述 SFT → 奖励模型(RM)→ 策略优化(如 PPO)各自输入输出与优化目标。
  • 理解 PPO 与替代方案:说明 PPO 如何通过 clip 限制更新幅度、在 RLHF 中优化策略;了解 RLOO、GRPO 等如何用组内对比或离线偏好替代独立 RM,以及适用场景。
  • 建立对齐意识:知道「对齐」在本书中指偏好与安全的一致性;在数据与训练上能注意奖励模型覆盖、KL 约束与 reward hacking 等问题。

一、RLHF 三阶段总览(原书第 6 章)

阶段一:有监督微调(SFT)

  • 输入:高质量「指令—输入—输出」数据,通常来自人工或模型生成后筛选。
  • 模型:基座语言模型。
  • 目标:最大化对「输出」部分的语言建模似然,使模型学会遵循指令与格式。产出为 SFT 模型,作为后续奖励模型与策略优化的起点。注意:RLHF 里的 SFT 与上一节「指令微调」是同一件事,这里强调其作为 RLHF pipeline 的第一步。

阶段二:奖励模型(Reward Model, RM)

  • 输入:同一 prompt 下的多条回复(如 2 条或 4 条),以及人类给出的偏好(哪条更好、或排序、或打分)。
  • 模型:通常基于 SFT 模型,去掉生成头、加一个标量输出头,输出「奖励分」。
  • 目标:训练 RM 使得「人类更偏好的回复」得到更高分数。常见做法是把「偏好」转为 pairwise 损失(如 Bradley-Terry):对两条回复 ((y_w, y_l))(好/差),损失为 (-\log \sigma(r(y_w) - r(y_l))),最小化该损失即让好回复得分高于差回复。产出为 奖励模型,用于阶段三中为策略模型的输出打分。

阶段三:策略优化(如 PPO)

  • 输入:prompt 数据集(可与 SFT 不同);策略模型对每个 prompt 采样生成回复;奖励模型对「prompt + 回复」打分;参考模型(通常为 SFT 模型)用于计算 KL 散度。
  • 模型策略模型(通常从 SFT 拷贝并继续训练),即要被优化的语言模型。
  • 目标:最大化「奖励模型给出的分」,同时用 KL 惩罚 约束策略模型不要偏离参考模型(SFT)太远,避免模式崩塌与 reward hacking。常用 PPO(Proximal Policy Optimization) 做策略梯度更新:通过 clip 限制单步更新幅度,训练更稳定。原书第 6 章对 PPO 的公式与在 RLHF 中的使用有详细说明。

小结:三阶段依次为「SFT 学格式与基础能力 → RM 学人类偏好 → PPO 学在保持格式与安全的前提下最大化偏好」。数据形态分别是「指令—输出」、「偏好对」、以及「prompt + 生成 + 打分」。


二、PPO 与 KL 约束(原书第 6 章)

PPO 简要:策略梯度方法,通过限制新旧策略的比率在一个区间内(clip),避免单步更新过大导致性能崩溃。在 RLHF 中,策略即语言模型,状态为「当前已生成的 token 序列」,动作为「下一个 token」,奖励由 RM 在序列结束时给出(或配合 token 级 reward shaping)。每步更新时,用当前策略采样一批「prompt—回复」,用 RM 打分,再算策略梯度并做 PPO 的 clip 更新;同时加一项 KL(策略 || 参考) 惩罚,使策略不要偏离 SFT 太远。

PPO clip 的直观含义:设 (r_t = \pi_\theta(a|s) / \pi_{\theta_{old}}(a|s)) 为新旧策略概率比。PPO 的 clip 目标会把 (r_t) 限制在 ([1-\epsilon, 1+\epsilon]) 区间(常见 (\epsilon=0.2)),使得单步更新幅度受限,避免策略突变。相比 TRPO 的复杂约束,PPO 实现更简单、效果稳定,因而被 ChatGPT、Claude 等主流 RLHF 管线广泛采用。

KL 的作用:KL 过小说明策略几乎没动,学不到新行为;KL 过大说明策略偏离参考太多,可能忘记指令遵循或产生不稳定输出。实践中需要调节「奖励权重」与「KL 系数」的平衡,常用做法是设定 KL 的 target 范围或动态调整系数。原书第 6 章对 KL 与 reward 的权重有讨论。

reward hacking 与 KL 的关系:当 RM 存在偏差(如偏好长回复、偏好某些格式)时,策略可能通过「迎合 RM 的偏好」而非「真正符合人类意图」来获得高分,即 reward hacking。KL 约束迫使策略不能偏离 SFT 太远,可在一定程度上缓解这一问题;但若 RM 偏差过大,即使有 KL 约束,策略仍可能 exploit。因此 RM 数据质量与覆盖、以及 RM 的验证与迭代,与 KL 调节同样重要。


三、RLOO、GRPO 等简化方案(原书第 6 章)

动机:独立训练 RM 需要大量偏好标注,且 RM 与策略的分布可能不一致(distribution shift)。RLOO(Reinforcement Learning from Online Outputs)GRPO(Group Relative Policy Optimization) 等思路是:不单独训练一个 RM,而是用同一批生成结果内的相对偏好(如组内排序、best-of-N 的 advantage)来构造策略梯度或目标,从而减少对独立 RM 的依赖、降低标注与实现成本。

RLOO 大意:对同一 prompt,用当前策略采样多份回复;用某种「组内评分」(如人类对组内排序、或规则/模型对组内打分)计算每份回复的 advantage;用该 advantage 做策略梯度更新。优势是不需要单独维护 RM,劣势是每步需要多份采样,计算开销增加,且评分方式需设计好。

GRPO 大意:在组内用相对奖励(如组内归一化、或组内 rank)构造目标,使「组内较好」的回复得到正向梯度、「组内较差」的得到负向梯度。与 RLOO 类似,都是「无独立 RM」的简化方案,适合偏好数据有限、或希望快速迭代对齐流程的场景。

适用:资源有限、偏好数据不足、或希望简化 pipeline 时,可考虑 RLOO/GRPO;对效果与安全要求极高的场景,仍可保留「独立 RM + PPO」的完整 RLHF。原书第 6 章对这类方法有介绍,可对照阅读。实际选型时,可先用 RLOO/GRPO 做快速验证,若效果不足再投入 RM 与 PPO 的完整流程。


四、案例:RLHF 三阶段实现流程概要

阶段一 SFT:用指令数据微调基座,得到 SFT 模型。数据格式同 3.3 节;训练 1–3 个 epoch,验证 loss 收敛。产出:sft_model/

阶段二 奖励模型:1)构造偏好数据:同一 prompt 下 2–4 条回复,标注哪条更好;2)基于 SFT 加标量头,训练 pairwise 损失 (-\log\sigma(r(y_w)-r(y_l)));3)验证:在 held-out 偏好对上算准确率。产出:reward_model/

阶段三 PPO 策略优化:1)加载 SFT 作为策略与参考模型;2)对每批 prompt 采样回复,用 RM 打分;3)算策略梯度 + KL 惩罚,做 PPO clip 更新;4)监控 reward、KL、loss 曲线,调 KL 系数与学习率。实现可参考 TRL、trlX 等库。产出:policy_model/

简化方案 RLOO/GRPO:跳过阶段二,用组内排序或 best-of-N 的 advantage 直接做策略梯度;每批需多份采样,实现见 DeepSeek-R1、GRPO 等开源代码。


五、工程实战要点

1. 奖励模型数据要覆盖正负例与边界

RM 数据应包含多样化的 prompt、多种「好/差」回复对(含边界与对抗样本),否则 RM 容易过拟合或偏向某一类风格,策略会 exploit 这些偏差(reward hacking)。建议做数据多样性检查与 RM 的验证集评估。具体而言:prompt 应覆盖真实用户问法、多轮与单轮、敏感与普通;好/差回复对应覆盖「事实错误 vs 正确」「冗长 vs 简洁」「有害 vs 无害」「格式错误 vs 正确」等多种维度,避免 RM 只学会某一类区分。

2. 策略优化时调 KL 与奖励权重

可先在小模型或小规模数据上验证 RLHF 流程;再根据验证集或人工抽检调整 KL 系数与奖励权重,做敏感性分析,避免策略崩塌或过度迎合 RM。建议从较小 KL 系数起步,观察 reward 与 KL 曲线:若 reward 上升而 KL 仍低,可适当增大 KL 系数允许策略更大程度探索;若 KL 快速上升而 reward 停滞,需加大 KL 惩罚防止策略偏离过远。部分实现支持「KL target」:设定目标 KL 范围,动态调节系数,可减少手动调参。

3. 参考模型与策略的同步

参考模型(通常为 SFT)在 PPO 更新中用于计算 KL 散度,应保持冻结。若策略用 LoRA 等参数高效方式,参考模型可为完整 SFT;若策略为全量微调,参考模型需单独保存一份 SFT 副本。训练过程中参考模型不更新,确保 KL 始终相对于「对齐前的 SFT」计算。

4. 推理模型与思维链(原书第 6 章)

原书对「推理模型(Reasoning Model)」与思维链在复杂任务与对齐中的角色有讨论:某些对齐方法会结合链式推理或过程奖励(如对 chain-of-thought 的中间步打分),本节不展开,学完基础 RLHF 后可进一步阅读原书相关小节。对于复杂推理任务,过程奖励可帮助模型学习「正确推理路径」,而不仅是「最终答案对」。


六、常见误区与避坑指南

误区一:认为 RLHF 就是「随便标偏好」

偏好标注若不一致、覆盖单一或含偏见,RM 会学到错误信号,策略会 exploit。避坑:偏好数据需统一标注规范、覆盖多样 prompt 与回复类型,并做 RM 验证与人工抽检。

误区二:忽略 KL 约束

KL 过小易过拟合 RM、过大则学不到新行为。避坑:显式设 KL 系数或 target,并监控训练过程中 KL 与 reward 的变化。

误区三:用 SFT 模型直接当「对齐后」模型

只做过 SFT 的模型在偏好与安全上通常不如经过 RLHF 的模型。避坑:对 C 端或高安全场景,明确是否需要 RLHF 或选用已对齐的 API/模型。


七、小结与衔接

本节基于原书第 6 章梳理了 RLHF 三阶段(SFT → RM → PPO)的数据、模型与目标,以及 PPO 与 KL 约束的作用;简要介绍了 RLOO、GRPO 等简化方案;并给出了 RM 数据覆盖、KL 与奖励调参等工程要点。下一节将做预训练与训练流程小结:从原始语料到 loss 与 checkpoint 的完整数据管线与训练步骤(原书第 3–4 章串讲),便于把「数据—分布式—SFT—RLHF」连成一条线。


课后思考题

  1. 用「数据—模型—目标」简述 RLHF 三阶段各自输入输出与优化目标。
  2. RLOO 或 GRPO 相比 PPO+独立 RM,在数据和训练流程上有什么简化?适合什么资源条件下的对齐?