Preliminary 
Basic Concepts 
状态(State) :在时间步 t t t  ,状态 s t s_{t} s t    是 prompt (a.k.a., query, question) q q q   与 generated tokens o < t o_{<t} o < t    的拼接。即,s t = [ q , o < t ] s_{t} = [q,o_{<t}] s t  = [ q , o < t  ]  。其中:
s 1 = q ∼ p Q s_{1} = q \sim p_{\mathcal{Q}} s 1  = q ∼ p Q   : 初态 s 1 s_{1} s 1    是从数据集 p Q p_{\mathcal{Q}} p Q    中采样的 question q q q  
o < t = [ o 1 , o 2 , … , o t − 1 ] o_{<t}=[o_{1},o_{2},\ldots,o_{t-1}] o < t  = [ o 1  , o 2  , … , o t − 1  ]  : 截止到当前时间步 t t t   的 output 
s t + 1 = [ s t ; o t ] = [ q ; o < t + 1 ] s_{t+1} = [s_{t};o_{t}] = [q;o_{<t+1}] s t + 1  = [ s t  ; o t  ] = [ q ; o < t + 1  ]  : 下一状态 s t + 1 s_{t+1} s t + 1   
 
 
动作(Action) :在当前状态 s t s_{t} s t    下,动作 a t a_{t} a t    是从词汇表 V \mathcal{V} V   中采样的 next token o t o_{t} o t   。即,a t = o t a_{t} = o_{t} a t  = o t   
策略(Policy) :策略 π \pi π   是 LLM 自身,其参数为 θ \theta θ  。给定当前状态 s t = [ q , o < t ] s_{t} = [q,o_{<t}] s t  = [ q , o < t  ]  ,策略 π ( ⋅ ∣ q , o < t ) \pi(\cdot \mid q,o_{<t}) π ( ⋅ ∣ q , o < t  )   输出词汇表 V \mathcal{V} V   中各 token 的概率分布。在 RHLF-PPO 的上下文中,还会出现以下策略:
π θ \pi_{\theta} π θ   : 在 RL-tuning 阶段被持续优化的策略。其参数 θ \theta θ   在每个 PPO epoch 中都会更新,代表了 LLM 在任意时刻的最新版本 
π θ o l d \pi_{\theta_{old}} π θ o l d    : 在本次迭代(第一个 PPO epoch)开始前,被设置为当前策略 π θ \pi_{\theta} π θ    的一个副本;在本次迭代的所有 PPO epoch 中,其参数保持不变,用于计算 policy ratio r t ( θ ) r_{t}(\theta) r t  ( θ )  ;在本次迭代结束后,被丢弃;在下一次迭代开始前,再一次被设置为更新后的 π θ \pi_{\theta} π θ    的副本 
π r e f \pi_{ref} π re f   : 通常为 RL-tuning 前的 SFT 模型。在整个 RL-tuning 阶段,参数保持冻结,不进行更新。主要用于 KL 散度惩罚项的计算 
 
 
状态转移(State Transition) :在当前状态 s t s_{t} s t    下,采取动作 o t o_{t} o t    后,系统唯一确定地转移到下一状态 s t + 1 = [ s t ; o t ] = [ q ; o < t + 1 ] s_{t+1} = [s_{t};o_{t}] = [q;o_{<t+1}] s t + 1  = [ s t  ; o t  ] = [ q ; o < t + 1  ]  。即,P ( s t + 1 ∣ s t , o t ) = 1 P(s_{t+1} \mid s_{t},o_{t}) = 1 P ( s t + 1  ∣ s t  , o t  ) = 1  
轨迹(Trajectory, a.k.a. Episode or Rollout) :一个完整的生成序列 τ \tau τ  ,是从 prompt q q q   开始,经过一系列状态 - 动作对,直至生成结束符(EOS token)的完整序列。通常忽视 prompt q q q  ,表示为完整输出 o = [ o 1 , o 2 , … , o ∣ o ∣ ] o = [o_{1},o_{2},\ldots,o_{|o|}] o = [ o 1  , o 2  , … , o ∣ o ∣  ]  
 
Reward and Return 
传统 RL 中,奖励函数 R ( s t , a t , s t + 1 ) R(s_{t},a_{t},s_{t+1}) R ( s t  , a t  , s t + 1  )   是环境固有的一部分,是客观且确定的。在 RLHF 中,奖励函数 R ( q , o ≤ t ) R(q,o_{\le t}) R ( q , o ≤ t  )   通常依赖于奖励模型(Reward Model, RM)。根据奖励信号的稀疏性,主要分为两种形式:结果奖励与过程奖励。
Outcome-based Reward 
在这种设定下,奖励信号是稀疏的,仅在 response o o o   生成结束后,结果奖励模型(Outcome Reward Model, ORM)才会计算出一个标量奖励分数 r ( q , o ) r(q,o) r ( q , o )  。因此,
对于轨迹中任意中间时刻 t < ∣ o ∣ t<|o| t < ∣ o ∣  ,即时奖励 R t = 0 R_{t} = 0 R t  = 0  
只有在最后一个时间步 t = ∣ o ∣ t=|o| t = ∣ o ∣  ,即时奖励 R t = r ( q , o ) R_{t} = r(q,o) R t  = r ( q , o )  
 
形式化地,对于任意时间步 t t t  ,即时奖励可表示为:
R ( q , o ≤ t ) = I ( o t = [ EOS ] ) r ( q , o ) R(q,o_{\le t}) = \mathbf{I}(o_{t} = [\text{EOS}])r(q,o)
 R ( q , o ≤ t  ) = I ( o t  = [ EOS ]) r ( q , o ) 
其中,I ( o t = [ EOS ] ) \mathbf{I}(o_{t} = [\text{EOS}]) I ( o t  = [ EOS ])   为指示函数,仅当 token o t o_{t} o t    为结束符 EOS 时才会 1 1 1  ,否则均为 0 0 0 
更进一步,对于任意时间步 t t t   的回报 G t G_{t} G t    (假设折扣因子 γ = 1 \gamma=1 γ = 1  ) 均等于最终的整体奖励:
G t = ∑ t ′ = t ∣ o ∣ R t ′ = R ( q , o ≤ t ′ ) + R ( q , o ≤ t ′ + 1 ) + ⋯ + R ( q , o ≤ ∣ o ∣ ) = 0 + 0 + ⋯ + R ( q , o ≤ ∣ o ∣ ) = R ( q , o ≤ ∣ o ∣ ) = r ( q , o ) \begin{aligned}
G_{t}
&= \sum_{t^{\prime}=t}^{|o|} R_{t^{\prime}} \\
&= R(q,o_{\le t^{\prime}}) + R(q,o_{\le t^{\prime} +1}) + \cdots + R(q,o_{\le |o|}) \\
&= 0 + 0 + \cdots + R(q,o_{\le |o|}) \\
&= R(q,o_{\le |o|}) \\
&= r(q,o)
\end{aligned}
 G t   = t ′ = t ∑ ∣ o ∣  R t ′  = R ( q , o ≤ t ′  ) + R ( q , o ≤ t ′ + 1  ) + ⋯ + R ( q , o ≤ ∣ o ∣  ) = 0 + 0 + ⋯ + R ( q , o ≤ ∣ o ∣  ) = R ( q , o ≤ ∣ o ∣  ) = r ( q , o )  
虽然稀疏奖励实现简单,但存在信用分配问题(Credit Assignment Problem),难以判断哪个具体的 token 导致了最终奖励的高低。
本文使用 G t G_{t} G t    来表示回报。实际上,这与后文 GRPO, RLOO 中的 group 大小 G G G   易混淆。还有一些工作使用 R R R   表示回报,但为了与传统 RL 中的符号保持一致,我们仍然使用 G t G_{t} G t   。
 Process-based Reward 
为了缓解稀疏奖励的信用分配问题,提供更稠密的信号,可以通过过程奖励模型(Process Reward Model, PRM)为生成过程中每个步骤 t t t   都赋予奖励 r ( q , o ≤ t ) r(q,o_{\le t}) r ( q , o ≤ t  )  。因此,即时奖励 R t = R ( q , o ≤ t ) = r ( q , o ≤ t ) R_{t} = R(q,o_{\le t}) = r(q,o_{\le t}) R t  = R ( q , o ≤ t  ) = r ( q , o ≤ t  )  。显然,此时 R ( q , o ≤ t ) R(q,o_{\le t}) R ( q , o ≤ t  )   为 token-level reward。
在此设定下,一条完整轨迹 o o o   的总回报为每一步奖励的累计和:
G ( q , o ) = ∑ t = 1 ∣ o ∣ R ( q , o ≤ t ) G(q,o) = \sum_{t=1}^{|o|} R(q,o_{\le t})
 G ( q , o ) = t = 1 ∑ ∣ o ∣  R ( q , o ≤ t  ) 
而从时间步 t t t   开始的 reward-to-go 回报则为:
G t = G ( q , o ≤ t ) = ∑ t ′ = t ∣ o ∣ R ( q , o ≤ t ′ ) G_{t} = G(q,o_{\le t}) = \sum_{t^{\prime}=t}^{|o|}R(q,o_{\le t^{\prime}})
 G t  = G ( q , o ≤ t  ) = t ′ = t ∑ ∣ o ∣  R ( q , o ≤ t ′  ) 
实际上,不论是稀疏奖励还是稠密奖励,回报都可以表示如上。
KL-Shaped Reward 
在 RL-tuning 过程中,仅依赖于 RM 的信号引导,策略 π θ \pi_{\theta} π θ    可能会发现并利用 RM 的漏洞,生成迎合 RM 偏好,但实际存在问题的文本,这一现象称为 Reward Hacking。进一步地,模型产生分布漂移(Distributional Shift)。为了解决这个问题,可以引入 KL 散度 D KL ( π θ ∥ π r e f ) \mathbb{D}_{\text{KL}}(\pi_{\theta} \| \pi_{ref}) D KL  ( π θ  ∥ π re f  )   作为惩罚项,约束 π θ \pi_{\theta} π θ    的输出概率分布不能偏离 π r e f \pi_{ref} π re f    太远。这种结合了外部奖励与 KL 散度的奖励形式,称为 KL-Shaped Reward。
当奖励模型为 ORM 时,复合奖励表示如下:
R ( q , o ≤ t ) = I ( o t = [ EOS ] ) r ( q , o ) − β KL t R(q,o_{\le t}) = \mathbf{I}(o_{t} = [\text{EOS}])r(q,o) - \beta \text{KL}_{t}
 R ( q , o ≤ t  ) = I ( o t  = [ EOS ]) r ( q , o ) − β KL t  
其中,β \beta β   是控制 KL 惩罚力度的系数,KL t \text{KL}_{t} KL t    是 KL 散度的近似。当使用 k 1 k_{1} k 1    estimator 时,计算如下:
KL t = log  π θ o l d ( o t ∣ q , o < t ) π r e f ( o t ∣ q , o < t ) \text{KL}_{t} = \log \frac{\pi_{\theta_{old}}(o_{t} \mid q,o_{<t})}{\pi_{ref}(o_{t} \mid q,o_{<t})}
 KL t  = log  π re f  ( o t  ∣ q , o < t  ) π θ o l d   ( o t  ∣ q , o < t  )  
