GSPO vs GRPO
2025-12-30
深度学习
00

目录

一、GRPO(Group Relative Policy Optimization)
1. 核心目标函数
2. 关键符号详解
3. 计算流程
二、GSPO(Group Sequence Policy Optimization)
1. 核心目标函数
2. 关键符号详解
3. 计算流程
三、GSPO vs GRPO 详细对比
四、核心数学差异解析
1. 为什么GSPO更稳定?
2. 长度归一化的数学意义
3. 优势函数估计
五、实践建议

一、GRPO(Group Relative Policy Optimization)

1. 核心目标函数

L(θ)=E(x,y)πθold[t=1ymin(wi,t(θ)Ai,tb,  clip(wi,t(θ),1ϵ,1+ϵ)Ai,tb)]L(\theta) = \mathbb{E}_{(x, y) \sim \pi_{\theta_{old}}} \left[ \sum_{t=1}^{|y|} \min\left( w_{i,t}(\theta) \cdot A_{i,t}^{b},\; \text{clip}(w_{i,t}(\theta), 1-\epsilon, 1+\epsilon) \cdot A_{i,t}^{b} \right) \right]

2. 关键符号详解

a) 重要性比率(Token级别):

wi,t(θ)=πθ(yi,tx,yi,<t)πθold(yi,tx,yi,<t)w_{i,t}(\theta) = \frac{\pi_{\theta}(y_{i,t} \mid x, y_{i,<t})}{\pi_{\theta_{old}}(y_{i,t} \mid x, y_{i,<t})}
  • πθ(yi,tx,yi,<t)\pi_{\theta}(y_{i,t} \mid x, y_{i,<t}):在当前策略参数θ\theta下,生成第tt个token的概率。
  • πθold(yi,tx,yi,<t)\pi_{\theta_{old}}(y_{i,t} \mid x, y_{i,<t}):在旧策略参数θold\theta_{old}下,生成相同token的概率。
  • wi,t(θ)w_{i,t}(\theta):第ii个样本在第tt个token位置的重要性比率。

b) 其他符号:

  • xx:输入序列(如提示词)。
  • yy:输出序列(模型生成的完整响应)。
  • yi,ty_{i,t}:第ii个样本的第tt个token。
  • yi,<ty_{i,<t}:第ii个样本中第tt个token之前的所有token。
  • y|y|:输出序列的长度(token数量)。
  • Ai,tbA_{i,t}^{b}:基于基准的优势函数,衡量第tt个token的“好坏”程度。
  • ϵ\epsilon:裁剪参数(通常取0.1或0.2),限制策略更新幅度。
  • clip(w,1ϵ,1+ϵ)\text{clip}(w, 1-\epsilon, 1+\epsilon):将ww裁剪到[1ϵ,1+ϵ][1-\epsilon, 1+\epsilon]区间内。

3. 计算流程

  1. 计算每个token的概率比:对序列中每个位置tt,计算wi,t(θ)w_{i,t}(\theta)
  2. 逐token求和:将所有token的优势加权求和。
  3. PPO裁剪:使用min\minclip\text{clip}确保更新不会太激进。

二、GSPO(Group Sequence Policy Optimization)

1. 核心目标函数

L(θ)=E(x,y)πθold[min(si(θ)A^i,  clip(si(θ),1ϵ,1+ϵ)A^i)]L(\theta) = \mathbb{E}_{(x, y) \sim \pi_{\theta_{old}}} \left[ \min\left( s_i(\theta) \cdot \hat{A}_i,\; \text{clip}(s_i(\theta), 1-\epsilon, 1+\epsilon) \cdot \hat{A}_i \right) \right]

2. 关键符号详解

a) 重要性比率(序列级别):

si(θ)=(πθ(yix)πθold(yix))1yis_i(\theta) = \left( \frac{\pi_{\theta}(y_i \mid x)}{\pi_{\theta_{old}}(y_i \mid x)} \right)^{\frac{1}{|y_i|}}

分步解析:

步骤1:计算整个序列的概率

πθ(yix)=t=1yiπθ(yi,tx,yi,<t)\pi_{\theta}(y_i \mid x) = \prod_{t=1}^{|y_i|} \pi_{\theta}(y_{i,t} \mid x, y_{i,<t})

这是链式法则,整个序列的概率等于所有token条件概率的乘积。

步骤2:计算概率比

πθ(yix)πθold(yix)\frac{\pi_{\theta}(y_i \mid x)}{\pi_{\theta_{old}}(y_i \mid x)}

新旧策略在整个序列上的概率比。

步骤3:长度归一化(关键创新)

(πθ(yix)πθold(yix))1yi\left( \frac{\pi_{\theta}(y_i \mid x)}{\pi_{\theta_{old}}(y_i \mid x)} \right)^{\frac{1}{|y_i|}}

