【论文阅读】Proximal Policy Optimization Algorithms

发布于:2025-02-25 ⋅ 阅读:(14) ⋅ 点赞:(0)

在这里插入图片描述

Abstract

作者提出了一类新的策略梯度方法用于强化学习,这类方法通过在环境交互中采样数据与使用随机梯度上升优化“代理”目标函数之间交替进行。标准的策略梯度方法在每个数据样本上进行一次梯度更新,而作者提出了一种新的目标函数,使得能够在每个小批量更新中进行多次迭代。作者将这种新方法称为近端策略优化(PPO),具有信任域策略优化(TRPO)的一些优点,但它们更易于实现,更具通用性,并且在样本复杂度上(根据经验)表现更好。作者的实验在一系列基准任务上测试了PPO,包括模拟机器人运动和Atari游戏玩法。作者展示了PPO优于其他在线策略梯度方法,总体上在样本复杂度、简易性和运行时间之间取得了良好的平衡。

1 Introduction

近年来,针对使用神经网络函数逼近器的强化学习,已经提出了多种不同的方法。主要的竞争者有深度 Q-learning[Mni+15]、“vanilla”策略梯度方法[Mni+16]以及信任域/自然策略梯度方法[Sch+15b]。然而,在开发一种具有可扩展性(适用于大模型和并行实现)、数据高效且鲁棒(即无需超参数调整即可在各种问题上取得成功)的方法方面,仍有改进空间。Q-learning(带函数逼近)在许多简单问题上表现不佳且理解不够深入,vanilla策略梯度方法数据效率低且鲁棒性差;而信任域策略优化(TRPO)相对复杂,并且与包含噪声(如dropout)或参数共享(在策略与价值函数之间,或与辅助任务之间)的架构不兼容。

本文旨在通过引入一种算法来改进现状,该算法在仅使用一阶优化的情况下,能够达到TRPO的数据效率和可靠性能。作者提出了一种带有裁剪概率比的新目标函数,形成了策略性能的悲观估计(即下界)。为了优化策略,作者在从策略中采样数据和在采样数据上执行多轮优化之间交替进行。

作者的实验对比了不同版本的代理目标函数的性能,发现带有裁剪概率比的版本表现最佳。作者还将PPO与文献中的几种先前算法进行了比较。在连续控制任务上,它的表现优于作者所比较的算法。在Atari游戏中,它在样本复杂度方面显著优于A2C,并且与ACER表现相似,尽管它实现起来要简单得多。

2 Background: Policy Optimization

2.1 Policy Gradient Methods

策略梯度方法通过计算策略梯度的估计值,并将其输入到随机梯度上升算法中来工作。最常用的梯度估计器形式为:

g ^ = E ^ t [ ∇ θ log ⁡ π θ ( a t ∣ s t ) A ^ t ] (1) \hat{g} = \hat{\mathbb{E}}_t \left [\nabla_{\theta } \log{\pi_{\theta}(a_t|s_t)\hat{A}_t} \right ] \tag{1} g^=E^t[θlogπθ(atst)A^t](1)

其中, π θ \pi_{\theta} πθ是一个随机策略, A ^ t \hat{A}_t A^t 是时间步 t t t 处优势函数的估计值。这里,期望 E t ^ [ . . . ] \hat{\mathbb{E}_t}[...] Et^[...] 表示在采样与优化交替进行的算法中,对有限批次样本的经验平均。使用自动微分软件的实现通过构建一个目标函数来工作,其梯度即为策略梯度估计值;估计值 g ^ \hat{g} g^ 通过对该目标函数求导得到

L P G ( θ ) = E ^ t [ log ⁡ π θ ( a t ∣ s t ) A ^ t ] (2) L^{PG}(\theta) = \hat{\mathbb{E}}_t \left [\log{\pi_{\theta}(a_t|s_t)\hat{A}_t} \right ] \tag{2} LPG(θ)=E^t[logπθ(atst)A^t](2)

