如何速成LLM以伪装成一个AI研究者(4)——PPO,GRPO,DAPO,GSPO

往期回顾

如何速成LLM以伪装成一个AI研究者(1)------循环,卷积,编解码器,注意力,Transformer
如何速成LLM以伪装成一个AI研究者(2)------Pre-LN,KV-Cache优化,MoE
如何速成LLM以伪装成一个AI研究者(3)------预训练,监督微调,强化学习RLHF/DPO

免责声明:作者也是伪装的,有错漏属于正常现象,欢迎评论指正。

PPO

PPO ,全程 Proximal Policy Optimization(近端策略优化) ,是OpenAI在2017年提出的算法:Proximal Policy Optimization Algorithms

PPO是在传统强化学习的脉络上诞生的算法,所以我们先回顾一下传统强化学习面临的是什么问题:Agent从状态 s 1 s_1 s1出发,在 T T T的时间单位内,要不断选择动作 a 1 , a 2 , ⋯   , a T a_1,a_2,\cdots,a_T a1,a2,⋯,aT,每一个时间单位做完动作 a t a_t at后,环境状态会变成 s t + 1 s_{t+1} st+1 (故交互过程可以形成轨迹 τ = ( s 1 , a 1 , s 2 , a 2 , ⋯   , s T , a T \tau=(s_1,a_1,s_2,a_2,\cdots,s_T,a_T τ=(s1,a1,s2,a2,⋯,sT,aT)。最终轨迹会有一个对应的奖励分数 R ( τ ) R(\tau) R(τ),也就是Agent完成这一系列动作的得分。

  • 对于一个走迷宫游戏,动作是往上下左右走,状态是Agent的位置,初始状态是起点,而奖励是是否走到了终点。
  • 对于数学题证明推导,动作是使用哪个数学定理,状态是已经完成的推导过程,初始状态是问题,奖励是是否成功证明。
  • 对于LLM文本输出,动作是输出哪个token,状态是已经形成的句子,初始状态是用户指令,而奖励是最终的文本是否符合用户的心意。

直观想法是,我们想优化:

max ⁡ θ J ( θ ) = max ⁡ θ E τ ∼ π θ R ( τ ) = max ⁡ θ ∑ τ P ( τ ∣ θ ) R ( τ ) \max_{\theta} J(\theta)=\max_{\theta} E_{\tau \sim \pi_{\theta}} R(\tau)=\max_{\theta} \sum_{\tau} P(\tau | \theta)R(\tau) θmaxJ(θ)=θmaxEτ∼πθR(τ)=θmaxτ∑P(τ∣θ)R(τ)

对这玩意求导可以推导:

∇ θ J ( θ ) = ∑ τ ∇ θ P ( τ ∣ θ ) R ( τ ) \nabla_{\theta} J(\theta)=\sum_{\tau} \nabla_{\theta}P(\tau | \theta)R(\tau) ∇θJ(θ)=∑τ∇θP(τ∣θ)R(τ)
= ∑ τ P ( τ ∣ θ ) ∇ θ P ( τ ∣ θ ) P ( τ ∣ θ ) R ( τ ) =\sum_{\tau} P(\tau | \theta) \frac{\nabla_{\theta}P(\tau | \theta)}{P(\tau | \theta)}R(\tau) =∑τP(τ∣θ)P(τ∣θ)∇θP(τ∣θ)R(τ)
= ∑ τ P ( τ ∣ θ ) ∇ θ log ⁡ P ( τ ∣ θ ) R ( τ ) =\sum_{\tau} P(\tau | \theta) \nabla_{\theta} \log {P(\tau | \theta)}R(\tau) =∑τP(τ∣θ)∇θlogP(τ∣θ)R(τ)
= E τ ∼ π θ ∇ θ log ⁡ P ( τ ∣ θ ) R ( τ ) =E_{\tau \sim \pi_{\theta}} \nabla_{\theta} \log P(\tau | \theta)R(\tau) =Eτ∼πθ∇θlogP(τ∣θ)R(τ)

又有 P ( τ ∣ θ ) = ∏ t = 0 T P ( s t + 1 ∣ s t , a t ) π θ ( a t ∣ s t ) P(\tau | \theta) = \prod_{t=0}^T P(s_{t+1}|s_t,a_t) \pi_{\theta}(a_t|s_t) P(τ∣θ)=∏t=0TP(st+1∣st,at)πθ(at∣st)

故 ∇ θ log ⁡ P ( τ ∣ θ ) = ∇ θ [ ∑ t = 0 T log ⁡ P ( s t + 1 ∣ s t , a t ) + ∑ t = 0 T log ⁡ π θ ( a t ∣ s t ) ] = ∑ t = 0 T ∇ θ log ⁡ π θ ( a t ∣ s t ) \nabla_{\theta} \log P(\tau | \theta)=\nabla_{\theta}[\sum_{t=0}^T \log P(s_{t+1}|s_t,a_t)+\sum_{t=0}^T \log \pi_{\theta} (a_t|s_t)]=\sum_{t=0}^T \nabla_{\theta} \log \pi_{\theta}(a_t|s_t) ∇θlogP(τ∣θ)=∇θ[∑t=0TlogP(st+1∣st,at)+∑t=0Tlogπθ(at∣st)]=∑t=0T∇θlogπθ(at∣st)

最终得到策略梯度为:

∇ θ J ( θ ) = E τ ∼ π θ ( ∑ t = 0 T ∇ θ log ⁡ π θ ( a t ∣ s t ) ) R ( τ ) \begin{equation} \nabla_{\theta}J(\theta)=E_{\tau \sim \pi_{\theta}} (\sum_{t=0}^T \nabla_{\theta} \log \pi_{\theta}(a_t|s_t))R(\tau) \end{equation} ∇θJ(θ)=Eτ∼πθ(t=0∑T∇θlogπθ(at∣st))R(τ)

这个 E E E可以使用采样 m m m条轨迹的形式来近似拟合,最终使用 θ ← θ + α ∇ θ J ( θ ) \theta \leftarrow \theta+\alpha \nabla_{\theta} J(\theta) θ←θ+α∇θJ(θ),就可以用梯度下降算法优化策略函数了。这就是策略梯度算法(Policy Gradient Methods)

但是策略梯度算法有个问题,就是它在实践中非常不稳定,梯度经常过大。所以人们希望在一次梯度更新之前,限制梯度更新的幅度。

但是目前这个算法还有各种各样的问题,所以需要慢慢解决。

问题1:使用 R ( τ ) R(\tau) R(τ)作为奖励,看不见每一步的贡献。

R ( τ ) R(\tau) R(τ)是整条轨迹的奖励,但是当整条轨迹奖励为正时,不代表轨迹的每个动作都是好的。所以,我们可以定义 优势函数 取代 R ( τ ) R(\tau) R(τ):

A ( s t , a t ) = Q ( s t , a t ) − V ( s t ) A(s_t,a_t)=Q(s_t,a_t)-V(s_t) A(st,at)=Q(st,at)−V(st)

其中 Q ( s t , a t ) = E τ ∼ π θ [ ∑ k = 0 ∞ γ k r t + k + 1 ∣ S t = s , A t = a ] Q(s_t,a_t)=E_{\tau \sim \pi_{\theta}} [\sum_{k=0}^{\infty} \gamma^k r_{t+k+1} | S_t=s,A_t=a] Q(st,at)=Eτ∼πθ[∑k=0∞γkrt+k+1∣St=s,At=a], γ \gamma γ为超参数,一般小于1,表示离 t t t越近获得的奖励,和第 t t t步的关系越大。而 r t + k + 1 r_{t+k+1} rt+k+1则表示这一步的"部分分"。这个 Q Q Q代表了在状态 s t s_t st下选择动作 a t a_t at,遵循策略 π θ \pi_{\theta} πθ可以得到的期望累积折扣回报。

对于没有部分分,只有轨迹最终得分的情况,中间的步骤 r r r都为0,只有最后一步(第 T T T步的 r T r_T rT可能不为0)

而 V ( s t ) = E a t = s i m π θ ( ⋅ ∣ s t ) [ Q ( s t , a t ) ] V(s_t)=E_{a_t =sim \pi_{\theta}(\cdot|s_t)}[Q(s_t,a_t)] V(st)=Eat=simπθ(⋅∣st)[Q(st,at)],表示状态 s t s_t st下,遵循策略 π θ \pi_{\theta} πθ可以得到的期望累积折扣回报。

接下来,我们定义 A t ^ \hat{A_t} At^,这个加了小帽的符号,代表我们因为测不准 A t A_t At,所以对 A t A_t At的估计。为了估计这个 A t A_t At,我们需要训练一个Critic神经网络 ,用于估计 V ( s t ) V(s_t) V(st)。估计方法如下卡片所示:

GAE(Generalized Advantage Estimation,广义优势估计)

一种平衡优势函数的偏差(估计量期望值与真实值的差值)/方差的技巧。GAE需要额外定义一个超参数 λ ∈ [ 0 , 1 ] \lambda \in [0,1] λ∈[0,1]。

设 δ t V = r t + γ V ( s t + 1 ) − V ( s t ) \delta_t^V=r_t+\gamma V(s_{t+1})-V(s_t) δtV=rt+γV(st+1)−V(st)为一步TD误差

则 A t ^ G A E = ∑ k = 0 ∞ ( γ λ ) k δ t + k V \hat{A_t}^{GAE}=\sum_{k=0}^{\infty} (\gamma \lambda)^k \delta_{t+k}^V At^GAE=∑k=0∞(γλ)kδt+kV(注意 δ \delta δ的公式里是有 γ \gamma γ的,而 λ \lambda λ只用在外面),这个公式被称为 T D ( λ ) TD(\lambda) TD(λ)

当 λ = 0 \lambda=0 λ=0时,这个估计退化为 A t ^ = δ t \hat{A_t}=\delta_t At^=δt,高偏差,无方差。

当 λ = 1 \lambda=1 λ=1时,这个估计退化为蒙特卡洛优势 A t ^ = ∑ k = 0 ∞ γ k δ t + k V \hat{A_t}=\sum_{k=0}^{\infty} \gamma^k \delta_{t+k}^V At^=∑k=0∞γkδt+kV,低偏差、高方差。

通过调节 λ \lambda λ(通常0.95-0.99),调节方差和偏差,从而加速收敛。

对于稀疏奖励(没有部分分)的情况,在 λ = 0 \lambda=0 λ=0时 A t ^ = γ V ( s t + 1 ) − V ( s t ) \hat{A_t}=\gamma V(s_{t+1})-V(s_t) At^=γV(st+1)−V(st),在 λ = 1 \lambda=1 λ=1时, A t ^ = γ T − 1 − t R ( τ ) − V ( s t ) \hat{A_t}=\gamma^{T-1-t}R(\tau)-V(s_t) At^=γT−1−tR(τ)−V(st)。

总之,知道有这个估计 A t ^ \hat{A_t} At^就可以了。然后就可以把策略梯度的表示修改:

∇ θ J ( θ ) = E τ ∼ π θ ( ∑ t = 0 T ∇ θ log ⁡ π θ ( a t ∣ s t ) A t ^ ) \begin{equation} \nabla_{\theta}J(\theta)=E_{\tau \sim \pi_{\theta}} (\sum_{t=0}^T \nabla_{\theta} \log \pi_{\theta}(a_t|s_t)\hat{A_t}) \end{equation} ∇θJ(θ)=Eτ∼πθ(t=0∑T∇θlogπθ(at∣st)At^)

而 V V V一般使用 均方误差(MSE) 进行训练,记 A t ^ = G t − V o l d ( s t ) \hat{A_t}=G_t-V_{old}(s_t) At^=Gt−Vold(st),则:

L o s s V = E τ ∼ π θ [ ∑ t = 1 T ( V ( s t ) − G t ) 2 ] Loss_V=E_{\tau \sim \pi_{\theta}}[\sum_{t=1}^T(V(s_t)-G_t)^2] LossV=Eτ∼πθ[t=1∑T(V(st)−Gt)2]

问题2:我必须实时采样吗?

原始的策略梯度有一个问题,就是 τ ∼ π θ \tau \sim \pi_{\theta} τ∼πθ导致轨迹必须从当前策略模型获得。假如我想要一次性采样一大批数据,然后统一做一次梯度更新怎么办?

也即,我想优化的是:

max ⁡ θ J ( θ ) = max ⁡ θ E τ ∼ π θ R ( τ ) \max_{\theta} J(\theta)=\max_{\theta} E_{\tau \sim \pi_{\theta}} R(\tau) θmaxJ(θ)=θmaxEτ∼πθR(τ)

但是我实际的 τ \tau τ采样自 π o l d \pi_{old} πold。此时,考虑到:

E τ ∼ π θ R ( τ ) = ∫ π θ ( τ ) R ( τ ) d τ = ∫ π o l d ( τ ) π θ ( τ ) π o l d ( τ ) R ( τ ) d τ = E τ ∼ π o l d π θ ( τ ) π o l d ( τ ) R ( τ ) E_{\tau \sim \pi_{\theta}} R(\tau)=\int \pi_{\theta}(\tau) R(\tau)d\tau=\int \pi_{old}(\tau)\frac{ \pi_{\theta}(\tau)}{ \pi_{old}(\tau)} R(\tau)d\tau=E_{\tau \sim \pi_{old}} \frac{ \pi_{\theta}(\tau)}{ \pi_{old}(\tau)} R(\tau) Eτ∼πθR(τ)=∫πθ(τ)R(τ)dτ=∫πold(τ)πold(τ)πθ(τ)R(τ)dτ=Eτ∼πoldπold(τ)πθ(τ)R(τ)

概率比值 r t ( θ ) = π θ ( a t ∣ s t ) π o l d ( a t ∣ s t ) r_t(\theta)=\frac{\pi_{\theta} (a_t |s_t)}{\pi_{old}(a_t|s_t)} rt(θ)=πold(at∣st)πθ(at∣st)。

则优化目标可以变成:

max ⁡ θ J ( θ ) = r t ( θ ) A t ^ \begin{equation} \max_{\theta} J(\theta)=r_t(\theta)\hat{A_t} \end{equation} θmaxJ(θ)=rt(θ)At^

这样就可以降低采样的实时性,提升并行性和训练效率。

问题3:怎样控制梯度更新的幅度?

这就是PPO的核心,裁剪(clip) 技术。它会截断 r t ( θ ) r_t(\theta) rt(θ),限制它在 [ 1 − ϵ , 1 + ϵ ] [1-\epsilon, 1+\epsilon] [1−ϵ,1+ϵ]区间内( ϵ \epsilon ϵ为超参数,一般取0.2左右)。

所以最终,PPO的优化目标是:

max ⁡ θ J P P O ( θ ) = E [ min ⁡ ( r t ( θ ) A ^ t , c l i p ( r t ( θ ) , 1 − ϵ , 1 + ϵ ) A ^ t ) ] \begin{equation} \max_{\theta} J_{PPO}(\theta)=E[\min (r_t(\theta) \hat{A}_t, clip(r_t(\theta), 1-\epsilon, 1+\epsilon)\hat{A}_t)] \end{equation} θmaxJPPO(θ)=E[min(rt(θ)A^t,clip(rt(θ),1−ϵ,1+ϵ)A^t)]

然后,还有独属于LLM的一个Trick:和DPO一样,我们希望RL对模型参数的更新不要偏离SFT后的直接结果 π r e f \pi_{ref} πref太远,所以会增加一个KL Penalty:

L P P O = min ⁡ ( r t ( θ ) A ^ t , c l i p ( r t ( θ ) , 1 − ϵ , 1 + ϵ ) A ^ t ) − β D K L ( π θ ∥ π r e f ) L_{PPO}=\min (r_t(\theta) \hat{A}t, clip(r_t(\theta), 1-\epsilon, 1+\epsilon)\hat{A}t)-\beta D{KL}(\pi{\theta} \parallel \pi_{ref}) LPPO=min(rt(θ)A^t,clip(rt(θ),1−ϵ,1+ϵ)A^t)−βDKL(πθ∥πref)

最后总结:

整个PPO的训练过程,需要维护四个模型:

  • 策略模型(Policy Model) π θ \pi_{\theta} πθ,即训练的目标。
  • 价值模型(Value Model) V V V,参数随策略模型一起更新。
  • 参考模型(Reference Model) π r e f \pi_{ref} πref,即SFT结束后的模型,也是策略/价值模型的初始化模型。冻结参数。
  • 奖励模型(Reward Model) R ϕ R_{\phi} Rϕ,上一篇文章我们讲过它是怎么计算的,可以计算整个轨迹的奖励。冻结参数。

这也是它训起来"贵"的原因。

GRPO

相关论文:(2024年,DeepSeek)DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models

GRPO (Group Relative Policy Optimization) 的主要优化目标是解决 V V V占显存还可能训练不稳定的问题。具体而言,它依靠 一个询问 q q q生成一组 G G G个输出 o 1 , o 2 , ⋯   , o G o_1,o_2,\cdots, o_G o1,o2,⋯,oG 替代原本的价值模型 V V V的作用。

假设 o 1 , o 2 , ⋯   , o G o_1,o_2,\cdots, o_G o1,o2,⋯,oG的Reward Model得分分别为 R ( q , o 1 ) , R ( q , o 2 ) , ⋯   , R ( q , o G ) R(q,o_1),R(q, o_2),\cdots, R(q,o_G) R(q,o1),R(q,o2),⋯,R(q,oG),则第 i i i个输出的第 t t t个token的 A ^ i , t \hat A_{i,t} A^i,t为:

A ^ i , t = R ( q , o i ) − m e a n ( R ( q , o ) ) s t d ( R ( q , o ) ) + ε \hat A_{i,t}=\frac{R(q, o_i)-mean(R(q,o))}{std(R(q,o))+\varepsilon} A^i,t=std(R(q,o))+εR(q,oi)−mean(R(q,o))

ε \varepsilon ε防止std为0。

最终:

max ⁡ θ J G R P O ( θ ) = E [ 1 G ∑ i = 1 G 1 ∣ o i ∣ ∑ t = 1 ∣ o i ∣ min ⁡ ( r t ( θ ) A ^ i , t , c l i p ( r t ( θ ) , 1 − ϵ , 1 + ϵ ) A ^ i , t ) ] \begin{equation} \max_{\theta} J_{GRPO}(\theta)=E[\frac{1}{G}\sum_{i=1}^G \frac{1}{|o_i|}\sum_{t=1}^{|o_i|}\min (r_t(\theta) \hat{A}{i,t}, clip(r_t(\theta), 1-\epsilon, 1+\epsilon)\hat{A}{i,t})] \end{equation} θmaxJGRPO(θ)=E[G1i=1∑G∣oi∣1t=1∑∣oi∣min(rt(θ)A^i,t,clip(rt(θ),1−ϵ,1+ϵ)A^i,t)]

是的,没错,这是一个完全 output级 的优势计算,没有使用 token级 的信息,相应地,GAE之类的技巧也就用不到了。可谓简单粗暴,力大砖飞,但又行之有效。

GRPO的优点很明显:舍弃了训练不稳定的Value Model,节省内存,并且让训练更加稳定。

但它的缺点也同样明显:Advantage完全token无关,对于长回答粒度不足,容易分不清哪部分是对reward有贡献,哪一部分没有,从而可能训崩。

DAPO

相关论文:(2025年,ByteDance Seed)DAPO: An Open-Source LLM Reinforcement Learning System at Scale

DAPO (Decouple Clip and Dynamic sAmpling Policy Optimization,好复杂的缩写啊!) 主要面向长CoT(Chain of Thought)的改进,使用了多个Trick。

Tirck 1: Clip-Higher

在作者们的实验中,经常观察到Entropy Collapse的现象。

Entropy Collapse

假如词表大小为 V V V,模型在给定上下文下预测下一个 token 的概率分布为 [ p 1 , p 2 , ⋯   , p V ] [p_1,p_2,\cdots,p_V] [p1,p2,⋯,pV],则Entropy(熵)为 H = − ∑ i = 1 V p i log ⁡ p i H=-\sum_{i=1}^V p_i \log p_i H=−∑i=1Vpilogpi。熵是模型训练过程中的一个重要监控指标。如果熵过高说明模型的策略还未收敛,但如果熵过低(Entropy Collapse),也是不好的,因为这说明:(1)模型的输出模式单一,难以探索新的策略。(2)模型输出极容易陷入死循环。

在GRPO继承自PPO的clip技巧中, c l i p ( r t ( θ ) , 1 − ϵ , 1 + ϵ ) A ^ i ) clip(r_t(\theta), 1-\epsilon, 1+\epsilon)\hat{A}i) clip(rt(θ),1−ϵ,1+ϵ)A^i)这一项的clip是左右对称的,DAPO的作者认为这不利于探索,是导致Entropy Collapse的主要原因之一。具体地,他们解耦了clip的上下界,用了两个参数 ϵ l o w \epsilon{low} ϵlow和 ϵ h i g h \epsilon_{high} ϵhigh将clip改成了 c l i p ( r t ( θ ) , 1 − ϵ l o w , 1 + ϵ h i g h ) A ^ i ) clip(r_t(\theta), 1-\epsilon_{low}, 1+\epsilon_{high})\hat{A}i) clip(rt(θ),1−ϵlow,1+ϵhigh)A^i),并且令 ϵ h i g h > ϵ l o w \epsilon{high}>\epsilon_{low} ϵhigh>ϵlow。