此时,由于奖励函数中加入了 KL 散度,稀疏奖励变得稠密化,PPO 使用的就是这种 token-level 奖励。而 RLOO 为了使奖励信号再次稀疏化,将整个序列的 KL 惩罚聚合起来,只在最后一个时间步与 ORM 奖励一同发放:
R ( q , o ) = r ( q , o ) − β ∑ t = 1 ∣ o ∣ KL t R(q,o) = r(q,o) - \beta \sum_{t=1}^{|o|} \text{KL}_{t}
 R ( q , o ) = r ( q , o ) − β t = 1 ∑ ∣ o ∣  KL t  
特别地,在 RL-tuning reasoning model 中,ORM 通常为 rule-based verifier,通常不会引起分布漂移。此时,将移除 KL 惩罚项,省去了 Ref Model 的加载。
Objective Function 
在 RLHF 中,我们的目标是最大化 J ( θ ) J(\theta) J ( θ )  :
max  θ J ( θ ) = E q ∼ p Q [ E o ∼ π θ ( ⋅ ∣ q ) [ G ( q , o ) ] ] \max_{\theta}J(\theta) = \mathbb{E}_{q \sim p_{\mathcal{Q}}} \Big[\mathbb{E}_{o \sim \pi_{\theta}(\cdot \mid q)} \big[G(q, o)\big]\Big]
 θ max  J ( θ ) = E q ∼ p Q   [ E o ∼ π θ  ( ⋅ ∣ q )  [ G ( q , o ) ] ] 
其中:
G ( q , o ) = ∑ t = 1 ∣ o ∣ R ( q , o ≤ t ) G(q,o) = \sum_{t=1}^{|o|}R(q,o_{\le t}) G ( q , o ) = ∑ t = 1 ∣ o ∣  R ( q , o ≤ t  )   是整条轨迹上的回报 
R ( q , o ≤ t ) R(q,o_{\le t}) R ( q , o ≤ t  )   是 response o o o   中第 t t t   个 token 的 token-level reward 
 
接下来,策略梯度推导如下:
∇ θ J ( θ ) = E q ∼ p Q [ E o ∼ π θ ( ⋅ ∣ q ) [ ∇ θ log  π θ ( o ∣ q ) G ( q , o ) ] ] = E q ∼ p Q [ E o ∼ π θ ( ⋅ ∣ q ) [ ∇ θ ∑ t = 1 ∣ o ∣ log  π θ ( o t ∣ q , o < t ) G ( q , o ) ] ] = E q ∼ p Q [ E o ∼ π θ ( ⋅ ∣ q ) [ ∑ t = 1 ∣ o ∣ ∇ θ log  π θ ( o t ∣ q , o < t ) ∑ t ′ = t ∣ o ∣ R ( q , o ≤ t ′ ) ] ] = E q ∼ p Q [ E o ∼ π θ ( ⋅ ∣ q ) [ ∑ t = 1 ∣ o ∣ ∇ θ log  π θ ( o t ∣ q , o < t ) ( ∑ t ′ = t ∣ o ∣ R ( q , o ≤ t ′ ) − b ( q , o < t ) ) ] ] \begin{aligned}
\nabla_{\theta} J(\theta)
&= \mathbb{E}_{q \sim p_{\mathcal{Q}}}\bigg[ \mathbb{E}_{o \sim \pi_{\theta}(\cdot \mid q)}\big[ \nabla_{\theta} \log \pi_{\theta}(o \mid q) G(q, o)\big]\bigg] \\
&= \mathbb{E}_{q \sim p_{\mathcal{Q}}}\bigg[ \mathbb{E}_{o \sim \pi_{\theta}(\cdot \mid q)}\Big[ \nabla_{\theta} \sum_{t=1}^{|o|} \log \pi_{\theta}(o_{t} \mid q, o_{<t}) G(q, o)\Big]\bigg] \\
&= \mathbb{E}_{q \sim p_{\mathcal{Q}}}\bigg[ \mathbb{E}_{o \sim \pi_{\theta}(\cdot \mid q)}\Big[ \sum_{t=1}^{|o|} \nabla_{\theta} \log \pi_{\theta}(o_{t} \mid q, o_{<t}) \sum_{t^{\prime}=t}^{|o|} R(q, o_{\le t^{\prime}})\Big]\bigg] \\
&= \mathbb{E}_{q \sim p_{\mathcal{Q}}}\Bigg[ \mathbb{E}_{o \sim \pi_{\theta}(\cdot \mid q)}\bigg[ \sum_{t=1}^{|o|} \nabla_{\theta} \log \pi_{\theta}(o_{t} \mid q, o_{<t}) \bigg( \sum_{t^{\prime}=t}^{|o|} R(q, o_{\le t^{\prime}}) - b(q, o_{<t}) \bigg) \bigg]\Bigg]
\end{aligned}
 ∇ θ  J ( θ )  = E q ∼ p Q   [ E o ∼ π θ  ( ⋅ ∣ q )  [ ∇ θ  log  π θ  ( o ∣ q ) G ( q , o ) ] ] = E q ∼ p Q   [ E o ∼ π θ  ( ⋅ ∣ q )  [ ∇ θ  t = 1 ∑ ∣ o ∣  log  π θ  ( o t  ∣ q , o < t  ) G ( q , o ) ] ] = E q ∼ p Q   [ E o ∼ π θ  ( ⋅ ∣ q )  [ t = 1 ∑ ∣ o ∣  ∇ θ  log  π θ  ( o t  ∣ q , o < t  ) t ′ = t ∑ ∣ o ∣  R ( q , o ≤ t ′  ) ] ] = E q ∼ p Q   [ E o ∼ π θ  ( ⋅ ∣ q )  [ t = 1 ∑ ∣ o ∣  ∇ θ  log  π θ  ( o t  ∣ q , o < t  ) ( t ′ = t ∑ ∣ o ∣  R ( q , o ≤ t ′  ) − b ( q , o < t  ) ) ] ]  
其中,b ( q , o < t ) b(q,o_{<t}) b ( q , o < t  )   称为 baseline,通常用于减少策略梯度估计的方差。可以证明,当 baseline 不依赖于动作 o t o_{t} o t    时,其期望为 0 0 0  ,不会影响策略梯度的近似:
E o t ∼ π θ ( ⋅ ∣ q , o < t ) [ ∇ θ log  π θ ( o t ∣ q , o < t ) b ( q , o < t ) ] = 0 \mathbb{E}_{o_{t} \sim \pi_{\theta}(\cdot \mid q,o_{<t})} \Big[ \nabla_{\theta} \log \pi_{\theta}(o_{t} \mid q,o_{<t}) b(q,o_{<t}) \Big] = 0
 E o t  ∼ π θ  ( ⋅ ∣ q , o < t  )  [ ∇ θ  log  π θ  ( o t  ∣ q , o < t  ) b ( q , o < t  ) ] = 0 
通常,baseline 可以设置为未来期望回报,在传统 RL 中表示为状态价值 V π ( s t ) V^{\pi}(s_{t}) V π ( s t  )  :
b ( q , o < t ) = V π ( q , o < t ) = E o ≥ t ∼ π θ ( ⋅ ∣ q , o < t ) [ ∑ t ′ = t ∣ o ∣ R ( q , o ≤ t ′ ) ] b(q,o_{<t}) = V^{\pi}(q,o_{<t}) = \mathbb{E}_{o_{\ge t} \sim \pi_{\theta}(\cdot \mid q,o_{<t})} \bigg[ \sum_{t^{\prime}=t}^{|o|} R(q, o_{\le t^{\prime}}) \bigg]
 b ( q , o < t  ) = V π ( q , o < t  ) = E o ≥ t  ∼ π θ  ( ⋅ ∣ q , o < t  )  [ t ′ = t ∑ ∣ o ∣  R ( q , o ≤ t ′  ) ] 
为了简化表示,我们定义 t t t   时刻的优势 A t A_{t} A t   :
A t = G t − b ( q , o < t ) = ∑ t ′ = t ∣ o ∣ R ( q , o ≤ t ′ ) − b ( q , o < t ) A_{t} = G_{t} - b(q,o_{<t}) = \sum_{t^{\prime}=t}^{|o|} R(q, o_{\le t^{\prime}}) - b(q, o_{<t})
 A t  = G t  − b ( q , o < t  ) = t ′ = t ∑ ∣ o ∣  R ( q , o ≤ t ′  ) − b ( q , o < t  ) 
此时,策略梯度可以简化为:
∇ θ J ( θ ) = E q ∼ p Q , o ∼ π θ ( ⋅ ∣ q ) [ ∑ t = 1 ∣ o ∣ ∇ θ log  π θ ( o t ∣ q , o < t ) A t ] \nabla_{\theta} J(\theta) = \mathbb{E}_{q \sim p_{\mathcal{Q}},o \sim \pi_{\theta}(\cdot \mid q)}\Bigg[ \sum_{t=1}^{|o|} \nabla_{\theta} \log \pi_{\theta}(o_{t} \mid q, o_{<t}) A_{t} \Bigg]
 ∇ θ  J ( θ ) = E q ∼ p Q  , o ∼ π θ  ( ⋅ ∣ q )  [ t = 1 ∑ ∣ o ∣  ∇ θ  log  π θ  ( o t  ∣ q , o < t  ) A t  ] 
不同的算法使用不同的 advantage estimator A ^ t \hat{A}_{t} A ^ t   ,对策略梯度的近似也会存在不同的 bias-variance trade-off
REINFORCE 
REINFORCE 使用轨迹中实际采样得到的真实奖励和来近似回报(a.k.a., 蒙特卡洛回报)。具体实现中,可以不使用 value network 来近似 baseline。REINFORCE 的特点是无偏高方差:
无偏:蒙特卡洛回报是对策略梯度的无偏估计 
高方差:蒙特卡洛回报是一个很长的随机变量 R R R   的累计和,从而导致梯度估计的高方差 
 
PPO: Proximal Policy Optimization 
PPO 的奖励信号通常采用典型的 token-level 的 KL-shaped reward:
R ( q , o ≤ t ) = I ( o t = [ EOS ] ) r ( q , o ) − β KL t R(q,o_{\le t}) = \mathbf{I}(o_{t} = [\text{EOS}])r(q,o) - \beta \text{KL}_{t}
 R ( q , o ≤ t  ) = I ( o t  = [ EOS ]) r ( q , o ) − β KL t  
