0%

强化学习PG系列小结-3-PPO

Review of PG

我们目前有一个 on-policy 的算法,即在 下采样若干 τ , 并计算

其主要问题在于,采样的属于一旦计算完梯度,对 θ 进行一轮优化, 的分布就发生了变化,之前采集的数据就不能再用于训练直到模型收敛,这对计算产生了极大的开销。

如果我们能够多次复用这个数据来进行训练,那么训练成本将大大降低,因此我们可以引入重要性采样 Important Sampling 技术。

Important Sampling

要实现复用数据,我们要满足如下要求:我们希望通过 采集的数据在经过一定的修正以后,它的期望能够用于训练 θ ,重要性采样就是用来解决这一问题的。

一般地,我们考虑从 p(x) 中进行采样得到 。但是我们无法直接从 p(x) 中采样,只能从另一个分布 q(x) 中进行采样。那么我们可以计算

因此有

这样我们就可以通过从 q(x) 中采样来计算 p(x) 中采样的期望。

Note: 重要性采样只有得到的期望相同,但是得到的方差不同,当 p(x) 和 q(x) 差很大时,重要性采样就会产生巨大的方差,需要多采集很多样本才能使得他们的期望接近。

ON-POLICY 2 OFF-POLICY

那么我们目前有一个采样的分布 ,以及一个模型当前的分布 ,原始模型使用 A2C,那么我们的优化目标是:

当我们使用 进行采样的时候,上式可以改写为:

使用 important sampling 改变了采样所用的分布。需要另外注意的是,因为我们目前是使用 进行采样,所以相应的计算出来的优势函数 A 也是在这一分布下计算出来的。我们对 P 使用贝叶斯公式展开,可以得到:

在这里,我们默认 s 和 A 的分布受 policy 影响不大,即认为 , 且 。于是我们可以得到新的目标函数:

以及梯度值:

TRPO

现在我们已经有了一个全新的目标函数,PPO 就使用了这个目标函数进行训练。但是现在仍然有一个问题需要解决,如果两个分布差的太大,那么训练效果就会很差,因此要额外加入一个限制条件,即 KL 散度:

需要另外说明的是,这里的 KL 散度不是指计算的参数的距离,而是他们的 behavior 的距离,即他们计算出的动作的概率分布的距离。因为可能参数变化不一定会影响输出的动作的变化,我们只在意他们行为上的差距,所以这里 KL 散度只对当前的动作分布进行计算。

PPO

毫无疑问,TRPO 带了一个约束条件非常难算,有没有更好的办法呢?一个简单的想法是,把这个约束条件作为一个正则项加入目标函数,于是我们得到了 PPO:

在实际上进行训练的时候,我们额外维护一组阈值,在训练过程中,根据当前计算出来的 KL 散度判断参数 β 是否需要进行变化,当 KL 散度过大时,系数增加;反之亦然。一轮优化结束后,更新参数,然后从头开始。

PPO2

PPO 在处理 KL 散度的时候依然非常麻烦,因此又提出了 PPO2,使用简单的 clip 来代替 KL 散度,即:

事实上,使用一个截断函数后,如图所示,这个式子希望做的事希望两个 差距不要太大。当时 时,我们希望 越大越好,但是我们不希望他太大,所以会被 截断;反之 时,我们希望 越小越好,但是不能差的太大,所以会被 截断。因此我们就得到了一个无需计算 KL 散度的 PPO 方法。