Implementation Matters in Deep Policy Gradients: A Case Study on PPO and TRPO

郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布!

 

Published as a conference paper at ICLR 2020

 

ABSTRACT

  我们通过对两种流行算法:近端策略优化(PPO)和信任区域策略优化(TRPO)的案例研究,研究了深度策略梯度算法中算法进步的根源。具体来说,我们研究了“代码级优化”的后果:仅在实现中发现的算法增强,或被描述为核心算法的辅助细节。这种优化似乎是次要的,结果对智能体行为产生了重大影响。我们的结果表明,它们(a)对PPO在TRPO的累积奖励中的大部分收益负责,(b)从根本上改变了RL方法的运作方式。这些见解表明了在深度强化学习中归因性能收益的难度和重要性。

 

1 INTRODUCTION

  深度强化学习(RL)算法推动了现代机器学习中许多最广为人知的成就(Silver et al.,2017;OpenAI,2018;Abbeel & Schulman,2016;Mnih et al.,2013)。然而,尽管取得了这些成就,深度RL方法仍然不如(深度)监督学习方法可靠。事实上,最近的研究发现,现有的深度RL方法很脆弱(Henderson et al.,2017;Zhang et al.,2018),很难复制(Hendersonet al.,2017;Tucker et al.,2018),不可靠的跨运行(Henderson et al.,2017;2018),有时在简单的基线下表现出色(Mania et al.,2018)。

  这些问题的普遍性指向了一个更广泛的问题:我们不理解组成深度RL算法的部分是如何单独或整体影响智能体训练的。这种不令人满意的理解表明,我们应该重新评估算法的内部工作。事实上,激励我们工作的总体问题是:深度RL训练算法中使用的多种机制如何影响智能体行为?

Our contributions. 我们分析了智能体行为的基础——既通过传统的累积报酬度量,也通过测量更精细的算法属性。作为第一步,我们对两种最流行的深度策略梯度方法进行了案例研究:信任区域政策优化(TRPO)(Schulman et al.,2015a)和近端政策优化(PPO)(Schurman et al.,2017)。这两种方法密切相关:PPO最初是作为TRPO的改进而开发的。

  我们发现,PPO带来的奖励的大部分改善可能来自于对核心算法的看似微小的修改,我们称之为代码级优化。这些优化要么仅在PPO的实现中找到,要么被描述为辅助细节,并且不存在于相应的TRPO基线中1。我们确定了这些修改,并进行了消融研究,证明它们对PPO的性能有帮助。

  这一观察结果促使我们研究代码级优化如何改变智能体训练动态,以及我们是否可以真正将这些优化视为仅仅是辅助改进。我们的结果表明,这些优化从根本上改变了算法的操作,甚至超越了对智能体奖励的改进。我们发现,它们主要影响TRPO和PPO操作背后的一个关键算法原则:信任区域强制执行(trust region enforcement)。

  最终,我们发现PPO代码优化在实现最终奖励方面比选择通用训练算法(TRPO与PPO)更重要。这一结果与之前的观点形成了鲜明对比,即中央PPO裁剪方法驱动了Schulman等人(2017)的增益。在这样做的过程中,我们证明了这种优化所带来的算法变化使算法的严格比较变得困难。如果不严格了解代码级优化的全部影响,我们就无法通过比较基准任务上的算法来获得任何可靠的见解。

  我们的研究结果强调了以模块化方式构建RL方法的重要性。为了朝着更高性能和更可靠的算法发展,我们需要了解每个组件对智能体的行为和性能的影响,无论是单独的还是作为整体的一部分。

  这项工作中显示的所有结果的代码可在https://github.com/MadryLab/implementation-matters。

 

1 请注意,这些代码级优化与“实现选择”(如PyTorch与TensorFlow的选择)是分开的,因为它们有意改变训练算法的操作。

 