其中,r ( q , o ) r(q,o) r ( q , o )   是 ORM 对整个轨迹的打分。
PPO 采用重要性网络,希望复用旧策略 π θ o l d \pi_{\theta_{old}} π θ o l d     采集的数据来多次更新当前策略 π θ \pi_{\theta} π θ   。其目标是最大化 J ( θ ) J(\theta) J ( θ )  :
J ( θ ) = E q ∼ p Q [ E o ∼ π θ o l d ( ⋅ ∣ q ) [ ∑ t = 1 ∣ o ∣ min  ( r t ( θ ) A ^ t , c l i p ( r t ( θ ) , 1 − ϵ , 1 + ϵ ) A ^ t ) ] ] \begin{aligned}
J(\theta) = \mathbb{E}_{q \sim p_{\mathcal{Q}}}\Bigg[ \mathbb{E}_{o \sim \pi_{\theta_{old}}(\cdot \mid q)} \bigg[ \sum_{t=1}^{|o|} \min\Big(
r_{t}(\theta) \hat{A}_{t},
\mathrm{clip}\big(r_{t}(\theta),1-\epsilon,1+\epsilon\big)\hat{A}_{t}
\Big)\bigg] \Bigg]
\end{aligned}
 J ( θ ) = E q ∼ p Q   [ E o ∼ π θ o l d   ( ⋅ ∣ q )  [ t = 1 ∑ ∣ o ∣  min ( r t  ( θ ) A ^ t  , clip ( r t  ( θ ) , 1 − ϵ , 1 + ϵ ) A ^ t  ) ] ]  
其中,c l i p ( r t ( θ ) , 1 − ϵ , 1 + ϵ ) \mathrm{clip}\big(r_{t}(\theta),1-\epsilon,1+\epsilon\big) clip ( r t  ( θ ) , 1 − ϵ , 1 + ϵ )   是一个裁剪函数,用于将 policy ratio r t ( θ ) r_{t}(\theta) r t  ( θ )   限制在 [ 1 − ϵ , 1 + ϵ ] [1-\epsilon,1+\epsilon] [ 1 − ϵ , 1 + ϵ ]   的区间内。这里的 ϵ \epsilon ϵ   是一个超参数,定义信任区域的大小。r t ( θ ) r_{t}(\theta) r t  ( θ )   表示如下:
r t ( θ ) = π θ ( o t ∣ q , o < t ) π θ o l d ( o t ∣ q , o < t ) r_{t}(\theta) = \frac{\pi_{\theta}(o_{t} \mid q,o_{<t})}{\pi_{\theta_{old}}(o_{t} \mid q,o_{<t})}
 r t  ( θ ) = π θ o l d   ( o t  ∣ q , o < t  ) π θ  ( o t  ∣ q , o < t  )  
优势使用 GAE A ^ t G A E ( γ , λ ) \hat{A}_{t}^{\mathrm{GAE}(\gamma,\lambda)} A ^ t GAE ( γ , λ )    近似,其中 λ \lambda λ   用于平衡 bias-variance。同时,GAE 的计算需要使用 value network 来近似状态价值,因此 PPO 本质上是一个 A2C 框架。后续的大量工作为了节省显存占用,设计不同的 baseline 来丢弃 value network。
RLOO: REINFORCE Leave One Out 
RLOO 的核心动机在于丢弃 PPO 中的 value network,从而节省显存占用,如下图所示。
baseline 一般被设计为状态价值,这通常需要 value network 来近似。RLOO 通过对单个 prompt q q q   采样多个(G G G   个)在线样本 { o i } i = 1 G \{o_{i}\}_{i=1}^{G} { o i  } i = 1 G    来计算 baseline,以减小方差。在正式介绍 RLOO baseline 前,先对比其与 PPO 的奖励信号。
RLOO 与 PPO 不同,后者采用 token-level 的 KL-shaped reward 奖励信号,而前者采用 response-level 的稀疏奖励信号。换句话说,对于一条 response,只有唯一的即时奖励 R ( q , o ) R(q,o) R ( q , o )   与回报 G ( q , o ) G(q,o) G ( q , o )  。具体来说,RLOO 通过将整个序列的 KL 惩罚聚合,同 ORM 打分加和构成 response-level reward:
R ( q , o ) = r ( q , o ) − β ∑ t = 1 ∣ o ∣ KL t R(q,o) = r(q,o) - \beta \sum_{t=1}^{|o|} \text{KL}_{t}
 R ( q , o ) = r ( q , o ) − β t = 1 ∑ ∣ o ∣  KL t  
下图对比了 PPO 和 RLOO 的奖励计算:
RLOO 将 group 中的样本 o i o_{i} o i    的 baseline b ( q , o i ) b(q,o_{i}) b ( q , o i  )   设置为剩余 G − 1 G-1 G − 1   个样本回报(实际上也是奖励)的均值:
b ( q , o i ) = 1 G − 1 ∑ j = 1 , j ≠ i G G ( q , o j ) = 1 G − 1 ∑ j = 1 , j ≠ i G R ( q , o j ) \begin{aligned}
b(q,o_{i}) &= \frac{1}{G-1} \sum_{j=1,j \ne i}^{G} G(q,o_{j}) \\
&= \frac{1}{G-1} \sum_{j=1,j \ne i}^{G} R(q,o_{j})
\end{aligned}
 b ( q , o i  )  = G − 1 1  j = 1 , j  = i ∑ G  G ( q , o j  ) = G − 1 1  j = 1 , j  = i ∑ G  R ( q , o j  )  
由于剔除了自身样本的奖励,因此 b ( q , o i ) b(q,o_{i}) b ( q , o i  )   不依赖于动作 o i , t o_{i,t} o i , t   ,因此其期望值为 0 0 0  ,RLOO 对策略梯度的估计仍是无偏的。这里 o i , t o_{i,t} o i , t    指的是 group 中的 response o i o_{i} o i    在任意时间步 t t t   采样的 token。接下来,给出 RLOO 的 advantage estimator:
A ^ i = G ( q , o i ) − b ( q , o i ) = R ( q , o i ) − 1 G − 1 ∑ j = 1 , j ≠ i G R ( q , o j ) = R ( q , o i ) − 1 G − 1 ( ∑ j = 1 G R ( q , o j ) − R ( q , o i ) ) = G G − 1 R ( q , o i ) − 1 G − 1 ∑ j = 1 G R ( q , o j ) = G G − 1 ( R ( q , o i ) − 1 G ∑ j = 1 G R ( q , o j ) ) \begin{aligned}
\hat{A}_{i} &= G(q,o_{i}) - b(q,o_{i}) \\
&= R(q,o_{i}) - \frac{1}{G-1} \sum_{j=1,j \ne i}^{G} R(q,o_{j}) \\
&= R(q,o_{i}) - \frac{1}{G-1} \bigg( \sum_{j=1}^{G} R(q,o_{j}) - R(q,o_{i}) \bigg)\\
&= \frac{G}{G-1} R(q,o_{i}) - \frac{1}{G-1} \sum_{j=1}^{G} R(q,o_{j}) \\
&= \frac{G}{G-1} \bigg( R(q,o_{i}) - \frac{1}{G} \sum_{j=1}^{G} R(q,o_{j}) \bigg)
\end{aligned}
 A ^ i   = G ( q , o i  ) − b ( q , o i  ) = R ( q , o i  ) − G − 1 1  j = 1 , j  = i ∑ G  R ( q , o j  ) = R ( q , o i  ) − G − 1 1  ( j = 1 ∑ G  R ( q , o j  ) − R ( q , o i  ) ) = G − 1 G  R ( q , o i  ) − G − 1 1  j = 1 ∑ G  R ( q , o j  ) = G − 1 G  ( R ( q , o i  ) − G 1  j = 1 ∑ G  R ( q , o j  ) )  
直观地,优势 A ^ i \hat{A}_{i} A ^ i    表示当前输出 o i o_{i} o i    的奖励比当前 group 中其他输出 G − 1 G-1 G − 1   个输出 o j ( j ≠ i ) o_{j}(j \ne i) o j  ( j  = i )   的平均奖励高多少:
如果 A ^ i > 0 \hat{A}_{i} > 0 A ^ i  > 0  ,说明 o i o_{i} o i    是一个较好的输出,我们要增大其每一个 token 的概率 
如果 A ^ i < 0 \hat{A}_{i} < 0 A ^ i  < 0  ,说明 o i o_{i} o i    是一个较坏的输出,我们要减小其每一个 token 的概率 
 
这里也可以看出与 PPO 的 GAE 优势的差距:PPO GAE 是 token-level 的优势,而 RLOO 将 o i o_{i} o i    中每个 token o i , t o_{i,t} o i , t    的贡献一视同仁。即,A ^ i , t = A ^ i \hat{A}_{i,t} = \hat{A}_{i} A ^ i , t  = A ^ i   。
最后,RLOO 策略梯度计算如下:
∇ θ J ( θ ) = E q ∼ p Q [ E { o i } i = 1 G ∼ π θ ( ⋅ ∣ q ) [ 1 G ∑ i = 1 G ∑ t = 1 ∣ o i ∣ ∇ θ log  π θ ( o i , t ∣ q , o i , < t ) A ^ i ] ] = E q ∼ p Q [ E { o i } i = 1 G ∼ π θ ( ⋅ ∣ q ) [ 1 G ∑ i = 1 G A ^ i ∇ θ log  π θ ( o i ∣ q ) ] ] = E q ∼ p Q [ E { o i } i = 1 G ∼ π θ ( ⋅ ∣ q ) [ 1 G ∑ i = 1 G G G − 1 ( R ( q , o i ) − 1 G ∑ j = 1 G R ( q , o j ) ) ∇ θ log  π θ ( o i ∣ q ) ] ] = E q ∼ p Q [ E { o i } i = 1 G ∼ π θ ( ⋅ ∣ q ) [ 1 G − 1 ∑ i = 1 G ( R ( q , o i ) − 1 G ∑ j = 1 G R ( q , o j ) ) ∇ θ log  π θ ( o i ∣ q ) ] ] \begin{aligned}
\nabla_{\theta} J(\theta)
&= \mathbb{E}_{q \sim p_{\mathcal{Q}}}\Bigg[ \mathbb{E}_{\{o_{i}\}_{i=1}^{G} \sim \pi_{\theta}(\cdot \mid q)}\bigg[ \frac{1}{G} \sum_{i=1}^{G} \sum_{t=1}^{|o_{i}|} \nabla_{\theta} \log \pi_{\theta}(o_{i,t} \mid q, o_{i,<t}) \hat{A}_{i} \bigg]\Bigg]\\
&= \mathbb{E}_{q \sim p_{\mathcal{Q}}}\Bigg[ \mathbb{E}_{\{o_{i}\}_{i=1}^{G} \sim \pi_{\theta}(\cdot \mid q)}\bigg[ \frac{1}{G} \sum_{i=1}^{G} \hat{A}_{i} \nabla_{\theta} \log \pi_{\theta}(o_{i} \mid q)  \bigg]\Bigg]\\
&= \mathbb{E}_{q \sim p_{\mathcal{Q}}}\Bigg[ \mathbb{E}_{\{o_{i}\}_{i=1}^{G} \sim \pi_{\theta}(\cdot \mid q)}\bigg[ \frac{1}{G} \sum_{i=1}^{G} \frac{G}{G-1} \bigg( R(q,o_{i}) - \frac{1}{G} \sum_{j=1}^{G} R(q,o_{j}) \bigg) \nabla_{\theta} \log \pi_{\theta}(o_{i} \mid q) \bigg]\Bigg]\\
&= \mathbb{E}_{q \sim p_{\mathcal{Q}}}\Bigg[ \mathbb{E}_{\{o_{i}\}_{i=1}^{G} \sim \pi_{\theta}(\cdot \mid q)}\bigg[ \frac{1}{G-1} \sum_{i=1}^{G} \bigg( R(q,o_{i}) - \frac{1}{G} \sum_{j=1}^{G} R(q,o_{j}) \bigg) \nabla_{\theta} \log \pi_{\theta}(o_{i} \mid q) \bigg]\Bigg]
\end{aligned}
 ∇ θ  J ( θ )  = E q ∼ p Q   [ E { o i  } i = 1 G  ∼ π θ  ( ⋅ ∣ q )  [ G 1  i = 1 ∑ G  t = 1 ∑ ∣ o i  ∣  ∇ θ  log  π θ  ( o i , t  ∣ q , o i , < t  ) A ^ i  ] ] = E q ∼ p Q   [ E { o i  } i = 1 G  ∼ π θ  ( ⋅ ∣ q )  [ G 1  i = 1 ∑ G  A ^ i  ∇ θ  log  π θ  ( o i  ∣ q ) ] ] = E q ∼ p Q   [ E { o i  } i = 1 G  ∼ π θ  ( ⋅ ∣ q )  [ G 1  i = 1 ∑ G  G − 1 G  ( R ( q , o i  ) − G 1  j = 1 ∑ G  R ( q , o j  ) ) ∇ θ  log  π θ  ( o i  ∣ q ) ] ] = E q ∼ p Q   [ E { o i  } i = 1 G  ∼ π θ  ( ⋅ ∣ q )  [ G − 1 1  i = 1 ∑ G  ( R ( q , o i  ) − G 1  j = 1 ∑ G  R ( q , o j  ) ) ∇ θ  log  π θ  ( o i  ∣ q ) ] ]  
