【经典论文解读】Proximal Policy Optimization — 从 TRPO 到 PPO Clip

2026-07-01

PPO 近端策略优化 强化学习 深度强化学习 TRPO 策略梯度 经典论文

目录

Proximal Policy Optimization — 从 TRPO 到 PPO Clip

论文信息: John Schulman, Filip Wolski, Prafulla Dhariwal, Alec Radford, Oleg Klimov. "Proximal Policy Optimization Algorithms." arXiv preprint arXiv:1707.06347v2, 2017.

研究机构: OpenAI


1. 引言:强化学习算法的"三难困境"

在 2017 年之前,基于神经网络函数逼近器的强化学习方法主要分为三个"流派":

  1. DQN(Deep Q-Learning):样本效率高,但在连续动作空间问题(如机器人控制)上表现不佳,且缺乏理论保证;
  2. VPG(Vanilla Policy Gradient):实现简单、适用范围广,但样本效率低下,超参数敏感,一次梯度更新可能使策略"崩坏";
  3. TRPO(Trust Region Policy Optimization):通过置信域约束保证策略单调改进,但实现复杂——需要使用共轭梯度算法、二次近似和线搜索,且无法与 dropout 或策略-价值网络参数共享等架构兼容。

三种方法各有所长,但没有任何一种能够同时满足以下三个需求:

  • 🔧 易实现(scalable to large models and parallel implementations)
  • 📊 数据高效(data efficient)
  • 🎯 鲁棒性强(robust without extensive hyperparameter tuning)

这就是 Schulman 等人提出 Proximal Policy Optimization (PPO) 的动机:能否设计一种算法,既拥有 TRPO 的数据效率和稳定性,又只需一阶优化(像 VPG 一样简单),同时还能兼容更复杂的网络架构?

答案是:PPO Clip——通过一个精巧的 clipped surrogate objective(裁剪代理目标函数),仅对标准策略梯度实现做几行代码的改动,就实现了上述目标。


2. 背景:策略梯度与 TRPO 的困境

2.1 Vanilla Policy Gradient 的局限

策略梯度方法的核心思想非常直观:直接对策略 $\pi_\theta$ 的参数 $\theta$ 求梯度,使期望回报最大化。最常用的梯度估计器为:

$$\hat{g} = \hat{\mathbb{E}}_t \left[ \nabla_\theta \log \pi_\theta(a_t | s_t) \hat{A}_t \right] \tag{1}$$

其中 $\hat{A}_t$ 是优势函数(advantage function)的估计。对应的目标函数为:

$$L^{PG}(\theta) = \hat{\mathbb{E}}_t \left[ \log \pi_\theta(a_t | s_t) \hat{A}_t \right] \tag{2}$$

直觉上,如果某动作的 advantage 为正("比平均好"),我们就增大其概率;如果为负,就减小其概率。

但问题来了:使用同一批数据对 $L^{PG}$ 做多步优化并没有理论支撑。实践中,多步更新往往会导致破坏性的大策略更新(destructively large policy updates)——策略参数偏离"有效区域",性能急剧下降。因此标准的 VPG 只能每批数据做一次梯度更新,样本效率极低。

2.2 TRPO:置信域约束的代价

TRPO 解决上述问题的方式是:在最大化目标函数的同时,对策略更新的"幅度"施加硬约束。具体来说:

$$\underset{\theta}{\text{maximize}} \ \hat{\mathbb{E}}_t \left[ \frac{\pi_\theta(a_t | s_t)}{\pi_{\theta_{old}}(a_t | s_t)} \hat{A}_t \right] \tag{3}$$

$$\text{subject to} \ \hat{\mathbb{E}}_t \left[ \text{KL}[\pi_{\theta_{old}}(\cdot | s_t), \pi_\theta(\cdot | s_t)] \right] \leq \delta \tag{4}$$

其中 $\theta_{old}$ 是更新前的策略参数,$\delta$ 是 KL 散度约束的阈值。这个约束保证了新策略不会偏离旧策略太远,从而确保了单调改进(monotonic improvement)的理论保证。

