如何理解强化学习中的近端策略优化算法?

我了解强化学习的基础知识,但要能够阅读arxiv PPO论文,需要理解哪些术语?

学习和使用PPO的路线图是什么?


回答:

为了更好地理解PPO,看看论文的主要贡献是有帮助的,这些贡献包括:(1) 剪切代理目标和 (2) 使用“多轮随机梯度上升来执行每次策略更新”。

来自原PPO论文

我们介绍了[PPO],一系列使用多轮随机梯度上升来执行每次策略更新的策略优化方法。这些方法具有信任区域[TRPO]方法的稳定性和可靠性,但实现起来要简单得多,只需对普通策略梯度实现进行几行代码的更改,适用于更广泛的环境(例如,当使用联合架构的策略和价值函数时),并且具有更好的整体性能。


1. 剪切代理目标

剪切代理目标是策略梯度目标的直接替代品,旨在通过限制每次步骤对策略的更改来改善训练稳定性。

对于普通策略梯度(例如,REINFORCE)——你应该已经熟悉,或者在阅读本文之前熟悉——用于优化神经网络的目标看起来像这样:

PG objective

这是你在Sutton书和其他资源中会看到的标准公式,其中A-hat可能是折扣回报(如REINFORCE中)或优势函数(如GAE中)。通过对网络参数进行梯度上升步骤,你将激励那些导致更高奖励的动作。

普通策略梯度方法使用动作的对数概率(log π(a | s))来追踪动作的影响,但你可以想象使用另一个函数来做这件事。另一个这样的函数,在这篇论文中引入,使用当前策略下的动作概率(π(a|s)),除以之前策略下的动作概率(π_old(a|s))。这看起来有点类似于重要性抽样,如果你熟悉的话:

r eq

当动作在当前策略下比在旧策略下更可能时,这个r(θ)将大于1;当动作在当前策略下比在旧策略下不太可能时,它将在0到1之间。

现在,为了使用这个r(θ)构建一个目标函数,我们可以简单地将其替换为log π(a|s)项。这就是在TRPO中所做的:

TRPO objective

但如果你的动作在当前策略下更可能(例如,100倍更可能)会发生什么? r(θ)将变得非常大,并导致采取大的梯度步骤,这可能会破坏你的策略。为了处理这个问题和其他问题,TRPO增加了一些额外的功能(例如,KL散度约束)来限制策略的变化量,并帮助保证它单调改进。

如果我们不添加所有这些额外的功能,而是将这些稳定性属性构建到目标函数中呢?正如你可能猜到的,这就是PPO所做的。它获得了与TRPO相同的性能优势,并通过优化这个简单(但看起来有点奇怪)的剪切代理目标避免了复杂性:

annotated clipped surrogate

最小化内的第一个项(蓝色)是我们在TRPO目标中看到的相同(r(θ)A)项。第二个项(红色)是(r(θ))被剪切在(1 – e, 1 + e)之间的版本。(在论文中,他们指出e的一个好值大约是0.2,所以r可以变化在~(0.8, 1.2)之间)。最后,最小化这两个项(绿色)。

慢慢来看这个方程,仔细看,确保你知道所有符号的含义,以及数学上发生了什么。查看代码也可能有帮助;这里是OpenAI baselinesanyrl-py实现的相关部分。

很好。

接下来,让我们看看L剪切函数产生的影响。这是论文中的一个图表,展示了当优势为正和负时剪切目标的值:

Clip intro

在图表的左半部分,当(A > 0)时,这是动作对结果有估计的正面影响的地方。在图表的右半部分,当(A < 0)时,这是动作对结果有估计的负面影响的地方。

注意在左半部分,当r值变得太高时会如何被剪切。如果动作在当前策略下比在旧策略下变得更可能时,这会发生。当这种情况发生时,我们不想过于贪婪而迈出太远的步伐(因为这只是策略的一个局部近似和样本,所以如果我们迈得太远,它将不准确),所以我们剪切目标以防止它增长。(这将在反向传播中具有阻止梯度的效果——平坦的线导致梯度为0)。

在图表的右侧,当动作对结果有估计的负面影响时,我们看到剪切在接近0的地方激活,即动作在当前策略下不太可能。这个剪切区域将同样防止我们更新太多,使动作在我们已经采取了很大一步使其不太可能之后变得更不可能。

所以我们看到这两个剪切区域都防止我们过于贪婪并试图一次更新太多,从而离开这个样本提供良好估计的区域。

但为什么我们在图表的右侧让r(θ)无限增长呢?这乍一看似乎很奇怪,但什么会导致r(θ)在这个情况下变得非常大? 在这个区域r(θ)的增长将是由一个梯度步骤引起的,这个步骤使我们的动作变得更可能,而结果却使我们的策略变得更差。如果真是这样,我们希望能够撤销那个梯度步骤。而L剪切函数恰好允许这一点。函数在这里是负的,所以梯度将告诉我们朝另一个方向走,并使动作变得不太可能,幅度与我们搞砸的程度成比例。(请注意,在图表的左侧也有类似的区域,动作很好但我们不小心使其不太可能)。

这些“撤销”区域解释了为什么我们必须在目标函数中包含这个奇怪的最小化项。它们对应于未剪切的r(θ)A具有比剪切版本更低的值,并由最小化返回。这是因为它们是错误方向的步骤(例如,动作很好但我们不小心使其不太可能)。如果我们在目标函数中没有包含min,这些区域将是平坦的(梯度=0),我们将无法修复错误。

这是一个总结这个的图表:

L Clip Diagram

这就是它的要点。剪切代理目标只是你可以在普通策略梯度中使用的直接替代品。剪切限制了你每次步骤可以进行的有效更改,以改善稳定性,而最小化允许我们修复错误,以防我们搞砸了。我没有讨论的是论文中讨论的PPO目标形成“下限”的含义。关于这一点,我建议查看作者讲座的这一部分

2. 多轮策略更新

与普通策略梯度方法不同,由于剪切代理目标函数,PPO允许你在样本上运行多轮梯度上升,而不会导致破坏性的大策略更新。这允许你从你的数据中榨取更多,并减少样本效率低下的问题。

PPO使用N个并行行动者运行策略,每个行动者收集数据,然后它从这些数据中抽取迷你批次,使用剪切代理目标函数进行K轮训练。请看下面的完整算法(近似参数值为:K = 3-15,M = 64-4096,T(视野)= 128-2048):

PPO Algo

并行行动者部分由A3C论文普及,并已成为收集数据的相当标准的方式。

新颖的部分是他们能够在轨迹样本上运行K轮梯度上升。正如他们在论文中所说,能够对数据进行多次传递以从每个样本中学到更多是件好事。然而,普通方法在实践中通常会失败,因为它们在局部样本上采取的步骤太大,这会破坏策略。另一方面,PPO具有内置的机制来防止更新过多。

在每次迭代中,在用π_old采样环境(第3行)并开始运行优化(第6行)时,我们的策略π将完全等于π_old。所以最初,我们的更新不会被剪切,我们保证可以从这些例子中学到一些东西。然而,当我们使用多轮更新π时,目标将开始达到剪切限制,对于这些样本梯度将变为0,训练将逐渐停止…直到我们进入下一轮迭代并收集新的样本。

….

这就是目前所有的内容。如果你有兴趣获得更好的理解,我建议深入研究原始论文,尝试自己实现它,或者深入研究baselines实现并玩弄代码。

[编辑:2019/01/27]:为了更好地了解背景以及PPO与其他强化学习算法的关系,我还强烈推荐查看OpenAI的Spinning Up资源和实现

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注