从第一个等式也可看出,RLOO 策略梯度估计的最小计算单元不是单个样本,而是整个 group。
GRPO 与 RLOO 都是同期思路类似的工作,为了保持全文符号的一致性,我们这里是用 group G G G   来表述。实际上,这一表述源自 GRPO
 ReMax 
ReMax 是 RLOO 的同期工作,动机也是为了丢弃 PPO 中的 value network,其奖励信号也是 response-level (a.k.a., trajectory-level)。与 RLOO 的差异主要体现在 baseline 的设计。
对于每个 prompt q ∼ p Q q \sim p_{\mathcal{Q}} q ∼ p Q   , RLOO 从 π θ ( ⋅ ∣ q ) \pi_{\theta}(\cdot \mid q) π θ  ( ⋅ ∣ q )   采样独立同分布的 G G G   个 output { o i } i = 1 G \{o_{i}\}_{i=1}^{G} { o i  } i = 1 G   ,而 ReMax 仅生成两个序列:
随机序列:o ∼ π θ ( ⋅ ∣ q ) o \sim \pi_{\theta}(\cdot \mid q) o ∼ π θ  ( ⋅ ∣ q )  
贪婪序列:o max o_{\text{max}} o max   ,通过每次贪婪选择概率最高的 token 组成,即:o max , t = arg  max  w π θ ( w ∣ q , o max , < t ) o_{\text{max},t} = \arg\max_{w} \pi_{\theta}(w \mid q,o_{\text{max},<t}) o max , t  = arg  max w  π θ  ( w ∣ q , o max , < t  )  
 
ReMax baseline 定义为贪婪序列的回报(实际上也是奖励)R ( q , o max ) R(q,o_{\text{max}}) R ( q , o max  )  。由于 o max o_{\text{max}} o max    与随机序列 o o o   的各 token 无关,因此其对策略梯度的估计是无偏的。论文中详细证明了该 baseline 能有效降低策略梯度估计的方差,本文不再展开。
GRPO: Group Relative Policy Optimization 
GRPO 也是 ReMax, RLOO 的同期工作,其基于 PPO 算法,如上图所示。其目标函数如下:
J ( θ ) = E q ∼ p Q , { o i } i = 1 G ∼ π θ o l d ( ⋅ ∣ q ) 1 G ∑ i = 1 G 1 ∣ o i ∣ ∑ t = 1 ∣ o i ∣ { min  ( r i , t ( θ ) A ^ i , t , c l i p ( r i , t ( θ ) , 1 − ϵ , 1 + ϵ ) A ^ i , t ) − β D KL [ π θ ( ⋅ ∣ q ) ∥ π r e f ( ⋅ ∣ q ) ] } \begin{aligned}
J(\theta) &= \mathbb{E}_{q \sim p_{\mathcal{Q}},\{o_{i}\}_{i=1}^{G} \sim \pi_{\theta_{old}}(\cdot \mid q)} \\
& \frac{1}{G}\sum_{i=1}^{G} \frac{1}{|o_{i}|}\sum_{t=1}^{|o_{i}|} \bigg\{ \min\Big(
r_{i,t}(\theta) \hat{A}_{i,t},
\mathrm{clip}\big(r_{i,t}(\theta),1-\epsilon,1+\epsilon\big)\hat{A}_{i,t}
\Big) - \beta \mathbb{D}_{\text{KL}}\big[\pi_{\theta}(\cdot \mid q) \| \pi_{ref}(\cdot \mid q)\big] \bigg\}
\end{aligned}
 J ( θ )  = E q ∼ p Q  , { o i  } i = 1 G  ∼ π θ o l d   ( ⋅ ∣ q )  G 1  i = 1 ∑ G  ∣ o i  ∣ 1  t = 1 ∑ ∣ o i  ∣  { min ( r i , t  ( θ ) A ^ i , t  , clip ( r i , t  ( θ ) , 1 − ϵ , 1 + ϵ ) A ^ i , t  ) − β D KL  [ π θ  ( ⋅ ∣ q ) ∥ π re f  ( ⋅ ∣ q ) ] }  
其中,policy ratio r i , t ( θ ) r_{i,t}(\theta) r i , t  ( θ )   表示如下:
r i , t ( θ ) = π θ ( o i , t ∣ q , o i , < t ) π θ o l d ( o i , t ∣ q , o i , < t ) r_{i,t}(\theta) = \frac{\pi_{\theta}(o_{i,t} \mid q,o_{i,<t})}{\pi_{\theta_{old}}(o_{i,t} \mid q,o_{i,<t})}
 r i , t  ( θ ) = π θ o l d   ( o i , t  ∣ q , o i , < t  ) π θ  ( o i , t  ∣ q , o i , < t  )  
GRPO group 中 output o i o_{i} o i    的第 t t t   个 token o i , t o_{i,t} o i , t    的优势近似为该 token 的回报 G ( q , o i , ≤ t ) G(q,o_{i,\le t}) G ( q , o i , ≤ t  )  ,而回报是自 t t t   时刻其的累计奖励和。GRPO 的核心思想是对奖励进行 normalization,这里对奖励信号分两种情形进行探讨:结果监督与过程监督。
当奖励信号是 response-level 的结果监督时,G ( q , o i , ≤ t ) = G ( q , o i ) = R ~ ( q , o i ) G(q,o_{i,\le t}) = G(q,o_{i}) = \tilde{R}(q,o_{i}) G ( q , o i , ≤ t  ) = G ( q , o i  ) = R ~ ( q , o i  )  ,group normalized advantage 表示如下:
A ^ i = G ( q , o i ) = R ~ ( q , o i ) = R ( q , o i ) − m e a n ( { R ( q , o 1 ) , … , R ( q , o G ) } ) s t d ( { R ( q , o 1 ) , … , R ( q , o G ) } ) \hat{A}_{i} = G(q,o_{i}) = \tilde{R}(q,o_{i}) = \frac{R(q,o_{i}) - \mathrm{mean}(\{ R(q,o_{1}),\ldots,R(q,o_{G}) \})}{\mathrm{std}(\{R(q,o_{1}),\ldots,R(q,o_{G})\})}
 A ^ i  = G ( q , o i  ) = R ~ ( q , o i  ) = std ({ R ( q , o 1  ) , … , R ( q , o G  )}) R ( q , o i  ) − mean ({ R ( q , o 1  ) , … , R ( q , o G  )})  
其中,R ~ ( q , o i ) \tilde{R}(q,o_{i}) R ~ ( q , o i  )   是 group normalized reward。同时可以看到,优势(同时包括回报,即时奖励)中剔除了时间维度,因为对所有 token 一视同仁,即:A ^ i , t = A ^ i \hat{A}_{i,t}=\hat{A}_{i} A ^ i , t  = A ^ i   。此外,即时奖励直接由 ORM 直接给出,即,R ( q , o i ) = r ( q , o i ) R(q,o_{i})=r(q,o_{i}) R ( q , o i  ) = r ( q , o i  )  。这里没有使用 KL-shaped reward,是因为 GRPO 将 KL 惩罚直接加入到了目标函数中,后面会详细讲解。
当奖励信号是 token-level 的过程监督时,reward 需要对所有 group 中各时间步进行归一化,则参与归一化计算的所有奖励信号可以表示为一个集合 R = { { R ( q , o 1 , ≤ 1 ) , … , R ( q , o 1 , ≤ ∣ o 1 ∣ ) } , … , { R ( q , o G , ≤ 1 ) , … , R ( q , o G , ≤ ∣ o G ∣ ) } } \mathbf{R} = \big\{\{R(q,o_{1,\le 1}),\ldots,R(q,o_{1,\le |o_{1}|})\},\ldots,\{R(q,o_{G,\le 1}),\ldots,R(q,o_{G,\le |o_{G}|})\}\big\} R = { { R ( q , o 1 , ≤ 1  ) , … , R ( q , o 1 , ≤ ∣ o 1  ∣  )} , … , { R ( q , o G , ≤ 1  ) , … , R ( q , o G , ≤ ∣ o G  ∣  )} }  ,集合大小为 ∑ i = 1 G ∣ o i ∣ \sum_{i=1}^{G}|o_{i}| ∑ i = 1 G  ∣ o i  ∣  。接着,group normalized reward 表示如下:
R ~ ( q , o i , ≤ t ) = R ( q , o i , ≤ t ) − m e a n ( R ) s t d ( R ) \tilde{R}(q,o_{i,\le t}) = \frac{R(q,o_{i,\le t}) - \mathrm{mean}(\mathbf{R})}{\mathrm{std}(\mathbf{R})}
 R ~ ( q , o i , ≤ t  ) = std ( R ) R ( q , o i , ≤ t  ) − mean ( R )  
