从普通 RL 到 GRPO#
这几个目标可以放在同一条主线上看:
普通 RL:最大化回报
最大熵 RL:最大化回报 + 策略熵
PPO:用旧策略采样数据,稳定地优化新策略
GRPO:PPO-style clip + 组内相对优势
直觉上,普通 RL 只问“这条轨迹拿了多少奖励”。最大熵 RL 在奖励之外再问“策略是不是还保留探索”。PPO 开始关心“新策略不要一次偏离旧策略太远”。GRPO 则把 PPO 里的 critic advantage 换成同一 prompt 下多个回答的组内相对分数。
1. 普通 RL:最大化轨迹回报#
一条轨迹记为:
τ=(s0,a0,r1,s1,a1,r2,…)
在策略 πθ 下,这条轨迹的概率是:
pθ(τ)=ρ0(s0)t=0∏T−1πθ(at∣st)P(st+1,rt+1∣st,at)
如果轨迹回报定义为:
R(τ)=t=0∑T−1γtrt+1
普通 RL 的目标就是:
JRL(θ)=Eτ∼pθ[t=0∑T−1γtrt+1]
也可以展开成求和:
JRL(θ)=τ∑pθ(τ)R(τ)
这个目标只关心一件事:
这条轨迹拿到多少环境奖励
2. 最大熵 RL:回报之外加上策略随机性#
最大熵 RL 的目标可以写成:
JMaxEnt(θ)=Eτ∼pθ[t=0∑T−1γt(rt+1+αH(πθ(⋅∣st)))]
其中:
H(πθ(⋅∣st))=−a∑πθ(a∣st)logπθ(a∣st)
连续动作时,把求和换成积分:
H(πθ(⋅∣st))=−∫πθ(a∣st)logπθ(a∣st)da
α>0 控制熵奖励强度。α 越大,策略越不愿意过早坍缩到单一动作。
2.1 和普通 RL 的关系#
普通目标是:
JRL(θ)=Eτ∼pθ[t∑γtrt+1]
最大熵目标是:
JMaxEnt(θ)=Eτ∼pθ[t∑γt(rt+1+αH(πθ(⋅∣st)))]
所以最大熵 RL 等价于把每一步奖励改成 soft reward:
rt+1soft=rt+1+αH(πθ(⋅∣st))
它鼓励两件事:
- 拿到高回报。
- 保持高熵,也就是不要太早确定只选一个动作。
2.2 采样动作形式#
因为:
H(πθ(⋅∣st))=Eat∼πθ(⋅∣st)[−logπθ(at∣st)]
所以最大熵目标也可以写成:
JMaxEnt(θ)=Eτ∼pθ[t∑γt(rt+1−αlogπθ(at∣st))]
也就是说,αH(πθ(⋅∣st)) 对应采样动作形式里的 −αlogπθ(at∣st)。
3. Policy Gradient:怎样优化这个期望#
普通 RL 目标是:
JRL(θ)=Eτ∼pθ[R(τ)]
用 log-derivative trick 可以得到:
∇θJ(θ)=Eτ∼pθ[R(τ)∇θlogpθ(τ)]
而环境转移概率通常不依赖 θ,所以:
∇θlogpθ(τ)=t∑∇θlogπθ(at∣st)
于是:
∇θJ(θ)=Eτ∼pθ[R(τ)t∑∇θlogπθ(at∣st)]
更常见的是 return-to-go:
Gt=k=t∑T−1γk−trk+1
对应梯度:
∇θJ(θ)=Eτ∼pθ[t∑Gt∇θlogπθ(at∣st)]
为了降低方差,通常再引入 baseline,得到 advantage:
At=Gt−V(st)
于是:
∇θJ(θ)=Eτ∼pθ[t∑At∇θlogπθ(at∣st)]
这一步很关键:后面的 PPO 和 GRPO,本质上都在围绕“怎么构造一个好用、稳定、低成本的 advantage”展开。
4. PPO:旧策略采样,新策略稳定更新#
PPO 的核心设置是:数据来自旧策略
πθold
但我们要更新的是新策略
πθ
因此需要引入概率比:
ρt(θ)=πθold(at∣st)πθ(at∣st)
这里用 ρt 表示 ratio,避免和奖励 rt 混淆。
4.1 未裁剪 surrogate#
PPO 的未裁剪 policy-gradient surrogate 是:
LPG(θ)=Et∼πθold[ρt(θ)At]
写成轨迹形式:
LPG(θ)=Eτ∼pθold[t∑ρt(θ)At]
注意这里的期望不是对新策略采样,而是对旧策略采样得到的数据取平均。
4.2 PPO-Clip 目标#
PPO 实际常用 clipped objective:
LCLIP(θ)=Eτ∼pθold[t∑min(ρt(θ)A^t,clip(ρt(θ),1−ϵ,1+ϵ)A^t)]
其中,clip(ρ,1−ϵ,1+ϵ) 表示把概率比限制在区间 [1−ϵ,1+ϵ] 里。
直觉如下:
| 情况 | 想做什么 | PPO 的限制 |
|---|
| A^t>0 | 这个动作比预期好,提高它的概率 | 不允许 ρt(θ) 变得太大 |
| A^t<0 | 这个动作比预期差,降低它的概率 | 不允许 ρt(θ) 变得太小 |
所以 PPO 的作用是:
让策略变好,但每次不要变太猛
4.3 PPO 的完整训练损失#
实际 PPO 常常还包括 value loss 和 entropy bonus:
LPPO(θ,ϕ)=Eτ∼pθold[t∑(LtCLIP(θ)−c1(Vϕ(st)−Gt)2+c2H(πθ(⋅∣st)))]
其中,Vϕ(st) 是 critic。Advantage 通常由 critic 给出:
A^t=Gt−Vϕ(st)
也可以用 GAE:
A^t=l=0∑∞(γλ)lδt+l
δt=rt+1+γVϕ(st+1)−Vϕ(st)
所以 PPO 的关键成本也在这里:
需要 advantage,通常需要 value function / critic
5. GRPO:用组内相对优势替代 critic#
GRPO 可以理解成 PPO 风格的目标,但 advantage 不再来自 critic:
A^t=Gt−V(st)
而是来自同一个 prompt 下多个回答的相对分数。
设 prompt 是 q。从旧策略采样 G 个回答:
o1,o2,…,oG∼πθold(⋅∣q)
每个回答得到一个 reward:
Ri=R(q,oi)
计算组内均值:
Rˉ=G1j=1∑GRj
组内标准差:
sR=G1j=1∑G(Rj−Rˉ)2
然后定义 group-relative advantage:
A^i=sR+εRi−Rˉ
通常同一个回答 oi 的所有 token 共享同一个优势:
A^i,t=A^i
这就是 GRPO 的核心替换:
critic baseline⟹group mean baseline
5.1 GRPO 的 token 概率比#
对第 i 个回答的第 t 个 token:
oi,t
它的上下文是:
(q,oi,<t)
概率比为:
ρi,t(θ)=πθold(oi,t∣q,oi,<t)πθ(oi,t∣q,oi,<t)
和 PPO 一样,ratio 衡量“新策略相对旧策略,把这个 token 的概率改了多少”。
5.2 GRPO-Clip 目标#
GRPO 的典型目标可以写成:
LGRPO(θ)=Eq∼D,{oi}i=1G∼πθold(⋅∣q)[G1i=1∑G∣oi∣1t=1∑∣oi∣(min(ρi,t(θ)A^i,clip(ρi,t(θ),1−ϵ,1+ϵ)A^i)−βDKLi,t)]
其中,DKLi,t 通常表示当前策略与 reference policy 在该 token 上下文处的 KL 惩罚。例如:
DKLi,t=DKL(πθ(⋅∣q,oi,<t)∥πref(⋅∣q,oi,<t))
β>0 控制当前策略不要偏离 reference model 太远。
6. PPO 和 GRPO 的核心区别#
| 项目 | PPO | GRPO |
|---|
| 数据来源 | 旧策略 rollout | 同一 prompt 下旧策略采样一组回答 |
| 概率比 | ρt=πθold(at∣st)πθ(at∣st) | ρi,t=πθold(oi,t∣q,oi,<t)πθ(oi,t∣q,oi,<t) |
| advantage | A^t=Gt−Vϕ(st) 或 GAE | A^i=sR+εRi−Rˉ |
| critic | 通常需要 | 通常不需要 |
| baseline | value function baseline | group mean baseline |
| 主要场景 | 通用 RL、RLHF | LLM reasoning、outcome reward、多回答组内比较 |
| 目标形式 | clipped policy surrogate | group-relative clipped surrogate |
一句话:
PPO 用 critic 估计“这个动作比状态平均水平好多少”;GRPO 用同一 prompt 的一组回答估计“这个回答比组内平均好多少”。
7. 把几个期望形式单独列出来#
7.1 普通 RL#
JRL(θ)=Eτ∼pθ[R(τ)]
如果 R(τ)=∑tγtrt+1,则:
JRL(θ)=Eτ∼pθ[t∑γtrt+1]
7.2 最大熵 RL#
JMaxEnt(θ)=Eτ∼pθ[t∑γt(rt+1+αH(πθ(⋅∣st)))]
等价的采样动作形式是:
JMaxEnt(θ)=Eτ∼pθ[t∑γt(rt+1−αlogπθ(at∣st))]
7.3 REINFORCE / Policy Gradient#
∇θJ(θ)=Eτ∼pθ[t∑Gt∇θlogπθ(at∣st)]
Advantage 形式是:
∇θJ(θ)=Eτ∼pθ[t∑At∇θlogπθ(at∣st)]
7.4 PPO#
LPPO(θ)=Eτ∼pθold[t∑min(ρt(θ)A^t,clip(ρt(θ),1−ϵ,1+ϵ)A^t)]
其中:
ρt(θ)=πθold(at∣st)πθ(at∣st)
A^t=Gt−Vϕ(st)
或者用 GAE。
7.5 GRPO#
LGRPO(θ)=Eq∼D,{oi}i=1G∼πθold(⋅∣q)[G1i=1∑G∣oi∣1t=1∑∣oi∣(min(ρi,t(θ)A^i,clip(ρi,t(θ),1−ϵ,1+ϵ)A^i)−βDKLi,t)]
其中:
ρi,t(θ)=πθold(oi,t∣q,oi,<t)πθ(oi,t∣q,oi,<t)
A^i=G1∑j=1G(R(q,oj)−Rˉ)2+εR(q,oi)−G1∑j=1GR(q,oj)
8. 最核心总结#
普通 RL:
最大化环境回报
JRL=Eτ∼pθ[t∑γtrt]
最大熵 RL:
最大化环境回报 + 策略随机性
JMaxEnt=Eτ∼pθ[t∑γt(rt+αH(π(⋅∣st)))]
PPO:
用旧策略数据和概率比,稳定更新新策略
LPPO=Eτ∼pθold[clipped ratio×advantage]
GRPO:
用一组回答的相对奖励替代 critic advantage
LGRPO=Eq,{oi}[clipped token ratio×group-relative advantage−KL penalty]
所以这条主线可以压缩成一句话:
RL 从“最大化回报”出发;最大熵 RL 加入探索;PPO 用旧策略数据、ratio 和 clip 稳定更新;GRPO 保留 PPO 的稳定更新形式,但用同题多回答的组内相对奖励替代 critic advantage。
附录 A:Policy Gradient 三类 trick 的完整推导#
上面的 Policy Gradient 推导里,其实用了三类技巧:
log-gradient trick / likelihood-ratio trick
trajectory probability 的 log 展开
return-to-go / baseline trick 降低方差
下面从最原始目标一步一步推。
A.0 先定义轨迹和目标#
一条轨迹记为:
τ=(s0,a0,r1,s1,a1,r2,…,sT)
轨迹概率是:
pθ(τ)=ρ0(s0)t=0∏T−1πθ(at∣st)P(st+1,rt+1∣st,at)
其中,ρ0(s0) 是初始状态分布,πθ(at∣st) 是依赖参数 θ 的策略,P(st+1,rt+1∣st,at) 是环境动力学,通常不依赖 θ。
轨迹回报是:
R(τ)=t=0∑T−1γtrt+1
所以目标函数是:
J(θ)=Eτ∼pθ[R(τ)]
写成求和:
J(θ)=τ∑pθ(τ)R(τ)
A.1 对目标函数求导#
对 θ 求导:
∇θJ(θ)=∇θτ∑pθ(τ)R(τ)
如果 R(τ) 不显式依赖 θ,则:
∇θJ(θ)=τ∑∇θpθ(τ)R(τ)
这里的假设是:
R(τ) 不直接依赖 θ
如果回报本身写成 Rθ(τ),则还会多出一项:
Eτ∼pθ[∇θRθ(τ)]
A.2 第一次 trick:log-gradient trick#
现在的问题是 ∇θpθ(τ) 不好采样,因为它本身不是概率分布。
用恒等式:
∇θlogpθ(τ)=pθ(τ)∇θpθ(τ)
两边乘以 pθ(τ):
∇θpθ(τ)=pθ(τ)∇θlogpθ(τ)
这一步就是 log-gradient trick,也叫 likelihood-ratio trick。
代回目标梯度:
∇θJ(θ)=τ∑pθ(τ)R(τ)∇θlogpθ(τ)
根据期望定义:
τ∑pθ(τ)f(τ)=Eτ∼pθ[f(τ)]
所以:
∇θJ(θ)=Eτ∼pθ[R(τ)∇θlogpθ(τ)]
这一行的意义是:把“对概率求导”变成“从当前轨迹分布采样,再乘 log 概率梯度”。
A.3 展开轨迹 log 概率#
轨迹概率是:
pθ(τ)=ρ0(s0)t=0∏T−1πθ(at∣st)P(st+1,rt+1∣st,at)
取 log:
logpθ(τ)=logρ0(s0)+t=0∑T−1logπθ(at∣st)+t=0∑T−1logP(st+1,rt+1∣st,at)
对 θ 求导:
∇θlogpθ(τ)=∇θlogρ0(s0)+t∑∇θlogπθ(at∣st)+t∑∇θlogP(st+1,rt+1∣st,at)
因为初始分布不依赖 θ:
∇θlogρ0(s0)=0
环境动力学也不依赖 θ:
∇θlogP(st+1,rt+1∣st,at)=0
所以只剩策略项:
∇θlogpθ(τ)=t=0∑T−1∇θlogπθ(at∣st)
这一步用到两个事实:
- log 把乘积变成求和。
- 只有策略 πθ 依赖参数 θ。
代回去:
∇θJ(θ)=Eτ∼pθ[R(τ)t=0∑T−1∇θlogπθ(at∣st)]
也可以写成:
∇θJ(θ)=Eτ∼pθ[t=0∑T−1R(τ)∇θlogπθ(at∣st)]
这就是最原始的 REINFORCE 轨迹形式。
A.4 为什么可以换成 return-to-go#
现在的式子是:
∇θJ(θ)=E[t∑R(τ)∇θlogπθ(at∣st)]
其中:
R(τ)=r1+γr2+γ2r3+⋯+γT−1rT
对第 t 项来说,动作 at 不可能影响 t 之前已经发生的奖励。所以可以把 R(τ) 拆成过去部分和未来部分:
R(τ)=过去奖励k=0∑t−1γkrk+1+未来奖励k=t∑T−1γkrk+1
记第 t 个 score 为:
gt=∇θlogπθ(at∣st)
过去奖励对当前动作 at 来说已经固定,因此:
E[gt⋅过去奖励]=0
原因是,条件在历史 ht=(s0,a0,…,st) 上:
Eat∼πθ(⋅∣st)[∇θlogπθ(at∣st)]=a∑πθ(a∣st)∇θlogπθ(a∣st)
又因为:
πθ(a∣st)∇θlogπθ(a∣st)=∇θπθ(a∣st)
所以:
a∑∇θπθ(a∣st)=∇θa∑πθ(a∣st)=∇θ1=0
于是过去奖励乘上 score 的期望为 0,只保留未来奖励即可:
∇θJ(θ)=E[t∑(k=t∑T−1γkrk+1)∇θlogπθ(at∣st)]
定义 return-to-go:
Gt=k=t∑T−1γk−trk+1
也就是:
Gt=rt+1+γrt+2+γ2rt+3+⋯
注意:
k=t∑T−1γkrk+1=γtk=t∑T−1γk−trk+1=γtGt
所以,从严格的 discounted trajectory return 推导,会得到:
∇θJ(θ)=E[t∑γtGt∇θlogπθ(at∣st)]
很多教材或实现会写成:
∇θJ(θ)=E[t∑Gt∇θlogπθ(at∣st)]
这是因为它们采用不同的目标定义,把 γt 吸收到状态访问分布里,或者在实现里省略这个外层折扣。最核心的结构是:
第 t 步的动作,只用它之后的回报 Gt 来归因。
这一步通常叫 return-to-go trick,也叫 causality trick。它的作用是降低方差。
A.5 为什么可以再换成 advantage#
现在有:
∇θJ(θ)=E[t∑Gt∇θlogπθ(at∣st)]
再引入一个只依赖状态的 baseline:
b(st)
考虑:
E[b(st)∇θlogπθ(at∣st)]
对 st 条件化:
Eat∼πθ[b(st)∇θlogπθ(at∣st)∣st]
因为 b(st) 不依赖 at,可以提出:
b(st)a∑πθ(a∣st)∇θlogπθ(a∣st)
还是用:
πθ(a∣st)∇θlogπθ(a∣st)=∇θπθ(a∣st)
得到:
b(st)a∑∇θπθ(a∣st)=b(st)∇θa∑πθ(a∣st)=b(st)∇θ1=0
所以:
E[b(st)∇θlogπθ(at∣st)]=0
这意味着可以从 Gt 里减去任意只依赖状态的 baseline,而不改变梯度期望:
E[Gt∇θlogπθ]=E[(Gt−b(st))∇θlogπθ]
最常用的 baseline 是:
b(st)=V(st)
于是定义 advantage:
At=Gt−V(st)
得到:
∇θJ(θ)=Eτ∼pθ[t∑At∇θlogπθ(at∣st)]
这一步叫 baseline trick 或 advantage trick。它不改变期望梯度,但可以降低方差。
A.6 这些式子的直觉#
原始 REINFORCE:
R(τ)t∑∇θlogπθ(at∣st)
意思是:
整条轨迹回报高,就提高整条轨迹中所有动作的概率。
return-to-go:
Gt∇θlogπθ(at∣st)
意思是:
第 t 步动作只为它之后的结果负责,不为之前已经发生的奖励负责。
advantage:
At∇θlogπθ(at∣st)
意思是:
如果这个动作带来的结果比当前状态的平均水平好,就提高它概率;如果比平均水平差,就降低它概率。
A.7 最终完整链条#
第一步,定义目标:
J(θ)=Eτ∼pθ[R(τ)]
第二步,展开期望:
J(θ)=τ∑pθ(τ)R(τ)
第三步,求导:
∇θJ(θ)=τ∑∇θpθ(τ)R(τ)
第四步,使用 log-gradient trick:
∇θpθ(τ)=pθ(τ)∇θlogpθ(τ)
得到:
∇θJ(θ)=Eτ∼pθ[R(τ)∇θlogpθ(τ)]
第五步,展开轨迹 log 概率:
∇θlogpθ(τ)=t∑∇θlogπθ(at∣st)
得到:
∇θJ(θ)=E[R(τ)t∑∇θlogπθ(at∣st)]
第六步,使用 return-to-go / causality trick:
R(τ)⇝Gt
得到:
∇θJ(θ)=E[t∑Gt∇θlogπθ(at∣st)]
第七步,使用 baseline / advantage trick:
Gt⇝Gt−V(st)=At
得到:
∇θJ(θ)=Eτ∼pθ[t∑At∇θlogπθ(at∣st)]
最核心对应关系是:
| 技巧 | 作用 |
|---|
| log-gradient trick | 把 ∇p 变成 p∇logp |
| trajectory log 展开 | 把轨迹概率里的策略连乘变成 log-prob 求和 |
| return-to-go trick | 只让动作承担未来奖励 |
| baseline / advantage trick | 减去状态平均水平,降低方差 |