为什么TRPO在LLM里不能用?——FiberPO的起点

我们在《TRPO深度拆解:为什么做后训练应该读懂TRPO | 长琴[1]》中详细挖了一下 TRPO,开头说到不得不上就是因为看到 FiberPO 了——非常 nice 的文章,又是个人非常喜欢的类型。FiberPO 比较长,本文是系列第一篇,主要介绍 vanishing theorem。

首先,回顾 TRPO[2] 公式 (26)(这里直接借用 TRPO blog 的式 (26) 作为本文的起点,重新编号为 (1)):

maxθsρθold(s)aπθ(as)Aθold(s,a)subject toDˉKLρθold(θold,θ)δ.(1)\begin{aligned} \max_{\theta} \quad & \sum_{s} \rho_{\theta_{\text{old}}}(s) \sum_{a} \pi_{\theta}(a \mid s)\, A_{\theta_{\text{old}}}(s,a) \\ \text{subject to} \quad & \bar{D}_{\mathrm{KL}}^{\rho_{\theta_{\text{old}}}} (\theta_{\text{old}}, \theta) \le \delta . \end{aligned} \tag{1}

我们知道,状态分布 ρπ(s)\rho_\pi(s) 本身就是 γ-discounted 的(TRPO[2] blog 的式 (5)):

ρπ(s)=t=0γtP(st=sπ)(2)\rho_\pi(s) = \sum_{t=0}^{\infty} \gamma^t P(s_t = s | \pi) \tag{2}

优势函数 Aπ(s,a)=Qπ(s,a)Vπ(s)A_\pi(s,a) = Q_\pi(s,a) - V_\pi(s),而 QπQ_\piVπV_\pi 的定义里都有 lγlrt+l\sum_l \gamma^l r_{t+l}

按轨迹×时间步展开

我们直接按“轨迹 × 时间步”展开,γ 显式写出来作为每个 token 的时间权重,这一步包含两个动作:

  • 先用重要性采样把按新策略 πθ\pi_\theta 求和翻译成按旧策略 πθold\pi_{\theta_\text{old}} 采样:引入比率 rs,a:=πθ(as)/πθold(as)r_{s,a} := \pi_\theta(a|s)/\pi_{\theta_\text{old}}(a|s)
  • 再把 ρ 还原为它的定义并交换求和顺序

重要性采样

第一步,重要性采样:

aπθ(as)Aθold(s,a)=Eaπθold(s)[rs,aAθold(s,a)](3)\sum_{a} \pi_{\theta}(a|s) A_{\theta_{\text{old}}}(s, a) = \mathbb{E}_{a \sim \pi_{\theta_{\text{old}}}(\cdot|s)} \left[ r_{s,a} A_{\theta_{\text{old}}}(s, a) \right] \tag{3}

咦,这里怎么突然多了个 rs,ar_{s,a}?很多同学一开始都没注意到这个细节,一眼带过。我们看看,这里正常情况下应该是这样的:

aπθ(as)A(s,a)=Eaπθ(s)[A(s,a)](4)\sum_{a} \pi_{\theta}(a|s) A(s, a) = \mathbb{E}_{a \sim \pi_{\theta}(\cdot|s)} \left[ A(s, a) \right] \tag{4}

这是离散期望定义,但是注意,我们要优化 θ\theta,所以 πθ\pi_\theta 是个不停在变、还需要求梯度的东西。而环境里的真实样本只能采一次——你不可能每改一次 θ\theta 就重新采一批样本(那训练成本会爆炸)。

所以工程现实是:手上的样本全部是用某个固定的 πθold\pi_{\theta_\text{old}} 采出来的(一批 prompt 的 rollout),你要用这批老样本去估计如果换成 πθ\pi_\theta 会怎样。这就是重要性采样要解决的问题:怎么用从分布 qq 抽的样本,去估计另一个分布 pp 下的期望。

这里技巧很简单——给 \sum 里乘 1,而 1 写成 πθold(as)πθold(as)\frac{\pi_{\theta_\text{old}}(a|s)}{\pi_{\theta_\text{old}}(a|s)}

aπθ(as)A(s,a)=aπθ(as)πθold(as)πθold(as)A(s,a)=aπθold(as)现在用旧策略加权πθ(as)πθold(as)=:rs,a(修正系数)A(s,a)=Eaπθold(s)[rs,aA(s,a)](5)\begin{aligned} \sum_{a} \pi_{\theta}(a|s) A(s, a) = \sum_{a} \pi_{\theta}(a|s) \cdot \frac{\pi_{\theta_{\text{old}}}(a|s)}{\pi_{\theta_{\text{old}}}(a|s)} \cdot A(s, a) \\ = \sum_{a} \underbrace{\pi_{\theta_{\text{old}}}(a|s)}_{\text{现在用旧策略加权}} \cdot \underbrace{\frac{\pi_{\theta}(a|s)}{\pi_{\theta_{\text{old}}}(a|s)}}_{=: r_{s,a} \text{(修正系数)}} \cdot A(s, a) \\ = \mathbb{E}_{a \sim \pi_{\theta_{\text{old}}}(\cdot|s)} [r_{s,a} A(s, a)] \end{aligned} \tag{5}

整个变换就一个动作:把以新策略加权求和重新分组为以旧策略加权求和,但每一项乘一个修正系数 rr。直觉来看修正系数:

  • 如果 r>1r > 1:新策略更喜欢这个动作 → 旧样本低估了它,要放大
  • 如果 r<1r < 1:新策略更不喜欢这个动作 → 旧样本高估了它,要缩小