回顾 r t ( θ ) r_t(\theta) rt(θ)的定义,它表示的是当前policy产生这个token的概率,比上policy更新前产生这个token的概率。也就是说,如果 r t ( θ ) > 1 r_t(\theta)>1 rt(θ)>1,表示这个token的概率被增加了,如果小于1,则表示这个token的概率被减少了。前者发生在 A ^ i > 0 \hat{A}_i>0 A^i>0时,后者则发生在 A ^ i < 0 \hat{A}i<0 A^i<0时。DAPO放宽 ϵ h i g h \epsilon{high} ϵhigh的主要目的是:对于出现概率较低,但是比较好的行为,给予更宽容的更新幅度,鼓励模型探索出新的优秀行为模式。

Tirck 2: Dynamic Sampling

在GRPO中,假如一组的output全部正确或者错误,则归一化后的优势值 A ^ i , t = R ( q , o i ) − m e a n ( R ( q , o ) ) s t d ( R ( q , o ) ) + ε \hat A_{i,t}=\frac{R(q, o_i)-mean(R(q,o))}{std(R(q,o))+\varepsilon} A^i,t=std(R(q,o))+εR(q,oi)−mean(R(q,o))为0,意味着该批次的样本对训练完全没有贡献。因此在采样过程中,DAPO会先把这种样本组给剔除。如果因为剔除机制导致样本数量填不满batch,则会对这些被剔除的 q q q进行重采样。