但代价是什么?

  • 🧮 实现复杂:需要对目标函数做线性近似、对约束做二次近似,然后使用共轭梯度算法求解;
  • 🚫 架构受限:无法使用 dropout(噪声导致 KL 估计不稳定),也不支持策略和价值网络参数共享;
  • 🔬 调试困难:线搜索、阻尼系数等额外的超参数增加了工程负担。

💡 核心洞察:TRPO 的理论实际上建议使用 KL 惩罚项(penalty)而非硬约束(hard constraint)。形式如下:

$$\underset{\theta}{\text{maximize}} \ \hat{\mathbb{E}}_t \left[ \frac{\pi_\theta(a_t | s_t)}{\pi_{\theta_{old}}(a_t | s_t)} \hat{A}_t - \beta \ \text{KL}[\pi_{\theta_{old}}(\cdot | s_t), \pi_\theta(\cdot | s_t)] \right] \tag{5}$$

但问题是:单一的 $\beta$ 值无法适应不同问题,甚至在同一问题的不同训练阶段也需要调整。 这就是为什么 TRPO 选择了硬约束方案。PPO 的核心贡献在于找到了一个更优雅的替代方案。


3. Clipped Surrogate Objective:PPO 的核心创新 🎯

3.1 概率比与 CPI 目标

定义概率比(probability ratio):

$$r_t(\theta) = \frac{\pi_\theta(a_t | s_t)}{\pi_{\theta_{old}}(a_t | s_t)}$$

显然 $r(\theta_{old}) = 1$。TRPO 最大化所谓的"代理目标":

$$L^{CPI}(\theta) = \hat{\mathbb{E}}_t \left[ r_t(\theta) \hat{A}_t \right] \tag{6}$$

CPI 指 Conservative Policy Iteration [KL02]。$L^{CPI}$ 本质上就是重要性采样加权后的策略梯度目标。如果不加约束直接最大化它,$r_t(\theta)$ 会远超 1,导致策略崩溃。

3.2 Clipping 的动机与数学形式

PPO 的核心创新是 clipped surrogate objective

$$L^{CLIP}(\theta) = \hat{\mathbb{E}}_t \left[ \min\left( r_t(\theta) \hat{A}_t, \ \text{clip}(r_t(\theta), 1 - \epsilon, 1 + \epsilon) \hat{A}_t \right) \right] \tag{7}$$

其中 $\epsilon$ 是超参数(论文推荐 $\epsilon = 0.2$)。

让我们逐层拆解这个公式的直觉:

  1. 第一项 $r_t(\theta) \hat{A}_t$:就是标准的 CPI 目标;
  2. 第二项 $\text{clip}(r_t(\theta), 1 - \epsilon, 1 + \epsilon) \hat{A}_t$:将概率比限制在 $[1-\epsilon, 1+\epsilon]$ 区间内的代理目标;
  3. $\min(\cdot, \cdot)$:取两者中较小的值,使得最终目标是 原目标的悲观下界(pessimistic lower bound)。

👉 这个设计的关键精妙之处在于:"裁剪"只在目标"变好"时生效,在目标"变差"时不做限制。

让我们分两种情形来看(参考图 1):

情形 $r_t$ 变化方向 目标行为 效果
$A > 0$ (好动作) 希望增大 $r_t$ $r_t > 1 + \epsilon$ 时被裁剪,目标不再增长 防止对"好动作"过度自信
$A < 0$ (坏动作) 希望减小 $r_t$ $r_t < 1 - \epsilon$ 时被裁剪,目标不再下降 防止对"坏动作"过度惩罚

在 $A > 0$ 时,min 取 clipped 项(因为 clipped 项更低),阻止了概率比无限制增大;在 $A < 0$ 时,min 也取 clipped 项(因为 clipped 项更低,即更不"负面"),阻止了概率比无限制减小。

💡 核心直觉:PPO 不阻止你把概率调向"对的方向"——但它阻止你一次调太多。这就像一个好的教练:鼓励进步,但不会让你一节课练到受伤。

图 1: Clipped Surrogate Objective