尽管使用同一轨迹对该损失函数 L P G L^{PG} LPG 进行多步优化具有吸引力,但这样做缺乏充分的理论依据,并且凭经验讲通常会导致破坏性地大幅策略更新(详见第 6.1 节;结果未展示,但与“无裁剪或惩罚”设置相比类似或更差)。

2.2 Trust Region Methods

在 TRPO [Sch+15b]中,目标函数(即“代理”目标)在策略更新幅度的约束下被最大化。具体来说,

maximize θ   E ^ t [ π θ ( a t ∣ s t ) π θ old ( a t ∣ s t ) A ^ t ] (3) \underset{\theta}{\text{maximize}}\ \hat{\mathbb{E}}_t \left [\frac{\pi_{\theta}(a_t|s_t)}{\pi_{\theta_{\text{old}}}(a_t|s_t)} \hat{A}_t \right ] \tag{3} θmaximize E^t[πθold(atst)πθ(atst)A^t](3)
subject to  E ^ t [ KL [ π θ old ( ⋅ ∣ s t ) , π θ ( ⋅ ∣ s t ) ] ] ≤ δ (4) \text{subject to}\ \hat{\mathbb{E}}_t \left [ \text{KL}\left[\pi_{\theta_{\text{old}}}( \cdot |s_t), \pi_{\theta}(\cdot |s_t) \right] \right ]\le \delta \tag{4} subject to E^t[KL[πθold(st),πθ(st)]]δ(4)

这里, θ old \theta_{\text{old}} θold 是更新前的策略参数向量。在对目标函数进行线性近似,并对约束条件进行二次近似后,可以使用共轭梯度算法有效地近似解决此问题。

TRPO 的理论依据实际上建议使用惩罚项而非约束,即解决某个系数 β \beta β 的无约束优化问题。这遵循事实:某个代理目标(它计算状态的最大 KL 散度,而不是均值)构成了策略 π \pi π 性能的下界(即悲观界限)。TRPO 使用硬约束而非惩罚项,因为很难选择一个单一的 β \beta β 值,使其在不同问题——甚至在学习过程中特性会变化的单一问题上表现良好。因此,为了实现作者一阶算法的目标,即模拟 TRPO 的单调改进,实验表明,仅选择一个固定的惩罚系数 β \beta β 并通过 SGD 优化惩罚目标方程(5)是不够的;还需要额外的修改。

maximize θ   E ^ t [ π θ ( a t ∣ s t ) π θ old ( a t ∣ s t ) A ^ t − β  KL [ π θ old ( ⋅ ∣ s t ) , π θ ( ⋅ ∣ s t ) ] ] (5) \underset{\theta}{\text{maximize}}\ \hat{\mathbb{E}}_t \left [\frac{\pi_{\theta}(a_t|s_t)}{\pi_{\theta_{\text{old}}}(a_t|s_t)} \hat{A}_t -\beta \ \text{KL}\left[\pi_{\theta_{\text{old}}}( \cdot |s_t), \pi_{\theta}(\cdot |s_t) \right] \right ] \tag{5} θmaximize E^t[πθold(atst)πθ(atst)A^tβ KL[πθold(st),πθ(st)]](5)

3 Clipped Surrogate Objective

r t ( θ ) r_t(\theta) rt(θ) 表示概率比 r t ( θ ) = π θ ( a t ∣ s t ) π θ old ( a t ∣ s t ) r_t(\theta) = \frac{\pi_{\theta}(a_t|s_t)}{\pi_{\theta_{\text{old}}}(a_t|s_t)} rt(θ)=πθold(atst)πθ(atst),则 r ( θ old ) = 1 r(\theta_{\text{old}}) = 1 r(θold)=1。TRPO 最大化一个“代理”目标函数

L C P I ( θ ) = E ^ t [ π θ ( a t ∣ s t ) π θ old ( a t ∣ s t ) A ^ t ] = E ^ t [ r t ( θ ) A ^ t ] (6) L^{CPI}(\theta)= \hat{\mathbb{E}}_t \left [\frac{\pi_{\theta}(a_t|s_t)}{\pi_{\theta_{\text{old}}}(a_t|s_t)} \hat{A}_t \right ]=\hat{\mathbb{E}}_t \left [r_t(\theta) \hat{A}_t \right ] \tag{6} LCPI(θ)=E^t[πθold(atst)πθ(atst)A^t]=E^t[rt(θ)A^t](6)

