机器学习笔记(17.4): GRPO & GSPO

可能更好的阅读体验 Jeefy's Blog: GRPO & GSPO

GRPO

为了干掉 Critic 网络,也就是 \(V\) 网络,换成直接使用 Actor 网络多次采样代替。

GRPO 采用 PPO 的变体类似的组合建模问题:

\[\begin{aligned} J(\theta) &= \sum_{g = 1}^G \left[\frac 1 {T_g} \sum_{t = 0}^{T_g}\min \left\{ r_t A_{g, t}, {\rm clip}\left(r_t, 1 - \epsilon, 1 + \epsilon\right) A_{g, t} \right\} - \beta D_{KL}(\pi_\theta \| \pi_{ref}) \right] \end{aligned} \]

其中 \(G\) 是采样的组,\(r_t = \frac {\pi_{\hat \theta}(a_{g, t} | s_t)}{\pi_{\theta}(a_{g, t} | s_t)}\),\(A_g\) 也就是组内的优势函数:

\[A_g = \frac {r_g - \bar r}{{\rm std}\{r_g\}} \]

换句话来说,也就是将 Critic 计算 \(V(s_t)\) 的过程,变成采样 \(G\) 个答案,然后对于分数取平均,得到相对优势。


DAPO

在 GRPO 的基础上,进行了这样的优化。

  1. 提高 \(1 + \epsilon\)
    这是源于这样一个情况:如果说不小心采样到了一个小概率的答案,但是答案却是非常好的,此时,由重要性采样,其权重就会很低,导致优势变得很小,难以学习到该答案。所以独立设置 \(1 - \epsilon_{low}\) 和 \(1 + \epsilon_{high}\)

  2. 动态采样
    模型在前后期的情况下,可能回答全错/全对,导致组内优势全部为 0,从而导致无效训练。
    这里的 trick 就是一直采样直到出现至少一对评分有区别的答案。

  3. token 平均
    注意看 GRPO 的优势,是对于每一个回答进行 Token 级别的平均。但是这样导致了长回答的优势被稀疏化。所以这里采用全部采样级别的平均,换句话来说,也就是删除了 \(\frac 1 {T_g}\) 这一个平均的系数作为损失。

  4. 过长惩罚
    太长的东西也令人痛苦。所以当回答超过一定长度后,对 token 进行惩罚,约长惩罚越高。


GSPO

这一框架的提出动机源于以下事实:在MoE架构训练期间,GRPO 的重要性采样引入了大的方差和不稳定性。GSPO 的核心思想是减少在奖励处理过程中对 token 级优化的依赖,同时更加强调整体序列结果。


场景 选谁 原因
数学推理 / 代码生成(答案可验证) GRPO/GSPO 奖励稀疏且二元,组内相对优势足够;省 Critic 显存用于更大 batch。
传统 RLHF(人类偏好,连续奖励) PPO 需要 Critic 建模复杂偏好面,GRPO 的组内标准化会丢失细粒度信号。
MoE LLM / 异构 Agent GSPO/HACPO Token-level IS 在 MoE 中因 expert 切换而崩溃,必须 sequence-level。
边缘设备 / 显存受限 GRPO 单网络即可训练,我的 5070Ti 跑 7B 模型时显存瓶颈显著。
机器人控制 / 游戏 AI PPO 状态连续、奖励稠密,Critic 的价值估计对稳定探索至关重要。
posted @ 2026-09-26 20:54  jeefy  阅读(6)  评论(0)    收藏  举报