其中,即时奖励 R ( q , o i , ≤ t ) R(q,o_{i,\le t}) R ( q , o i , ≤ t  )   由 PRM 直接给出,即,R ( q , o i , ≤ t ) = r ( q , o i , ≤ t ) R(q,o_{i,\le t}) = r(q,o_{i,\le t}) R ( q , o i , ≤ t  ) = r ( q , o i , ≤ t  )  。最后,优势仍然使用回报近似:
A ^ i , t = G ( q , o i , ≤ t ) = ∑ t ′ = t ∣ o i ∣ R ~ ( q , o i , ≤ t ′ ) \hat{A}_{i,t} = G(q,o_{i,\le t}) = \sum_{t^{\prime} = t}^{|o_{i}|} \tilde{R}(q,o_{i,\le t^{\prime}})
 A ^ i , t  = G ( q , o i , ≤ t  ) = t ′ = t ∑ ∣ o i  ∣  R ~ ( q , o i , ≤ t ′  ) 
除了优势近似外,还有几处与标准 PPO 的差异:
Length Normalization: 1 / ∣ o i ∣ 1/|o_{i}| 1/∣ o i  ∣   对 output o i o_{i} o i    的长度进行归一化。实际上,大部分 PPO 的实现也进行了归一化,但标准的 PPO 不包含该项。这一项也引入了一些 bias, Dr. GRPO 对此进行了讨论与改进 
KL Penalty: 直接将 KL 惩罚加入目标函数,而非采用 KL-shaped reward。因此,其目标函数的形式类似 PPO-Clip 与 PPO-Penalty 的统一 
 
GRPO 目标函数中的 KL 散度使用 k 3 k_{3} k 3    estimator:
D ^ KL [ π θ ( ⋅ ∣ q ) ∥ π r e f ( ⋅ ∣ q ) ] = π r e f ( o i , t ∣ q , o i , < t ) π θ ( o i , t ∣ q , o i , < t ) − log  π r e f ( o i , t ∣ q , o i , < t ) π θ ( o i , t ∣ q , o i , < t ) − 1 \hat{\mathbb{D}}_{\text{KL}}\big[\pi_{\theta}(\cdot \mid q) \| \pi_{ref}(\cdot \mid q)\big] = \frac{\pi_{ref}(o_{i,t} \mid q,o_{i,<t})}{\pi_{\theta}(o_{i,t} \mid q,o_{i,<t})} - \log \frac{\pi_{ref}(o_{i,t} \mid q,o_{i,<t})}{\pi_{\theta}(o_{i,t} \mid q,o_{i,<t})} - 1
 D ^ KL  [ π θ  ( ⋅ ∣ q ) ∥ π re f  ( ⋅ ∣ q ) ] = π θ  ( o i , t  ∣ q , o i , < t  ) π re f  ( o i , t  ∣ q , o i , < t  )  − log  π θ  ( o i , t  ∣ q , o i , < t  ) π re f  ( o i , t  ∣ q , o i , < t  )  − 1 
对于 GRPO bias 的讨论,见 Dr. GRPO 一节。
Dr. GRPO: Group Relative Policy Optimization Done Right 
此前,我们发现 GRPO 与 RLOO 的优势计算十分相似,Dr. GRPO 基于 GRPO 进行优化,并揭示了优化后的优势计算与 RLOO 的联系。首先,我们对比 GRPO,给出 Dr. GRPO 的目标函数:
J ( θ ) = E q ∼ p Q , { o i } i = 1 G ∼ π θ o l d ( ⋅ ∣ q ) 1 G ∑ i = 1 G 1 ∣ o i ∣ ∑ t = 1 ∣ o i ∣ { min  ( r i , t ( θ ) A ^ i , t , c l i p ( r i , t ( θ ) , 1 − ϵ , 1 + ϵ ) A ^ i , t ) − β D KL [ π θ ( ⋅ ∣ q ) ∥ π r e f ( ⋅ ∣ q ) ] } \begin{aligned}
J(\theta) &= \mathbb{E}_{q \sim p_{\mathcal{Q}},\{o_{i}\}_{i=1}^{G} \sim \pi_{\theta_{old}}(\cdot \mid q)} \\
& \frac{1}{G}\sum_{i=1}^{G} {\color{red}\xcancel{\frac{1}{|o_{i}|}}} \sum_{t=1}^{|o_{i}|} \bigg\{ \min\Big(
r_{i,t}(\theta) \hat{A}_{i,t},
\mathrm{clip}\big(r_{i,t}(\theta),1-\epsilon,1+\epsilon\big)\hat{A}_{i,t}
\Big) {\color{red}\xcancel{- \beta \mathbb{D}_{\text{KL}}\big[\pi_{\theta}(\cdot \mid q) \| \pi_{ref}(\cdot \mid q)\big]}} \bigg\}
\end{aligned}
 J ( θ )  = E q ∼ p Q  , { o i  } i = 1 G  ∼ π θ o l d   ( ⋅ ∣ q )  G 1  i = 1 ∑ G  ∣ o i  ∣ 1   t = 1 ∑ ∣ o i  ∣  { min ( r i , t  ( θ ) A ^ i , t  , clip ( r i , t  ( θ ) , 1 − ϵ , 1 + ϵ ) A ^ i , t  ) − β D KL  [ π θ  ( ⋅ ∣ q ) ∥ π re f  ( ⋅ ∣ q ) ]  }  
其中
A ^ i = R ( q , o i ) − m e a n ( { R ( q , o 1 ) , … , R ( q , o G ) } ) s t d ( { R ( q , o 1 ) , … , R ( q , o G ) } ) \hat{A}_{i} = \frac{R(q,o_{i}) - \mathrm{mean}(\{ R(q,o_{1}),\ldots,R(q,o_{G}) \})}{\color{red}\xcancel{\mathrm{std}(\{R(q,o_{1}),\ldots,R(q,o_{G})\})}}
 A ^ i  = std ({ R ( q , o 1  ) , … , R ( q , o G  )})  R ( q , o i  ) − mean ({ R ( q , o 1  ) , … , R ( q , o G  )})  
为了简化分析,我们不妨假设只有结果奖励信号,即:A ^ i , t = A ^ i \hat{A}_{i,t} = \hat{A}_{i} A ^ i , t  = A ^ i   。实际上,过程奖励信号的场景分析也同理。
对比 GRPO 发现,Dr. GRPO 移除了目标函数中的 KL 惩罚,更核心的是,移除了 1 / ∣ o i ∣ \color{red}1/|o_{i}| 1/∣ o i  ∣   与 s t d ( { R ( q , o 1 ) , … , R ( q , o G ) } ) \color{red}\mathrm{std}(\{R(q,o_{1}),\ldots,R(q,o_{G})\}) std ({ R ( q , o 1  ) , … , R ( q , o G  )})   归一化项。这一点源于 GRPO 中的这两个归一化项引入了两个 biases:
Response-level length bias : 源于 1 / ∣ o i ∣ \color{red}1/|o_{i}| 1/∣ o i  ∣  ,分为两种情况讨论:
当 A ^ i > 0 \hat{A}_{i} > 0 A ^ i  > 0  ,即 response o i o_{i} o i    正确时:更短的 response 将获得更大幅度的梯度更新,因为其归一化后权重更高。这可能鼓励模型生成更简短的正确回复 
当 A ^ i < 0 \hat{A}_{i} < 0 A ^ i  < 0  ,即 response o i o_{i} o i    错误时:更长的 response 受到的惩罚较小,因为其权重被长度稀释。这可能鼓励模型生成更长的错误回复 
 
 
Question-level difficulty bias : 源于 s t d ( { R ( q , o 1 ) , … , R ( q , o G ) } ) \color{red}\mathrm{std}(\{R(q,o_{1}),\ldots,R(q,o_{G})\}) std ({ R ( q , o 1  ) , … , R ( q , o G  )})  。奖励标准差较低的问题(e.g., 非常容易或非常困难的问题,因为奖励大多为 1 1 1   或 0 0 0  )会获得更高的优化权重 
 
最后,证明 Dr. GRPO 优势的无偏性,从 RLOO 优势出发:
A ^ i RLOO = G G − 1 ( R ( q , o i ) − 1 G ∑ j = 1 G R ( q , o j ) ) = G G − 1 A ^ i Dr.GRPO \begin{aligned}
\hat{A}_{i}^{\text{RLOO}}
&= \frac{G}{G-1} \bigg( R(q,o_{i}) - \frac{1}{G} \sum_{j=1}^{G} R(q,o_{j}) \bigg)\\
&= \frac{G}{G-1} \hat{A}_{i}^{\text{Dr.GRPO}}
\end{aligned}
 A ^ i RLOO   = G − 1 G  ( R ( q , o i  ) − G 1  j = 1 ∑ G  R ( q , o j  ) ) = G − 1 G  A ^ i Dr.GRPO   
由于 RLOO 优势对策略梯度的近似是无偏的,我们只需证明 Dr. GRPO 与 RLOO 优势等价即可。我们发现,当 group size G → ∞ G \to \infty G → ∞   时,A ^ i Dr.GRPO → A ^ i RLOO \hat{A}_{i}^{\text{Dr.GRPO}} \to \hat{A}_{i}^{\text{RLOO}} A ^ i Dr.GRPO  → A ^ i RLOO   。实际上,G / ( G − 1 ) G/(G-1) G / ( G − 1 )   这一因子可以在 RL-tuning 被学习率吸收。因此,我们可以认为 Dr. GRPO 优势对策略梯度的近似也是无偏的。
REINFORCE++ 
如上图所示,REINFORCE++ 基于 GRPO 进行改进,核心思想在于对优势函数使用 batch normalization,目标函数仍然是 PPO loss。其奖励信号与 PPO 一致,采用 token-level KL-shaped reward,表示如下:
R ( q , o ≤ t ) = I ( o t = [ EOS ] ) r ( q , o ) − β KL t R(q,o_{\le t}) = \mathbf{I}(o_{t} = [\text{EOS}])r(q,o) - \beta \text{KL}_{t}
 R ( q , o ≤ t  ) = I ( o t  = [ EOS ]) r ( q , o ) − β KL t  
其中,KL t \text{KL}_{t} KL t    是 KL 散度的近似,r ( q , o ) r(q,o) r ( q , o )   是 ORM 对 [ q , o ] [q,o] [ q , o ]   的打分。如果采用 PRM,则 R ( q , o ≤ t ) = r ( q , o ≤ t ) R(q,o_{\le t}) = r(q,o_{\le t}) R ( q , o ≤ t  ) = r ( q , o ≤ t  )  。标准 REINFORCE++ 使用 k 1 k_{1} k 1    estimator 时,计算如下:
KL t = log  π θ o l d ( o t ∣ q , o < t ) π r e f ( o t ∣ q , o < t ) \text{KL}_{t} = \log \frac{\pi_{\theta_{old}}(o_{t} \mid q,o_{<t})}{\pi_{ref}(o_{t} \mid q,o_{<t})}
 KL t  = log  π re f  ( o t  ∣ q , o < t  ) π θ o l d   ( o t  ∣ q , o < t  )  
