这篇文章对应视频:“[veRL] 核心强化学习算法,GRPO、RLOO、REINFORCE++、REINFORCE++ baseline”(BV1d4Yvz4EXA)。
但我不会把它写成“视频逐句笔记”,而是把 veRL 里这些算法放到同一个坐标系里讲清楚:
- 它们本质上都在解同一个问题:不用训练 critic,也能把 outcome reward 变成稳定的更新信号。
- 它们真正的差异,主要集中在:baseline 怎么选、advantage 怎么归一、KL 怎么放。
- 你应该怎么选:不是看算法名字,而是看你的任务 reward 形态(稀疏/密集、噪声/可验证、是否能 group sampling)。
系列导航:
建议先读(打通基础概念与日志诊断):
0. 资料对齐(视频 + 本地仓库)
视频:
BV1d4Yvz4EXA
本地仓库(你已下载)里,这篇最相关的材料我建议看这几个(不是必须全看):
- GRPO 目标与聚合:
/Users/wangpeng/Downloads/modern_genai_bilibili-main/agentic_rl/verl/objectives/review_grpo.ipynb/Users/wangpeng/Downloads/modern_genai_bilibili-main/agentic_rl/verl/objectives/agg_loss.ipynb
- KL 的“in reward vs as loss”、以及 off-policy bias:
/Users/wangpeng/Downloads/modern_genai_bilibili-main/agentic_rl/training_practices/review_kl.ipynb
- 训练崩溃(NaN / ratio 爆炸)的一类典型问题线索:
/Users/wangpeng/Downloads/modern_genai_bilibili-main/agentic_rl/verl/训练及调参经验/问题排查.ipynb
- RLVR 评测侧:为什么这些算法的差异很多时候被“采样效率差距”淹没:
/Users/wangpeng/Downloads/modern_genai_bilibili-main/agentic_rl/reasoning/rlvr.ipynb- RLVR 的边界:Base vs RL、pass@k、PPL 与 vLLM 评测细节
1. 统一坐标系:这些算法到底在优化什么
我们先把“共同的骨架”写下来。对每个 prompt $x$,policy $\pi_\theta$ 会采样输出序列 $y$(LLM 的 token 序列),我们有一个 outcome reward $R(x,y)$(verifiable reward / RM / judge 都可以)。
最原始的目标是最大化期望 reward:
$$J(\theta)=\mathbb{E}_{y\sim\pi_\theta(\cdot|x)}[R(x,y)]$$
用 REINFORCE 的 log-trick,可以得到经典策略梯度形式(省略 $x$ 的条件):
$$\nabla_\theta J(\theta)=\mathbb{E}[R(y)\nabla_\theta\log\pi_\theta(y)]$$
把它写成“最小化 loss”就是:
$$\mathcal{L}_{PG}(\theta)=-\mathbb{E}[R(y)\log\pi_\theta(y)]$$
到这里你会立刻遇到两类工程难题:
- 方差太大:reward 是 outcome-level、稀疏、噪声大,直接乘 logprob 会抖到你怀疑人生。
- 更新太猛:rollout 很贵,你会复用数据(多 epoch),这会让你从 on-policy 漂到轻度 off-policy,
ratio爆炸、NaN、输出塌缩都可能发生。
因此你看到的 GRPO / RLOO / REINFORCE++,本质上就是在这两个难题之间做取舍:
- 用 baseline / group relative 降方差(不训练 critic)。
- 用 clip / KL / 归一化 限制更新幅度,让训练别崩。
2. Baseline 的核心原则:降方差,但别把梯度搞偏
REINFORCE 里,一个重要结论是:你可以减去任何 baseline $b(x)$ 来降方差,只要它不依赖 action(在 LLM 里就是不依赖采样到的 $y$),梯度仍然无偏:
$$\mathbb{E}[(R-b)\nabla\log\pi]=\mathbb{E}[R\nabla\log\pi]$$
所以你会看到三类 baseline:
- critic baseline:$b=V_\phi(s)$(PPO/Actor-Critic 路线,稳定但要训练 value model)。
- group baseline:对同一 prompt 采样多条 $y_1,\dots,y_G$,用组内统计当 baseline(GRPO/RLOO 的路线)。
- batch baseline/whiten:不一定改最优点,只是把更新尺度稳定住(REINFORCE++ baseline 常落在这里)。
这个章节的关键 takeaway 是:
你选择的 baseline 决定了“你到底在把 reward 的哪一部分当作学习信号”。
baseline 选错,最常见的不是不收敛,而是收敛到一种很会骗指标的行为。
3. GRPO:Group Relative Policy Optimization(“不用 critic 的 PPO 风格更新”)
3.1 为什么 GRPO 天然适配 RLVR(math/coding)
GRPO 的前提是:对同一 prompt,你愿意采样一个 group(比如 $G=8$ 或 $G=16$):
- $y_1,\dots,y_G\sim\pi_{\theta_{\text{old}}}(\cdot|x)$
- reward:$R_i=R(x,y_i)$
然后你用组内的均值/方差做相对化,构造 advantage:
$$\hat A_i=\frac{R_i-\text{mean}(\mathbf R)}{\text{std}(\mathbf R)+\epsilon}$$
直觉:你不再关心“这条输出绝对分数是多少”,而关心“它在同一个 prompt 的候选里排第几”。
这个设计对 RLVR 很友好:
- verifiable reward 常常是 0/1(或少数离散档),绝对尺度没什么意义。
- 你最终也会做 pass@k 多采样;GRPO 直接把“多采样”引入训练闭环。
3.2 为什么 GRPO 里会出现 PPO-clip 的 ratio
GRPO 在 veRL 的实现里通常仍然是 PPO 风格的 clipped surrogate(用旧策略采样数据,用新策略更新):
$$\rho_{i,t}(\theta)=\exp(\log\pi_\theta(a_{i,t}|s_{i,t})-\log\pi_{\theta_{\text{old}}}(a_{i,t}|s_{i,t}))$$
$$\mathcal{L}_{\text{clip}}=\mathbb{E}\big[\min(\rho\hat A,\ \text{clip}(\rho,1-\varepsilon,1+\varepsilon)\hat A)\big]$$
这里的 “$\rho$” 是 ratio(为了和 reward $R$ 区分,我不写成 $r$)。
3.3 GRPO 最常见的两个坑:std=0 与 ratio overflow
- 组内 std=0
- 如果一个 group 里 reward 全一样(例如全部 0),$\text{std}(\mathbf R)=0$,不加 $\epsilon$ 直接 NaN。
- 这在稀疏 reward(大部分样本都错)时非常常见。
- ratio overflow
- 如果 $\log\pi_\theta-\log\pi_{\theta_{\text{old}}}$ 变大,$\exp$ 会溢出为
inf,接着 loss/grad 就 NaN。 - 这类问题在实践里经常被描述成“ratio 爆炸,clamp 不能根治”,根因通常是 更新幅度太大(LR 太大、epoch 太多、adv 尺度太大、聚合方式导致有效学习率变大等)。
- 如果 $\log\pi_\theta-\log\pi_{\theta_{\text{old}}}$ 变大,$\exp$ 会溢出为
如果你看到 NaN,第一反应不是“再加 clamp”,而是回到日志闭环:
approx_kl(old,new)、clip_fraction、grad_norm是否同时飙升?- group reward 的分布是否极端稀疏(全 0)?
然后再决定是改算法(比如用 REINFORCE++ baseline)还是改参数(更保守的 update)。
4. RLOO:REINFORCE Leave-One-Out(更“守规矩”的 group baseline)
4.1 RLOO 的核心:baseline 不用自己的 reward
GRPO 的组均值 baseline 会把 $R_i$ 自己也包含进去。严格来说,这个 baseline 对样本 $i$ 来说是 action-dependent 的(因为 $R_i$ 取决于 $y_i$),可能引入偏差。
RLOO 的解决办法是:对样本 $i$,baseline 用“除了自己之外的均值”:
$$b_i=\frac{1}{G-1}\sum_{j\ne i}R_j$$
$$A_i=R_i-b_i=\frac{G}{G-1}(R_i-\text{mean}(\mathbf R))$$
你可以把它理解成:
- 仍然是“组内相对比较”
- 但 baseline 的定义更符合“baseline 不依赖当前 action”这条经典原则
4.2 RLOO 的真实作用:不是让你更强,而是让信号更干净
在很多任务上,RLOO 的收益不是“指标突然大幅上升”,而是:
- 更新更可解释:你更接近在优化“超越组内其他样本的程度”。
- 行为更不容易被“自我干扰”:baseline 不被自身 reward 污染。
但它也有代价:
- 你仍然需要 group sampling(成本不低)。
- $G/(G-1)$ 的缩放会放大 advantage 的幅度(如果你没有配套的 whiten/clip/KL 约束,训练反而更容易炸)。
所以它通常不是“开箱即用更稳”,而是“把 bias 的锅移开,让你更容易定位稳定性问题来自哪里”。
5. REINFORCE++ baseline:把“归一化的随机性”从 group 挪到 batch
5.1 一句话解释
在工程里,GRPO 最脆的一步往往不是 ratio,也不是 clip,而是 组内 std:
- reward 稀疏时,组内 std 极不稳定,甚至频繁为 0
- 于是 advantage 会出现 NaN 或极端放大
REINFORCE++ baseline 的常见思路是:
- baseline 仍然用组均值(做相对化):
- $$\tilde A_i=R_i-\text{mean}(\mathbf R)$$
- 但归一化不用组内 std,而用 batch 级统计(更稳定):
- $$\hat A_i=\frac{\tilde A_i}{\text{std}(\tilde A\ \text{over batch})+\epsilon}$$
这会带来一个很现实的收益:
- 只要你的 batch 足够大,std 就不会频繁为 0;
- advantage 的尺度在训练过程中更一致,更容易调学习率和 KL 系数。
5.2 这不是“更正确”,而是更可控
把 std 从 group 挪到 batch,本质上是在做一个工程选择:
- GRPO 的“归一化”更局部、更自洽,但也更不稳定;
- REINFORCE++ baseline 的“归一化”更全局、更稳定,但它引入了跨 group 的耦合(不同 prompt 的 reward 分布会互相影响尺度)。
你该怎么选?
- 如果 reward 稀疏到让组内 std 经常为 0:优先考虑 REINFORCE++ baseline。
- 如果你希望每个 prompt 的训练信号都只由自身 group 决定:GRPO 更符合这个直觉。
6. KL 放哪:in reward vs as loss(不要把它当“实现细节”)
在 LLM-RL 里,KL 既可以写进 reward(dense shaping),也可以作为单独 loss(regularization)。这不是语法差异,它会改变训练动态:
- KL in reward
- 你把每一步偏离 ref 的代价当成 reward 的一部分,advantage/return 会被它影响。
- 好处:更像“每步都扣分”的稠密信号;坏处:它会和 baseline/归一化强耦合,导致你很难判断“到底是任务 reward 在驱动,还是 KL 在驱动”。
- KL as loss
- advantage 主要反映任务 reward,KL 作为独立正则单独控制漂移。
- 好处:更好调参与诊断;坏处:如果你的任务 reward 极稀疏,单独 KL 可能会让训练更像“什么都不学,只是在原地”。
我更偏向的工程原则是:
- 先把 KL 当作独立 loss(便于诊断),把
approx_kl/entropy/clipfrac闭环跑顺。 - 只有当你非常确定“任务 reward 太稀疏”,且你需要更稠密的 shaping,再把 KL 放进 reward(并且要重新校准 baseline/归一的尺度)。
7. 一份更实用的选型指南(给做 agentic RL / deep research 的你)
把这些算法和任务形态对齐,我给你一个不花哨但能落地的建议顺序:
- reward 可验证(0/1 或少数离散档),你能 group sampling
- 先试 GRPO(最接近“无 critic 的 PPO”)
- 如果经常 std=0 或 NaN,切到 REINFORCE++ baseline(更稳定的尺度)
- 如果你非常在意 baseline 的无偏性,或者想把 bias 这一项从误差来源里排除,再试 RLOO
- reward 噪声大(judge/RM),但你仍然 group sampling
- 你要先做 reward 的单元测试与对抗样本(否则 RL 一定会放大漏洞)
- 在算法上,REINFORCE++ baseline 往往比 GRPO 更不容易因为归一化噪声而炸
- deep research 这类“多步工具调用 + 长上下文”任务
- 不建议一上来就把 RL 用在 token policy 上
- 更现实的路径是:先把 RL 用在“agent 决策层”(检索/阅读/引用/停止/预算分配),让 reward 更可控、更可验证
最后补一句:GRPO/RLOO/REINFORCE++ 解决的主要是 variance/control,不是 capability creation。如果你期待“模型学会以前不会的东西”,你仍然需要:
- curriculum / distill / tool-augmented data(把新轨迹带进可学习分布)
- 再用 RL 把采样效率和稳定性做上去
8. 小结
把本文压缩成三句话:
- GRPO/RLOO/REINFORCE++ baseline 的核心差异不是“RL 更强”,而是 baseline 与归一化设计。
- 训练不稳时,优先怀疑 advantage 统计与 ratio 漂移,别先怀疑模型。
- 你做 agentic RL 的关键不是挑一个算法名字,而是把 reward 可信度 + 评测闭环 + 日志诊断先搭起来。

