下图说明了 on-policy 和 off-policy 两种方式的区别。简单来说,"on-policy"就是指我们自己训练,然后自己学习。而"off-policy"就是指我们可以旁观别人的训练,从而得到学习。
为什么我们要把on-policy方法转变为off-policy方法呢?
前面 policy gradient 的做法就是 on-policy,使用参数为 θ 的actor收集训练数据,一旦参数得到更新后,我们就必须重新收集数据,因为此时参数已经变化了,之前收集的 data 就不能用了,整个过程非常耗时。所以需要off-policy,off-policy 可以拿一批 data 用好几次,这样训练效率就会得到很大的提高。
为了可以使得训练资料可以反复使用,我们就必须固定actor的参数值。一个方法就是使用两个actor,一个参数为 θ 的actor用于收集训练资料,另一个参数为的actor用于训练。因为前者不参与训练,故它的参数也不会发生变化,如此就可以反复使用这组训练数据。
但这里需要解决一个问题,即两个不同参数的actor得到的训练数据的分布是不同的,如何将它们联系起来呢?从公式角度出发,假设前者actor采集的训练资料的分布为q,后者的分布为p,我们应该如何实现这两者之间的转化呢?
这里就需要提到一种称为Importance Sampling的技术。假设训练观察值由 a ~ β (a | s) 采样,我们可以把梯度重写为: