跳转至

十五:强化学习:RLHF-PPO 与 GRPO

来源:http://mp.weixin.qq.com/s?__biz=MzYyNTk3Njg1NA==&mid=2247484049&idx=1&sn=d0447086101ab3948335f1d474b5f364&chksm=f01eb1e8c76938fec3c971be4fc791547f884e29c584b07dd38d888960bdcb7c268dbb612c6a#rd

1. 学习定位

第十四天学习了传统 PPO。第十五天把 PPO 放到大语言模型 RLHF 中,重点掌握 RLHF-PPO 的完整数据流、损失结构、KL 约束、value head、reward model,以及 GRPO 与 PPO 的差异。 本日知识链路:

SFT model
-> reference model
-> reward model
-> policy model with value head
-> response generation
-> reward + KL penalty
-> token-level PPO loss
-> value loss and advantage
-> RLHF-PPO
-> GRPO: group relative advantage, no critic/value model
RLHF-PPO 和 GRPO 都是面试高频内容。面试中通常会追问:为什么需要 reference model,KL penalty 怎么算,reward model 只给序列奖励时如何分配到 token,value head 的作用是什么,PPO ratio 在 LLM 中对应什么,以及 GRPO 为什么能省掉 critic。

2. RLHF-PPO 的组件

典型 RLHF-PPO 包含四类模型或模块:

policy model:
  正在训练的语言模型,输出 token 概率。

reference model:
  通常是冻结的 SFT 模型,用来计算 KL 约束。

reward model:
  根据 prompt + response 输出标量偏好分数。

value head / critic:
  在 policy hidden states 上预测每个 token 位置的 value。
训练数据通常是 prompt 集合。policy 对每个 prompt 生成 response,reward model 对完整 response 打分,PPO 根据 reward 和 KL 惩罚更新 policy。

3. RLHF-PPO 数据流

完整流程:

1. sample prompts
2. policy model generates responses
3. record token logp_old under policy
4. reference model computes ref_logp for generated tokens
5. reward model scores prompt + response
6. compute KL penalty and final rewards
7. value head predicts values
8. compute advantages and returns
9. PPO update policy and value head
10. repeat with new policy
在 LLM 中,一条 response 是 token-level trajectory:

s_t: prompt + response tokens before t
a_t: token_t

4. RLHF 中的奖励结构

Reward model 通常对完整回答给一个标量:

score = RM(prompt, response)
但 PPO 需要 token-level reward/advantage。常见做法是: (1)基础定义 - t:生成的第t个token(逐token时间步)

  • KL_t:当前策略模型 pi_theta 与参考模型 ref 在第 t 个 token 上的 KL 散度

img

  • β:KL惩罚系数(超参数,控制探索幅度)

(2)逐token奖励计算 1、如果不是最后一个token,只给KL惩罚奖励(负奖励,约束模型不要乱更新)

img

2、如果是最后一个token,给KL惩罚+完整的RM标量分数(把整段回答的质量奖励,全部加在最后一步):

img

其中 KL 惩罚让 policy 不要偏离 reference model 太远。

序列级的总奖励就是把所有token的奖励求和:

img

总目标直觉:

maximize reward_model_score - beta * KL(policy || reference)

img

最大化「回答质量分数」 - 「偏离原模型的惩罚」 补充:优势函数(Advantage)为什么也是逐 Token? PPO 核心用优势函数 A_t 更新策略,而不是原始奖励:

img

因为我们已经把奖励拆成了逐 Token,优势函数自然也是逐 Token,完美适配 PPO 的更新逻辑。 这意味着,最后一个 token 的巨大奖励(蕴含在 A_last 中),会按比例衰减,一步步倒推回溯给倒数第二个、倒数第三个……直到第一个 token。

5. KL Penalty

标准的KL散度定义是对整个词表进行求和:

img

但是LLM词表巨大(几万~十几万),逐轮求和计算量爆炸,根本没法训练。 LLM RLHF 中常用 sampled token 上的 KL 采样近似,直接用模型实际生成的那个 token 来近似整段 KL 散度:

img

KL_t ≈ log pi_theta(a_t|s_t) - log pi_ref(a_t|s_t)
惩罚项:

reward_kl_t = - beta * KL_t

img

beta 控制约束强度: - beta 太小:模型可能偏离 reference,出现 reward hacking 或语言质量下降。

  • beta 太大:模型几乎不敢改变,reward 难以上升。

工程中也会动态调节 KL 系数,让实际 KL 接近目标范围。

6. PPO Ratio 在 LLM 中的含义

对每个生成 token:

ratio_t(theta)
= pi_theta(a_t|s_t) / pi_old(a_t|s_t)
= exp(logp_new_t - logp_old_t)

img

PPO token-level policy loss:

L_clip = mean_t min(
  ratio_t A_t,
  clip(ratio_t, 1-eps, 1+eps) A_t
)

img

只对 response token 计算 loss,不对 prompt token 计算 RL loss。因此必须使用 response mask。

7. Value Head 与 Advantage

RLHF-PPO 通常在语言模型上加 value head:

hidden_states -> scalar value per token
Value head 的作用: - 估计每个生成位置的未来回报。

  • 作为 baseline 降低策略梯度方差。

  • 用于计算 advantage 和 return。

常见 advantage 估计:

delta_t = reward_t + gamma V(s_{t+1}) - V(s_t)
A_t = GAE(delta_t)

img

img

在 LLM 中,episode 是一个 response 序列,终止 token 后不再 bootstrap。

8. RLHF-PPO 的总损失

常见总损失:

loss = policy_loss + value_coef * value_loss - entropy_coef * entropy

img

policy loss:

policy_loss = -mean(mask * min(ratio*A, clip(ratio)*A))

img

value loss:

value_loss = mean(mask * (V_t - return_t)^2)

img

有些实现使用 value clipping,减少 critic 变化过大。

img

注意:KL penalty 通常进入 reward,而不是直接作为 policy loss 的单独项;也有实现把 KL 当作额外 loss 或监控指标。

9. Mask 与 Padding

LLM batch 中 response 长度不同,需要 padding。训练时必须区分:

prompt tokens: 不计算 RL action loss
response tokens: 计算 policy/value/KL
padding tokens: 不参与 loss
常见 mask: - attention mask:控制模型注意力和有效 token。

  • response mask:只选中回答部分。

  • loss mask:排除 padding 和无效位置。

mask 错误会导致 prompt token 被错误优化,或 padding token 影响 KL/value/loss。

10. RLHF-PPO 的工程风险

常见风险: - reward hacking:模型利用 reward model 漏洞。

  • KL collapse:KL 太小导致学习停滞,或 KL 太大导致语言质量崩坏。

  • length bias:reward model 偏好长答案或短答案。

  • value head 不准:advantage 噪声大。

  • padding/mask 错误:loss 计算污染。

  • old logp 与 new logp 不匹配:ratio 错误。

  • reward scale 不稳定:PPO 更新震荡。

  • response 采样策略变化:数据分布快速漂移。

11. RLHF-PPO 与传统 PPO 的差异

传统 PPO:

environment gives reward every step or episode
state/action often low-dimensional or continuous control
policy and value often separate or shared networks
RLHF-PPO:

policy is language model
action is token
reward model gives sequence-level score
reference model provides KL anchor
value head predicts token-level values
mask and padding are essential
compute cost is much higher
核心 PPO ratio/clip 仍然存在,但训练对象和奖励结构更复杂。

12. GRPO 的动机

GRPO(Group Relative Policy Optimization)是大模型 RL 中常见的 PPO 变体。它的核心动机是减少 PPO 中 value model/critic 的成本和不稳定性。 PPO 需要:

policy model + reference model + reward model + value model/head
GRPO 通常不训练额外 critic,而是对同一个 prompt 采样一组回答,用组内 reward 的相对归一化构造 advantage。

13. GRPO 的组内相对优势

对同一个 prompt,采样 G 个回答:

o_1, o_2, ..., o_G
奖励:

r_1, r_2, ..., r_G
组内归一化 advantage:

A_i = (r_i - mean(r_1,...,r_G)) / std(r_1,...,r_G)

img

直觉:

同一个 prompt 下,回答之间互为 baseline。
比组平均更好的回答 A>0,比组平均差的回答 A<0。
这样不需要训练 value head 来估计 baseline。

14. GRPO 的目标函数

GRPO 仍然使用类似 PPO 的 ratio clipping:

r_i,t(theta)
= pi_theta(o_i,t | context_i,t) / pi_old(o_i,t | context_i,t)

img

目标可理解为:

maximize group relative clipped objective - beta * KL

img

简化写法:

E[ min(ratio * A_i, clip(ratio,1-eps,1+eps) * A_i) - beta * KL ]
其中 A_i 对同一回答的 token 共享,或按实现分配到 response token 上。

15. GRPO 与 PPO 的核心差异

