Ale*_*man 33 machine-learning reinforcement-learning
我知道强化学习的基础知识,但是为了能够阅读arxiv PPO论文需要了解哪些条款?
学习和使用PPO的路线图是什么?
mat*_*lso 86
其他答案已经说了一些关于PPO的有用的东西,但我不认为他们在基础知识(需要TRPO的知识,这是一个数学密集和难以理解的方法)中得到了充分的理解,或者对剪辑目标函数正在做.
为了更好地理解PPO,有必要查看本文的主要贡献,它们是:(1) Clipped Surrogate Objective和(2)使用"随机梯度上升的多个时期来执行每个策略更新".
首先,在原始PPO论文中提出这些要点:
我们引入了[PPO],这是一系列策略优化方法,使用多个随机梯度上升时期来执行每个策略更新.这些方法具有信任区域[ TRPO ]方法的稳定性和可靠性,但实现起来要简单得多,只需要几行代码更改为一个普通的策略梯度实现,适用于更一般的设置(例如,使用联合时)政策和价值功能的架构),并有更好的整体表现.
Clipped Surrogate Objective是政策梯度目标的直接替代品,旨在通过限制您在每个步骤对策略所做的更改来提高培训稳定性.
对于您应该熟悉的香草政策梯度(例如,REINFORCE)---或者在您阅读之前熟悉自己 - 用于优化神经网络的目标如下:
这是您在Sutton书中看到的标准公式,以及其他 资源,其中优势(A hat)经常被折扣回报所取代.通过对网络参数的这种损失采取梯度上升步骤,您将激励导致更高奖励的行为.
vanilla策略梯度方法使用您的操作的对数概率(logπ(a | s))来跟踪操作的影响,但您可以想象使用另一个函数来执行此操作.本文介绍的另一个这样的函数使用当前策略下的动作概率(π(a | s))除以先前策略下的动作概率(π_old(a | s)).如果你熟悉它,这看起来有点类似于重要性抽样:
当您对当前政策的可能性比您的旧政策更有可能时,此r(θ)将大于1 ; 如果您的当前政策的可能性比您的旧政策更不可能,那么它将介于0和1之间.
现在用这个r(θ)建立一个目标函数,我们可以简单地将它换成logπ(a | s)项.这是在TRPO方法中完成的:
但是,要在这里,如果你的动作是发生多更可能(如100倍以上),你目前的政策? r(θ)往往会非常大,并导致采取可能破坏您的政策的大梯度步骤.为了解决这个问题和其他问题,TRPO方法增加了一些额外的花里胡哨(例如,KL Divergence约束)来限制政策可以改变的数量并帮助保证它是单调改进的.
如果我们可以将这些属性构建到目标函数中,而不是添加所有这些额外的钟声和口哨声?正如您可能猜到的,这就是PPO所做的.它通过优化这个简单(但有点滑稽的)Clipped Surrogate目标获得了相同的性能优势并避免了复杂性:
最小化内的第一项(蓝色)与我们在TRPO目标中看到的相同(r(θ)A)项.第二项(红色)是(r(θ))被夹在(1-e,1 + e)之间的版本.(在论文中,他们指出e的良好值约为0.2,因此r可以在〜(0.8,1.2)之间变化.然后,最后,采用这两个术语的最小化(绿色).
花点时间仔细研究方程,确保你知道所有符号的含义,并从数学上知道发生了什么.查看代码也可能有所帮助; 这是OpenAI 基线和anyrl-py实现中的相关部分.
大.
接下来,让我们看看L剪辑功能创建的效果.以下是本文的图表,该图表绘制了当优势为正和负时剪辑目标的值:
在图的左半部分,其中(A> 0),这是行动对结果有估计的积极影响的地方.在图的右半部分,其中(A <0),这是行动对结果产生估计负面影响的地方.
请注意,如果左边的r值过高,r值会被削减.如果根据现行政策采取的行动比旧政策更有可能发生这种情况,就会发生这种情况.当发生这种情况时,我们不希望变得贪婪并且走得太远(因为这只是我们政策的局部近似和样本,所以如果我们走得太远就不准确),因此我们将目标剪切到预防它来自成长.(这将在阻止渐变的向后传递中产生影响---导致渐变为0的平线).
在图表的右侧,操作对结果产生了估计的负面影响,我们看到剪辑激活在0附近,而当前政策下的操作不太可能.这个裁剪区域同样会阻止我们更新太多,以便在我们已经采取了一大步措施以降低其可能性之后更不可能采取行动.
因此,我们发现这两个剪切区域都会阻止我们过于贪婪,并试图立即更新太多而离开该样本提供良好估计的区域.
但是为什么我们让r(θ)在图的最右侧无限增长?这首先看起来很奇怪,但在这种情况下会导致r(θ)增长的原因是什么? r(θ)在这个区域的增长将由一个梯度步骤引起,这使我们的行动 更有可能,并且结果使我们的政策更糟.如果是这种情况,我们希望能够撤消该梯度步骤.事实上,L剪辑功能允许这样做.这里的函数是负的,所以渐变将告诉我们走向另一个方向并使动作不太可能与我们拧紧它的量成比例.(请注意,图的最左侧有一个类似的区域,其中动作很好,我们不小心让它变得不太可能.)
这些"撤消"区域解释了为什么我们必须在目标函数中包含奇怪的最小化项.它们对应于未剪辑的r(θ)A,其具有比剪辑版本更低的值并且通过最小化返回.这是因为他们走错了方向(例如,行动很好,但我们不小心让它变得不太可能).如果我们没有在目标函数中包含min,那么这些区域将是平坦的(梯度= 0)并且我们将被阻止修复错误.
这是一个总结这个的图表:
这就是它的要点.Clipped Surrogate Objective只是您可以在vanilla策略渐变中使用的替代品.限幅限制了您可以在每个步骤中进行的有效更改,以提高稳定性,并且最小化允许我们修复我们的错误,以防我们搞砸了.我没有讨论过的一件事是PPO的意思是文章中讨论的"下限".有关这方面的更多信息,我建议作者给出的这部分讲座.
与vanilla策略渐变方法不同,并且由于Clipped Surrogate Objective功能,PPO允许您在样本上运行多个渐变上升时期,而不会导致破坏性的大型策略更新.这使您可以从数据中挤出更多数据并降低样本效率.
PPO使用每个收集数据的N个并行参与者运行策略,然后使用Clipped Surrogate Objective函数对这些数据的小批量进行采样以训练K个时期.请参阅下面的完整算法(近似参数值为:K = 3-15,M = 64-4096,T(地平线)= 128-2048):
并行参与者部分由A3C论文推广,并已成为收集数据的一种相当标准的方式.
新的部分是它们能够在轨迹样本上运行梯度上升的K个时期.正如他们在论文中所述,对于数据的多次传递运行vanilla策略梯度优化将是很好的,这样您就可以从每个样本中学到更多.然而,这在香草方法的实践中通常是失败的,因为它们对当地样本采取了太大的步骤,这破坏了政策.另一方面,PPO具有内置机制来防止过多的更新.
对于每次迭代,在用π_old(第3行)对环境进行采样之后,当我们开始运行优化(第6行)时,我们的策略π将完全等于π_old.因此,首先,我们的所有更新都不会被剪裁,我们保证会从这些示例中学到一些东西.然而,当我们使用多个时期更新π时,目标将开始达到限幅,对于那些样本,渐变将变为0,并且训练将逐渐停止......直到我们继续下一次迭代并收集新样本.
....
这就是现在.如果您有兴趣获得更好的理解,我建议您在原始论文中加入更多内容,尝试自己实现它,或者深入了解基线实现并使用代码.
[编辑:2019/01/27]:为了更好的背景以及PPO如何与其他RL算法相关,我还强烈建议您查看OpenAI的Spinning Up资源和实现.
小智 10
PPO,包括TRPO试图保守地更新策略,而不会在每次策略更新之间不利地影响其性能.
为此,您需要一种方法来衡量每次更新后策略的更改量.通过查看更新的策略与旧策略之间的KL差异来完成此度量.
这成为一个受约束的优化问题,我们希望在最大性能方向上改变策略,遵循新策略与旧策略之间的KL差异不超过某个预定义(或自适应)阈值的约束.
使用TRPO,我们在更新期间计算KL约束并找到该问题的学习速率(通过Fisher矩阵和共轭梯度).实施起来有些混乱.
使用PPO,我们通过将KL偏差从约束转换为惩罚项来简化问题,类似于例如L1,L2权重惩罚(以防止权重增大的大值).PPO通过将策略比率(更新的策略与旧的比率)硬限制在1.0左右的小范围内,消除了共同计算KL分歧的需要,从而进行了额外的修改,其中1.0表示新策略与旧策略相同.