图 1 展示了 $L^{CLIP}$ 中单个时间步的项随概率比 $r$ 变化的曲线。左图对应 $A > 0$,右图对应 $A < 0$。红色圆点标记 $r=1$ 的起始位置(即更新前的策略)。可以看到,$L^{CLIP}$ 在 $[1-\epsilon, 1+\epsilon]$ 区间内与 $L^{CPI}$ 重合,在区间外被"削平"。


4. 图解 PPO 的工作机制 📊

4.1 代理目标函数沿更新方向的插值

图 2 提供了另一个理解 $L^{CLIP}$ 行为的重要视角。它展示了在 PPO 的一次策略更新中,各目标函数沿更新方向的插值:

图 2: 代理目标函数的插值

图 2 来自 Hopper-v1 任务的第一次策略更新:
- 蓝色曲线($\hat{\mathbb{E}}_t[KL_t]$):KL 散度随插值因子增长而快速上升;
- 橙色曲线($L^{CPI}$):无约束目标持续线性增长——这会导致过大的策略更新;
- 绿色曲线($\hat{\mathbb{E}}_t[\text{clip}]$):裁剪项在策略偏离到一定程度后趋于平坦;
- 红色曲线($L^{CLIP}$):PPO 的最终目标 = $\min$(橙色, 绿色),在约 0.02 KL 散度处达到峰值后回落。

图 2 直观地验证了:$L^{CLIP}$ 确实是 $L^{CPI}$ 的悲观下界,并对过大的策略更新施加了隐式的惩罚。

4.2 自适应 KL 惩罚系数(备选方案)

论文还提出了另一种方法:使用 KL 散度惩罚项并自适应调整系数 $\beta$

$$L^{KLPEN}(\theta) = \hat{\mathbb{E}}_t \left[ \frac{\pi_\theta(a_t | s_t)}{\pi_{\theta_{old}}(a_t | s_t)} \hat{A}_t - \beta \ \text{KL}[\pi_{\theta_{old}}(\cdot | s_t), \pi_\theta(\cdot | s_t)] \right] \tag{8}$$

每轮更新后计算实际 KL 散度 $d$,然后:
- 若 $d < d_{targ} / 1.5$:$\beta \leftarrow \beta / 2$(约束太紧,放松)
- 若 $d > d_{targ} \times 1.5$:$\beta \leftarrow \beta \times 2$(约束太松,收紧)

实验表明,自适应 KL 惩罚的表现不如 clipping 方案,但它是理解 PPO 工作原理的重要 baseline。


5. PPO 算法流程 🏗️

5.1 Actor-Critic 架构与组合损失

PPO 通常采用 Actor-Critic 架构。设 $V_\theta(s)$ 是学习到的状态价值函数,则完整的优化目标为:

$$L_t^{CLIP+VF+S}(\theta) = \hat{\mathbb{E}}_t \left[ L_t^{CLIP}(\theta) - c_1 L_t^{VF}(\theta) + c_2 S[\pi_\theta](s_t) \right] \tag{9}$$

其中:
- $L_t^{VF}(\theta) = (V_\theta(s_t) - V_t^{targ})^2$ 是价值函数误差;
- $S[\pi_\theta](s_t)$ 是策略熵奖励,用于鼓励探索;
- $c_1, c_2$ 是权重系数。

对于优势函数的估计,PPO 使用 广义优势估计(GAE)

$$\hat{A}_t = \delta_t + (\gamma\lambda)\delta_{t+1} + \cdots + (\gamma\lambda)^{T-t+1}\delta_{T-1} \tag{11}$$

$$\delta_t = r_t + \gamma V(s_{t+1}) - V(s_t) \tag{12}$$

其中 $\gamma$ 是折扣因子,$\lambda$ 是 GAE 参数(控制偏差-方差权衡)。

5.2 算法伪代码

算法 1: PPO Actor-Critic 风格