维度 RLHF-PPO GRPO Baseline 来源 离线训练 Value Head 预测状态价值V(st) 同 prompt 一组采样答案的奖励均值rˉ Advantage 计算 单序列逐 token TD+GAE 时序平滑,At逐位置不同 整段回答共用同一个标准化优势Ai=σrri−rˉ,同答所有 token 共享 A 网络结构 Policy+Ref+RM+Value (Critic) 四套 Policy+Ref+RM,无 Critic/Value Head 训练开销 额外优化 Value Loss、调试 value_coef,参数量 & 计算量大 省去 Critic 反向传播,显存、迭代开销更低 优势适用逻辑 依赖单条序列时序回报,不需要同 prompt 多采样 强制单 prompt 采样G≥2条回答,依托组间相对排序 主要隐患 Critic 拟合偏差、价值震荡、value loss 难调 每组样本过少时 std 趋近 0、归一化爆炸;组内奖励全同导致 A 全部为 0 无法更新 奖励粒度 支持逐 token 奖励 + 末尾序列打分结合 仅使用全句序列级标量奖励,不拆分 token reward GRPO 是保留 PPO 的 ratio/clip/KL 思想,用组内相对 reward 替代 critic advantage。

16. GRPO 与 DeepSeek-R1

DeepSeek 系列工作中,GRPO 被用于大模型数学推理和推理能力强化。其关键思想是:对同一个问题采样多条解答,根据规则奖励或模型奖励得到组内相对信号,优化模型生成更高质量推理轨迹。 在推理任务中,奖励可来自: - 答案是否正确。

  • 格式是否满足要求。

  • 推理过程是否符合规则。

  • 代码或数学验证结果。

GRPO 适合这类场景,是因为同一题目可以采样多个候选解,候选之间可比较,且不一定需要单独训练 value model。

17. KL 散度估计

常见 KL 相关量: 真实前向 KL:

KL(pi || ref)
= E_{a ~ pi}[log pi(a|s) - log ref(a|s)]

img

在采样 token 上可以估计:

logp_policy - logp_ref

img

一些实现会使用更稳定的非负近似或二阶近似,例如基于 log ratio 的近似 KL。无论形式如何,工程目的都是监控或惩罚 policy 偏离 reference。 需要注意:不同代码库对 KL 的方向、符号和估计形式可能不同,读代码时必须确认 log ratio 的定义。

18. RLHF-PPO 与 GRPO 的选型

RLHF-PPO 适合: - 需要精细 token-level value 估计。

  • 奖励结构复杂。

  • 有成熟 PPO/TRL 基础设施。

GRPO 适合: - 同一 prompt 可生成多个候选。

  • reward 可直接比较候选优劣。

  • 希望省掉 critic/value model。

  • 数学、代码、推理等可验证任务。

GRPO 的代价是每个 prompt 需要多样本生成,组大小会增加采样成本。

19. 常见误区

误区一:RLHF-PPO 中 KL 只是监控指标。 KL 通常进入 reward 或 loss,直接影响优化目标。 误区二:value head 输出的是 reward model 分数。 value head 预测未来回报,reward model 给完整回答打偏好分。 误区三:GRPO 完全不需要 baseline。 GRPO 使用组内均值和标准差构造相对 baseline,只是不训练 critic。 误区四:GRPO 只适用于 DeepSeek。 GRPO 是一种算法思想,适用于能对同 prompt 多候选打分的 LLM RL 场景。 误区五:KL 方向无所谓。 不同 KL 方向会影响优化行为。工程实现必须确认符号和采样分布。

20. 核心总结

第十五天需要掌握的最小闭环:

RLHF-PPO components:
  policy model
  reference model
  reward model
  value head

RLHF reward:
  reward = reward_model_score - beta * KL(policy || reference)

LLM PPO ratio:
  ratio = exp(logp_new - logp_old)

Loss:
  PPO clipped policy loss
  value loss
  entropy bonus

Masks:
  compute RL loss only on response tokens

GRPO:
  sample multiple responses per prompt
  compute group-relative advantage
  no value model / critic
  keep PPO-style ratio clipping and KL regularization

21. 参考资料

  • 知乎:DeepSeek R1 用到的 GRPO 详解:https://zhuanlan.zhihu.com/p/15922703850

  • 知乎:KL 散度估计:https://zhuanlan.zhihu.com/p/25208314999

  • DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models:https://arxiv.org/abs/2402.03300

  • DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning:https://arxiv.org/abs/2501.12948

  • PPO 原论文:https://arxiv.org/abs/1707.06347

  • Deep Reinforcement Learning from Human Preferences:https://arxiv.org/abs/1706.03741

  • Training language models to follow instructions with human feedback:https://arxiv.org/abs/2203.02155

  • Hugging Face TRL PPOTrainer 文档:https://huggingface.co/docs/trl/

            预览时标签不可点
    

    <div class="