标准 REINFORCE++ 移除了 GRPO 中的 group,沿用 PPO 的算法步骤:
从 prompt dataset p Q p_{\mathcal{Q}} p Q    中采样一个 batch 的 prompt { q ( n ) } n = 1 N ∼ p Q \{q^{(n)}\}_{n=1}^{N} \sim p_{\mathcal{Q}} { q ( n ) } n = 1 N  ∼ p Q   
对于每个 prompt q ( n ) q^{(n)} q ( n )  ,从 old policy 中采样一个 output o ( n ) ∼ π θ o l d ( ⋅ ∣ q ( n ) ) o^{(n)} \sim \pi_{\theta_{old}}(\cdot \mid q^{(n)}) o ( n ) ∼ π θ o l d   ( ⋅ ∣ q ( n ) )  
为 batch 中每个 output o ( n ) o^{(n)} o ( n )   计算各时间步 t t t   的即时奖励 R ( q ( n ) , o ≤ t ( n ) ) R(q^{(n)},o_{\le t}^{(n)}) R ( q ( n ) , o ≤ t ( n )  )   与优势 A ^ t ( n ) \hat{A}_{t}^{(n)} A ^ t ( n )   
 
其中,优势使用 global batch normalization 进行计算。类似 GRPO,我们先将参与归一化计算的所有奖励信号表示为一个集合 R = { { R ( q ( 1 ) , o ≤ 1 ( 1 ) ) , … , R ( q ( 1 ) , o ≤ ∣ o ( 1 ) ∣ ( 1 ) ) } , … , { R ( q ( N ) , o ≤ 1 ( N ) ) , … , R ( q ( N ) , o ≤ ∣ o ( N ) ∣ ( N ) ) } } \mathbf{R} = \big\{\{R(q^{(1)},o_{\le 1}^{(1)}),\ldots,R(q^{(1)},o_{\le |o^{(1)}|}^{(1)})\},\ldots,\{R(q^{(N)},o_{\le 1}^{(N)}),\ldots,R(q^{(N)},o_{\le |o^{(N)}|}^{(N)})\}\big\} R = { { R ( q ( 1 ) , o ≤ 1 ( 1 )  ) , … , R ( q ( 1 ) , o ≤ ∣ o ( 1 ) ∣ ( 1 )  )} , … , { R ( q ( N ) , o ≤ 1 ( N )  ) , … , R ( q ( N ) , o ≤ ∣ o ( N ) ∣ ( N )  )} }  ,集合大小为 ∑ n = 1 N ∣ o ( n ) ∣ \sum_{n=1}^{N}|o^{(n)}| ∑ n = 1 N  ∣ o ( n ) ∣  。接着,给出优势归一化公式:
A ^ t ( n ) = R ( q ( n ) , o ≤ t ( n ) ) − m e a n ( R ) s t d ( R ) \hat{A}_{t}^{(n)} = \frac{R(q^{(n)},o_{\le t}^{(n)}) - \mathrm{mean}(\mathbf{R})}{\mathrm{std}(\mathbf{R})}
 A ^ t ( n )  = std ( R ) R ( q ( n ) , o ≤ t ( n )  ) − mean ( R )  
这里也看出与 GRPO 的显著区别,REINFORCE++ 沿用 PPO,为每个 prompt 仅采样一个 response,而 GRPO 是采样一组 response,这也造成了 normalization 方式的差异。
这里计算优势时,使用的仍然是即时奖励,而非回报。当 GRPO 使用 token-level reward 时,优势使用回报近似,而非即时奖励。
 实际上,为了支持 multi-response 的场景,REINFORCE+±baseline 这一变体被提出。首先,为 batch 所有样本计算各自的 group normalized advantage A ^ i , t ( n ) \hat{A}_{i,t}^{(n)} A ^ i , t ( n )   。这里为了保持符号的简洁性,我们省略上标 ( n ) (n) ( n )  ,因为 group normalization 都是 prompt-specific 的。公式表示如下:
A ^ i , t = R ( q , o i , ≤ t ) − m e a n ( { { R ( q , o 1 , ≤ 1 ) , … , R ( q , o 1 , ≤ ∣ o 1 ∣ ) } , … , { R ( q , o G , ≤ 1 ) , … , R ( q , o G , ≤ ∣ o G ∣ ) } } ) \hat{A}_{i,t} = R(q,o_{i,\le t}) - \mathrm{mean}\big(\big\{\{R(q,o_{1,\le 1}),\ldots,R(q,o_{1,\le |o_{1}|})\},\ldots,\{R(q,o_{G,\le 1}),\ldots,R(q,o_{G,\le |o_{G}|})\}\big\}\big)
 A ^ i , t  = R ( q , o i , ≤ t  ) − mean ( { { R ( q , o 1 , ≤ 1  ) , … , R ( q , o 1 , ≤ ∣ o 1  ∣  )} , … , { R ( q , o G , ≤ 1  ) , … , R ( q , o G , ≤ ∣ o G  ∣  )} } ) 
类似 Dr. GRPO,这里的 group normalization 并不会除以标准差。最后,与标准 REINFORCE++ 一致,进一步计算 global batch normalized advantage。这里不再给出具体计算公式,因为符号表示较复杂。需要注意的是,参与均值与标准差运算的样本数量为 ∑ n = 1 N ∑ i = 1 G ∣ o i ( n ) ∣ \sum_{n=1}^{N} \sum_{i=1}^{G} |o_{i}^{(n)}| ∑ n = 1 N  ∑ i = 1 G  ∣ o i ( n )  ∣ 
DAPO: Decouple Clip and Dynamic sAmpling Policy Optimization 
DAPO 基于 GRPO 算法,针对 long-CoT RL 场景进行改进。对比 GRPO,其目标函数如下:
J ( θ ) = E ( q , a ) ∼ p Q , { o i } i = 1 G ∼ π θ o l d ( ⋅ ∣ q ) 1 ∑ i = 1 G ∣ o i ∣ 1 G ∑ i = 1 G 1 ∣ o i ∣ ∑ t = 1 ∣ o i ∣ { min  ( r i , t ( θ ) A ^ i , t , c l i p ( r i , t ( θ ) , 1 − ϵ low , 1 + ϵ high ) A ^ i , t ) − β D KL [ π θ ( ⋅ ∣ q ) ∥ π r e f ( ⋅ ∣ q ) ] } s.t. 0 < ∣ { o i ∣ i s _ e q u i v a l e n t ( a , o i ) } ∣ < G \begin{aligned}
J(\theta) &= \mathbb{E}_{(q,a) \sim p_{\mathcal{Q}},\{o_{i}\}_{i=1}^{G} \sim \pi_{\theta_{old}}(\cdot \mid q)} \\
&  {\color{red}\frac{1}{\sum_{i=1}^{G}|o_{i}|}  \xcancel{\frac{1}{G}}}\sum_{i=1}^{G} {\color{red}\xcancel{\frac{1}{|o_{i}|}}} \sum_{t=1}^{|o_{i}|} \bigg\{ \min\Big(
r_{i,t}(\theta) \hat{A}_{i,t},
\mathrm{clip}\big(r_{i,t}(\theta),1-\epsilon_{\text{low}},1+\epsilon_{\text{high}}\big)\hat{A}_{i,t}
\Big) {\color{red}\xcancel{- \beta \mathbb{D}_{\text{KL}}\big[\pi_{\theta}(\cdot \mid q) \| \pi_{ref}(\cdot \mid q)\big]}} \bigg\} \\
& {\color{red}\text{s.t.}\quad 0 < \Big| \{ o_{i} \mid \mathrm{is\_equivalent}(a,o_{i}) \} \Big| < G}
\end{aligned}
 J ( θ )  = E ( q , a ) ∼ p Q  , { o i  } i = 1 G  ∼ π θ o l d   ( ⋅ ∣ q )  ∑ i = 1 G  ∣ o i  ∣ 1  G 1   i = 1 ∑ G  ∣ o i  ∣ 1   t = 1 ∑ ∣ o i  ∣  { min ( r i , t  ( θ ) A ^ i , t  , clip ( r i , t  ( θ ) , 1 − ϵ low  , 1 + ϵ high  ) A ^ i , t  ) − β D KL  [ π θ  ( ⋅ ∣ q ) ∥ π re f  ( ⋅ ∣ q ) ]  } s.t. 0 <  { o i  ∣ is_equivalent ( a , o i  )}  < G  
其中,( q , a ) ∼ p Q (q,a) \sim p_{\mathcal{Q}} ( q , a ) ∼ p Q    指从数据集 p Q p_{\mathcal{Q}} p Q    中采样 question-answer pair。上式中红色部分是与 GRPO 的差异。首先,DAPO 移除了 KL 惩罚,这是由于 RL 场景差异导致:
RLHF 中,我们的目标是在不偏离初始模型太远的情况下,微调模型使之与人类偏好对齐 
Long-CoT Reasoning RL 中,对于一个复杂的数学或逻辑问题,初始模型可能根本不知道如何解答。我们希望鼓励模型探索,生成 long-CoT,这个过程中,模型的概率分布会发生较大变化,因此不需要 KL 惩罚的限制 
 
剩余的改进归纳为四点:
Techniques 
Goals 
Formulation 
 
 
Clip-Higher 
鼓励探索,避免熵坍缩 
ϵ low \epsilon_{\text{low}} ϵ low   ,ϵ high \epsilon_{\text{high}} ϵ high   
 
Dynamic Sampling 
持续提供有效梯度,加快收敛 
s.t. 0 < ∣ { o i ∣ i s _ e q u i v a l e n t ( a , o i ) } ∣ < G \text{s.t.}\quad 0 < \vert \{ o_{i} \mid \mathrm{is\_equivalent}(a,o_{i}) \} \vert < G s.t. 0 < ∣ { o i  ∣ is_equivalent ( a , o i  )} ∣ < G  
 
Token-Level Policy Gradient Loss 
避免较长序列梯度的稀释 
1 / ∑ i = 1 G ∣ o i ∣ 1 / \sum_{i=1}^{G}\vert o_{i} \vert 1/ ∑ i = 1 G  ∣ o i  ∣  
 