算法 1 展示了 PPO 的标准 Actor-Critic 流程。核心步骤为:

  1. 🔄 收集数据:$N$ 个并行 actor 使用策略 $\pi_{\theta_{old}}$ 与环境交互,各自收集 $T$ 步数据;
  2. 📊 计算优势:对 $NT$ 个时间步使用 GAE 计算优势估计 $\hat{A}_1, \ldots, \hat{A}_T$;
  3. 🎯 多轮优化:在收集的数据上对 $L^{CLIP}$ 进行 $K$ 个 epoch 的 minibatch SGD 优化;
  4. 🔁 更新参数:$\theta_{old} \leftarrow \theta$,进入下一轮迭代。

💡 关键设计决策:PPO 在一批数据上做 多个 epoch 的优化,这与 VPG 的"一批数据一次更新"形成鲜明对比,也是其样本效率大幅提升的根本原因。同时,clipping 机制确保多轮更新不会导致策略大幅偏离。


6. 实验结果 🧪

6.1 代理目标函数的消融实验

论文首先在 7 个 MuJoCo 连续控制任务上对各目标函数变体进行了消融实验:

算法变体 平均归一化得分
No clipping or penalty -0.39
Clipping, $\epsilon = 0.2$ 0.82
Clipping, $\epsilon = 0.1$ 0.76
Clipping, $\epsilon = 0.3$ 0.69
Adaptive KL, $d_{targ}=0.01$ 0.73
Adaptive KL, $d_{targ}=0.003$ 0.68
Fixed KL, $\beta = 1$ 0.56

表格数据来源:论文 Table 1。平均归一化得分越高越好(随机策略为 0,最优结果为 1)。

关键发现:
- 🔴 无裁剪/惩罚:直接优化 $L^{CPI}$ 导致严重性能退化(得分 -0.39),验证了多步优化必须配合约束机制;
- 🟢 PPO Clip ($\epsilon=0.2$):在所有变体中表现最佳(0.82),证明了 clipping 机制的有效性;
- 🟡 自适应 KL 惩罚:优于固定 KL 惩罚,但不如 clipping 方案。

6.2 MuJoCo 连续控制对比

图 3: MuJoCo 环境对比

图 3 展示了 PPO 与 TRPO、A2C、CEM 等算法在 7 个 MuJoCo 任务上的对比。在所有 7 个环境中,PPO(紫色曲线)要么是最优的,要么非常接近最优。特别值得注意的是:

  • Walker2dHalfCheetah 上,PPO 显著超越 TRPO;
  • InvertedPendulum 上,所有方法都快速收敛,但 PPO 收敛更稳定;
  • PPO 相比 A2C 和 VPG 的提升在大多数环境中都非常显著。

6.3 3D 人形机器人控制

图 4: 3D 人形机器人学习曲线

图 4 展示了 PPO 在三个复杂的 3D 人形机器人控制任务上的学习曲线(使用 Roboschool 环境):
- RoboschoolHumanoid:基本前进运动;
- RoboschoolHumanoidFlagrun:随机变化目标位置的奔跑任务;
- RoboschoolHumanoidFlagrunHarder:在被方块砸中后需要重新站起的更困难版本。

图 5: 学习到的策略控制帧

图 5 展示了 RoboschoolHumanoidFlagrun 任务中学到的策略。前六帧中,机器人向目标奔跑;随后目标位置随机改变,机器人转身并跑向新目标。这表明 PPO 能够在极高维的动作空间中学习到稳健的运动策略。

6.4 Atari 游戏基准

在 49 个 Atari 游戏上对比 PPO 与 A2C 和 ACER:

评分指标 A2C ACER PPO
训练全程平均 episode reward 1 18 30
最后 100 episode 平均 reward 1 28 19

PPO 在"训练全程平均"指标上以 30:1 显著胜出 A2C,说明 PPO 学习速度更快;在"最终性能"指标上 ACER 略微领先(28:19),但考虑到 ACER 是一个远比 PPO 复杂的算法(包含经验回放、偏差修正等),PPO 的简洁性和优异表现形成了极具吸引力的性价比。


7. 总结与影响 🏆

PPO 的贡献可以凝练为以下三点:

7.1 算法创新:Clipped Surrogate Objective