上标 C P I CPI CPI 指的是保守策略迭代[KL02],该目标函数在此提出。如果没有约束,最大化 L C P I L_{CPI} LCPI 会导致过大的策略更新;因此,作者现在考虑如何修改目标函数,以惩罚使 r t ( θ ) r_t(\theta) rt(θ) 偏离 1 的策略变化。

作者提出的主要目标如下:

L C L I P ( θ ) = E ^ t [ min ⁡ ( r t ( θ ) A ^ t , clip ( r t ( θ ) , 1 − ϵ , 1 + ϵ ) A ^ t ) ] (7) L^{CLIP}(\theta) = \hat{\mathbb{E}}_t \left [\min(r_t(\theta)\hat{A}_t,\text{clip}(r_t(\theta),1-\epsilon ,1+\epsilon)\hat{A}_t) \right ] \tag{7} LCLIP(θ)=E^t[min(rt(θ)A^t,clip(rt(θ),1ϵ,1+ϵ)A^t)](7)

其中, ϵ \epsilon ϵ 是一个超参数,例如设为 0.2。该目标的动机如下:min 函数内的第一项是 L C P I L^{CPI} LCPI。第二项 clip ( r t ( θ ) , 1 − ϵ , 1 + ϵ ) A ^ t \text{clip}(r_t(\theta), 1-\epsilon, 1+\epsilon) \hat{A}_t clip(rt(θ),1ϵ,1+ϵ)A^t,通过裁剪概率比来修改代理目标,从而消除了将 r t r_t rt 移出区间 [ 1 − ϵ , 1 + ϵ ] [1-\epsilon, 1+\epsilon] [1ϵ,1+ϵ] 的动机。最后,作者取裁剪和未裁剪目标的最小值,因此最终目标是未裁剪目标的下界(即悲观界限)。采用此方案,作者仅在概率比的变化会使目标函数变好时忽略它,而在它使目标函数变差时将其纳入考虑。需要注意的是,在 θ old \theta_{\text{old}} θold(即当 r = 1 r = 1 r=1 时)附近的一阶中 L C L I P ( θ ) = L C P I ( θ ) L^{CLIP}(\theta) = L^{CPI}(\theta) LCLIP(θ)=LCPI(θ),然而随着 θ \theta θ 远离 θ old \theta_{\text{old}} θold,它们会变得不同。图 1 绘制了 L C L I P L^{CLIP} LCLIP 中的单个项(即单个时间步 t t t),可以看到,概率比 r r r 1 − ϵ 1-\epsilon 1ϵ 1 + ϵ 1+\epsilon 1+ϵ 处被裁剪取决于优势是正还是负。

在这里插入图片描述

图 2 提供了关于代理目标 L C L I P L^{CLIP} LCLIP 的另一种直观理解。它展示了当作者沿着策略更新方向插值时,几个目标如何变化,而这个更新方向是通过在一个连续控制问题上使用近端策略优化(作者即将介绍的算法)来获得的。可以看到, L C L I P L^{CLIP} LCLIP L C P I L^{CPI} LCPI 的下界,并对过大的策略更新有惩罚。

在这里插入图片描述

4 Adaptive KL Penalty Coefficient

另一种方法是使用 KL 散度的惩罚项作为裁剪代理目标的替代方案或补充,并调整惩罚系数以便在每次策略更新时达到 KL 散度的目标值 d t a r g d_{targ} dtarg。在作者的实验中,作者发现 KL 惩罚比裁剪代理目标表现更差,但作者在此包含它,因为它是一个重要的基准。

在该算法的最简单实现中,作者在每次策略更新中执行以下步骤:

  • 使用多轮小批量 SGD,优化带有 KL 惩罚项的目标函数:

L K L P E N ( θ ) = E ^ t [ π θ ( a t ∣ s t ) π θ old ( a t ∣ s t ) A ^ t − β  KL [ π θ old ( ⋅ ∣ s t ) , π θ ( ⋅ ∣ s t ) ] ] (8) L^{KLPEN}(\theta) = \hat{\mathbb{E}}_t \left [\frac{\pi_{\theta}(a_t|s_t)}{\pi_{\theta_{\text{old}}}(a_t|s_t)} \hat{A}_t -\beta \ \text{KL}\left[\pi_{\theta_{\text{old}}}( \cdot |s_t), \pi_{\theta}(\cdot |s_t) \right] \right ] \tag{8} LKLPEN(θ)=E^t[πθold(atst)πθ(atst)A^tβ KL[πθold(st),πθ(st)]](8)

  • 计算 d = E ^ t [ KL [ π θ old ( ⋅ ∣ s t ) , π θ ( ⋅ ∣ s t ) ] ] d = \hat{\mathbb{E}}_t[\text{KL} [\pi_{\theta_{\text{old}}}( \cdot |s_t), \pi_{\theta}(\cdot |s_t)]] d=E^t[KL[πθold(st),πθ(st)]]

    - 如果 d < d t a r g / 1.5 d<d_{targ}/1.5 d<dtarg/1.5 β ← β / 2 \beta \gets \beta/2 ββ/2

    - 如果 d > d t a r g × 1.5 d>d_{targ}\times 1.5 d>dtarg×1.5 β ← β × 2 \beta \gets \beta \times 2 ββ×2

更新后的 β \beta β 用于下一次策略更新。在这种方案下,作者偶尔会看到 KL 散度与目标值 d t a r g d_{targ} dtarg 显著不同的策略更新,但这些情况很少见,并且 β \beta β 会迅速调整。上述参数 1.5 和 2 是启发式选择的,但算法对它们并不十分敏感。 β \beta β 的初始值是另一个超参数,但在实际应用中并不重要,因为算法会迅速调整它。

5 Algorithm

前几节中的代理损失可以通过对典型的策略梯度实现进行一个小的修改来计算和求导。对于使用自动微分的实现,只需构造损失函数 L C L I P L^{CLIP} LCLIP L K L P E N L^{KLPEN} LKLPEN 来代替 L P G L^{PG} LPG,并在此目标上执行多步随机梯度上升。

大多数用于计算方差缩减的优势函数估计器的技术都利用了学习到的状态价值函数 V ( s ) V(s) V(s);例如,广义优势估计 [Sch+15a] 或 [Mni+16] 中的有限时域估计器。如果使用在策略和价值函数之间共享参数的神经网络架构,作者必须使用一个结合策略代理和价值函数误差项的损失函数。根据以往的研究[Wil92; Mni+16],可以通过添加熵奖励来进一步增强这一目标,以确保充分的探索。结合这些项,作者得到以下目标,该目标在每次迭代中被(近似)最大化:

L t C L I P + V F + S ( θ ) = E ^ t [ L t C L I P ( θ ) − c 1 L t V F ( θ ) + c 2 S [ π θ ] ( s t ) ] (9) L^{CLIP+VF+S}_t(\theta)=\hat{\mathbb{E}}_t[L^{CLIP}_t(\theta)-c_1L^{VF}_t(\theta)+c_2S[\pi_{\theta}](s_t)] \tag{9} LtCLIP+VF+S(θ)=E^t[LtCLIP(θ)c1LtVF(θ)+c2S[πθ](st)](9)

其中, c 1 c_1 c1 c 2 c_2 c2 是系数, S S S 表示熵奖励, L t V F L^{VF}_t LtVF 是平方误差损失 ( V θ ( s t ) − V t targ ) 2 (V_\theta (s_t)-V^{\text{targ}}_t)^2 (Vθ(st)Vttarg)2

