
策略梯度直接优化参数化策略,天然适合随机策略和连续动作空间。但它有一个棘手问题:参数空间里相同长度的一步,并不代表策略分布发生了相同大小的变化。学习率稍大,就可能让新策略离开当前策略能够可靠评估的区域,导致性能突然崩塌。
TRPO 和 PPO 解决的是同一个问题:如何尽可能提高代理目标,同时限制一次策略更新的破坏性。 差别在于,TRPO 显式求解带 KL 约束的近似问题,PPO 则用一阶优化和裁剪目标实现更便宜的近似。
策略梯度为什么会失稳
设轨迹回报目标为:
J(θ)=Eτ∼πθ[t=0∑∞γtrt]
策略梯度定理给出:
∇θJ(θ)=Es,a∼πθ[∇θlogπθ(a∣s)Aπθ(s,a)]
其中优势函数 A(s,a)=Q(s,a)−V(s) 表示动作相对当前状态平均水平的好坏。实际训练用采样轨迹估计这个期望,再做梯度上升。
问题在于:旧策略采集的数据只能可靠描述旧策略附近的区域。一次过大的更新会同时改变动作分布和之后访问到的状态分布,使旧数据给出的优势估计迅速失真。

因此需要衡量“策略究竟移动了多远”,而不是只看参数向量的欧氏距离。
TRPO 的代理目标
第 k 轮的旧策略记为 πθk。固定旧策略的状态访问分布,并用重要性采样修正动作概率,可以得到局部代理目标:
Lθk(θ)=Es,a∼πθk[πθk(a∣s)πθ(a∣s)Aπθk(s,a)]
概率比
rθ(s,a)=πθk(a∣s)πθ(a∣s)
很直观:如果旧策略下某个动作的优势为正,就提高它的概率;优势为负,就降低它的概率。
仅最大化这个目标仍可能走太远。TRPO 加入平均 KL 约束:
θmaxs.t.Lθk(θ)Es∼dπθk[DKL(πθk(⋅∣s)∥πθ(⋅∣s))]≤δ
这里约束的是旧策略到新策略的平均 KL。TRPO 论文的单调改进分析从更强的最大 KL 界出发;工程实现使用平均 KL 近似,并不能把理论保证原封不动地搬过来。

从约束问题到自然梯度
在 θk 附近,把代理目标做一阶展开,把 KL 做二阶展开:
Lθk(θ)≈Lθk(θk)+gT(θ−θk)
DˉKL≈21(θ−θk)TH(θ−θk)
g 是代理目标梯度,H 是平均 KL 在旧参数处的 Hessian,也就是经验 Fisher 信息矩阵。于是近似问题变成:
Δθmaxs.t.gTΔθ21ΔθTHΔθ≤δ
解析方向为自然梯度 H−1g,按约束缩放后:
ΔθTRPO=gTH−1g2δH−1g
神经网络参数很多,显式构造和求逆 H 不现实。TRPO 用 Hessian-vector product 和共轭梯度近似解 Hx=g,无需存储完整矩阵。
二阶展开毕竟只是局部近似,所以算法还会沿 ΔθTRPO 做回溯线搜索,直到候选策略同时满足:
- 实际平均 KL 没有超过阈值;
- 实际代理目标得到改善。
共轭梯度与线搜索是 TRPO 的数值求解方式,不应与理论改进界混为一谈。
PPO:把信赖域思想变成一阶目标
TRPO 的实现和分布式训练成本较高。PPO 保留“不要让概率比变化过大”的动机,但只使用普通的一阶优化器。
最常见的 PPO-Clip 目标是:
LCLIP(θ)=Et[min(rt(θ)A^t,clip(rt(θ),1−ϵ,1+ϵ)A^t)]
分两种情况看就很清楚:
- A^t>0 时,提高动作概率是好事,但当 rt>1+ϵ 后不再继续奖励这种增长;
- A^t<0 时,降低动作概率是好事,但当 rt<1−ϵ 后不再继续奖励这种下降。

裁剪让目标变得保守,却不是硬性 trust region。它只裁剪目标中的概率比贡献,优化器仍可能让整体策略 KL 变大。因此可靠实现通常还会记录 approximate KL、clip fraction,并在 KL 过大时提前停止当前 epoch。
PPO-Penalty 是另一变体:在目标中加入自适应 KL 惩罚,而不是使用裁剪。两者都是原论文提出的近似方案,PPO-Clip 因简单而更常见,但不能据此断言它在所有任务上都更好。
GAE:在偏差与方差之间调节
PPO 通常使用 Generalized Advantage Estimation(GAE),但 GAE 不是 PPO 裁剪目标的一部分,它是优势估计器。
先定义 TD 残差:
δtV=rt+γV(st+1)−V(st)
GAE 为:
A^tGAE(γ,λ)=l=0∑∞(γλ)lδt+lV
- λ=0 时接近一步 TD,偏差较大、方差较小;
- λ→1 时更接近蒙特卡洛回报减 baseline,偏差较小、方差较大。
在有限 rollout 中需要处理 episode 终止与截断的区别:真正终止不 bootstrap,时间上限或批次截断通常仍要用最后状态的价值 bootstrap。
一个完整 PPO 实现还包含什么
常见训练损失还会加入:
L=LCLIP−cvLvalue+ceH(π)
其中 value loss 训练 critic,entropy bonus 鼓励探索。它们是常用训练组件,不是 PPO 核心目标的定义。工程上还要注意:
- 在多个 epoch 内重复使用同一批 on-policy 数据,但不要无限复用;
- 正确保存旧策略的 log probability,避免分母随更新变化;
- 对 advantage 做批次标准化,并监控 value explained variance;
- 分布式 actor 的 policy lag 会引入离策略误差,应限制版本差或修正采样架构;
- 连续动作策略要正确处理高斯分布、动作边界和 log-probability 变换。
PPO 仍被归类为 on-policy 算法。实际系统里的陈旧轨迹是需要控制的偏差来源,不是把 PPO 重新定义成“有一点 off-policy”。
总结
TRPO 明确写出了问题:最大化局部代理目标,同时用 KL 约束策略变化;PPO 则把这套思想压缩成容易用 SGD 优化的裁剪目标。
理解两者关系时,最重要的不是背公式,而是分清三层:理论性能界、实际约束近似、数值求解方法。把这三层混在一起,才是许多 TRPO/PPO 解释看似正确却无法指导实现的根源。
参考资料