ICLR2020 满分论文:PPO 带来的性能提升来源于 code-level?

论文速递 hello_uncle ⋅ 于 1个月前 ⋅ 244 阅读

笔者在新鲜出炉的ICLR中的一篇满分论文“Implematation matters in deep policy gradients: A Case Study On PPO And TRPO”中发现,作者通过对PPO与TRPO两种算法进行探索实验,发现:给PPO带来真正的性能上(cumulative reward)提升以及将policy约束在trust region内的效果,都不是通过PPO论文中提出的对新的policy和原policy 的比值进行裁切(clip)带来的,而是通过code-level的一些技巧带来的。

一、摘要

笔者直译水平一般,因此在这里仅写出笔者所理解的原文摘要表达的意思。

作者从代码层面上的优化,以及算法提出的核心改进两个方面上探索了近年来提出的著名的PPO和TRPO两种算法。通过探索实验发现,PPO中所使用的代码层面的优化技巧对agent的表现产生了极大的影响。因此,要真正地发现影响agent性能和行为的因素是非常重要也是非常困难的。(比如PPO算法中影响agent性能的主要因素竟然不是算法提出的裁切思想,而是未在论文上写明的代码层面上的优化)

二、简单回顾PPO与TRPO

TRPO(Trust Region Policy Optimization)[2]的核心优化公式如下:

file

提出这个公式的动机就是希望在policy朝着最优方向优化的同时,相对于原policy的变化程度不能过大(过大会带来噪声与高方差),这个变化程度就通过计算policy变化前后分布的KL散度来衡量,并将KL散度约束在阈值内;

PPO(Proximal Policy Optimization)[3] 的核心优化公式如下:

file

PPO认为TRPO的缺陷在于计算复杂度过大(参考[3]),因此没有计算KL散度的约束,而是提出了更为简洁的优化目标,直接对新的policy 和原来的policy的比值进行裁切,强行让其限制在某个范围内,并取裁切前后的与Advantage function 乘积的最小值进行优化。

PPO论文中未提到的代码层面的优化技巧

作者在原文中共列出了9条在PPO的代码中用到而论文中未提出来的优化技巧,由于作者只是用了前4个优化技巧进行实验,因此笔者在这里只介绍前4个代码层面的技巧。

1、Value function clipping

在RL中计算TD-error时常用的表达式为:

file

而在PPO的代码中对值函数进行了裁切后,才计算TD-error:

file

2、Reward scaling(不知道scale怎么翻,反正就是乘个尺度)

在PPO的代码中没有直接使用env带来的直接奖励 ,而是维护了一个关于累积奖励的均值和标准差的变量,对每个新到来的奖励均做了除以累积奖励的标准差的操作,具体过程如下:

file

来源:[1]

3、Orthogonal initialization and layer scaling

PPO的网络参数使用的是正交初始化,而不是随机初始化(这和常规不同)和layer scaling的技巧。

4、Adam learning rate annealing

PPO用的Adam优化方法,学习率是退火式下降的,而非固定不变的。(不是直接tf.train.Adamoptimizer(learning_rate).minimize(...))

后续的几个优化技巧很简单,比如对状态向量进行归一化,裁切,对奖励进行裁切,激活函数的选择等。具体参考[1]

四、实验结果

作者通过设计了五组算法来进行实验,五组算法分别如下表所示:

file来源:[1]

其中,

PPO:使用了PPO论文中提到的对进行裁切的操作,也用到了代码层面的优化技巧;

PPO-M:仅仅使用了PPO论文中提到的对进行裁切的操作,没有使用任何代码层面的优化技巧;

PPO-NoCLIP:仅仅使用代码层面的优化技巧,没有使用PPO论文中提到的对进行裁切的操作;

TRPO:使用了TRPO论文中的优化公式,但未使用任何代码层面的优化技巧;

TRPO+:在TRPO中加入了PPO代码层面的优化技巧。