Trick 3: Token-Level Policy Gradient Loss

在原版GRPO中,有一项 1 G ∑ i = 1 G \frac{1}{G}\sum_{i=1}^G G1∑i=1G,即视作每一条回答(无论是长是短)对策略梯度贡献均等。而DAPO认为应该是每个token共享均等,于是将原公式的: 1 G ∑ i = 1 G 1 ∣ o i ∣ ∑ t = 1 ∣ o i ∣ \frac{1}{G}\sum_{i=1}^G \frac{1}{|o_i|}\sum_{t=1}^{|o_i|} G1∑i=1G∣oi∣1∑t=1∣oi∣改为了 1 ∑ i = 1 G ∣ o i ∣ ∑ i = 1 G ∑ t = 1 ∣ o i ∣ \frac{1}{\sum_{i=1}^G |o_i|}\sum_{i=1}^G \sum_{t=1}^{|o_i|} ∑i=1G∣oi∣1∑i=1G∑t=1∣oi∣。

Trick 4: Overlong Reward Shaping

"软化"奖励中的长度惩罚,提高对超长输出的容忍度。和强化学习算法关联较小,故略。

Trick 5 : 取消KL-Penalty

在长CoT的训练实践中,最终的策略模型和初始策略模型的差距可能较大,因此取消了KL-Penalty这一项。