对概率比开yi|y_i|次方,消除序列长度的影响,本质上是计算token级概率比的几何平均值。

步骤4:等价的对数形式(数值稳定)

si(θ)=exp(1yit=1yilog(πθ(yi,tx,yi,<t)πθold(yi,tx,yi,<t)))s_i(\theta) = \exp\left( \frac{1}{|y_i|} \sum_{t=1}^{|y_i|} \log\left( \frac{\pi_{\theta}(y_{i,t} \mid x, y_{i,<t})}{\pi_{\theta_{old}}(y_{i,t} \mid x, y_{i,<t})} \right) \right)

通过对数变换避免长序列连乘导致的数值下溢问题。

b) 其他符号:

  • A^i\hat{A}_i:第ii个序列的优势估计(序列级别)。
  • yi|y_i|:第ii个序列的长度。

3. 计算流程

  1. 计算对数概率比的平均值

    log_ratio_mean=1yit=1yilog(πθ(yi,tx,yi,<t)πθold(yi,tx,yi,<t))\text{log\_ratio\_mean} = \frac{1}{|y_i|} \sum_{t=1}^{|y_i|} \log\left( \frac{\pi_{\theta}(y_{i,t} \mid x, y_{i,<t})}{\pi_{\theta_{old}}(y_{i,t} \mid x, y_{i,<t})} \right)
  2. 指数变换得到归一化的重要性比率

    si(θ)=exp(log_ratio_mean)s_i(\theta) = \exp(\text{log\_ratio\_mean})
  3. PPO裁剪:在序列级别应用裁剪。


三、GSPO vs GRPO 详细对比

维度GRPOGSPO
优化粒度Token级别(细粒度)序列级别(粗粒度)
重要性比率wi,tw_{i,t}:每个token一个比率sis_i:每个序列一个比率
优势函数Ai,tbA_{i,t}^{b}:每个token的优势A^i\hat{A}_i:整个序列的优势
计算复杂度高(需对每个token计算和裁剪)低(只需计算一次序列级比率)
训练稳定性较低,易受单个token噪声影响较高,长度归一化降低方差
长序列处理概率乘积容易数值下溢对数平均+指数变换,数值稳定
适用场景需要精细控制每个token的任务长文本生成、复杂推理任务

四、核心数学差异解析

1. 为什么GSPO更稳定?

GRPO的问题:

t=1ywi,tAi,t\sum_{t=1}^{|y|} w_{i,t} \cdot A_{i,t}
  • 每个token的噪声在求和中累加。
  • 长序列时,误差被放大。

GSPO的解决:

si=exp(1yit=1yilog(wi,t))s_i = \exp\left( \frac{1}{|y_i|} \sum_{t=1}^{|y_i|} \log(w_{i,t}) \right)
  • 先对每个token的重要性比率取对数再求平均,降低了方差。
  • 通过长度归一化,使得不同长度的序列具有可比性。

2. 长度归一化的数学意义

si=(t=1yiwi,t)1yis_i = \left( \prod_{t=1}^{|y_i|} w_{i,t} \right)^{\frac{1}{|y_i|}}

这实际上是计算token级概率比wi,tw_{i,t}几何平均值。相比算术平均:

  • 对极端值不敏感。
  • 保持了概率连乘的乘法结构。
  • 使不同长度序列的重要性比率处于同一尺度。

3. 优势函数估计

GRPO:

Ai,tb=ri,tbtA_{i,t}^{b} = r_{i,t} - b_t

需要为每个token位置tt估计奖励ri,tr_{i,t}和基准值btb_t

GSPO:

A^i=Rib\hat{A}_i = R_i - b

只需为整个序列估计一个总奖励RiR_i和一个基准值bb。实践中,A^i\hat{A}_i常通过组内标准化计算:

A^i=RiμGσG\hat{A}_i = \frac{R_i - \mu_{\mathcal{G}}}{\sigma_{\mathcal{G}}}

其中RiR_i是序列ii的总奖励,μG\mu_{\mathcal{G}}σG\sigma_{\mathcal{G}}是同一组(Group)内所有序列奖励的均值和标准差。


五、实践建议

选择GRPO的场景:

  • 需要对每个token进行精细控制的任务(如语法纠正、特定风格生成)。
  • 短序列生成任务。
  • 有明确的、可获得的token级奖励信号。

选择GSPO的场景:

  • 长文本生成(如长篇回答、故事创作、代码生成)。
  • 只有序列级评价指标(如任务完成度、总体准确率、BLEU分数)。
  • 需要提高训练稳定性和计算效率。
  • 使用混合专家(MoE)等大规模模型。
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Dong

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!