近端策略优化(PPO)
1. 背景
我们如何使用我们目前拥有的数据对策略进行可能的改进步骤,而不会踩到意外导致性能崩溃?TRPO尝试使用复杂的二阶方法解决这个问题,PPO是一系列一阶方法,这些方法使用一些其他技巧来保持新策略接近旧的。 PPO方法实现起来非常简单,并且在经验上似乎至少与TRPO一样好。
2. 基本事实
PPO是一种on-policy的算法。
PPO可用于具有离散或连续动作空间的环境。
PPO的Spinning Up实现支持与MPI的并行化。
3. 关键方程
PPO-clip通过下式更新策略
通常采取多步骤(通常是minibatch)SGD来最大化目标,这里的由下式给出
其中是一个(小)超参数,大致说明新策略与旧策略相差多少。
这是一个非常复杂的表达,乍一看很难说明它正在做什么,或者它如何帮助保持新策略接近旧政策。事实证明,这个目标有一个相当简化的版本[1],它更容易解决(也是我们在代码中实现的版本):
其中
为了弄清楚其中的细节,让我们看一下单一的状态 - 动作对,并考虑一下情况
3.1 Advantage is positive: 假设该状态 - 行动对的优势是正的,在这种情况下,它对目标的贡献减少到
因为优势是正的,所以如果动作变得更可能,目标将会增加——也就是说,如果增加。但是这个术语中的最小值限制了目标可以增加多少。一旦
,最小值开始,这一项达到
的上限。因此:新策略不会因远离旧策略而受益。
3.2 Advantage is negative:假设该状态 - 行动对的优势是负的,在这种情况下,它对目标的贡献减少到
因为优势是负的,如果行动变得不太可能 - 即如果减少,则目标将增加。但是这个术语的最大值限制了目标可以增加多少。一旦
,最大值开始,,这一项达到就达到了
的上限。因此,再次说明:新策略不会因远离旧策略而受益。
到目前为止,我们所看到的是切片(clip)作为一个正则化项,通过消除对策略发生巨大变化的激励,而超参数对应于新策略离旧政策有多远,同时仍然有利于实现目标。
You Should Know
虽然这种切片在确保合理的策略更新方面走了很长的路,但仍然有可能最终得到一个与旧策略相差太远的新策略,并且不同的PPO实现使用了一堆技巧来阻止这个off。
在我们的实现中,我们使用一种特别简单的方法:提前停止。如果新策略的平均KL-差异从旧的增长超过阈值,我们就停止采取梯度步骤。
当你对基本的数学和实现细节比较熟悉时,值得查看其他实现以了解它们如何处理此问题!
[1] 有关PPO-Clip目标的简化形式的推导,请参阅此注释。
4. 探索与开发
PPO以on-policy方式训练随机政策。 这意味着它通过根据其随机策略的最新版本采样动作进行探索。 动作选择中的随机性量取决于初始条件和训练过程。 在训练过程中,策略通常变得越来越随机,因为更新规则鼓励它利用它已经找到的奖励。 这可能导致策略陷入局部最优。
5. 伪码