接下来,看看作者完成的实验:

file来源:[1]

上面这个实验从agent的整体性能(Mean Reward)、policy的震荡程度(  )以及新policy和原policy的KL散度三个方面对比了TRPO,PPO以及PPO-M。

从上图(从左至右)可以看到:

(1)Mean Reward:绿色系PPO表现要明显优于蓝色系的PPO-M和紫色系的的TRPO,值得注意的是PPO-M去掉的是代码层面的优化技巧,TRPO也没有用到PPO在代码层面的优化技巧。这表明了代码层面上的优化技巧对agent的整体性能影响较大。

(2):紫色系的TRPO的policy的波动要远远超过绿色系的PPO和蓝色系的PPO-M,蓝色系的PPO-M略高于绿色系的PPO。笔者理解的是这个图是为了给第(3)幅图做铺垫,结合(2)和(3)以看出对不同算法对新policy和原policy的KL散度的约束能力。

(3)mean KL:在(2)中可以看到,紫色系的TRPO的policy波动极大,而经过约束后的平均KL散度已经稳定在左右;而对于略高于PPO的PPO-M,其平均的KL散度却随着迭代次数的增长有线性甚至指数增长的趋势。注意PPO-M是仅仅使用了PPO论文中的裁切操作的,这表明PPO论文中的裁切操作并没有明显的约束KL散度的作用。

再来看两个更加清晰的表格。

file来源:[1]

file来源:[1]

表格内容可以理解为五中算法在不同TASK上的得分情况。根据上述表格,可以得出以下结论:

(1)PPO-M在三个TASK上的表现要明显逊于PPO,且TRPO在所有TASK中的表现均远逊于TRPO+。而这之间的差别是是否使用了代码层面的优化技巧,这表明了代码层面的优化技巧对agent的性能表现有很大的影响;

(2)PPO-NoCLIP和PPO在四个TASK上的表现可以说是无明显差别。**这表明了PPO论文里提出的裁切技巧的使用与否对agent的性能表现没有很大的影响(至少不如代码层面的优化技巧带来的影响)。**

五、总结

作者通过深入探索近几年提出的算法PPO和TRPO,并通过实验说明了给PPO带来良好的性能表现与约束policy的变化程度的效果更加可能是来源于代码层面的优化技巧,而不是来源于论文中所提到的对的裁切技巧。

最后作者建议在设计RL算法时,应该仔细考虑算法中的每个部分可能对agent的性能带来的影响,一旦一个算法过于复杂,则难以分析究竟是哪一部分给agent带来的优异表现。

贴出作者原文的建议:

file来源:[1]

笔者认为作者提出的建议是非常值得学习考虑的。现在到处用的都是Deep RL,如果不仔细理解每一个技巧能够带来的性能影响,而是code tricks以一把梭的形式全部扔到炉子里去炼,则得出的丹药所具备的功能都不知道来源于哪一味原材料,这是非常不严谨的。

参考文献:

【1】Implementation Matters in Deep RL: A Case Study on PPO and TRPO,openreview.net/forum?

【2】John Schulman, Sergey Levine, Pieter Abbeel, Michael Jordan, and Philipp Moritz. Trust region policy optimization. In International Conference on Machine Learning, pp. 1889–1897, 2015a.

【3】John Schulman, Filip Wolski, Prafulla Dhariwal, Alec Radford, and Oleg Klimov. Proximal policy optimization algorithms. arXiv preprint arXiv:1707.06347, 2017.

来源:https://zhuanlan.zhihu.com/p/99061859
作者:风清云
本文来自知乎专栏,仅供学习参考使用,著作权归作者所有。如有侵权,请私信删除。


*延伸阅读

file
△ 关注极市平台
获得最新CV干货

大叔

成为第一个点赞的人吧 :bowtie:
回复数量: 0
暂无回复~
您需要登陆以后才能留下评论!