汇总一下,DAPO的主要公式为:

max ⁡ θ J D A P O ( θ ) = E [ 1 ∑ i = 1 G ∣ o i ∣ ∑ i = 1 G ∑ t = 1 ∣ o i ∣ min ⁡ ( r t ( θ ) A ^ i , t , c l i p ( r t ( θ ) , 1 − ϵ l o w , 1 + ϵ h i g h ) A ^ i , t ) ] \begin{equation} \max_{\theta} J_{DAPO}(\theta)=E[\frac{1}{\sum_{i=1}^G |o_i|}\sum_{i=1}^G \sum_{t=1}^{|o_i|}\min (r_t(\theta) \hat{A}{i,t}, clip(r_t(\theta), 1-\epsilon{low}, 1+\epsilon_{high})\hat{A}_{i,t})] \end{equation} θmaxJDAPO(θ)=E[∑i=1G∣oi∣1i=1∑Gt=1∑∣oi∣min(rt(θ)A^i,t,clip(rt(θ),1−ϵlow,1+ϵhigh)A^i,t)]

GSPO

相关论文:(2025年,Qwen)Group Sequence Policy Optimization

相信看了前面的算法,你肯定会有一个疑问:GRPO系用全局回答的奖励算具体token的优势,一个回答序列里所有的token的优势都是一样的,这合理吗?感觉不太合理啊?