这其实也是 TRPO[2] 那里的第三个变换。值得提醒的是:这里并不是近似——这是严格的数学推导。近似的其实是其他两个地方:

  • 用有限样本估计期望:把 Eaπθold\mathbb{E}_{a\sim\pi_{\theta_\text{old}}} 替换成采样平均 1K\frac{1}{K}\sum——这是 Monte Carlo 近似,跟 IS 本身无关。
  • πθ\pi_\thetaπθold\pi_{\theta_\text{old}} 太远时,rr 会炸(比如 πθold\pi_{\theta_\text{old}} 给一个动作 0.001 的概率,πθ\pi_\theta 给 0.5,r=500r = 500),少数高 rr 样本主导 estimator,方差爆炸——这就是为什么 PPO/TRPO 都要限制 πθ\pi_\theta 不能离 πθold\pi_{\theta_\text{old}} 太远。

所以重要性采样和 trust region 是互为前提的:

  • 没有 IS,老样本用不了
  • 没有 trust region,IS 估计的方差会炸

理解了 IS 才能理解为什么 trust region 是必需的而不是可选的稳定性 trick。而真正把 IS + 信任域这套东西打成可工程化算法的就是咱们之前介绍的 TRPO[2],之前咱们说它是现代 RL 的基石不为过吧。

ρ 展开

接下来看第二步(ρ 展开 + 交换求和顺序),则:

sρθold(s)aπθ(as)Aθold(s,a)=s(tγtP(st=sθold))Eaπθold(s)[rs,aA(s,a)]=tγtsP(st=sθold)aπθold(as)rs,aA(s,a)=tγtsaP(st=s,at=aθold)rs,aA(s,a)=tγtEτPθold[rst,atA(st,at)]=EτPθold[t=0γtrst(τ),at(τ)A(st(τ),at(τ))](6)\begin{aligned} \sum_{s} \rho_{\theta_{\text{old}}}(s) \sum_{a} \pi_\theta(a \mid s) A_{\theta_{\text{old}}} (s, a) &= \sum_{s} \left( \sum_{t} \gamma^t P(s_t = s | \theta_{\text{old}}) \right) \mathbb{E}_{a \sim \pi_{\theta_{\text{old}}}(\cdot|s)} [r_{s,a} A(s, a)] \\ &= \sum_t \gamma^t \sum_s P(s_t = s | \theta_{\text{old}}) \sum_{a} \pi_{\theta_\text{old}}(a|s) r_{s,a} A(s, a) \\ &= \sum_t \gamma^t \sum_s \sum_a P(s_t = s, a_t=a | \theta_{\text{old}}) r_{s,a} A(s, a) \\ &= \sum_t \gamma^t \mathbb{E}_{\tau \sim \mathcal{P}_{\theta_{\text{old}}}} \left[ r_{s_t,a_t} A(s_t, a_t) \right] \\ &= \mathbb{E}_{\tau \sim \mathcal{P}_{\theta_{\text{old}}}} \left[ \sum_{t=0}^{\infty} \gamma^t r_{s_t(\tau), a_t(\tau)} A(s_t(\tau), a_t(\tau)) \right] \end{aligned} \tag{6}

注意:

第二行 t\sum_ts,as, a 无关,可以拎到最前面(即求和顺序交换)。

第三行是把“边缘概率 × 条件概率”合并成“联合概率”:

  • P(st=sθold)P(s_t = s|\theta_\text{old}) 是 在第 tt 步访问状态 ss 的边缘概率;
  • πθold(as)\pi_{\theta_\text{old}}(a|s) 是 在状态 ss 选动作 aa 的条件概率。

根据概率乘法定理:

P(st=sθold)πθold(as)=P(st=s,at=aθold)(7)P(s_t = s \mid \theta_{\text{old}}) \cdot \pi_{\theta_{\text{old}}}(a \mid s) = P(s_t = s, a_t = a \mid \theta_{\text{old}}) \tag{7}

简单来说,要在第 tt 步同时碰到 (s,a)(s,a),等于先在第 tt 步走到 ss(边缘概率 P(st=s)P(s_t=s)),再在 ss 上选 aa(条件概率 π(as)\pi(a|s))——根据链式法则:联合概率 = 边缘概率 × 条件概率。

第四行,saP(,)f(,)\sum_s \sum_a P(\cdot,\cdot) f(\cdot,\cdot) 就是关于 (st,at)(s_t, a_t) 的期望:

saP(st=s,at=a)f(s,a)=E[f(st,at)](8)\sum_{s} \sum_{a} P(s_t = s, a_t = a) f(s, a) = \mathbb{E}[f(s_t, a_t)] \tag{8}

这里 (st,at)(s_t, a_t) 的随机性完全来自轨迹 τ\tau 的随机性(一旦给定 τ=(s0,a0,s1,a1,)\tau = (s_0, a_0, s_1, a_1, \ldots)(st(τ),at(τ))(s_t(\tau), a_t(\tau)) 就完全确定了),所以这个期望可以重写成沿 τ\tau 取期望。

第五行,把 tγt\sum_t \gamma^t 放进期望——因为期望对求和是线性的,且 γt\gamma^t 是常数(不依赖 τ\tau),所以可以自由进出期望。

