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 年之前,基于神经网络函数逼近器的强化学习方法主要分为三个"流派":
- DQN(Deep Q-Learning):样本效率高,但在连续动作空间问题(如机器人控制)上表现不佳,且缺乏理论保证;
- VPG(Vanilla Policy Gradient):实现简单、适用范围广,但样本效率低下,超参数敏感,一次梯度更新可能使策略"崩坏";
- 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$)。
让我们逐层拆解这个公式的直觉:
- 第一项 $r_t(\theta) \hat{A}_t$:就是标准的 CPI 目标;
- 第二项 $\text{clip}(r_t(\theta), 1 - \epsilon, 1 + \epsilon) \hat{A}_t$:将概率比限制在 $[1-\epsilon, 1+\epsilon]$ 区间内的代理目标;
- $\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 展示了 $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 来自 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 流程。核心步骤为:
- 🔄 收集数据:$N$ 个并行 actor 使用策略 $\pi_{\theta_{old}}$ 与环境交互,各自收集 $T$ 步数据;
- 📊 计算优势:对 $NT$ 个时间步使用 GAE 计算优势估计 $\hat{A}_1, \ldots, \hat{A}_T$;
- 🎯 多轮优化:在收集的数据上对 $L^{CLIP}$ 进行 $K$ 个 epoch 的 minibatch SGD 优化;
- 🔁 更新参数:$\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 展示了 PPO 与 TRPO、A2C、CEM 等算法在 7 个 MuJoCo 任务上的对比。在所有 7 个环境中,PPO(紫色曲线)要么是最优的,要么非常接近最优。特别值得注意的是:
- 在 Walker2d 和 HalfCheetah 上,PPO 显著超越 TRPO;
- 在 InvertedPendulum 上,所有方法都快速收敛,但 PPO 收敛更稳定;
- PPO 相比 A2C 和 VPG 的提升在大多数环境中都非常显著。
6.3 3D 人形机器人控制

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

图 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),版权归原作者所有。
参考文献:
- Schulman, J., Wolski, F., Dhariwal, P., Radford, A., & Klimov, O. (2017). Proximal Policy Optimization Algorithms. arXiv:1707.06347v2.
- Schulman, J., Levine, S., Abbeel, P., Jordan, M., & Moritz, P. (2015). Trust Region Policy Optimization. ICML 2015.
- Schulman, J., Moritz, P., Levine, S., Jordan, M., & Abbeel, P. (2015). High-Dimensional Continuous Control Using Generalized Advantage Estimation. arXiv:1506.02438.
- Kakade, S., & Langford, J. (2002). Approximately Optimal Approximate Reinforcement Learning. ICML 2002.
- Mnih, V., et al. (2016). Asynchronous Methods for Deep Reinforcement Learning. ICML 2016.