2 RELATED WORK

  使用梯度估计来更新基于神经网络的RL智能体的想法至少可以追溯到Williams(1992)的工作,他提出了REINFORCE算法。后来,Sutton等人(1999)建立了一个统一的框架,将以前的算法作为策略梯度方法的实例。

  我们的工作重点是近端策略优化(PPO)(Schulman et al.,2017)和信任域策略优化(TRPO)(Schulman et al.,2015a),这是深度RL中使用的两种最突出的策略梯度算法。使用信任区域的最初灵感很大程度上源于Kakade(2001)的保守策略更新。此策略更新与TRPO类似,使用基于自然梯度下降的贪婪策略更新。TRPO也与Peters等人(2010)的相对策略熵搜索方法相似,该方法约束边际动作分布之间的距离(而TRPO约束此类动作分布的条件)。

  值得注意的是,Henderson等人(2017)指出了深度RL算法中的一些脆性、复现性和实验实践问题。重要的是,我们建立在Henderson等人(2017)的观察基础上,给定算法的最终奖励会受到所使用的代码库很大影响。Rajeswaran等人(2017)和Mania等人(2018)还证明,在许多基准任务中,PPO和TRPO的性能可以通过相当基本的随机搜索方法来匹配。此外,Tucker等人(2018)表明,最近提出的策略梯度框架的扩展之一,即使用同样依赖于动作(除了依赖于状态)的基线函数,可能最终不会带来更好的策略。

 

3 ATTRIBUTING SUCCESS IN PROXIMAL POLICY OPTIMIZATION

  我们的首要目标是更好地理解深层政策梯度方法的行为基础。因此,我们对两种紧密相连的算法进行了仔细研究:TRPO和PPO(回想一下,PPO是作为具有不同信任区执行机制的TRPO来激励的)。为了更好地理解这些方法,我们首先要彻底研究它们在实践中的实现。我们发现,与TRPO相比,PPO实现包含许多非平凡的优化,这些优化在其相应的论文中没有(或几乎没有)描述。事实上,PPO的标准实现2包含以下额外的优化:

  1. Value function clipping: Schulman等人(2017)最初建议通过回归到目标值来拟合价值网络:

但标准实现方式反而适合具有类似PPO的目标的价值网络:

其中Vθ在先前的价值估计周围被裁剪(并且ε被固定为与PPO损失函数中用于剪裁概率比的值相同的值(参见第4节中的公式(2))。

  2. Reward scaling: PPO实现不是将环境中的奖励直接输入目标,而是执行某种基于折扣的扩展方案。在该方案中,奖励除以奖励的滚动折扣和的标准差(不减去并且重新加上平均值)——见附录A.2中的算法1。

  3. Orthogonal initialization and layer scaling: 该实现没有使用策略和价值网络的默认权重初始化方案,而是使用了一种正交初始化方案,其缩放比例因层而异。

  4. Adam learning rate annealing: 根据任务的不同,实现有时会退火Adam(Kingma & Ba,2014)(一种已经自适应的方法)的学习率以进行优化。

  5. Reward Clipping: 该实现还将奖励裁剪在预设范围内(通常[-5, 5]或[-10, 10])。

  6. Observation Normalization: 与奖励类似,原始状态也不会输入优化器。相反,首先将状态归一化为均值为零、方差为一的向量。

  7. Observation Clipping: 为了获得奖励,观察结果也会在一定范围内进行裁剪,通常为[-10, 10]。

  8. Hyperbolic tan activations: 正如Henderson等人(2017)所观察到的,策略梯度算法的实现也使用了策略和价值网络中各层之间的双曲正切函数激活。

  9. Global Gradient Clipping: 在计算了关于策略和价值网络的梯度之后,实现将梯度剪裁为“全局l2范数”(即所有参数的级联梯度的范数)不超过0.5。

  这些优化可能看起来只是对现有核心策略梯度方法的表面级或微不足道的算法更改。然而,我们发现它们极大地影响了PPO的性能。具体而言,我们对上述四种优化进行了全面的消融研究3。图1显示了使用上述优化的每一种可能配置训练的智能体的最终奖励的直方图。对于每一种配置,执行最优学习率的网格搜索,并且我们测量使用相同的学习率训练的随机智能体的奖励。我们的研究结果表明,许多代码级别的优化对于PPO实现其声称的性能是必要的。

  上述发现表明,我们从算法角度理解PPO的能力取决于从这种与算法无关的优化中提取其基本原理的能力(从某种意义上说,这些优化可以用于任何策略梯度方法)。因此,我们考虑了一种称为PPO-MINIMAL(PPO-M)的PPO变体,它只实现算法的核心。PPO-M使用标准值网络损失、无奖励缩放、默认网络初始化和固定学习率的Adam。重要的是,PPO-M忽略了第3节开头列出的所有代码级优化。我们与PPO和TRPO一起探索PPO-M。我们在表1中列出了我们研究的所有算法及其定义的属性。

  总的来说,我们关于这些优化重要性的结果既证实了证明深度策略梯度方法脆弱性的结果,也证明了即使在环境脆弱性之外,算法本身对实现选择也表现出很高的敏感性4

2 从OpenAI基线GitHub库:https://github.com/openai/baselines

3 由于计算资源的限制,我们只能对确定的前四个优化进行完全消融。

4 这也可能解释在Henderson等人(2017)中观察到的不同代码库之间的差异

 

4 CODE-LEVEL OPTIMIZATIONS HAVE ALGORITHMIC EFFECTS

  在我们的消融研究中发现的代码级别优化的看似不成比例的效果可能会让我们问:这些看似肤浅的代码级别的优化如何影响潜在的智能体行为?在本节中,我们将演示代码级优化从根本上改变智能体行为。这种优化不仅仅是提高最终累积奖励,而是直接影响激励核心算法的原则。

Trust Region Optimization. 策略梯度算法的一个关键特性是,在任何特定策略处计算的更新步骤仅保证在θt周围的邻域中的可预测性。因此,为了确保我们导出的更新步骤保持预测性,许多策略梯度算法确保这些步骤保持在当前策略的附近。由此产生的“信任区域”方法(Kakade,2001;Schulman et al.,2015a;2017)试图通过限制连续策略之间的分布距离来限制策略空间中参数的局部变化。

  这一类中流行的方法是信任区域策略优化(TRPO)(Schulman et al.,2015a)。TRPO限制了优化轨迹上连续策略之间的KL偏差,导致以下问题:

  在实践中,我们用KL散度和自然梯度下降的二阶近似来最大化这个目标,并用基于当前轨迹中观察到的状态的平均KL的近似来代替所有可能状态上的最坏情况KL约束。

Proximal policy optimization. TRPO算法的一个缺点是,使用非线性共轭梯度来估计步长方向可能计算成本很高,这需要计算多个Hessian向量乘积。为了解决这个问题,Schulman等人(2017)提出了近端策略优化(PPO),它试图用不同的目标强制执行信任区域,而不需要计算投影。具体而言,为了替换TRPO的KL约束目标(1),PPO建议通过直接将目标函数裁剪为下式:

其中:

请注意,该目标可以在没有显式投影步骤的情况下进行优化,从而在训练期间实现更简单的参数更新。除了其简单性之外,PPO还旨在比TRPO更快、更高效(Schulman et al.,2017)。

Trust regions in TRPO and PPO. 强制执行信任区域是不同策略梯度方法的核心算法属性。然而,从最终的奖励中无法直接观察到信任区域是否被强制执行。那么,在最先进的策略梯度方法中,这种算法属性是如何变化的呢?

  在图2中,我们测量了TRPO和PPO-M(没有代码级优化的PPO)的训练运行中连续策略之间的平均KL偏差。回想一下,TRPO是专门为约束这个基于KL的信任区域而设计的,而PPO的裁剪机制试图近似它。事实上,我们发现TRPO恰恰强化了这个信任区域(这不令人惊讶,并且几乎是通过构造)。

  因此,我们将注意力转向了PPO和PPO-M训练引起的信任区域。首先,我们在数学上考虑单个状态-动作对对PPO目标梯度的贡献,其由下式给出:

分别是代理目标的标准版本和剪裁版本。因此,由于我们初始化πθ为π(因此比率开始时都等于1),因此我们采取的第一步与在未修剪的代理目标上的最大化步骤相同。因此,有理由认为,强制执行的信任区域的性质在很大程度上取决于优化剪裁的PPO目标的方法,而不是目标本身。因此,我们所采取的步骤的大小完全由代理景观的陡峭度(即我们所解决的优化问题的Lipschitz常数)决定,并且我们最终可能会任意远离信任区域。我们假设,PPO对优化器属性而非优化目标的依赖性导致了算法对超参数的脆弱性,如Henderson等人(2018)和其他人观察到的学习率和动量。

  我们观察到的结果(如图2所示)证实了这种直觉。对于用最优参数训练的智能体,所有三种算法都能够维持基于KL的信任区域。首先,我们注意到,尽管PPO和PPO-M是用比率裁剪目标直接训练的,但所有三种算法都无法维持基于比率的信任区域。此外,尽管核心算法在两种方法之间保持不变,但在PPO和PPO-M之间强制执行的KL信任区域的性质不同;而PPO-M KL随着迭代次数的增加而呈上升趋势,而PPO KL在训练中途达到峰值,然后再次呈下降趋势。

  该实验的发现和相应的计算表明,即使从算法的角度来看,PPO训练的智能体行为中的一个关键因素可能来自辅助优化,而不是核心方法。

 

5 IDENTIFYING ROOTS OF ALGORITHMIC PROGRESS

  最先进的深度策略梯度方法由许多相互作用的组件组成。在通常被描述为其核心的地方,这些方法结合了信任区域执行步骤、时间相关的价值预测因子和控制开发/探索权衡的优势估计方法等机制(Schulman等人,2015b)。然而,这些算法也包含了许多不太常讨论的优化(参见第3节),这些优化最终决定了大部分智能体行为(参见第4节)。考虑到需要改进这些算法,这种优化如此重要的事实引出了一个问题:我们如何在深度策略梯度方法中确定算法进步的真正根源?

  不幸的是,回答这个问题并不容易。回到我们对PPO和TRPO的研究,人们普遍认为(并声称)PPO的关键创新是第4节中讨论的比率裁剪机制,它是PPO在TRPO基线上提高性能的原因。然而,我们已经表明,这种裁剪机制在理论上不足以维持信任区域,而且优化目标的方法似乎对由此产生的信任区域有显著影响。如果代码级优化因此对PPO的算法属性负有部分责任,那么它们是否也可能是PPO性能提高的关键因素?

  为了解决这个问题,我们开始通过再次考虑PPO和TRPO算法的变化,进一步区分PPO的核心裁剪机制及其代码级优化的影响。具体来说,我们研究了使用核心PPO和TRPO步骤如何改变模型性能,同时控制PPO标准实现中确定的代码级优化的效果(特别是,我们关注第3节中涵盖的那些)。这些代码级别的优化在很大程度上与算法无关,因此它们可以直接应用或轻微地适应任何策略梯度方法。先前引入的PPO-M算法对应于没有这些优化的PPO。为了进一步说明它们的影响,我们研究了一种额外的算法,我们将其称为TRPO+,由TRPO的核心算法贡献和PPO的代码级优化组成,如第3节所述5。我们注意到,TRPO+与引入的其他三种算法(PPO、PPO-M和TRPO;均列在表1中)现在捕获了核心算法和代码级优化的所有组合,使我们能够以细粒度的方式研究每种算法的影响。

  正如我们的结果在表2中所示,事实证明,代码级优化对算法性能提高的贡献往往比算法的选择大得多(即,使用PPO vs. TRPO)。例如,在Hopper-v2上,当配备代码级优化时,PPO和TRPO分别有17%和21%的改进。同时,对于确定使用或不使用优化的选择后的所有任务,所使用的核心算法似乎对奖励没有显著影响。在表2中,我们通过以下两个指标来量化这种对比,我们表示平均算法改进(AAI)和平均代码级别改进(ACLI):

  简言之,AAI测量切换步长算法的最大效果,而ACLI测量针对固定步长算法选择添加代码级优化的最大效果。

PPO without clipping. 考虑到与代码级优化的使用相比,步长机制相对微不足道,我们不禁要问:PPO的裁剪机制在多大程度上真正对算法的成功负责?在表3中,我们通过考虑PPO-NOCLIP算法来评估这一点,该算法利用了常见的代码级优化(通过网格化这些优化的最佳组合),但不使用裁剪机制(这与我们在第4节中在信任区强制执行的背景下研究的算法相同)——请记住,我们在表1中列出了所有研究的算法。

  事实证明,裁剪机制不是实现高性能所必需的。我们发现PPO-NOCLIP的性能均匀地优于PPO-M,尽管后者采用了核心PPO裁剪机制。此外,在对奖励的影响方面,引入代码级优化似乎甚至超过了核心PPO算法。事实上,我们发现,通过足够的超参数调整,PPO-NOCLIP通常与标准PPO的性能相匹配,其中包括代码级优化的标准配置6。我们还包括来自OpenAI基线库(Dhariwal et al.,2017)(如有)的基准PPO数字,以将结果纳入上下文。

  我们的结果表明,如果不仔细分析,很难将成功归因于策略梯度算法的不同方面。

5 我们还添加了一个新的代码级优化,即KL衰减,不适用于PPO,但旨在作为Adam学习速率退火的模拟。

6 请注意,可以在PPO之上添加对代码级优化的进一步细化,以可能在更大程度上提高其性能(毕竟,PPO-NOCLIP只能表示PPO所涵盖的训练算法的子集,因为后者将裁剪严重性ε留给自由参数)

 

6 CONCLUSION

  在这项工作中,我们迈出了研究深度策略梯度方法的机制如何在实现的奖励和潜在的算法行为方面影响智能体的第一步。为了从头开始理解智能体操作,我们深入研究了两种最流行的深度策略梯度方法:TRPO和PPO。在这样做的过程中,我们确定了许多“代码级优化”——仅在算法的实现中发现的算法增强,或在其表示中被描述为辅助细节,并发现这些优化对智能体性能有很大影响。

  事实上,这些看似不重要的优化以概念策略梯度框架无法预测的方式从根本上改变了算法操作。事实上,优化通常决定了由策略梯度算法强制执行的信任区域的性质,甚至控制了正在优化的代理目标。我们继续测试代码级优化在智能体性能中的重要性,并发现PPO相对于TRPO的显著改进(甚至随机梯度下降)在很大程度上可以归因于这些优化。

  总体而言,我们的研究结果强调了以模块化方式设计深度RL方法的必要性。在构建算法时,我们应该准确地了解每个组件如何在整体性能和底层算法行为方面影响智能体训练。如果没有这样的努力,就不可能正确地归因于构成深度RL方法的复杂系统中的成功和失败。更广泛地说,我们的研究结果表明,开发RL工具包需要超越当前基准驱动的评估模型,对深度RL方法有更精细的理解。

 

A APPENDIX

A.1 EXPERIMENTAL SETUP

  本文中使用的所有超参数都是通过网格搜索获得的。对于PPO,从OpenAI基线库7中获取精确的代码级优化及其相关联的超参数(例如,熵正则化、奖励裁剪等的系数),并且对价值函数学习速率、裁剪常数和学习率调度执行网格化。在TRPO中,我们对相同的参数进行网格划分(用KL约束代替学习率调度),但省略了代码级别的优化。对于PPO-NoClip,除了代码级优化的配置外,我们还使用与PPO相同的参数进行网格划分(因为我们缺乏这些优化的最佳配置的良好参考)。对于TRPO+,我们还对代码级优化进行了网格化,并实现了“KL调度”,通过该调度,KL约束可以随着训练而改变(类似于PPO中的学习率退火优化)。最后,对于PPO-M,我们在与PPO相同的参数上进行网格划分(只是学习率调度),而没有任何代码级别的优化。下面给出了每个算法的最终参数,我们的代码发布中提供了更详细的说明:https://github.com/MadryLab/implementation-matters。

  我们绘制的所有误差条都是通过自举采样获得的95%置信区间。

7 https://github.com/openai/baselines

 

A.2 PPO CODE-LEVEL OPTIMIZATIONS

 

A.3 TRUST REGION OPTIMIZATION

posted on 2023-03-23 14:27  穷酸秀才大草包  阅读(464)  评论(0)    收藏  举报

导航