另外注意,轨迹分布是由策略 π\pi + 初始分布 ρ0\rho_0 + 状态转移概率 P(ss,a)\mathcal{P}(s'|s,a) 三者共同决定的,跟单独的策略 πθold\pi_{\theta_\text{old}} 不是同一个对象。

最终结果和 FiberPO 中定义的 TV-Based TRPO(式 (54) 右半部分的期望)一致:

EτPθold[t=0γtrst(τ),at(τ)(θθold)Ast(τ),at(τ)(θold)](9)\mathbb{E}_{\tau \sim \mathcal{P}_{\theta_{\text{old}}}} \left[ \sum_{t=0}^{\infty} \gamma^t r_{s_t(\tau), a_t(\tau)}(\theta \mid \theta_{\text{old}}) A_{s_t(\tau), a_t(\tau)}^{(\theta_{\text{old}})} \right] \tag{9}

左半部分,根据定义,应该是新策略相比旧策略的在旧策略基础上的累计优势J(θ)J(θold)J(\theta) - J(\theta_{\text{old}})。但 FiberPO 式 (54) 给出的是 J(1)(θθold)J(θold)J^{(1)}(\theta\mid\theta_\text{old}) - J(\theta_\text{old}),这种替换在新旧策略非常接近时是合理的,否则 J(θ)J(\theta) 无法估算。

为什么按轨迹展开

有同学可能好奇,TRPO 里是按 state 聚合的,但是这里选择按轨迹×时间步展开,这是为什么呢,为什么要做这个事呢?我们不能简单来一句:”因为 FiberPO 要讨论 γ,所以得把它放出来“——γ 外显只是结果,而不能作为原因。

这里的核心是因为 LLM RL 的数据天然是按轨迹组织的。一次 rollout = 一条 trajectory τ = 一串 (prompt, response) 的 tokens。FiberPO 后面的核心分解是: base = trajectory、fiber = trajectory 内 token,必须按 (τ, t) 索引才自然,按 (s, a) 状态索引根本没法做 base/fiber 分解。

另外,更深一层,LLM 里 ρ(s) 几乎是病态的。在 LLM RL 时,状态 s = prompt + 已生成的 prefix,每个 prefix 几乎都只在一条轨迹里出现一次(重复 prefix 的概率几乎为 0)。所以 ”折扣状态访问频率 ρπ(s)\rho_\pi(s)“ 这个 TRPO 里面很自然的对象,在 LLM 场景下基本是”每个 state 只被访问一次“的退化分布。与此对应的是 GAGPO[3],它的场景是 Agentic-RL,有大量重复的 action,PPO+GAE 就是有效的。

所以,按轨迹展开并不是数学上的变换炫技,而是 LLM 场景下唯一合理的写法。其结果就是,我们自然而然地看到了 γ ——这个 FiberPO 要专门讨论的对象。

LLM背景下的γ

接下来我们讨论,在 LLM 背景下的 γ,以及它为什么必须等于 1。

奖励折扣

LLM RL 场景下,reward 几乎都出现在最后(同时也是稀疏的),也就是 response 出来后才能拿到奖励。

  • RLHF:reward model 给整条 response 一个标量分数,中间 token 没有 reward
  • RLVR(R1 / GRPO 这类):verifier 检查最终答案是否正确,给一个 0/1,中间 token 没有 reward
  • Tool-use / agent:可能有少数几步带 reward,但绝大部分 step 仍是 0

所以 γt\gamma^t 对未来 reward 折扣在 LLM 里根本没什么可折扣的——整条 trajectory 上只有最后一个 step 有非零 reward。

长度偏差

设 reward 为 RR、序列长度为 TT,那么折扣回报是:

G=t=0T1γtrt=γT1R(10)G = \sum_{t=0}^{T-1} \gamma^t r_t = \gamma^{T-1} R \tag{10}

只有最后一项了。如果 γ=0.99\gamma=0.99T=500T=500,则 γT10.0066\gamma^{T-1} \approx 0.0066;如果 T=2000T=2000,则 γT11.9×109\gamma^{T-1} \approx 1.9\times 10^{-9},几乎为 0。其结果就是:

  • 长度歧视:一条 2000 token 的正确 response 拿到的 reward 比 500-token 的正确 response 低 6 个数量级
  • 模型会学到提前结束:宁可输出短而错的 answer,也不愿生成长的推理链
  • CoT / 推理任务失败:reasoning model 整体 reward 会被 γ 压制成几乎为 0(等于成功和失败奖励差不多),即便不为 0,方差也会非常大

有意思的是,γ<1\gamma < 1 在「收益端」考察长度偏差;而我们之前在《异曲同工之妙的DrGRPO——DAPO几乎同时出现的又一GRPO优化! | 长琴[4]》中看到的则是另一种在「梯度端」的长度偏差。当时的描述是这样的:

对积极的advantage,这种偏差导致较短的响应获得更大的梯度更新,从而使策略倾向于在正确答案中优先选择更简洁的表达。相反,对于消极的advantage,由于较长的响应具有更大的 |oi|,因此它们受到的惩罚较小,这导致策略在错误答案中倾向于选择较长的响应

紧跟着还有进一步解释:

乍一看好像无论短还是长的响应,它们的损失函数在 token 级别上都是均值化的,似乎不会有长度偏差。但其核心问题在于:

  • 由于归一化,导致每个响应(无论长短)的梯度贡献在整体 batch 里是一样的。

  • 但是 advantage计算是基于完整的响应,而不是 token。

这就意味着短的响应和长的响应的 advantage 数值大小是一样的,但是短的响应的每个 token 都能获得更强的梯度更新,因为它的 token 数量少,梯度不会被均摊太多。反过来,短的错误答案被惩罚更严重,梯度更新大,模型更快地减少生成这种错误答案的概率;长的错误答案因为梯度更新小,惩罚力度不够,导致模型不太容易抑制长的错误答案。最终导致正确答案更倾向于短的表达,而错误答案更倾向于长的表达

这个就是顺带一提,不影响主线。总的来说:

  • γ<1\gamma < 1 带来的长度偏差(指数级惩罚):是价值层面(Value/Reward)的偏差。因为 γT1\gamma^{T-1} 的存在,长文本的 Reward 被压低,模型会学到“宁可短而错,也不长而对”。
  • DrGRPO 讨论的长度偏差(均摊级稀释):是梯度层面(Optimization/Batch Normalization)的偏差。即便 γ=1\gamma=1 且大家 Reward 一样大(比如都是 +1),长文本因为 Token 数量多,每个 Token 分到的梯度被均摊了(1T\frac{1}{T}\sum \nabla)。这导致“正确的长文本学得慢,错误的短文本死得快”。

γ必须为1

γ\gamma 的经典解释是:「未来 reward 的不确定性折扣」——比如机器人下一秒可能摔了、游戏可能 over 了,所以,现在的 1 分比明年的 1 分值钱。但 LLM 一次 rollout 内:

  • 所有 token 是同一次决策的组成部分,没有”未来“这个概念
  • 没有真实物理时间,只有 generation order
  • response 不会中途消失——episode 终止条件是确定的(生成 EOS 或达到 max length)

所以,理论上来说就不存在”未来不确定“这个 γ 想折扣的对象,也就是说,γ\gamma 的物理含义在 LLM 里不存在。

γ=1 是 sequence-level advantage 的前提,这一点最关键,也是 FiberPO 后面所有 trajectory-level 论证的基础。当 γ=1\gamma=1 且 reward 只在末尾时:

Ast,at=Qst,atVst=R末尾 rewardVst(11)A_{s_t, a_t} = Q_{s_t, a_t} - V_{s_t} = \underset{\text{末尾 reward}}{R} - V_{s_t} \tag{11}

如果再用 group-relative baseline(GRPO 的做法)替代 VV,那么同一条 response 内所有 token 的 advantage 都等于同一个值 Aτ=RτRˉgroupA_\tau = R_\tau - \bar R_\text{group}。也就是说,在 γ=1\gamma=1 + 末尾 reward 的设定下,advantage 是 trajectory-level 的(同一 trajectory 内所有 token 共享 AτA_\tau)。

这个性质既不是工程偷懒(GRPO 仍然可以在 token-level 展开),也不是必然结论(完全可以用 GAE 或其他方式给每个 token 算不同的 advantage,只是在 γ=1\gamma=1 + 末尾 reward 下意义不大),而是默认情况下的天然结果

总的来说,经典 RL 里 γ 干的两件事:处理未来不确定性和顺手做粗糙的 credit assignment(近的动作功劳大),在 LLM 里:

  • 第一件事不存在:generation 过程是确定性的,不会半路 game over
  • 第二件事是错的:reasoning 的关键 token 往往离 reward 远,按时间近远分配功劳完全就搞反了

所以 LLM 必须 γ=1\gamma=1,让 advantage(通过 R 直接定义)来负责 credit assignment——它按因果贡献分配,而不是按时间距离分配,aha moment(或关键推理 token)才能拿到它该拿的强信号。

TRPO消失定理

surrogate-gap不等式

我们现在知道 γ\gamma 必须等于 1。回顾 TRPO[2] 定理一(式(15)):

η(πnew )Lπold (πnew )4ϵγ(1γ)2(DTVmax)2 where ϵ=maxs,aAπ(s,a)(12)\begin{aligned} \eta\left(\pi_{\text {new }}\right) & \geq L_{\pi_{\text {old }}}\left(\pi_{\text {new }}\right)-\frac{4 \epsilon \gamma}{(1-\gamma)^2}( D_{TV}^{max})^2 \\ & \text { where } \epsilon=\max _{s,a}\left|A_\pi(s, a)\right| \end{aligned} \tag{12}

其中,η(πnew)\eta(\pi_\text{new}) 是新策略相比旧策略的表现,或者说是真实的期望回报,Lπold (πnew )L_{\pi_{\text {old }}}(\pi_{\text {new }}) 是用 θold\theta_\text{old} 数据近似的线性 surrogate,上式等价于 FiberPO 中的式 (1) 或式 (55):

J(θ)J(1)(θθold)    4ϵγ(1γ)2  DTVmax(θθold)2(13)J(\theta) - J^{(1)}(\theta \,|\, \theta_{\text{old}}) \;\ge\; -\frac{4 \epsilon \gamma}{(1-\gamma)^{2}}\;D_{\text{TV}}^{\max}(\theta\,\|\,\theta_{\text{old}})^{2} \tag{13}

其中,J(1)(θθold)J^{(1)}(\theta\mid\theta_\text{old}) 就是刚刚提到的真实目标 J(θ)J(\theta) 的线性 surrogate(一阶近似),上标 (1)(1) 就是 “first-order” 的意思。它和 TRPO[2] 里的 Lπold(π~)L_{\pi_\text{old}}(\tilde\pi) ,包括刚刚的 Lπold (πnew )L_{\pi_{\text {old }}}(\pi_{\text {new }}) 只是写法不一样(我们把对照表放在附录《公式对应》),其实都是同一个东西——FiberPO 论文用 J(1)J^{(1)} 这个记号是为了直接突出“它是 JJ 的一阶近似”。左边的式子就是用 surrogate 提升量 J(1)(θθold)J(θold)J^{(1)}(\theta\mid\theta_\text{old}) - J(\theta_\text{old}) 代替真实回报差 J(θ)J(θold)J(\theta) - J(\theta_\text{old}) 的误差,称为 surrogate-gap。

它有两个核心性质(TRPO[2] 公式(9),证明见附录《J的一阶Taylor近似》):

J(1)(θoldθold)=J(θold),θJ(1)(θθold)θ=θold=θJ(θ)θ=θold(14)J^{(1)}(\theta_{\text{old}} \mid \theta_{\text{old}}) = J(\theta_{\text{old}}), \qquad \nabla_{\theta} J^{(1)}(\theta \mid \theta_{\text{old}}) \big|_{\theta=\theta_{\text{old}}} = \nabla_{\theta} J(\theta) \big|_{\theta=\theta_{\text{old}}} \tag{14}

他们的意思是:J(1)J^{(1)}θ=θold\theta=\theta_\text{old} 这一点上值相等、梯度也相等。所以在 θold\theta_\text{old} 附近优化 J(1)J^{(1)}和在 θold\theta_\text{old} 附近优化 JJ 一阶等价。

我们用 tt 表示新旧策略之间的 max TV 距离,用 CC 表示前面那一坨惩罚系数。我们想最大化下界,意味着(也可见 TRPO[2] 公式(18)-公式(20)):

maxθ[J(1)(θθold)Ct2](15)\max_{\theta} \left[ J^{(1)}(\theta \,|\, \theta_{\text{old}}) - C t^2 \right] \tag{15}

等价于:

maxθ[J(1)(θθold)J(θold)Ct2]=maxθ[ΔJ(1)(θθold)Ct2](16)\begin{aligned}\max_{\theta} \left[ J^{(1)}(\theta \,|\, \theta_{\text{old}}) -J(\theta_{\text{old}}) - C t^2 \right] &= \max_{\theta} \left[\Delta J^{(1)}(\theta\mid\theta_\text{old}) - C t^2 \right] \end{aligned}\tag{16}

这里我们减去一个 J(θold)J(\theta_\text{old}),它是常数,只依赖于参考策略 θold\theta_\text{old},不含优化变量 θ\theta。目的是为了几何上归零:当 θ=θold\theta = \theta_\text{old} 时,J(1)(θoldθold)J(θold)=0J^{(1)}(\theta_\text{old}\mid\theta_\text{old}) - J(\theta_\text{old}) = 0J(1)J^{(1)} 在参考点处等于 JJ)。也就是说,Δ\Delta 表示的是 “surrogate 相对于旧策略的提升量”,原点正好是旧策略。