一种策略梯度实现方式,由[Mni+16]推广并非常适合与循环神经网络一起使用,即在 T T T 个时间步(其中 T T T 远小于回合长度)内运行策略,并使用收集到的样本进行更新。这种方式需要一个不超出时间步长 T T T 的优势估计器。[Mni+16]使用的估计器是

A ^ t = − V ( s t ) + r t + γ r t + 1 + ⋯ + γ T − t + 1 r T − 1 + γ T − t V ( s T ) (10) \hat{A}_t = -V(s_t)+r_t+\gamma r_{t+1}+ \cdots +\gamma^{T-t+1}r_{T-1}+\gamma^{T-t}V(s_T) \tag{10} A^t=V(st)+rt+γrt+1++γTt+1rT1+γTtV(sT)(10)

其中 t t t 指定在给定长度为 T T T 的轨迹段内的时间索引[0, T T T]。将此选择进行泛化,作者可以使用广义优势估计的截断版本,当 λ = 1 \lambda=1 λ=1 时,它将简化公式(10)为:

A ^ t = δ t + ( γ λ ) δ t + 1 + ⋯ + ⋯ + ( γ λ ) T − t + 1 δ T − 1 (11) \hat{A}_t = \delta_t + (\gamma \lambda )\delta_{t+1} + \cdots + \cdots + (\gamma \lambda )^{T-t+1}\delta _{T-1} \tag{11} A^t=δt+(γλ)δt+1+++(γλ)Tt+1δT1(11)
其中
δ t = r t + γ V ( s t + 1 ) − V ( s t ) (12) \delta_t = r_t+\gamma V(s_{t+1})-V(s_t) \tag{12} δt=rt+γV(st+1)V(st)(12)

以下是使用固定长度轨迹段的近端策略优化(PPO)算法。每次迭代时, N N N 个(并行)执行者中的每一个都会收集 T T T 个时间步的数据。然后,作者在这 N T NT NT 个时间步的数据上构建代理损失,并使用小批量 SGD(或通常为了更好的性能,使用 Adam [KB14])进行 K K K 次迭代优化。

在这里插入图片描述

6 Experiments

6.1 Comparison of Surrogate Objectives

首先,作者在不同超参数下比较几种不同的替代目标函数。在这里,作者将替代目标函数 L C L I P L^{CLIP} LCLIP 与几种自然变体和消融版本进行比较。

无裁剪或惩罚: L t ( θ ) = r t ( θ ) A ^ t L_t(\theta) = r_t(\theta) \hat{A}_t Lt(θ)=rt(θ)A^t
裁剪: L t ( θ ) = min ⁡ ( r t ( θ ) A ^ t , clip ( r t ( θ ) ) , 1 − ϵ , 1 + ϵ ) A ^ t L_t(\theta) = \min(r_t(\theta)\hat{A}_t , \text{clip}(r_t(\theta)),1-\epsilon ,1+\epsilon ) \hat{A}_t Lt(θ)=min(rt(θ)A^t,clip(rt(θ)),1ϵ,1+ϵ)A^t
KL 惩罚(固定的或自适应的) L t ( θ ) = r t ( θ ) A ^ t − β  KL [ π θ old , π θ ] L_t(\theta) = r_t(\theta)\hat{A}_t -\beta \ \text{KL}[\pi_{\theta_{\text{old}}},\pi_\theta] Lt(θ)=rt(θ)A^tβ KL[πθold,πθ]

对于 KL 惩罚,可以使用固定的惩罚系数 β \beta β,或者第 4 节中描述的使用目标 KL 值 d t a r g d_{targ} dtarg 的自适应系数。注意,作者也尝试了对数空间中的裁剪,但发现性能并没有更好。

由于作者正在为每种算法变体搜索超参数,因此作者选择了一个计算成本较低的基准来测试这些算法。即,作者使用了在 OpenAI Gym [Bro+16]中实现的7个模拟机器人任务,这些任务使用了MuJoCo [TET12]物理引擎。作者在每个任务上进行100万时间步的训练。除了用于裁剪( ϵ \epsilon ϵ) 和KL惩罚 ( β \beta β d t a r g d_{targ} dtarg) 的超参数(作者在这些超参数上进行搜索),其他超参数在表 3 中给出。

