0%

为什么一些 SC 实现没有 PPO clip 选项

我调查了 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 官方实现进行实验。

以上。

作为对比:

  1. SC + TIS
  2. SC + MIS
  3. PPO其中
  • TIS:比率过大就把权重封顶,保留采样项。
  • MIS:比率在区间外,就将采样项权重置零。
  • PPO:截掉「朝有利方向走得过远」