降维与线性缩放

θ\theta 是高维的(神经网络参数),没法直接求极值,但我们可以降维,将它拆成两步:

  • 固定 tt,找出在 tt 约束下最大的 Δ\Delta,记为 Δ(t)\Delta^{*}(t)
  • 在所有 t0t \ge 0 中找出最优的,变成 1D 优化:maxt[Δ(t)Ct2]\max_t [\Delta^{*}(t) - C t^2]

这一步其实是一个纯数学的 max-max 分解:任何 θ\theta 都有一个确定的 TV 距离 t(θ)=DTVmax(θθold)t(\theta) = D_{TV}^{\max}(\theta | \theta_\text{old}),所以把所有 θ\theta 按它们的 TV 距离分组,先在每一组内找最优,再跨组找最优:

maxt0;[;maxθ:,DTVmax=tf(θ)第一步:固定 t,在这层等高面上找最优 θ;]第二步:扫描所有 t,找最优(17)\max_{t \ge 0};\Bigl[;\underbrace{\max_{\theta:, D_{TV}^{\max}=t} f(\theta)}_{\text{第一步:固定 t,在这层等高面上找最优 θ}};\Bigr] \quad \leftarrow \text{第二步:扫描所有 t,找最优} \tag{17}

这个恒等式对任何函数 ff 都成立——它只是把一个集合按某个标量属性拆成子集,分两步取 max。具体执行过程如下:

  • 内层:给定一个具体的 tt(比如 t=0.03t=0.03),在所有满足 DTVmax(θθold)=0.03D_{TV}^{\max}(\theta|\theta_\text{old})=0.03θ\theta 中,找让 ff 最大的那个,得到 Δ(0.03)\Delta^*(0.03)
  • 外层:把 tt00 扫到 ++\infty,找哪个 ttΔ(t)Ct2\Delta^*(t) - Ct^2 最大

