PPO 近端策略优化算法: 一种简单而高效的深度强化学习方法

引言

近年来,深度强化学习取得了巨大的进展,在游戏、机器人控制等领域展现出了惊人的能力。然而,现有的强化学习算法仍然存在一些问题,如数据效率低、实现复杂、鲁棒性差等。本文提出了一种新的策略优化算法族 - 近端策略优化(Proximal Policy Optimization, PPO),旨在解决这些问题。

PPO 算法具有以下特点:

  1. 实现简单,仅需对 vanilla 策略梯度算法做少量修改
  2. 样本效率高,能够充分利用已收集的数据
  3. 鲁棒性好,对超参数不敏感,易于在不同任务间迁移
  4. 兼容各种网络架构,如循环神经网络、参数共享等

PPO 算法的核心思想是:在每次策略更新时,限制新旧策略的差异,避免过大的策略更新导致训练不稳定。为此,PPO 设计了一个新的目标函数,通过裁剪概率比来实现这一点。

接下来,我们将详细介绍 PPO 算法的原理、实现细节以及在各种任务上的表现。

背景:策略优化方法

在介绍 PPO 之前,我们先简要回顾一下策略优化的基本概念。

策略梯度方法是一类重要的强化学习算法,其核心思想是:直接对策略函数 \pi_\theta(a|s) 进行优化,使得期望回报最大化。最常用的策略梯度估计器形式为:

\hat{g} = \hat{E}_t[\nabla_\theta \log \pi_\theta(a_t|s_t)\hat{A}_t]

其中 \hat{A}_t 是优势函数的估计。

实现时,通常构造如下目标函数:

L^{PG}(\theta) = \hat{E}_t[\log \pi_\theta(a_t|s_t)\hat{A}_t]

然后使用随机梯度上升算法对其进行优化。

然而,直接优化 L^{PG} 往往会导致过大的策略更新,破坏训练的稳定性。为了解决这个问题,Trust Region Policy Optimization (TRPO)算法引入了一个约束:

\begin{aligned} &\text{maximize}_\theta \hat{E}_t\left[\frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_{old}}(a_t|s_t)}\hat{A}_t\right] \\ &\text{subject to } \hat{E}_t[KL[\pi_{\theta_{old}}(\cdot|s_t), \pi_\theta(\cdot|s_t)]] \leq \delta \end{aligned}

这里引入了一个 KL 散度约束,限制新旧策略的差异。

TRPO 取得了很好的效果,但其实现较为复杂。PPO 的目标是设计一种更简单的算法,同时保持 TRPO 的优点。

PPO 算法

裁剪的替代目标函数

PPO 的核心创新在于设计了一个新的目标函数:

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

其中 r_t(\theta) = \frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_{old}}(a_t|s_t)} 是重要性采样比,epsilon 是一个小常数,如 0.2。

这个目标函数的关键在于 clip 操作,它限制了 r_t(\theta) 的变化范围。具体来说:

  • \hat{A}_t > 0 时,clip 操作会阻止 r_t(\theta) 增长超过 $1+\epsilon$
  • \hat{A}_t < 0 时,clip 操作会阻止 r_t(\theta) 减小超过 $1-\epsilon$

这样就可以避免过大的策略更新。

下图直观地展示了单个时间步的 L^{CLIP} 函数形状:

image

可以看到,当概率比 r 偏离 1 太多时,目标函数会被"剪平"。

自适应 KL 惩罚系数

除了裁剪目标函数外,PPO 还提出了另一种方法:自适应 KL 惩罚。其思想是在目标函数中加入 KL 散度项:

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

然后动态调整 \beta 的值,使得每次更新后的 KL 散度接近某个目标值 d_{target}

具体来说,在每次策略更新后:

  1. 计算平均 KL 散度 d = \hat{E}_t[KL[\pi_{\theta_{old}}(\cdot|s_t), \pi_\theta(\cdot|s_t)]]
  2. 如果 d < d_{target}/1.5,则 \beta \leftarrow \beta/2
  3. 如果 d > d_{target} \times 1.5,则 \beta \leftarrow \beta \times 2

这种方法可以自动调整惩罚系数,使得策略更新的幅度保持在合理范围内。

完整算法

PPO 算法的完整流程如下:

  1. 使用当前策略 \pi_{\theta_{old}} 采集一批数据
  2. 使用这批数据,通过随机梯度上升优化目标函数 L^{CLIP}L^{KLPEN}
  3. 重复多个 epoch
  4. 更新 \theta_{old} \leftarrow \theta
  5. 回到步骤 1

在实际应用中,通常还会同时优化一个值函数 V(s)。完整的目标函数为:

L^{CLIP+VF+S}(\theta) = \hat{E}_t[L_t^{CLIP}(\theta) - c_1 L_t^{VF}(\theta) + c_2 S[\pi_\theta](s_t)]

其中 L_t^{VF} 是值函数的均方误差损失,S 是策略的熵,用于鼓励探索。

image

实验结果

连续控制任务

作者首先在 7 个 MuJoCo 物理仿真环境上比较了不同的目标函数。结果显示,使用裁剪目标函数 L^{CLIP} 的效果最好。

然后,作者将 PPO 与其他几种流行的算法进行了对比,包括 TRPO、A2C 等。结果如下图所示:image

可以看到,PPO 在大多数环境中都取得了最好的性能。

为了进一步展示 PPO 在高维连续控制问题上的能力,作者还在三个更复杂的 3D 人形机器人控制任务上进行了测试。下图展示了学习曲线:image

可以看到,PPO 能够有效地学习这些复杂的运动控制技能。image

Atari 游戏

除了连续控制任务,作者还在 Atari 游戏基准上测试了 PPO 的性能。下图展示了 PPO 与 A2C 和 ACER 在 49 个 Atari 游戏上的对比结果:image

统计显示,PPO 在 30 个游戏中取得了最好的性能,远超 A2C(11 个)和 ACER(8 个)。这说明 PPO 不仅适用于连续控制任务,在离散动作空间的问题上也有出色表现。

结论

本文提出的 PPO 算法具有以下优点:

  1. 实现简单,仅需对 vanilla 策略梯度算法做少量修改
  2. 性能优异,在大多数任务上都优于现有方法
  3. 鲁棒性好,对超参数不敏感
  4. 通用性强,适用于各种任务和网络架构

这些特点使得 PPO 成为一种简单而强大的深度强化学习算法。未来,PPO 有望在更多领域得到广泛应用。

参考文献

  1. Schulman, J., Wolski, F., Dhariwal, P., Radford, A., & Klimov, O. (2017). Proximal policy optimization algorithms. arXiv preprint arXiv:1707.06347.
  2. Schulman, J., Levine, S., Abbeel, P., Jordan, M., & Moritz, P. (2015). Trust region policy optimization. In International conference on machine learning (pp. 1889-1897).
  3. Mnih, V., Badia, A. P., Mirza, M., Graves, A., Lillicrap, T., Harley, T., ... & Kavukcuoglu, K. (2016). Asynchronous methods for deep reinforcement learning. In International conference on machine learning (pp. 1928-1937).
  • 深度学习

    深度学习(Deep Learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。

    41 引用 • 40 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...