为了表示策略,作者使用了一个全连接的 MLP,它有两个隐藏层,每层64个单元,并使用tanh非线性激活函数,输出高斯分布的均值,可变的标准差,遵循[Sch+15b; Dua+16]的方法。作者没有在策略和价值函数之间共享参数(因此系数 c 1 c_1 c1不相关),也没有使用熵奖励。

每种算法在所有 7 个环境中运行,每个环境使用 3 个随机种子。作者通过计算最后 100 个回合的平均总奖励来为每次算法运行评分。作者对每个环境的分数进行了平移和缩放,使得随机策略的得分为 0,最佳结果设置为 1,并对 21 次运行取平均,为每个算法设置生成一个标量值。

结果如表 1 所示。请注意,在没有裁剪或惩罚的设置下,得分为负值,因为在一个环境(half cheetah)中,它导致了一个非常负的分数,比初始随机策略更差。

在这里插入图片描述

6.2 Comparison to Other Algorithms in the Continuous Domain

接下来,作者将 PPO(使用第 3 节中的“裁剪”替代目标)与文献中的几种其他方法进行比较,这些方法被认为对连续问题有效。作者与以下算法的调优实现进行了比较:信任域策略优化[Sch+15b],交叉熵法(CEM)[SL06],带有自适应步长的 vanilla 策略梯度,A2C [Mni+16],以及带有信任域的A2C [Wan+16]。A2C 代表优势演员-评论家,是 A3C 的同步版本,作者发现其性能与异步版本相同或更好。对于 PPO,作者使用了前一节的超参数,其中 ϵ = 0.2 \epsilon = 0.2 ϵ=0.2。作者发现,PPO 在几乎所有连续控制环境中都优于之前的方法。

在这里插入图片描述

6.3 Showcase in the Continuous Domain: Humanoid Running and Steering

为了展示PPO在高维连续控制问题上的性能,作者在一组涉及 3D 人形机器人的问题上进行训练,机器人必须跑步、转向和从地面上站起来,可能同时被方块击中。作者测试的三个任务是(1)RoboschoolHumanoid:仅向前运动,(2)RoboschoolHumanoidFlagrun:目标位置每 200 个时间步或在达到目标时随机变化,(3)RoboschoolHumanoidFlagrunHarder:机器人被方块击中并需要从地面上站起来。关于学习策略的静态帧见图 5,关于三个任务的学习曲线见图 4。超参数在表 4 中提供。在并行工作中,Heess 等人[Hee+17]使用了 PPO 的自适应 KL 变体(第4节)来学习 3D 机器人的运动策略。

在这里插入图片描述

在这里插入图片描述

6.4 Comparison to Other Algorithms on the Atari Domain

作者还在 Arcade 学习环境 [Bel+15]基准上运行了 PPO,并与调优良好的 A2C [Mni+16]和 ACER [Wan+16]实现进行了比较。对于所有三种算法,作者使用了与[Mni+16]中相同的策略网络架构。PPO 的超参数在表 5 中提供。对于其他两种算法,作者使用了调优后的超参数以最大化在此基准上的性能。

所有49个游戏的结果表和学习曲线在附录B中提供。作者考虑以下两个评分指标:(1)整个训练期间的每回合平均奖励(偏向快速学习),(2)训练最后100回合的每回合平均奖励(偏向最终性能)。表2显示了每种算法“赢得”的游戏数量,其中作者通过对三次试验的评分指标进行平均来计算胜利者。

在这里插入图片描述

7 Conclusion

作者介绍了近端策略优化(PPO),这是一类策略优化方法,使用多轮随机梯度上升来进行每次策略更新。这些方法具有信任域方法的稳定性和可靠性,但实现起来要简单得多,只需对 vanilla 策略梯度实现进行少量代码修改,适用于更广泛的设置(例如,当策略和价值函数使用联合架构时),并且具有更好的整体性能。

论文链接: https://arxiv.org/abs/1707.06347