代入 f(θ)=ΔJ(1)(θθold)Ct(θ)2f(\theta) = \Delta J^{(1)}(\theta\mid\theta_\text{old}) - C t(\theta)^2

maxt0[maxθ:,DTVmax=tΔJ(1)(θθold)=:,Δ(t)Ct2](18)\max_{t \ge 0} \left[\underbrace{\max_{\theta:, D_{TV}^{\max}=t} \Delta J^{(1)}(\theta\mid\theta_\text{old})}_{=:,\Delta^*(t)} - C t^2 \right] \tag{18}

内层 max 定义了 Δ(t)\Delta^*(t):在 TV 距离恰好为 tt 的所有策略中,surrogate 提升量最大能到多少,外层就变成关于标量 tt 的 1D 优化。

我们已经把高维 θ\theta 优化退化成 1D tt 优化,但这里的前提是 Δ(t)\Delta^*(t) 要有个好形式,太复杂的话降维了也解不了。巧的是,Δ(t)\Delta^*(t) 恰好是 tt 的线性函数。

JJ 我们不知道,我们用 surrogate 提升量 J(1)(θθold)J(θold)J^{(1)}(\theta\mid\theta_\text{old}) - J(\theta_\text{old}) 代替真实回报差 J(θ)J(θold)J(\theta) - J(\theta_\text{old}),有(就是前面的式 9):

J(1)(θθold)J(θold)=EτPθold[t=0γtrst(τ),at(τ)(θθold)Ast(τ),at(τ)(θold)](19)J^{(1)}(\theta\mid\theta_\text{old}) - J(\theta_\text{old}) = \mathbb{E}_{\tau \sim \mathcal{P}_{\theta_{\text{old}}}} \left[ \sum_{t=0}^{\infty} \gamma^t r_{s_t(\tau), a_t(\tau)}(\theta \mid \theta_{\text{old}}) A_{s_t(\tau), a_t(\tau)}^{(\theta_{\text{old}})} \right] \tag{19}

其中的 gap 自然是:J(θ)J(1)(θθold)J(\theta) - J^{(1)}(\theta \,|\, \theta_{\text{old}})。这就是 J(θ)J(\theta) 没法算,用 surrogate 提升量近似的代价。TRPO 用 trust region 控制这个误差不要太大,让这个近似是一个 “好” 近似。

期望形式可以 Monte Carlo 采样:

(s,a)ns,ars,a(θθold)As,aθold(20)\sum_{(s,a)} n_{s,a} \, r_{s,a}(\theta \mid \theta_{\text{old}}) \, A_{s,a}^{\theta_{\text{old}}} \tag{20}

有引理:对任意 t0t \ge 0