Overlong Reward Shaping 
降低奖励噪音 
R length R_{\text{length}} R length   
 
 
在正式解读前,先明确其奖励信号。为了避免 reward hacking 问题,直接使用 rule-based verifier 而非 reward model。规则奖励公式如下:
R rule ( y ^ , y ) = { 1 , i s _ e q u i v a l e n t ( y ^ , y ) − 1 , otherwise R_{\text{rule}}(\hat{y},y) = \begin{cases}
1,  &  \mathrm{is\_equivalent}(\hat{y},y) \\
-1, &  \text{otherwise}
\end{cases}
 R rule  ( y ^  , y ) = { 1 , − 1 ,  is_equivalent ( y ^  , y ) otherwise  
其中,y y y   为 ground-truth answer,y ^ \hat{y} y ^    为 predicted answer。
在 Overlong Reward Shaping 中,还会引入 R length ( o i ) R_{\text{length}}(o_{i}) R length  ( o i  )  ,故 response-level reward/return R ( q , a , o i ) = R rule ( a , o i ) + R length ( o i ) R(q,a,o_{i}) = R_{\text{rule}}(a,o_{i}) + R_{\text{length}}(o_{i}) R ( q , a , o i  ) = R rule  ( a , o i  ) + R length  ( o i  )  。优势计算如下:
A ^ i , t = A ^ i = R ( q , a , o i ) − m e a n ( { R ( q , a , o j ) } j = 1 G ) s t d ( { R ( q , a , o j ) } j = 1 G ) \hat{A}_{i,t} = \hat{A}_{i} = \frac{R(q,a,o_{i}) - \mathrm{mean}(\{R(q,a,o_{j})\}_{j=1}^{G})}{\mathrm{std}(\{R(q,a,o_{j})\}_{j=1}^{G})}
 A ^ i , t  = A ^ i  = std ({ R ( q , a , o j  ) } j = 1 G  ) R ( q , a , o i  ) − mean ({ R ( q , a , o j  ) } j = 1 G  )  
Clip-Higher 
Clip-Higher 针对熵坍缩问题,通过解耦 clip 上下界 ϵ low \epsilon_{\text{low}} ϵ low   ,ϵ high \epsilon_{\text{high}} ϵ high    以鼓励模型探索。传统 PPO 对 policy ratio r t ( θ ) r_{t}(\theta) r t  ( θ )   进行对称裁剪(e.g., [ 1 − ϵ , 1 + ϵ ] [1-\epsilon,1+\epsilon] [ 1 − ϵ , 1 + ϵ ]  , ϵ = 0.2 \epsilon=0.2 ϵ = 0.2  )可能限制低概率 exploration token 的增加,而 Clip-Higher 保持下界 ϵ low = 0.2 \epsilon_{\text{low}} = 0.2 ϵ low  = 0.2   不变,扩大上界 ϵ high = 0.28 \epsilon_{\text{high}} = 0.28 ϵ high  = 0.28  。
Dynamic Sampling 
在 GRPO 中,当一个 question q q q   生成的所有 G G G   个 answer 全都正确(奖励均为 + 1 +1 + 1  )或全都错误(奖励均为 − 1 -1 − 1  )时,group 内奖励均值均为 + 1 +1 + 1   或 − 1 -1 − 1  ,进而这 G G G   个样本的优势均为 0 0 0  。因此,这个 group 中所有样本无法产生有效梯度信号,对模型更新毫无贡献。
Dynamic Sampling 的核心思想是:只用能产生有效梯度的样本进行训练。DAPO 通过在目标函数中添加一个约束条件来实现:
s.t. 0 < ∣ { o i ∣ i s _ e q u i v a l e n t ( a , o i ) } ∣ < G \text{s.t.}\quad 0 < | \{ o_{i} \mid \mathrm{is\_equivalent}(a,o_{i}) \} | < G
 s.t. 0 < ∣ { o i  ∣ is_equivalent ( a , o i  )} ∣ < G 
这个约束的含义是,对于每个 question q q q  ,其生成的 G G G   个 answer 中,必须既有正解,也有错解。当均为正解时,∣ { o i ∣ i s _ e q u i v a l e n t ( a , o i ) } ∣ = G | \{ o_{i} \mid \mathrm{is\_equivalent}(a,o_{i}) \} | = G ∣ { o i  ∣ is_equivalent ( a , o i  )} ∣ = G  ;当均为错解时,{ o i ∣ i s _ e q u i v a l e n t ( a , o i ) } ∣ = 0 \{ o_{i} \mid \mathrm{is\_equivalent}(a,o_{i}) \} | = 0 { o i  ∣ is_equivalent ( a , o i  )} ∣ = 0  。
Token-Level Policy Gradient Loss 
原始的 GRPO 算法采用 sample-level loss。它首先计算每个 response 内所有 token 损失均值,再计算 batch 内所有 response 损失均值。在这种权重下,每个样本,不论长短,对最终总损失的贡献是均等的。在 long-CoT 场景中,存在两个问题:
长样本中每个 token 的权重被稀释了,使得模型难以从高质量的长推理过程中充分学习其内在模式。 
过长样本中常常包含无意义的重复与胡言乱语的 token。由于权重被稀释,sample-level loss 无法有效惩罚这些低质量模式,导致模型生成熵和响应长度不受控制地 " 野蛮生长 " 
 
与 GRPO 先对 response 求均值,再对 batch 求均值不同,DAPO 将 batch 内所有 response 的所有 token loss 直接求均值。具体来说,将目标函数中的 1 / ∣ o i ∣ 1/|o_{i}| 1/∣ o i  ∣   外置变成 1 / ∑ i = 1 G ∣ o i ∣ 1/\sum_{i=1}^{G}|o_{i}| 1/ ∑ i = 1 G  ∣ o i  ∣  。这样,损失的计算变成 token-level,每个 token 对最终梯度更新的贡献是平等的,无论 response 的长短。
Overlong Reward Shaping 
在 RL-tuning 中,通常会设定一个最大生成长度,超出长度的 response 会被截断。然而,一个可能包含完全正确推理过程的 response,因为尚未出现正确答案(e.g., \boxed{})而被截断,导致规则奖励为 − 1 -1 − 1  ,这会引入 reward noise,让模型误以为其正确的推理路径是错误的。
DAPO 探索了两种途径,一种是 Overlong Filtering,直接将被截断的样本的损失 mask 掉,使它们不参与梯度计算,已经能稳定训练并提升性能。另一种是 Soft Overlong Punishment,设计一个长度惩罚如下:
R length ( y ) = { 0 , ∣ y ∣ ≤ L max − L cache Case 1: Safe Zone ( L max − L cache ) − ∣ y ∣ L cache , L max − L cache < ∣ y ∣ ≤ L max Case 2: Soft Punishment Buffer − 1 , ∣ y ∣ > L max Case 3: Hard Punishment Zone R_{\text{length}}(y) = \begin{cases}
0, & |y| \le L_{\text{max}} - L_{\text{cache}} & \text{Case 1: Safe Zone} \\
\frac{(L_{\text{max}} - L_{\text{cache}}) - |y|}{L_{\text{cache}}}, & L_{\text{max}} - L_{\text{cache}} < |y| \le L_{\text{max}} & \text{Case 2: Soft Punishment Buffer} \\
-1, & |y| > L_{\text{max}} & \text{Case 3: Hard Punishment Zone}
\end{cases}
 R length  ( y ) = ⎩ ⎨ ⎧  0 , L cache  ( L max  − L cache  ) − ∣ y ∣  , − 1 ,  ∣ y ∣ ≤ L max  − L cache  L max  − L cache  < ∣ y ∣ ≤ L max  ∣ y ∣ > L max   Case 1: Safe Zone Case 2: Soft Punishment Buffer Case 3: Hard Punishment Zone  
其中:
∣ y ∣ |y| ∣ y ∣  : 生成样本 y y y   的实际长度 
L max L_{\text{max}} L max   : 预设的最大长度上限。我们希望当模型超过该长度后,会渐进受到惩罚。 
L cache L_{\text{cache}} L cache   : 缓冲区长度 
 
注意,这里 L max L_{\text{max}} L max    并非 rollout 阶段,传递给推理引擎的物理参数 max_tokens。实际上,该论文实验设定 L max = 16 , 384 L_{\text{max}}=16,384 L max  = 16 , 384  , L cache = 4 , 096 L_{\text{cache}}=4,096 L cache  = 4 , 096  。因此,最大生成 token 数应该为 L max + L cache = 20 , 480 L_{\text{max}} + L_{\text{cache}} = 20,480 L max  + L cache  = 20 , 480  。
此时,我们来详细解读长度惩罚函数的三个阶段:
第一阶段:安全区(0 < ∣ y ∣ ≤ 12 , 288 0 < |y| \le 12,288 0 < ∣ y ∣ ≤ 12 , 288  )。此时,模型有充足的长度来进行必要的推理,不会受到任何惩罚 
第二阶段:软惩罚区(12 , 288 < ∣ y ∣ ≤ 16 , 384 12,288 < |y| \le 16,384 12 , 288 < ∣ y ∣ ≤ 16 , 384  )。该长度惩罚是个线性函数,当长度刚进入此区间时,不会受到惩罚(R length = 0 R_{\text{length}} = 0 R length  = 0  );当长度即将达到 L max L_{\text{max}} L max    时,惩罚接近 − 1 -1 − 1  。这个规则希望模型在保证正确性的前提下,尽量避免生成过长的回答,但又不像硬截断那样引入剧烈的噪声。 
第三阶段:硬惩罚区(16 , 384 < ∣ y ∣ ≤ 20 , 480 16,384 < |y| \le 20,480 16 , 384 < ∣ y ∣ ≤ 20 , 480  )。任何超过 L max L_{\text{max}} L max    长度的回复,长度惩罚均为 − 1 -1 − 1  
 
该长度惩罚会直接添加到规则奖励中,最终的奖励函数为 R ( q , a , o i ) = R rule ( a , o i ) + R length ( o i ) R(q,a,o_{i}) = R_{\text{rule}}(a,o_{i}) + R_{\text{length}}(o_{i}) R ( q , a , o i  ) = R rule  ( a , o i  ) + R length  ( o i  )  。可以推测,当回复达到物理最大生成长度,即 ∣ y ∣ > 20 , 480 |y| >20,480 ∣ y ∣ > 20 , 480   时,会被截断。此时,不仅要受到规则奖励 − 1 -1 − 1  ,还会受到长度惩罚 − 1 -1 − 1 
CISPO: Clipped IS-weight Policy Optimization 
MiniMax-M1 技术报告中提出了 CISPO 算法,该算法主要解决 PPO/GRPO 中存在的 token clipping 问题。具体来说,一些与反思行为有关的 token (e.g., “However”, “Recheck”, “Wait”, “Aha”) 会充当推理路径中的分叉,但它们的概率通常在 base model 中很稀有。而在策略更新时,这些 token 会表现出较高的 r i , t ( θ ) r_{i,t}(\theta) r i , t  ( θ )  。因此,在第一次 on-policy 梯度更新后,这些 token 会被裁剪掉,阻止了后续的 off-policy 梯度更新。然而,这些低概率的 token 对于稳定策略熵很重要。
接下来,具体距离来分析这一问题。PPO/GRPO 目标函数中核心项如下:
min  ( r i , t ( θ ) A ^ i , t , c l i p ( r i , t ( θ ) , 1 − ϵ , 1 + ϵ ) A ^ i , t ) \min\Big(
r_{i,t}(\theta) \hat{A}_{i,t},
\mathrm{clip}\big(r_{i,t}(\theta),1-\epsilon,1+\epsilon\big)\hat{A}_{i,t}
\Big)
 min ( r i , t  ( θ ) A ^ i , t  , clip ( r i , t  ( θ ) , 1 − ϵ , 1 + ϵ ) A ^ i , t  ) 
第一次 on-policy 梯度更新时,由于 π θ = π θ o l d \pi_{\theta}=\pi_{\theta_{old}} π θ  = π θ o l d    ,则 r i , t ( θ ) = 1 r_{i,t}(\theta)=1 r i , t  ( θ ) = 1  ,故不会被裁剪。在此之后的第二次 off-policy 更新,假设 token 的 r i , t ( θ ) = 2 r_{i,t}(\theta)=2 r i , t  ( θ ) = 2  ,而 ϵ = 0.2 \epsilon=0.2 ϵ = 0.2  ,则最终会走 1 + ϵ = 1.2 1+\epsilon=1.2 1 + ϵ = 1.2   这个常数分支,c l i p \mathrm{clip} clip   函数反向传播给 r i , t ( θ ) r_{i,t}(\theta) r i , t  ( θ )   的梯度则为 0 0 0  。因此,当一个 token 的更新因为 r i , t ( θ ) r_{i,t}(\theta) r i , t  ( θ )   过大而被裁剪时,从该 token 流向 θ \theta θ   的梯度则为 0 0 0  。这也是为什么 DAPO 采取了 Clip-Higher 的操作。那么当 r i , t ( θ ) r_{i,t}(\theta) r i , t  ( θ )   较小时,不妨设 r i , t ( θ ) = 0.5 r_{i,t}(\theta)=0.5 r i , t  ( θ ) = 0.5  。此时,并不会走到 1 − ϵ = 0.8 1-\epsilon=0.8 1 − ϵ = 0.8   这个常数分支,反向传播给 θ \theta θ   的梯度信号依然存在。这也是为什么 DAPO 并不调节 ϵ low \epsilon_{\text{low}} ϵ low   ,仅扩大上界 ϵ high \epsilon_{\text{high}} ϵ high   。
为了解决这一问题,CISPO 不对 token 更新本身进行裁剪,而是直接裁剪 IS weight (a.k.a., policy ratio) r i , t ( θ ) r_{i,t}(\theta) r i , t  ( θ )  ,从而保证所有 token,无论其 r i , t ( θ ) r_{i,t}(\theta) r i , t  ( θ )   多大,梯度信号都会存在,用于策略参数更新。首先,回顾 vanilla REINFORCE 的 offline 目标函数:
J ( θ ) = E ( q , a ) ∼ p Q , o ∼ π θ o l d ( ⋅ ∣ q ) [ 1 ∣ o i ∣ ∑ t = 1 ∣ o i ∣ s g ( r i , t ( θ ) ) A ^ i , t log  π θ ( o i , t ∣ q , o i , < t ) ] J(\theta) = \mathbb{E}_{(q,a) \sim p_{\mathcal{Q}},o \sim \pi_{\theta_{old}}(\cdot \mid q)}\Bigg[ \frac{1}{|o_{i}|}\sum_{t=1}^{|o_{i}|} \mathrm{sg}(r_{i,t}(\theta)) \hat{A}_{i,t} \log \pi_{\theta}(o_{i,t} \mid q,o_{i,<t}) \Bigg]
 J ( θ ) = E ( q , a ) ∼ p Q  , o ∼ π θ o l d   ( ⋅ ∣ q )  [ ∣ o i  ∣ 1  t = 1 ∑ ∣ o i  ∣  sg ( r i , t  ( θ )) A ^ i , t  log  π θ  ( o i , t  ∣ q , o i , < t  ) ] 
其中,s g ( ⋅ ) \mathrm{sg}(\cdot) sg ( ⋅ )   表示 stop-gradient。这是因为在标准策略梯度算法中,参与求导的只有 log  π θ \log \pi_{\theta} log  π θ   ,而 policy ratio 在当前步只是作为常量缩放因子,用于修正分布差异,其自身并不参与梯度计算。类似不参与梯度计算的还有优势 A ^ i , t \hat{A}_{i,t} A ^ i , t   。此外,上式中的长度归一化项 1 / ∣ o i ∣ 1/|o_{i}| 1/∣ o i  ∣   并不是标准的策略梯度算法,具体分析见 Dr. GRPO。
接下来,基于 GRPO,给出 CISPO 算法的目标函数:
J ( θ ) = E ( q , a ) ∼ p Q , { o i } i = 1 G ∼ π θ o l d ( ⋅ ∣ q ) [ 1 ∑ i = 1 G ∣ o i ∣ ∑ i = 1 G ∑ t = 1 ∣ o i ∣ s g ( r ^ i , t ( θ ) ) A ^ i , t log  π θ ( o i , t ∣ q , o i , < t ) ] J(\theta) = \mathbb{E}_{(q,a) \sim p_{\mathcal{Q}},\{o_{i}\}_{i=1}^{G} \sim \pi_{\theta_{old}}(\cdot \mid q)}\Bigg[ {\color{red}\frac{1}{\sum_{i=1}^{G}|o_{i}|}} \sum_{i=1}^{G} \sum_{t=1}^{|o_{i}|} \mathrm{sg}({\color{red}\hat{r}_{i,t}(\theta)}) \hat{A}_{i,t} \log \pi_{\theta}(o_{i,t} \mid q,o_{i,<t}) \Bigg]
 J ( θ ) = E ( q , a ) ∼ p Q  , { o i  } i = 1 G  ∼ π θ o l d   ( ⋅ ∣ q )  [ ∑ i = 1 G  ∣ o i  ∣ 1  i = 1 ∑ G  t = 1 ∑ ∣ o i  ∣  sg ( r ^ i , t  ( θ ) ) A ^ i , t  log  π θ  ( o i , t  ∣ q , o i , < t  ) ] 
其中,优势近似 A ^ i , t \hat{A}_{i,t} A ^ i , t    与 GRPO 保持一致,r ^ i , t ( θ ) \hat{r}_{i,t}(\theta) r ^ i , t  ( θ )   是 clipped IS weight:
r ^ i , t ( θ ) = c l i p ( r i , t ( θ ) , 1 − ϵ low IS , 1 − ϵ high IS ) \hat{r}_{i,t}(\theta) = \mathrm{clip}(r_{i,t}(\theta),1-\epsilon_{\text{low}}^{\text{IS}},1-\epsilon_{\text{high}}^{\text{IS}})
 r ^ i , t  ( θ ) = clip ( r i , t  ( θ ) , 1 − ϵ low IS  , 1 − ϵ high IS  ) 
在实验中,不设置 IS weight 的下限,即将 ϵ low IS \epsilon_{\text{low}}^{\text{IS}} ϵ low IS    设置较大值,主要调节 ϵ high IS \epsilon_{\text{high}}^{\text{IS}} ϵ high IS   。
此外,CISPO 也利用了 DAPO 的 dynamic sampling 与 length penalty 技术,同时移除了 KL 惩罚。
最后,通过在目标函数中引入一个 token-wise mask M i , t M_{i,t} M i , t    来统一 CISPO/PPO/GRPO:
J ( θ ) = E ( q , a ) ∼ p Q , { o i } i = 1 G ∼ π θ o l d ( ⋅ ∣ q ) [ 1 ∑ i = 1 G ∣ o i ∣ ∑ i = 1 G ∑ t = 1 ∣ o i ∣ s g ( r ^ i , t ( θ ) ) A ^ i , t log  π θ ( o i , t ∣ q , o i , < t ) M i , t ] J(\theta) = \mathbb{E}_{(q,a) \sim p_{\mathcal{Q}},\{o_{i}\}_{i=1}^{G} \sim \pi_{\theta_{old}}(\cdot \mid q)}\Bigg[ \frac{1}{\sum_{i=1}^{G}|o_{i}|} \sum_{i=1}^{G} \sum_{t=1}^{|o_{i}|} \mathrm{sg}(\hat{r}_{i,t}(\theta)) \hat{A}_{i,t} \log \pi_{\theta}(o_{i,t} \mid q,o_{i,<t}) {\color{red}M_{i,t}} \Bigg]
 J ( θ ) = E ( q , a ) ∼ p Q  , { o i  } i = 1 G  ∼ π θ o l d   ( ⋅ ∣ q )  [ ∑ i = 1 G  ∣ o i  ∣ 1  i = 1 ∑ G  t = 1 ∑ ∣ o i  ∣  sg ( r ^ i , t  ( θ )) A ^ i , t  log  π θ  ( o i , t  ∣ q , o i , < t  ) M i , t  ] 
其中,mask M i , t M_{i,t} M i , t    相当于 PPO 的 trust region,定义如下:
M i , t = { 0 , A ^ i , t > 0  and  r i , t ( θ ) > 1 + ϵ high 0 , A ^ i , t < 0  and  r i , t ( θ ) < 1 + ϵ low 1 , otherwise M_{i,t} = \begin{cases}
0, & \hat{A}_{i,t} > 0 \text{ and } r_{i,t}(\theta) > 1 + \epsilon_{\text{high}} \\
0, & \hat{A}_{i,t} < 0 \text{ and } r_{i,t}(\theta) < 1 + \epsilon_{\text{low}} \\
1, & \text{otherwise}
\end{cases}
 M i , t  = ⎩ ⎨ ⎧  0 , 0 , 1 ,  A ^ i , t  > 0  and  r i , t  ( θ ) > 1 + ϵ high  A ^ i , t  < 0  and  r i , t  ( θ ) < 1 + ϵ low  otherwise  
观察上式可知,M i , t = 0 M_{i,t} = 0 M i , t  = 0   的两组条件,恰好对应了 PPO/GRPO 中的核心项:
min  ( r i , t ( θ ) A ^ i , t , c l i p ( r i , t ( θ ) , 1 − ϵ , 1 + ϵ ) A ^ i , t ) \min\Big(
r_{i,t}(\theta) \hat{A}_{i,t},
\mathrm{clip}\big(r_{i,t}(\theta),1-\epsilon,1+\epsilon\big)\hat{A}_{i,t}
\Big)
 min ( r i , t  ( θ ) A ^ i , t  , clip ( r i , t  ( θ ) , 1 − ϵ , 1 + ϵ ) A ^ i , t  ) 
而当 M i , t = 1 M_{i,t} = 1 M i , t  = 1   时,恰好是 CISPO 的标准形式。
总结 PPO/GRPO 与 CISPO token-level 梯度信号控制的思路对比:前者可以概括为,当某个 token r i , t ( θ ) r_{i,t}(\theta) r i , t  ( θ )   过大时,直接进行硬截断,不会对策略梯度有贡献;而后者通过裁剪 r i , t ( θ ) r_{i,t}(\theta) r i , t  ( θ )   到一个预设的范围,所有 token 都会对策略梯度有贡献。
Reference 
对于本文的符号使用,主要参考 Dr. GRPO 的论文,后面会列出。
对于 RL4LLM 进展梳理的文章已经有很多,笔者写作时都有参考:
对于各个算法的论文原文及论文解读,列举如下:
PPO
 
RLOO
 
ReMax
 
GRPO
 
Dr. GRPO
 
REINFORCE++
 
DAPO
 
CISPO