5a · RL 基础:从 REINFORCE 到 GRPO
RL 只做三件事:采样、打分、按分数调整参数;所有算法最终只差一个权重 w_t。
先记住
- SFT 有三个失配:任务失配(成功路径不唯一,坏动作与好动作没区别)、数据失配(失败轨迹被丢掉)、exposure bias(训练只见示教历史,推理面对自己的错误历史)。
- 策略梯度的难点是“采样与环境都不可导”:log-derivative trick 把梯度变成“回报 × SFT 梯度”的期望,所以实现上只是给 SFT loss 加 mask、再乘一个标量。
- reward 的绝对值没有意义,相对值才有:减去 baseline 不改变梯度期望,却能显著降低方差。
- GRPO 用“同一道题采 G 次”的组内均值代替 value model;DrGRPO 再去掉组内标准差与长度归一化,修掉难度偏置与长度偏置。
核心机制
REINFORCE 的结论可以直接写成可实现的损失:
落到实现上,它就是:
也就是说,策略梯度 = 带 mask 的 SFT loss × 回报。真正的工程难点在别处:保证用于更新的 log prob 与产生轨迹的策略一致;处理 rollout 与训练的串行等待。
GRPO 对每个任务采 条轨迹,用组内均值当 baseline:
这样失败轨迹第一次真正带上了负号。但组内标准差会放大“几乎全对/几乎全错”的题,长度归一化又会奖励“越长越错”;DrGRPO 把两者都去掉。
Sample当前策略采轨迹
Score环境/验证器给 R(τ)
Baseline减均值,得到 advantage
Weight用 w_t 乘 log prob 梯度
Update反向传播,更新策略
| 方法 | 权重 | 直觉 |
|---|---|---|
| ReST-EM | 成功轨迹为 1,其余为 0 | 只模仿成功的自己 |
| REINFORCE | 按绝对回报加权 | |
| GRPO / DrGRPO | 按“相对同题其他 rollout 的好坏”加权 |
最容易错的地方
- 朴素 REINFORCE 对失败轨迹零更新。 二值 reward 下,失败轨迹的 ,整条轨迹没有梯度;baseline 才能让失败也提供负信号。
- 组内 reward 全相同。 全 0 说明题太难,全 1 说明题太简单,减完均值后 advantage 全是 0;这是退化组,继续训练是浪费算力。
- 长度归一化让“越错越长”占便宜。 按回答长度归一化会减轻长错误回答的惩罚,策略可能漂向又长又错的输出。
30 秒自测
1. 为什么减去 baseline 不会引入偏差?
答案
baseline 只依赖历史 ,不依赖被评估的动作;在给定历史下对动作求期望时,,所以减 baseline 不改变梯度期望,只降低方差。
2. GRPO 为什么能让失败轨迹也有梯度?
答案
它用同一道题多次 rollout 的组内均值作 baseline;低于均值的失败轨迹得到负 advantage,于是“不要这么做”也能通过负权重进入损失。