L(t):=maxd:DTVmax(d)=tans,ads,a=0s(s,a)ns,ads,aAs,aθold=tM(21)L^*(t) := \max_{\substack{d : D_{TV}^{\max}(d) = t \\ \sum_a n_{s,a} d_{s,a} = 0 \; \forall s}} \sum_{(s,a)} n_{s,a} \, d_{s,a} \, A_{s,a}^{\theta_{\text{old}}} = t \cdot M \tag{21}

其中 M:=L(1)M := L^*(1) 是单位 TV 距离处的最优值(一个不依赖 tt 的常数),也就是说:L(t)L^*(t)tt 的严格线性函数。另外,d=r1d=r-1 ,即 πθ(as)=πθold(as)(1+ds,a)\pi_\theta(a|s) = \pi_{\theta_\text{old}}(a|s) \cdot (1 + d_{s,a})

先看这两个下标,下面那个求和的是概率归一化约束,表示每个状态 ss 下都必须是合法的概率分布(概率之和 = 1)。

aπθ(as)=1aπθold(as)(1+ds,a)=1aπθold(as)ds,a=0(22)\sum_a \pi_\theta(a|s) = 1 \Rightarrow \sum_a \pi_{\theta_\text{old}}(a|s) \cdot (1 + d_{s,a}) =1 \Rightarrow \sum_a \pi_{\theta_\text{old}}(a|s) d_{s,a} = 0 \tag{22}

意思是,在每个状态下,把某些 action 的概率调高(d>0d > 0),就必须把另一些调低(d<0d < 0),总量守恒。注意,它关于 dd 是线性(齐次)的。

上面那个是把 TV 写成 ds,ad_{s,a} 的函数,

DTV(πθ(s)πθold(s))=12aπθ(as)πθold(as)=12aπθold(as)ds,a(23)\begin{aligned} D_{TV}(\pi_\theta(\cdot|s) | \pi_{\theta_\text{old}}(\cdot|s)) &= \frac{1}{2}\sum_a |\pi_\theta(a|s) - \pi_{\theta_\text{old}}(a|s)| \\ &= \frac{1}{2}\sum_a \pi_{\theta_\text{old}}(a|s) |d_{s,a}| \end{aligned} \tag{23}

意思是,用 dd 表示的新旧策略之间的最大 TV 距离恰好等于 tt。它关于 dd 是齐次的。

现在来看表达式主体,ns,ads,aAs,a\sum n_{s,a} d_{s,a} A_{s,a},它关于 dd 也是线性(齐次)的。

上面的三个组件都是齐次的——整体乘一个正标量 kk,目标乘 kk,约束从 tt 变成 ktkt,归一化条件仍然满足。

为什么 L(t)=tML^*(t) = tM?我们分两步来证明。

第一步(下界 L(t)tML^*(t) \ge tM:构造一个可行解,证明至少能达到 tMtM

假设 dd^*L(1)L^*(1) 的最优解——也就是在 TV 距离 = 1 的所有策略变化中,让 surrogate 提升最大的那个。它满足 DTVmax(d)=1D_{TV}^{\max}(d^*) = 1L(1)L^*(1) 定义里的约束),目标值 =M= M

现在我们想在 TV 距离 = tt 处也找到一个好的可行解。直接把 dd^* 等比放大 tt 倍:d~=td\tilde{d} = t \cdot d^*,验证它是否满足 L(t)L^*(t) 的约束:

  • TV 距离:由齐次性,DTVmax(td)=tDTVmax(d)=t1=tD_{TV}^{\max}(t \cdot d^*) = t \cdot D_{TV}^{\max}(d^*) = t \cdot 1 = t。放大 tt 倍,距离也变成 tt,落在约束上,没问题
  • 归一化:ans,a(tds,a)=tans,ads,a=0=0\sum_a n_{s,a}(t \cdot d^*_{s,a}) = t \cdot \underbrace{\sum_a n_{s,a} d^*_{s,a}}_{=0} = 0dd^* 本身满足归一化,乘常数后仍然满足,也没问题
  • 目标值:ns,a(tds,a)As,a=tns,ads,aAs,a=M=tM\sum n_{s,a}(t \cdot d^*_{s,a}) A_{s,a} = t \cdot \underbrace{\sum n_{s,a} d^*_{s,a} A_{s,a}}_{=M} = tM

d~\tilde{d}L(t)L^*(t) 的一个可行解且目标值 =tM= tM,所以最优值至少是 tMtML(t)tML^*(t) \ge tM

第二步(上界 L(t)tML^*(t) \le tM:反证法,证明不可能超过 tMtM

假设存在某个 dd',满足 DTVmax(d)=tD_{TV}^{\max}(d') = t,且目标值 >tM> tM。把它缩小 tt 倍:d/td'/t。同样由齐次性,DTVmax(d/t)=1D_{TV}^{\max}(d'/t) = 1,归一化仍满足,目标值 >M> M。但 M=L(1)M = L^*(1) 已经是 TV 距离 = 1 处的最大值了,这就矛盾了。

两步合起来:L(t)tML^*(t) \ge tML(t)tML^*(t) \le tM,因此得到 L(t)=tML^*(t) = tM

trust region为0

刚刚证明了 Δ(t)=tM\Delta^*(t) = tM,代入式 (16) :

maxt0[MtCt2](24)\max_{t \ge 0} \left[Mt - Ct^2\right] \tag{24}

C 是那一坨惩罚系数,

C=4ϵγ(1γ)2>0(25)C = \frac{4 \epsilon \gamma}{(1-\gamma)^2} \gt 0 \tag{25}

这是一个开口向下的二次抛物线,有最大值,对 tt 求导令其为 0:

M2Ct=0    t=M2C(26)M - 2Ct^* = 0 \implies t^* = \frac{M}{2C} \tag{26}

这个 tt^* 就是 TRPO[2] 的最优信任域半径 δ\delta