GSPO (Group Sequence Policy Optimization) 也觉得这件事不太合理,甚至表示,GRPO的token级优化目标是"病态(ill-posed)"的。具体地,对于重要性比率(importance sampling ratio):

r t ( θ ) = π θ ( o t ∣ q , o < t ) π o l d ( o t ∣ q , o < t ) r_t(\theta)=\frac{\pi_{\theta} (o_t |q,o_{<}t)}{\pi_{old}(o_t|q,o_{<t})} rt(θ)=πold(ot∣q,o<t)πθ(ot∣q,o<t)

它有如下问题:

  1. 高方差问题。由于每个token的权重是近乎独立计算的,随着序列增长,这些权重的乘积(即整个序列的权重)的方差会迅速累积。这导致梯度估计充满噪声,训练变得非常不稳定,模型甚至很容易"崩溃"。
  2. 由于MoE会对每个token分配专家,当策略更新时,token级别的路由决策可能发生剧烈变化,这会进一步显著加剧方差。
  3. GRPO的每个token的优势值一致,这会导致长序列中的少量异常token严重影响其他所有token的优势值。

因此,GSPO完全放弃了token级优势,而是使用序列级优势来替代:

max ⁡ θ J G S P O ( θ ) = E [ 1 G ∑ i = 1 G min ⁡ ( s i ( θ ) A ^ i , c l i p ( s i ( θ ) , 1 − ϵ , 1 + ϵ ) A ^ i ) ] \begin{equation} \max_{\theta} J_{GSPO}(\theta)=E[\frac{1}{G}\sum_{i=1}^G\min (s_i(\theta) \hat{A}_i, clip(s_i(\theta), 1-\epsilon, 1+\epsilon)\hat{A}_i)] \end{equation} θmaxJGSPO(θ)=E[G1i=1∑Gmin(si(θ)A^i,clip(si(θ),1−ϵ,1+ϵ)A^i)]