PPO 通过 $\min(r_t(\theta) \hat{A}_t, \ \text{clip}(r_t(\theta), 1-\epsilon, 1+\epsilon) \hat{A}_t)$ 这一简洁的目标函数,巧妙地实现了与 TRPO 类似的置信域约束效果。关键在于:

  • 🎯 隐式约束:不需要显式的 KL 散度约束或惩罚项,clipping 自然限制了策略更新的幅度;
  • 📉 悲观下界:$\min$ 操作确保目标函数不会高估"危险"更新方向上的改进;
  • 🔧 一阶方法:整个优化只需随机梯度上升,无需共轭梯度或线搜索。

7.2 工程实用性

PPO 在以下方面远超 TRPO:

  • 💻 代码实现:对 VPG 代码仅需几行改动;
  • 🏗️ 架构兼容:支持策略-价值网络参数共享、dropout、辅助任务等现代神经网络设计;
  • 训练效率:多 epoch 更新大幅提升样本利用率;
  • 🎛️ 超参数鲁棒:$\epsilon = 0.2$ 在绝大多数任务上都能良好工作。

7.3 深远影响

自 2017 年发布以来,PPO 已成为深度强化学习领域最广泛使用的算法之一:

  • 🤖 OpenAI Five(Dota 2):使用 PPO 训练;
  • 🎮 OpenAI 的捉迷藏和机械手解魔方等标志性项目均基于 PPO;
  • 🚀 RLHF(人类反馈强化学习):ChatGPT 和 InstructGPT 的训练中,PPO 是核心的 RL 优化算法;
  • 📚 教学标准:PPO 已成为几乎所有强化学习课程的标准教学内容。

在 2026 年的今天回望,PPO 之所以成为经典,不是因为它在理论上比 TRPO 更优美——恰恰相反,TRPO 的理论保证更加严格——而是因为它用最简单的工程手段解决了最关键的实际问题。最好的算法不一定是最复杂的,而是用最小的复杂度换取了最大的收益。 这正是 PPO 留给整个机器学习社区的最重要启示。


8. 关键公式速查 📋

公式 表达式 用途
概率比 $r_t(\theta) = \frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_{old}}(a_t|s_t)}$ 衡量策略变化
CPI 目标 $L^{CPI}(\theta) = \hat{\mathbb{E}}_t[r_t(\theta)\hat{A}_t]$ 无约束代理目标
PPO Clip $L^{CLIP}(\theta) = \hat{\mathbb{E}}_t[\min(r_t\hat{A}_t, \text{clip}(r_t, 1-\epsilon, 1+\epsilon)\hat{A}_t)]$ 🎯 核心创新
KL 惩罚 $L^{KLPEN}(\theta) = \hat{\mathbb{E}}_t[r_t\hat{A}_t - \beta \ \text{KL}]$ 备选方案
组合损失 $L^{CLIP+VF+S} = \hat{\mathbb{E}}_t[L^{CLIP} - c_1 L^{VF} + c_2 S]$ Actor-Critic 训练
GAE $\hat{A}_t = \sum_{l=0}^{\infty}(\gamma\lambda)^l \delta_{t+l}$ 优势函数估计
TD 误差 $\delta_t = r_t + \gamma V(s_{t+1}) - V(s_t)$ 时序差分误差

注:本文中的图表均提取自原始论文 PDF(arXiv:1707.06347v2),版权归原作者所有。

参考文献:

  1. Schulman, J., Wolski, F., Dhariwal, P., Radford, A., & Klimov, O. (2017). Proximal Policy Optimization Algorithms. arXiv:1707.06347v2.
  2. Schulman, J., Levine, S., Abbeel, P., Jordan, M., & Moritz, P. (2015). Trust Region Policy Optimization. ICML 2015.
  3. Schulman, J., Moritz, P., Levine, S., Jordan, M., & Abbeel, P. (2015). High-Dimensional Continuous Control Using Generalized Advantage Estimation. arXiv:1506.02438.
  4. Kakade, S., & Langford, J. (2002). Approximately Optimal Approximate Reinforcement Learning. ICML 2002.
  5. Mnih, V., et al. (2016). Asynchronous Methods for Deep Reinforcement Learning. ICML 2016.