根据上节我们知道,M=L(1)M = L^*(1) 是单位 TV 距离处的最优 surrogate 提升量。根据定义,DTV=1D_{TV} = 1 意味着 ap(a)q(a)=2\sum_a |p(a) - q(a)| = 2。目标函数(式 21)ds,aAs,a\sum d_{s,a} A_{s,a} 的上界是把所有偏移量集中到 advantage 最大的 action 上(FiberPO Appendix D Theorem D.3),最多能拿到 ds,aϵ=2ϵ\sum|d_{s,a}| \cdot \epsilon = 2 \epsilon,所以有:

M2ϵ(27)M \le 2 \epsilon \tag{27}

代入式 26:

δ=t=M2C2ϵ24ϵγ(1γ)2=(1γ)24γ(28)\delta = t^* = \frac{M}{2C} \le \frac{2 \epsilon}{2 \cdot \frac{4 \epsilon \gamma}{(1-\gamma)^2}} = \frac{(1-\gamma)^2}{4\gamma} \tag{28}

论文 Appendix D 对 sample-based TV-TRPO 做了更精细的分析,得到更紧的 δ\delta1γ8γ\frac{1-\gamma}{8\gamma},不过对 vanishing theorem 来说无所谓——两个分子都含 (1γ)(1-\gamma)γ=1\gamma=1 都是 0。

所以经典 TRPO 在 LLM 里的安全半径就是 0,trust region 退化为单点 πθold{\pi_{\theta_\text{old}}},唯一的“合法更新”就是不更新。这就是 vanishing theorem 想说的事,也是 FiberPO(以及之前 PPO/GRPO/GSPO 隐式做的事,比如PPO clip 范围 0.2、GSPO 则是 4e-4)必须做 δ-relaxation——把 δ\delta 从「理论保证常量」放松成「可调超参」的根本原因。

其实除了公式层面直接算出来 δ=0\delta=0,还有两个地方也可以直观地理解 vanishing。

  • 第一个是 C,γ→1 时 C→+∞,看式 24,C 无限大意味着任何非零步长 t>0 的惩罚都是无穷大——不管 surrogate 提升 Mt 多大,Ct2Ct^2 都能把它压死。这是从优化目标角度理解。
  • 另一个是 tt^*,看式 26,因为 M 有限(由 advantage 决定),C→∞ 意味着 tt^*→0,几何上看,开口向下的抛物线随着二次项系数 C 增大,会越来越”尖瘦”,顶点越来越靠近原点,C=∞ 时顶点就在 t=0。

小结

本文从 TRPO 出发,首先将数据按轨迹组织,把 TRPO 的状态聚合展开成轨迹×时间步后,自然出现折扣因子γ\gamma ,而在 LLM 场景下 reward 只在末尾出现、episode 不会中途终止,γ\gamma 的物理含义不存在,必须令 γ=1\gamma=1。代入 TRPO 的 surrogate-gap bound,经过降维(max-max 分解)和线性缩放(齐次性),推出信任域半径 δ(1γ)\delta \propto (1-\gamma)γ=1\gamma=1δ=0\delta=0

Vanishing theorem 的结论很硬:经典 TRPO 的理论安全半径在 LLM 里不可用。不过这里只针对那个特定的半径,不是 trust region 这个机制本身。PPO/GRPO/GSPO 在实践中把 δ\delta 从理论常量放松成可调超参,实践证明训练是稳定的,这说明 trust region 在 γ=1\gamma=1 下仍然有效,只是需要重新建立理论基础。这也正是后续的内容。

附录

J的一阶Taylor近似

J(1)J^{(1)}JJθold\theta_\text{old} 处的线性(一阶) surrogate,一阶近似按定义就要求公式 (14) 中的两个性质。

性质一证明

J(1)J^{(1)} 的定义代入 θ=θold\theta = \theta_\text{old}(后面那项就是式 (6)):

J(1)(θoldθold)=J(θold)+EτPθold[tγtrst,at(θoldθold)Ast,at(θold)]J^{(1)}(\theta_{\text{old}} \mid \theta_{\text{old}}) = J(\theta_{\text{old}}) + \mathbb{E}_{\tau \sim P_{\theta_{\text{old}}}} \left[ \sum_{t} \gamma^t r_{s_t, a_t}(\theta_{\text{old}} \mid \theta_{\text{old}}) A_{s_t, a_t}^{(\theta_{\text{old}})} \right]

重要性采样系数 r=πθold/πθold=1r = \pi_{\theta_\text{old}}/\pi_{\theta_\text{old}} = 1。所以只需要证明:

EτPθold[tγtAst,at(θold)]=0\mathbb{E}_{\tau \sim P_{\theta_{\text{old}}}} \left[ \sum_{t} \gamma^t A_{s_t, a_t}^{(\theta_{\text{old}})} \right] = 0

根据 advantage 的定义性质——VV 就是 QQ 在策略下的期望,所以 QVQ - V 期望为 0。

Eaπθold(s)[A(θold)(s,a)]=Ea[QV]=V(s)V(s)=0\mathbb{E}_{a \sim \pi_{\theta_{\text{old}}}(\cdot | s)} [A^{(\theta_{\text{old}})}(s, a)] = \mathbb{E}_a [Q - V] = V(s) - V(s) = 0

把求和展开,用塔式期望:

Eτ[tγtAt]=tγtEst[Eatst[A(st,at)]]=0=0\mathbb{E}_{\tau} \left[ \sum_{t} \gamma^t A_t \right] = \sum_{t} \gamma^t \, \mathbb{E}_{s_t} \underbrace{\left[ \mathbb{E}_{a_t | s_t} [A(s_t, a_t)] \right]}_{=0} = 0

所以 J(1)(θoldθold)=J(θold)+0=J(θold)J^{(1)}(\theta_\text{old}\mid\theta_\text{old}) = J(\theta_\text{old}) + 0 = J(\theta_\text{old})。证毕。

性质二证明