其中

s i ( θ ) = ( π θ ( o i ∣ q ) π o l d ( o i ∣ q ) ) 1 ∣ o i ∣ = e x p ( 1 ∣ o i ∣ ∑ t = 1 ∣ o i ∣ log ⁡ π θ ( o i , t ∣ q , o i < t ) π o l d ( o i , t ∣ q , o i < t ) ) s_i(\theta)=(\frac{\pi_{\theta} (o_i |q)}{\pi_{old} (o_i|q)})^{\frac{1}{|o_i|}}=exp(\frac{1}{|o_i|}\sum_{t=1}^{|o_i|} \log \frac{\pi_{\theta}(o_{i,t} | q, o_{i<t})}{\pi_{old}(o_{i,t} | q, o_{i<t})}) si(θ)=(πold(oi∣q)πθ(oi∣q))∣oi∣1=exp(∣oi∣1t=1∑∣oi∣logπold(oi,t∣q,oi<t)πθ(oi,t∣q,oi<t))

在进行这番修改后,MoE训练就变得稳定多了。

相关推荐
laomocoder3 小时前
灵犀 AI Agent:智能体工厂与多模型接入深度解析
人工智能
数字化转型20253 小时前
感慨:大佬学历不如现在应届生,企业学历门槛到底有什么意义?
人工智能
我是永恒3 小时前
灵砚 InkForge AI赋能的小说创作平台
人工智能
Elastic 中国社区官方博客3 小时前
Elasticsearch percolator 用于电商搜索治理:将模糊查询转换为可控的检索策略
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
shamalee3 小时前
Gemini3.1Pro:2026招聘效率革命
大数据·人工智能
生成论实验室3 小时前
《源·觉·知·行·事·物:生成论视域下的统一认知语法》第五章 事:行在时空中的具体化
人工智能·算法·架构·知识图谱·创业创新
jerryinwuhan3 小时前
人工智能工程技术(智能机器人应用)基于赛教融合的项目递进式课程体系
人工智能·机器人
rcc86283 小时前
Harness技术原理以及Hermes Agent的实现
人工智能