之前在 解锁模型潜能:Reward 数据如何塑造与激发 LLM 的推理策略 | Yam [1] 中,我们在介绍论文 Spurious Rewards 时提过:“关于GRPO 截断那部分推导和进一步分析也不错,有时间单独择文再议”。本文就来聊聊 GRPO 中的 clip。
回顾分析与优化
DAPO 的 Clip-Higher
首先看 DAPO [2] 的 Clip-Higher,主要源于使用 GRPO 训练时观察到的熵坍缩现象,就是 Policy 的熵迅速下降,导致某些组生成的结果几乎相同,限制了探索。我们在《DAPO:为GRPO的锦上加四点花 | Yam [3] 》已经提到过了,clip 的上限会限制 policy 的探索能力,导致 exploitation 的 token 比 exploration 的 token 更可能出现。
更具体点来说,clip 机制会抑制低概率 token 的概率增长,它们可能永远无法成为高概率 token,因为模型更倾向于维持原有的高概率 token(高概率 token 更容易保持高概率或继续增加),而不是探索新的 token,导致生成的内容缺乏多样性。
它的核心是下面这个公式:
π θ ( o i ∣ q ) ∈ [ ( 1 − ε low ) π θ old ( o i ∣ q ) , ( 1 + ε high ) π θ old ( o i ∣ q ) ] \pi_\theta\left(o_i \mid q\right) \in\left[(1-\varepsilon_{\text {low}}) \pi_{\theta_{\text {old }}}\left(o_i \mid q\right),(1+\varepsilon_{\text{high}}) \pi_{\theta_{\text {old }}}\left(o_i \mid q\right)\right]
π θ ( o i ∣ q ) ∈ [ ( 1 − ε low ) π θ old ( o i ∣ q ) , ( 1 + ε high ) π θ old ( o i ∣ q ) ]
显然,低概率 token 构成的区间会更狭窄。
Clip-Higher 的做法是:设置两个不同的 ϵ,low 设置的小一点,high 设置的高一点。
GMPO 的 Clip-Wider
GMPO [4] 本来是解决不稳定的重要性采样权重的,我们在《GRPO“第一背锅侠”Token Level X:DAPO/DrGRPO与GSPO/GMPO的殊途同归 | Yam [5] 》中做了详细介绍,它核心就是把算术平均改为几何平均,因为几何平均对边界异常值不敏感。
但同时还带来了一个额外的好处:更大的裁剪范围——其底气就是稳定(对极端值鲁棒)的几何平均,根据论文实验,clip 范围可以达到(0.67, 1.49)区间,这比 GRPO 和 DAPO(0.2, 0.28)都要大很多。
所以,Clip-Wider 其实是个正外部性,范围大了,探索自然更多。
限制探索的机理
先把 GRPO 的损失函数写下来:
J G R P O ( θ ) = E [ q ∼ D , { o i } i = 1 G ∼ π θ old ( O ∣ q ) ] 1 G ∑ i = 1 G 1 ∣ o i ∣ ∑ t = 1 ∣ o i ∣ { min [ π θ ( o i , t ∣ q , o i , < t ) π θ old ( o i , t ∣ q , o i , < t ) A ^ i , t , clip ( π θ ( o i , t ∣ q , o i , < t ) π θ old ( o i , t ∣ q , o i , < t ) , 1 − ε , 1 + ε ) A ^ i , t ] − β D K L [ π θ ∣ ∣ π r e f ] } (1) \begin{aligned}
\mathcal{J}_{G R P O}(\theta) & =\mathbb{E}\left[q \sim D,\left\{o_i\right\}_{i=1}^G \sim \pi_{\theta_{\text {old }}}(O \mid q)\right] \\
& \frac{1}{G} \sum_{i=1}^G \frac{1}{\left|o_i\right|} \sum_{t=1}^{\left|o_i\right|}\left\{\min \left[\frac{\pi_\theta\left(o_{i, t} \mid q, o_{i, \lt t}\right)}{\pi_{\theta_{\text {old }}}\left(o_{i, t} \mid q, o_{i,\lt t}\right)} \hat{A}_{i, t}, \operatorname{clip}\left(\frac{\pi_\theta\left(o_{i, t} \mid q, o_{i, \lt t}\right)}{\pi_{\theta_{\text {old }}}\left(o_{i, t} \mid q, o_{i, \lt t}\right)}, 1-\varepsilon, 1+\varepsilon\right) \hat{A}_{i, t}\right]-\beta \mathbb{D}_{K L}\left[\pi_\theta| | \pi_{r e f}\right]\right\}
\end{aligned} \tag{1}
J GR P O ( θ ) = E [ q ∼ D , { o i } i = 1 G ∼ π θ old ( O ∣ q ) ] G 1 i = 1 ∑ G ∣ o i ∣ 1 t = 1 ∑ ∣ o i ∣ { min [ π θ old ( o i , t ∣ q , o i , < t ) π θ ( o i , t ∣ q , o i , < t ) A ^ i , t , clip ( π θ old ( o i , t ∣ q , o i , < t ) π θ ( o i , t ∣ q , o i , < t ) , 1 − ε , 1 + ε ) A ^ i , t ] − β D K L [ π θ ∣∣ π r e f ] } ( 1 )
后面的推导基本都来自论文 Spurious Rewards: Rethinking Training Signals in RLVR [6] ,非常有意思的一篇 paper。
Advantage 期望为 0
假设奖励服从伯努利分布:
r ( x , y ( i ) ) ∼ Bernoulli ( γ ) (2) r (x, y^{(i)}) \sim \text{Bernoulli} (\gamma) \tag{2}
r ( x , y ( i ) ) ∼ Bernoulli ( γ ) ( 2 )
x 的 reward 期望为 γ。
假设 σx=0 时,A=0,G 个 rollout 的归一化优势和为:
∑ i = 1 G A ^ ( x , y ( i ) ) : = ∑ i = 1 G r ( x , y ( i ) ) − r ˉ x σ x = ∑ i = 1 G r ( x , y ( i ) ) − G ⋅ r ˉ x σ x = 0 (3) \begin{aligned}
\sum_{i=1}^G \hat{A}(x, y^{(i)}) := \\
\sum_{i=1}^G \frac{r(x, y^{(i)}) - \bar{r}_x}{\sigma_x} \\
= \frac{\sum_{i=1}^G r(x, y^{(i)}) - G \cdot \bar{r}_x}{\sigma_x} \\
= 0
\end{aligned}\tag{3}
i = 1 ∑ G A ^ ( x , y ( i ) ) := i = 1 ∑ G σ x r ( x , y ( i ) ) − r ˉ x = σ x ∑ i = 1 G r ( x , y ( i ) ) − G ⋅ r ˉ x = 0 ( 3 )
因为统计上任何一组数据点与它们的均值之间的“偏差”(即差值)的代数和必然等于0,因此分子为0,式(3)构造上为0。
更进一步,因为 reward 在样本间独立(独立同分布),期望具有可加性,因此有:
E ( ∑ i = 1 G A ^ ( x , y ( i ) ) ) = ∑ i = 1 G E ( A ^ ( x , y ( i ) ) ) (4) \mathbb{E} (\sum_{i=1}^G \hat{A} (x, y^{(i)})) = \sum_{i=1}^G \mathbb{E}(\hat{A} (x, y^{(i)})) \tag{4}
E ( i = 1 ∑ G A ^ ( x , y ( i ) )) = i = 1 ∑ G E ( A ^ ( x , y ( i ) )) ( 4 )
根据式(3)和式(4),
E ( ∑ i = 1 G A ^ ( x , y ( i ) ) ) = E ( 0 ) = 0 ⇒ G ⋅ E ( A ^ ) = 0 ⇒ E ( A ^ ) = 0 (5) \begin{aligned}
\mathbb{E} (\sum_{i=1}^G \hat{A} (x, y^{(i)})) = \mathbb{E}(0) = 0 \\
\Rightarrow G \cdot \mathbb{E} (\hat{A}) = 0 \\
\Rightarrow \mathbb{E}(\hat{A}) = 0
\end{aligned}\tag{5}
E ( i = 1 ∑ G A ^ ( x , y ( i ) )) = E ( 0 ) = 0 ⇒ G ⋅ E ( A ^ ) = 0 ⇒ E ( A ^ ) = 0 ( 5 )
也就是说,GRPO 的优势值在统计上不会引导模型向任何特定方向更新。
裁剪偏差
接下来推导由 clip 引入的训练信号,并将其称为 “裁剪偏差(clipping bias)” :在 GRPO 目标函数中加入 clip 后,期望梯度的差值。
Bias ( ∇ θ J ( θ ) ) = E x , y [ ∇ θ J ( θ ) ] − E x , y [ ∇ θ L unclipped ( θ ) ] (6) \begin{aligned}
\operatorname{Bias}\left(\nabla_\theta J(\theta)\right)=\mathbb{E}_{x, y}\left[\nabla_\theta J(\theta)\right]-\mathbb{E}_{x, y}\left[\nabla_\theta L^{\text {unclipped }}(\theta)\right]
\end{aligned}\tag{6}
Bias ( ∇ θ J ( θ ) ) = E x , y [ ∇ θ J ( θ ) ] − E x , y [ ∇ θ L unclipped ( θ ) ] ( 6 )
先不考虑 KL 项,假设一个没有 clip 的简单损失函数,由于 Adavantage 与其他变量相互独立,策略梯度的期望也显然为 0:
E x ∼ D , { y i } i = 1 G ∼ π θ old ( ⋅ ∣ x ) [ ∇ θ L unclipped ( θ ) ] = E x ∼ D , { y i } i = 1 G ∼ π θ old ( ⋅ ∣ x ) [ 1 G ∑ i = 1 G 1 ∣ y i ∣ ∑ t = 1 ∣ y i ∣ ∇ θ w i , t ( θ ) A i , t ] = E ( A i ) ⋅ E x ∼ D , { y i } i = 1 G ∼ π θ old ( ⋅ ∣ x ) [ 1 G ∑ i = 1 G 1 ∣ y i ∣ ∑ t = 1 ∣ y i ∣ ∇ θ w i , t ( θ ) ] = 0 (7) \begin{aligned}
\mathbb{E}_{x \sim \mathcal{D},\left\{y_i\right\}_{i=1}^G \sim \pi_{\theta \text { old }}(\cdot \mid x)}\left[\nabla_\theta L^{\text {unclipped }}(\theta)\right] \\
= \mathbb{E}_{x \sim \mathcal{D},\left\{y_i\right\}_{i=1}^G \sim \pi_{\theta \text { old }}(\cdot \mid x)}\left[ \frac{1}{G} \sum_{i=1}^G \frac{1}{|y_i|} \sum_{t=1}^{|y_i|} \nabla_\theta w_{i,t}(\theta) A_{i,t} \right] \\
= \mathbb{E} (A_i) \cdot \mathbb{E}_{x \sim \mathcal{D},\left\{y_i\right\}_{i=1}^G \sim \pi_{\theta \text { old }}(\cdot \mid x)}\left[ \frac{1}{G} \sum_{i=1}^G \frac{1}{|y_i|} \sum_{t=1}^{|y_i|} \nabla_\theta w_{i,t}(\theta) \right] \\
= 0
\end{aligned}
\tag{7}
E x ∼ D , { y i } i = 1 G ∼ π θ old ( ⋅ ∣ x ) [ ∇ θ L unclipped ( θ ) ] = E x ∼ D , { y i } i = 1 G ∼ π θ old ( ⋅ ∣ x ) G 1 i = 1 ∑ G ∣ y i ∣ 1 t = 1 ∑ ∣ y i ∣ ∇ θ w i , t ( θ ) A i , t = E ( A i ) ⋅ E x ∼ D , { y i } i = 1 G ∼ π θ old ( ⋅ ∣ x ) G 1 i = 1 ∑ G ∣ y i ∣ 1 t = 1 ∑ ∣ y i ∣ ∇ θ w i , t ( θ ) = 0 ( 7 )
于是:
Bias ( ∇ θ J ( θ ) ) = E x , y [ ∇ θ J ( θ ) ] (8) \operatorname{Bias}\left(\nabla_\theta J(\theta)\right)=\mathbb{E}_{x, y}\left[\nabla_\theta J(\theta)\right] \tag{8}
Bias ( ∇ θ J ( θ ) ) = E x , y [ ∇ θ J ( θ ) ] ( 8 )
方便起见,将损失函数简单记为:
J ( θ ) = min ( R θ ⋅ A ^ , C ⋅ A ^ ) (9) J(\theta) = \min ( R_\theta \cdot \hat{A}, C \cdot \hat{A}) \tag{9}
J ( θ ) = min ( R θ ⋅ A ^ , C ⋅ A ^ ) ( 9 )
其中,
R θ = w i , t = π θ ( y i , t ∣ x , y i , < t ) π θ old ( y i , t ∣ x , y i , < t ) (10) R_\theta = w_{i,t} = \frac{\pi_\theta (y_{i, t} \mid x, y_{i,\lt t})}{ \pi_{\theta_{\text {old }}} (y_{i, t} \mid x, y_{i,\lt t})} \tag{10}
R θ = w i , t = π θ old ( y i , t ∣ x , y i , < t ) π θ ( y i , t ∣ x , y i , < t ) ( 10 )
表示 token 级别重要性比率。
C = clip ( R θ , 1 − ϵ c , 1 + ϵ c ) A ^ = A ( x , y ) (11) \begin{aligned}
C = \text{clip}(R_\theta, 1 - \epsilon_c, 1 + \epsilon_c) \\
\hat{A} = A(x,y)\end{aligned} \tag{11}
C = clip ( R θ , 1 − ϵ c , 1 + ϵ c ) A ^ = A ( x , y ) ( 11 )
损失函数在某些地方是不可微的。因此,我们将讨论其在可微区域的梯度,并在最后将不可微点的梯度设为 0。
损失梯度
对 A≥0:
J + ( θ ) = min ( R θ ⋅ A ^ , C ⋅ A ^ ) = A ^ ⋅ min ( R θ , C ) (12) J^{+}(\theta) = \min(R_\theta \cdot \hat{A}, C \cdot \hat{A}) = \hat{A} \cdot \min (R_\theta, C) \tag{12}
J + ( θ ) = min ( R θ ⋅ A ^ , C ⋅ A ^ ) = A ^ ⋅ min ( R θ , C ) ( 12 )
对 A<0:
J − ( θ ) = min ( R θ ⋅ A ^ , C ⋅ A ^ ) = A ^ ⋅ max ( R θ , C ) (13) J^{-}(\theta) = \min(R_\theta \cdot \hat{A}, C \cdot \hat{A}) = \hat{A} \cdot \max (R_\theta, C) \tag{13}
J − ( θ ) = min ( R θ ⋅ A ^ , C ⋅ A ^ ) = A ^ ⋅ max ( R θ , C ) ( 13 )
分情况如下:
条件
C取值
A≥0
A<0
Rθ < 1 − ε
C = 1 − ε
Rθ
1 − ε
1 − ε ≤ Rθ ≤ 1 + ε
C = Rθ
Rθ
Rθ
Rθ > 1 + ε
C = 1 + ε
1 + ε
Rθ
合并后梯度如下:
∇ θ J ( θ ) = A ^ ⋅ { ∇ θ R , if A ^ > 0 and R θ ≤ 1 + ϵ c , 0 , if A ^ > 0 and R θ > 1 + ϵ c , 0 , if A ^ < 0 and R θ < 1 − ϵ c , ∇ θ R , if A ^ < 0 and R θ ≥ 1 − ϵ c . (14) \begin{aligned}
\nabla_\theta J(\theta)=\hat{A} \cdot \begin{cases}\nabla_\theta R, & \text { if } \hat{A} \gt 0 \text { and } R_\theta \le 1+\epsilon_c, \\ 0, & \text { if } \hat{A} \gt 0 \text { and } R_\theta \gt 1+\epsilon_c, \\ 0, & \text { if } \hat{A} \lt 0 \text { and } R_\theta \lt 1-\epsilon_c, \\ \nabla_\theta R, & \text { if } \hat{A} \lt 0 \text { and } R_\theta \ge 1-\epsilon_c .\end{cases}
\end{aligned} \tag{14}
∇ θ J ( θ ) = A ^ ⋅ ⎩ ⎨ ⎧ ∇ θ R , 0 , 0 , ∇ θ R , if A ^ > 0 and R θ ≤ 1 + ϵ c , if A ^ > 0 and R θ > 1 + ϵ c , if A ^ < 0 and R θ < 1 − ϵ c , if A ^ < 0 and R θ ≥ 1 − ϵ c . ( 14 )
于是有,
Bias ( ∇ θ J ( θ ) ) = E A ^ , x , y [ ∇ θ J ( θ ) ] = P ( A ^ > 0 ) ⋅ E A ^ > 0 , x , y [ ∇ θ J + ( θ ) ] + P ( A ^ > 0 ) ⋅ E A ^ < 0 , x , y [ ∇ θ J − ( θ ) ] + 0 = E x , y [ { P ( A ^ > 0 ) ⋅ E A ^ > 0 [ A ^ ] ⋅ ∇ θ R θ , if R θ ≤ 1 + ϵ c , 0 , if R θ > 1 + ϵ c . ] + E x , y [ { 0 , if R θ < 1 − ϵ c , P ( A ^ < 0 ) ⋅ E A ^ < 0 [ A ^ ] ⋅ ∇ θ R θ , if R θ ≥ 1 − ϵ c . ] = E x , y [ { P ( A ^ > 0 ) ⋅ E A ^ > 0 [ A ^ ] ⋅ ∇ θ R θ , if R θ < 1 − ϵ c , ( P ( A ^ > 0 ) ⋅ E A ^ > 0 [ A ^ ] + P ( A ^ < 0 ) ⋅ E A ^ < 0 [ A ^ ] ) ⋅ ∇ θ R θ , if 1 − ϵ c ≤ R θ ≤ 1 + ϵ c , P ( A ^ < 0 ) ⋅ E A ^ < 0 [ A ^ ] ⋅ ∇ θ R θ , if R θ > 1 + ϵ c . ] (15) \begin{aligned}
\operatorname{Bias}\left(\nabla_\theta J(\theta)\right)\\
= \mathbb{E}_{\hat{A}, x, y}\left[\nabla_\theta J(\theta)\right] \\
= P(\hat{A} \gt 0) \cdot \mathbb{E}_{\hat{A}\gt 0, x, y} \left[\nabla_\theta J^{+}(\theta)\right] + P(\hat{A} \gt 0) \cdot \mathbb{E}_{\hat{A}\lt 0, x, y} \left[\nabla_\theta J^{-}(\theta)\right] + 0 \\
=\mathbb{E}_{x, y}\left[\left\{\begin{array}{ll}
P(\hat{A} \gt 0) \cdot \mathbb{E}_{\hat{A} \gt 0}[\hat{A}] \cdot \nabla_\theta R_\theta, & \text { if } R_\theta \le 1+\epsilon_c, \\
0, & \text { if } R_\theta \gt 1+\epsilon_c .
\end{array}\right]\right. \\
\quad+\mathbb{E}_{x, y}\left[\left\{\begin{array}{ll}
0, & \text { if } R_\theta \lt 1-\epsilon_c, \\
P(\hat{A} \lt 0) \cdot \mathbb{E}_{\hat{A} \lt 0}[\hat{A}] \cdot \nabla_\theta R_\theta, & \text { if } R_\theta \ge 1-\epsilon_c .
\end{array}\right]\right. \\
=\mathbb{E}_{x, y}\left[\left\{\begin{array}{ll}
P(\hat{A} \gt 0) \cdot \mathbb{E}_{\hat{A}>0}[\hat{A}] \cdot \nabla_\theta R_\theta, & \text { if } R_\theta \lt 1-\epsilon_c, \\
\left(P(\hat{A} \gt 0) \cdot \mathbb{E}_{\hat{A} \gt 0}[\hat{A}]+P(\hat{A} \lt 0) \cdot \mathbb{E}_{\hat{A} \lt 0}[\hat{A}]\right) \cdot \nabla_\theta R_\theta, & \text { if } 1-\epsilon_c \le R_\theta \le 1+\epsilon_c, \\
P(\hat{A} \lt 0) \cdot \mathbb{E}_{\hat{A} \lt 0}[\hat{A}] \cdot \nabla_\theta R_\theta, & \text { if } R_\theta \gt 1+\epsilon_c .
\end{array}\right]\right.
\end{aligned}
\tag{15}
Bias ( ∇ θ J ( θ ) ) = E A ^ , x , y [ ∇ θ J ( θ ) ] = P ( A ^ > 0 ) ⋅ E A ^ > 0 , x , y [ ∇ θ J + ( θ ) ] + P ( A ^ > 0 ) ⋅ E A ^ < 0 , x , y [ ∇ θ J − ( θ ) ] + 0 = E x , y [ { P ( A ^ > 0 ) ⋅ E A ^ > 0 [ A ^ ] ⋅ ∇ θ R θ , 0 , if R θ ≤ 1 + ϵ c , if R θ > 1 + ϵ c . ] + E x , y [ { 0 , P ( A ^ < 0 ) ⋅ E A ^ < 0 [ A ^ ] ⋅ ∇ θ R θ , if R θ < 1 − ϵ c , if R θ ≥ 1 − ϵ c . ] = E x , y ⎩ ⎨ ⎧ P ( A ^ > 0 ) ⋅ E A ^ > 0 [ A ^ ] ⋅ ∇ θ R θ , ( P ( A ^ > 0 ) ⋅ E A ^ > 0 [ A ^ ] + P ( A ^ < 0 ) ⋅ E A ^ < 0 [ A ^ ] ) ⋅ ∇ θ R θ , P ( A ^ < 0 ) ⋅ E A ^ < 0 [ A ^ ] ⋅ ∇ θ R θ , if R θ < 1 − ϵ c , if 1 − ϵ c ≤ R θ ≤ 1 + ϵ c , if R θ > 1 + ϵ c . ( 15 )
因为有式(5),E(A)=0,因此有:
E ( A ^ ) = P ( A ^ > 0 ) E A ^ > 0 ( A ^ ) + P ( A ^ < 0 ) E A ^ < 0 ( A ^ ) = 0 ⇒ P ( A ^ > 0 ) E A ^ > 0 ( A ^ ) = − P ( A ^ < 0 ) E A ^ < 0 ( A ^ ) (16) \begin{aligned}
\mathbb{E}(\hat{A})=P(\hat{A} \gt 0) \mathbb{E}_{\hat{A} \gt 0}(\hat{A})+P(\hat{A} \lt 0) \mathbb{E}_{\hat{A} \lt 0}(\hat{A})=0 \\\Rightarrow P(\hat{A} \gt 0) \mathbb{E}_{\hat{A} \gt 0}(\hat{A}) = -P(\hat{A} \lt 0) \mathbb{E}_{\hat{A} \lt 0}(\hat{A})
\end{aligned}\tag{16}
E ( A ^ ) = P ( A ^ > 0 ) E A ^ > 0 ( A ^ ) + P ( A ^ < 0 ) E A ^ < 0 ( A ^ ) = 0 ⇒ P ( A ^ > 0 ) E A ^ > 0 ( A ^ ) = − P ( A ^ < 0 ) E A ^ < 0 ( A ^ ) ( 16 )
于是,式(15)可以写为:
Bias ( ∇ θ J ( θ ) ) = μ ⋅ E x , y [ { ∇ θ R θ , if π θ , x ( y t ) < π o l d , x ( y t ) ⋅ ( 1 − ϵ c ) , 0 , if π o l d , x ( y t ) ⋅ ( 1 − ϵ c ) ≤ π θ , x ( y t ) ≤ π o l d , x ( y t ) ⋅ ( 1 + ϵ c ) , − ∇ θ R θ , if π θ , x ( y t ) > π o l d , x ( y t ) ⋅ ( 1 + ϵ c ) . ] (17) \begin{aligned}
\operatorname{Bias}\left(\nabla_\theta J(\theta)\right)=\mu \cdot \mathbb{E}_{x, y}\left[\left\{\begin{array}{lc}
\nabla_\theta R_\theta, & \text { if } \pi_{\theta, x}\left(y_t\right) \lt \pi_{\mathrm{old}, x}\left(y_t\right) \cdot\left(1-\epsilon_c\right), \\
0, & \text { if } \pi_{\mathrm{old}, x}\left(y_t\right) \cdot\left(1-\epsilon_c\right) \leq \pi_{\theta, x}\left(y_t\right) \leq \pi_{\mathrm{old}, x}\left(y_t\right) \cdot\left(1+\epsilon_c\right), \\
-\nabla_\theta R_\theta, & \text { if } \pi_{\theta, x}\left(y_t\right) \gt \pi_{\mathrm{old}, x}\left(y_t\right) \cdot\left(1+\epsilon_c\right) .
\end{array}\right]\right.
\end{aligned}
\tag{17}
Bias ( ∇ θ J ( θ ) ) = μ ⋅ E x , y ⎩ ⎨ ⎧ ∇ θ R θ , 0 , − ∇ θ R θ , if π θ , x ( y t ) < π old , x ( y t ) ⋅ ( 1 − ϵ c ) , if π old , x ( y t ) ⋅ ( 1 − ϵ c ) ≤ π θ , x ( y t ) ≤ π old , x ( y t ) ⋅ ( 1 + ϵ c ) , if π θ , x ( y t ) > π old , x ( y t ) ⋅ ( 1 + ϵ c ) . ( 17 )
其中,μ即为式(16)的P(A>0)的部分。
上式说明,Rθ<1−ε(Rθ比较小)时,得到正梯度,推动模型把 π 对动作 yt 的概率调大。相反,当Rθ>1−ε(Rθ比较大)时,得到负梯度,推动模型把 π 对动作 yt 的概率调小。裁剪偏差实际上在“惩罚”模型离开 [1-ε, 1+ε] 这个安全区间,强迫策略更新维持在安全区间内。同时,也可以看到,尽管优势的期望为零,但由于截断机制,最终的期望梯度仍然不为零。
根据论文的实验显示(解锁模型潜能:Reward 数据如何塑造与激发 LLM 的推理策略 | Yam [1] 中的第二篇),截断机制提升了策略模型对训练答案中某些 token 的选择概率,表明模型在训练过程中更加依赖其原有的知识和行为偏好,即裁剪偏差会降低探索、增强利用 。
论文进一步发现,随机奖励也能提升性能正是clip机制在起作用,文章推测,随机奖励训练中出现的这种“表面上的训练信号”,本质上是优化算法偏向于利用预训练中已学习的先验所导致的副产物。
总之,如果不使用截断,训练过程就非常不稳定,随机奖励也不能带来效果改进;使用clip时即使随机奖励也有效果,但却限制了探索。
与 Clip-Higer 类似的分析
这篇文章也做了类似 DAPO Clip-Higher 的 case 分析。
假设 ε=0.2,对一个高概率 token:π_old,x(yt)=0.85,上界就是 1.2×0.85=1.02,超过了 1,永远不可能达到。对这个 token 来说,梯度偏差是无负的,导致策略模型的净正梯度偏差,从而导致该令牌上的概率增加 。
另一方面,对一个低概率 token:π_old,x(yt)=0.02,policy 概率超过上界 1.2*0.02=0.024 时会收到负梯度,当概率小于下界 0.8×0.02=0.016 时会收到正梯度,负梯度偏差的低阈值使得惩罚的可能性比高概率情况更大 。
裁剪区间的宽度会随原始概率线性增长:概率更高的 token 拥有更宽的区间,因而受到的惩罚更少。这种不对称的处理方式阻止了低概率样本在训练中被大幅上调,从而使模型将概率质量集中在其已有的分布上 。这点真的是和 DAPO 的分析一模一样——clip 机制确实抑制了低概率 token 的概率增长,它们可能永远无法成为高概率 token,因为模型更倾向于维持原有的高概率 token(高概率 token 更容易保持高概率或继续增加)。
再回到本文,GRPO 的裁剪机制即使在完全噪声奖励的情况下,也能提供有意义的训练信号,这是因为它系统性地偏向模型中已有的行为模式。这表明,在随机奖励训练中表面上存在的“奖励信号”,实际上是优化算法的偏置所导致的假象——它倾向于利用已学得的先验,而不是探索新的行为。
另外,如果要关闭 clip,要么直接处理损失函数,要么将 mini-batch 大小和 rollout 接近,这样策略在更新前后的变化就会非常小,几乎可以认为 πθ ≈ πold,自然不会触发 clip。后者模型性能会在一个稳定的区间内保持;前者则会导致极端的随机性,当然偶尔也会在多次运行中收敛到高性能。
进一步优化
看起来 Clip 的机制已经搞的差不多了,好家伙,没想到马上就看到了更进一步的优化,接下来有请来自百川的 DCPO [7] 。
动态 Clip 的 DCPO
DC 的意思就是 Dynamic Clip,出发点是 GRPO 的零梯度,他们将其归因为:针对 token 级重要性比率的固定裁剪边界,以及对相同奖励的标准化处理,可能会导致梯度更新无效,并造成生成结果的未充分利用。DCPO 可基于 token 的先验概率自适应地调整裁剪边界,以增强 token 级的探索能力。当然,还有一个平滑优势标准化技术,我们这里不做讨论。
和前面的文章类似,本文提到,不恰当的权重裁剪可能会丢弃罕见采样得到的学习信号,从而过度限制模型探索的多样性。而 DAPO 的 Clip-Higher 有两个局限:
响应级别低效:动态采样(DAPO)本质上会降低采样效率,导致训练收敛速度变慢。
token 裁剪不足:最优裁剪边界在不同 token 间存在差异,因此统一的上界并非最优。
其中,第二点是关键,也是 DCPO 的价值所在。刚刚说过,DCPO 基于先验概率自适应地调整裁剪边界,具体而言,就是先验概率较低的 token 会获得更宽的裁剪边界 ,从而为 token 级探索提供更大的空间。而且也提到了我们已经熟悉的观点:对称的固定裁剪边界会限制模型对多样性空间的探索,尤其是在旧策略分配低概率的区域 。其实,从控制方差-偏差的角度来看,依赖于概率的 clip 也是更加实用的方法。
具体做法是,将重要性比率的 clip 范围调整为:
0.5 + 1 2 max ( 1 − 4 ϵ l o w π θ old , 0 ) ≤ r ( x ) ≤ 0.5 + 1 2 1 + 4 ϵ h i g h π θ old (18) \begin{aligned}
0.5+\frac{1}{2} \sqrt{\max \left(1-\frac{4 \epsilon_{l o w}}{ \pi_{\theta_{\text {old }}} }, 0\right)} \leq r(x) \leq 0.5+\frac{1}{2} \sqrt{1+\frac{4 \epsilon_{h i g h}}{\pi_{\theta_{\text {old }}}}} \end{aligned} \tag{18}
0.5 + 2 1 max ( 1 − π θ old 4 ϵ l o w , 0 ) ≤ r ( x ) ≤ 0.5 + 2 1 1 + π θ old 4 ϵ hi g h ( 18 )
另外,将正负优势的最大裁剪边界都设置为 10,以防止过大的裁剪边界导致过度训练。
相关代码实现见:lime-RL/DCPO: DCPO: Dynamic Adaptive Clipping for RL [8]
What’s Next
好吧,开始自由表演了。我们发现,与 clip 直接有关的就是“熵”,clip 限制了 policy 的探索能力,尤其会抑制低概率 token 的概率增长。
而关于“熵”,我们介绍过《GRPO优化在继续——CISPO和熵 | Yam [9] 》,CISPO 的出发点是将熵控制在合理范围内,具体做法是将重要性权重停止梯度,直接当做一种固定的 reweighting 因子,这样就不需要 clip 了。不过多了个 mask,让过分放大奖励和过分惩罚的 token 损失为 0,完全不参与梯度更新。它的损失函数是基于 REINFORCE 的。
而另一篇 Reasoning with Exploration: An Entropy Perspective on Reinforcement Learning for LLMs [10] 则通过在 Advantage 上加一个「经过裁剪并断开梯度的熵项」(GRPO with Entropy Advantage,GRPOEA),调整了更新的幅度,但不改变梯度方向。它的损失函数还是标准的 GRPO,可以理解为 Advantage 的计算增加了熵的部分。当 At>0 时,更高的熵会导致对所选 token 的更新更强,从而大幅提升其概率,使得输出分布更加集中。分布越集中,熵就越低,这反过来会削弱后续的更新强度。值得注意的是,token 的熵高并不意味着概率低(但一定不高),只能说分布比较均匀;而我们前面说的低概率 token 是指该 token 本身概率低(其他 token 不一定,某些 token 往往可能不低)。
简单介绍完这两篇关于“熵”的文章,接下来要思考的是这些想法有没有可能结合一下,或者我们基于此再拓展一下?其实站在本文前面几个研究的角度,“熵”其实是一个“结果”——Clip 可能导致熵坍缩。后面的 CISPO 也是类似。而最后这篇则是站在“熵”的视角,“熵”成为输入的一部分——分布均匀就增强 token 概率,分布不均匀则降低更新强度。看起来更像是一种调节器。
那如果将熵这个因素考虑到动态 clip 中(Entropy Advantage 或 Entryopy Regularization)怎么样?概率低、熵高,就可以加大更新强度。或者,加入全局的 sequence 级别熵呢?毕竟探索的本质是序列级别的,一个样本的整体多样性可能比单点概率更重要。再或者,根据论文 Spurious Rewards,如果奖励信号清晰,可以增加 clip,允许探索;反之,奖励噪声大时就降低 clip 维持稳定。
小结
本文分析了 clip 的机制,并介绍了各种不同的优化方法。对于 PPO/GRPO 来说,clip 是必须的,它是稳定性的保障;但稳定的同时自然也会少了一部分探索,这就不是我们想要的了。放大限制范围,无论是整体还是 token 层面,都是最直观且有效的优化方法。但如果限制范围不变,那想要优化就得在此基础上给出更大的探索自由。熵来了,无论是Entropy Advantage 还是 Entryopy Regularization,都能增加一定探索能力。而且,由于熵与策略置信度之间存在的内在张力关系,随着置信度的提升,熵项会自然减弱——从而在训练早期鼓励探索,而在后期避免过度探索。除此之外,其实调高 rollout 采样温度是不是也可以让分布更加均匀,探索性更强。总的来说,clip 也是 GRPO 很有意思的一个细节。
References
[1] 解锁模型潜能:Reward 数据如何塑造与激发 LLM 的推理策略 | Yam: https://yam.gift/2025/07/13/NLP/LLM-Training/2025-07-13-RM-Data/
[2] DAPO: https://arxiv.org/abs/2503.14476
[3] DAPO:为GRPO的锦上加四点花 | Yam: https://yam.gift/2025/03/19/NLP/LLM-Training/2025-03-19-LLM-PostTrain-DAPO/
[4] GMPO: https://arxiv.org/abs/2507.20673
[5] GRPO“第一背锅侠”Token Level X:DAPO/DrGRPO与GSPO/GMPO的殊途同归 | Yam: https://yam.gift/2025/08/14/NLP/LLM-Training/2025-08-14-Token-Level-GSPO-GMPO/
[6] Spurious Rewards: Rethinking Training Signals in RLVR: https://arxiv.org/abs/2506.10947
[7] DCPO: https://arxiv.org/abs/2509.02333
[8] lime-RL/DCPO: DCPO: Dynamic Adaptive Clipping for RL: https://github.com/lime-RL/DCPO/
[9] GRPO优化在继续——CISPO和熵 | Yam: https://yam.gift/2025/06/19/NLP/LLM-Training/2025-06-19-CISPO-and-Entropy/
[10] Reasoning with Exploration: An Entropy Perspective on Reinforcement Learning for LLMs: https://arxiv.org/abs/2506.14758