g(θ):=J(1)(θθold)J(θold)g(\theta) := J^{(1)}(\theta\mid\theta_\text{old}) - J(\theta_\text{old}) —— 就是式(16) 定义的“提升量 LL”。对 θ\theta 求梯度(注意采样分布 PθoldP_{\theta_\text{old}} 不依赖 θ\theta,所以可以直接把 \nabla 推进期望):

θg(θ)=EτPθold[tγtθπθ(atst)πθold(atst)Ast,at]\nabla_{\theta} g(\theta) = \mathbb{E}_{\tau \sim P_{\theta_{\text{old}}}} \left[ \sum_{t} \gamma^t \, \dfrac{\nabla_{\theta} \pi_{\theta}(a_t \mid s_t)}{\pi_{\theta_{\text{old}}}(a_t \mid s_t)} \, A_{s_t, a_t} \right]

代入 θ=θold\theta = \theta_\text{old},用 log-derivative trick:

θπθ(as)πθold(as)θ=θold=θlogπθ(as)θ=θold\frac{\nabla_{\theta} \pi_{\theta}(a \mid s)}{\pi_{\theta_{\text{old}}}(a \mid s)} \Bigg|_{\theta = \theta_{\text{old}}} = \nabla_{\theta} \log \pi_{\theta}(a \mid s) \Bigg|_{\theta = \theta_{\text{old}}}

代回去:

θgθ=θold=EτPθold[tγtθlogπθ(atst)θ=θoldAst,at(θold)]\nabla_{\theta} g \big|_{\theta = \theta_{\text{old}}} = \mathbb{E}_{\tau \sim P_{\theta_{\text{old}}}} \left[ \sum_{t} \gamma^t \, \nabla_{\theta} \log \pi_{\theta}(a_t \mid s_t) \big|_{\theta = \theta_{\text{old}}} \, A^{(\theta_{\text{old}})}_{s_t, a_t} \right]

右边这项也是策略梯度定理的右边:

θJ(θ)=EτPθ[tγtθlogπθ(atst)A(st,at)]\nabla_{\theta} J(\theta) = \mathbb{E}_{\tau \sim P_{\theta}} \left[ \sum_{t} \gamma^t \, \nabla_{\theta} \log \pi_{\theta}(a_t \mid s_t) \, A(s_t, a_t) \right]

注意,标准公式 A 是 Q,但是一般实际会换为 A,原因我们在 TRPO[2] 也提到过:降低梯度的方差,把绝对提升变为相对提升。而且,根据基线不变性(在策略梯度的权重项里减去一个只与状态 ss 有关、与当前动作 aa 无关的函数,它的梯度期望值等于 0),这不会改变策略梯度的理论期望值。

另外,有时候会看到没有折扣因子的写法,也是正确的写法。之所以去掉,不仅是为了降低方差,把后期的梯度“放大”回正常水平;而且直观上也更加合理。折扣因子会导致初期行为被赋予很大梯度,而后期即便做出关键动作,梯度也变得微乎其微了。这在直觉上不对。还有就是折扣因子经常退化到了其他地方,比如用 γ\gamma 来计算未来的折扣回报。

继续回到证明,所以在 θ=θold\theta = \theta_\text{old} 处(此时 Pθ=PθoldP_\theta = P_{\theta_\text{old}}):

θJ(θ)θ=θold=θgθ=θold=θJ(θ)(1)(θθold)θ=θold0\nabla_{\theta} J(\theta) \big|_{\theta = \theta_{\text{old}}} = \nabla_{\theta} g \big|_{\theta = \theta_{\text{old}}} = \nabla_{\theta} J(\theta)^{(1)} (\theta \mid \theta_{\text{old}}) \big|_{\theta = \theta_{\text{old}}} - 0

也就是说,J(1)=J\nabla J^{(1)} = \nabla Jθold\theta_\text{old} 处。证毕。

直觉来看,g(θ)=J(1)(θθold)J(θold)g(\theta) = J^{(1)}(\theta\mid\theta_\text{old}) - J(\theta_\text{old}) 这个减法只是把 J(1)J^{(1)} 整体向下平移了一个常数 J(θold)J(\theta_\text{old}),形状(导数)完全没变。

公式对应

表达式 TRPO[2] 对应
J(θ)J(\theta) η(πθ)\eta(\pi_\theta)
J(1)(θθold)J^{(1)}(\theta\mid\theta_\text{old}) Lπθold(πθ)L_{\pi_{\theta_\text{old}}}(\pi_\theta)
ΔJ(1)(θθold)\Delta J^{(1)}(\theta\mid\theta_\text{old}) Lπθold(πθ)η(πθold)L_{\pi_{\theta_\text{old}}}(\pi_\theta) - \eta(\pi_{\theta_\text{old}})(即 surrogate 比旧策略多赚的部分)
J(1)(θoldθold)=J(θold)J^{(1)}(\theta_\text{old}\mid\theta_\text{old}) = J(\theta_\text{old}) TRPO[2] 式 19:Lπi(πi)=η(πi)L_{\pi_i}(\pi_i) = \eta(\pi_i)
$\nabla J^{(1)} {\theta_\text{old}} = \nabla J
MM 推论:J(θnew)J(θold)J(\theta_\text{new}) \ge J(\theta_\text{old}) TRPO[2] 式 20

Reference

[1] TRPO深度拆解:为什么做后训练应该读懂TRPO | 长琴: https://yam.gift/2026/05/11/NLP/LLM-Training/2026-05-11-TRPO/
[2] TRPO: https://yam.gift/2026/05/11/NLP/LLM-Training/2026-05-11-TRPO/
[3] GAGPO: https://yam.gift/2026/05/18/NLP/LLM-Training/2026-05-18-GAGPO/
[4] 异曲同工之妙的DrGRPO——DAPO几乎同时出现的又一GRPO优化! | 长琴: https://yam.gift/2025/03/28/NLP/LLM-Training/2025-03-28-LLM-PostTrain-DrGRPO/