我调查了 verl 与 miles(即 modal 进行大规模异构 RL 使用的框架),发现他们做 SC 时不能开启 PPO clip。
实际上,在 miles 的文档中,可以选择 GRPO,但 loss 是单独的 REINFORCE-style SC loss,PPO clipping 参数不适用。即,可以用朴素无 clip 的 GRPO。KL 倒是可以加。
也就是说,和我之前的实验配置是一样的。我之前的 PG + SC 实验已经可以称为朴素 GRPO + SC 了。
verl、miles 他们都没有为 GRPO 的 SC 加入 PPO clipping。那么,他们为什么不加入呢?
约定,固定前缀 $s$,记
PG 的梯度是:
现在,对它做中心化,得到:
令 $A(a)$ 恒为常数 $C$,发现上述梯度期望恒为 $0$:
即,漂移被我们消去了。
然而,PPO 的梯度是:
其中 $m$ 为 clip。现在,我们对它做中心化,得到:
注意到 $r$ 与 $m$ 与动作 $a$ 相关。令 $A\equiv C$ 也无法使上式期望为 $0$。
因此,PPO 的 clip 截断破坏中心化项,各个实现都不支持启用 PPO clip。
不过,可以对整个加权 score 重新中心化得到零期望,SC 作者代码中 PPO-shaped 可以用数学公式表达。先令
加权中心化梯度:
当 $A\equiv C$ 时:
总结,PPO + SC 能做,SC 官方也有实现,不过 SC 论文没有这个曲线。感觉可以改代码,去掉 verl 的 SC PPO clip 限制,参考 SC 官方实现进行实验。
以上。
作为对比:
- SC + TIS
- SC + MIS
- PPO其中
- TIS:比率过大就把权重封顶,保留采样项。
- MIS:比率在区间外,就将采样项权重置零。
- PPO:截掉「朝有利方向走得过远」