Review of PG
我们目前有一个 on-policy 的算法,即在
其主要问题在于,采样的属于一旦计算完梯度,对 θ 进行一轮优化,
如果我们能够多次复用这个数据来进行训练,那么训练成本将大大降低,因此我们可以引入重要性采样 Important Sampling 技术。
Important Sampling
要实现复用数据,我们要满足如下要求:我们希望通过
一般地,我们考虑从 p(x) 中进行采样得到
因此有
这样我们就可以通过从 q(x) 中采样来计算 p(x) 中采样的期望。
Note: 重要性采样只有得到的期望相同,但是得到的方差不同,当 p(x) 和 q(x) 差很大时,重要性采样就会产生巨大的方差,需要多采集很多样本才能使得他们的期望接近。
ON-POLICY 2 OFF-POLICY
那么我们目前有一个采样的分布
当我们使用
使用 important sampling 改变了采样所用的分布。需要另外注意的是,因为我们目前是使用
在这里,我们默认 s 和 A 的分布受 policy 影响不大,即认为
以及梯度值:
TRPO
现在我们已经有了一个全新的目标函数,PPO 就使用了这个目标函数进行训练。但是现在仍然有一个问题需要解决,如果两个分布差的太大,那么训练效果就会很差,因此要额外加入一个限制条件,即 KL 散度:
需要另外说明的是,这里的 KL 散度不是指计算的参数的距离,而是他们的 behavior 的距离,即他们计算出的动作的概率分布的距离。因为可能参数变化不一定会影响输出的动作的变化,我们只在意他们行为上的差距,所以这里 KL 散度只对当前的动作分布进行计算。
PPO
毫无疑问,TRPO 带了一个约束条件非常难算,有没有更好的办法呢?一个简单的想法是,把这个约束条件作为一个正则项加入目标函数,于是我们得到了 PPO:
在实际上进行训练的时候,我们额外维护一组阈值,在训练过程中,根据当前计算出来的 KL 散度判断参数 β 是否需要进行变化,当 KL 散度过大时,系数增加;反之亦然。一轮优化结束后,更新参数,然后从头开始。
PPO2
PPO 在处理 KL 散度的时候依然非常麻烦,因此又提出了 PPO2,使用简单的 clip 来代替 KL 散度,即:
事实上,使用一个截断函数后,如图所示,这个式子希望做的事希望两个