这篇笔记整理训练大模型做推理时常用的强化学习目标,顺带记录一下 token 级与序列级重要性权重在方差上的差别 —— 这正是我们在 TGPO 里关心的问题之一。
策略梯度
记策略为 πθ(a∣s),轨迹 τ=(s0,a0,…) 的回报为 R(τ)。目标是最大化期望回报:
J(θ)=Eτ∼πθ[R(τ)].
利用对数导数技巧 ∇θπθ=πθ∇θlogπθ,可得经典的策略梯度:
∇θJ(θ)=Eτ∼πθ[t∑∇θlogπθ(at∣st)At],
其中 At 是优势函数(advantage),用于降低方差。
重要性采样
在线采样代价很高,常希望用旧策略 πθold 采得的数据来更新当前策略。引入重要性权重
rt(θ)=πθold(at∣st)πθ(at∣st),
则目标改写为 Eπθold[rt(θ)At]。当两个分布差异过大时,rt 的方差会迅速膨胀,这是离线/半离线 RL 不稳定的主要来源。
PPO 裁剪目标
PPO 通过裁剪把更新限制在信任域内:
Lclip(θ)=Et[min(rtAt,clip(rt,1−ϵ,1+ϵ)At)].
直觉上,当 At>0(动作比平均好)时,更新被限制在 rt≤1+ϵ;当 At<0 时,限制在 rt≥1−ϵ。这样避免一步走得太远。
token 级 vs 序列级权重
对一条长度为 T 的回答,token 级重要性权重是逐 token 的 rt;而序列级权重是整条序列的乘积
r1:T(θ)=t=1∏Trt(θ)=exp(t=1∑Tlogrt(θ)).
- token 级:信用分配更细,但高方差 —— 单个 token 的比值波动会直接进入梯度。
- 序列级:更稳定,但把整条序列视为一个整体,credit assignment 偏粗。
一个折中的思路是对 logrt 做“门控”或锚定,抑制少数异常 token 的贡献,同时保留序列级的稳定性。写成带权和:
r~(θ)=exp(t=1∑Tgtlogrt(θ)),gt∈[0,1],
其中 gt 是信息门控系数。gt≡1 退化为序列级权重,gt 为示性函数时近似 token 级。这类设计在 RLVR 中能同时兼顾稳定性与效率。
小结
| 方案 |
信用分配 |
方差 |
稳定性 |
| token 级 |
细 |
高 |
低 |
| 序列级 |
粗 |
低 |
高 |
| 门控折中 |
可调 |
中 |
中-高 |
更完整的分析见我们的工作 TGPO (ICML 2026)。
import torch
def clipped_pg_loss(logp, logp_old, adv, eps=0.2):
# logp, logp_old, adv: [batch, seq_len]
ratio = torch.exp(logp - logp_old)
unclipped = ratio * adv
clipped = torch.clamp(ratio, 1 - eps, 1 + eps) * adv
return -torch.min(unclipped, clipped).mean()
下次聊聊如何把“门控系数” gt 和奖励的稠密化结合起来。