on-policy与off-policy的区别

在强化学习领域,on-policy和off-policy是两个非常重要的概念,它们把强化学习方法分成了两个类别。

基于off-policy的方法中,将收集数据当做一个单独的任务,off-policy的方法将收集数据作为RL算法中单独的一个任务,它准备两个策略:行为策略(behavior policy)与目标策略(target policy)。行为策略是专门负责学习数据的获取,具有一定的随机性,总是有一定的概率选出潜在的最优动作。而目标策略借助行为策略收集到的样本以及策略提升方法提升自身性能,并最终成为最优策略。

on-policy与off-policy的区别

理论上来说,on-policy的算法只能使用当前正在优化的policy生成的数据来进行训练,当你使用一条(state, action, reward, new_state)的数据对policy网络的参数进行了更新之后,这个“正在优化”的policy立即就变了,于是,你就要用它来生成新的一条数据,再继续进行后面的训练,并且你刚才用于训练的那条数据已经“过时”了,不能再使用,需要丢弃掉。

有人会说这种做法是不是太低效了?于是在实践中,经常是每收集了N条数据才会去更新一次,这N条数据是一个batch,并且这N条数据是用同一个policy生成的。

理论上,用当前的policy生成了一条数据,就应该更新一次policy网络的参数,然后policy网络就变了,此时才能再生成第2条数据,...,依此类推,当生成到第N条数据的时候,policy网络都不知道变成什么鬼样子了,而如果我们用同一个policy连续生成N条数据才去更新一次policy网络的参数,这时的policy网络能跟一条条更新方式相比吗?确实,这两种方式表面上看起来policy相差会很大,但是,有其他的一些技术可以从数学上保证,并且也从实际效果上证明了:每N条数据才更新一次policy网络的方式,和每一条数据就更新一次policy网络的方式,没有多大区别,可行!

正因为这二者没有多大区别,我们仍然可以把每N条数据才更新一次policy网络、看似用“已经过时”的数据来更新policy网络的方法,叫做on-policy的方法。尽管它在实践操作的时候,看上去非常像off-policy的方法。

on-policy算法的好处

(1)直接了当,速度快,劣势是不一定找到最优策略。
(2)on-policy 算法对于整体的策略的稳定性会有提升,但是会加剧样本利用率低的问题,因为每次更新都需要进行新的采样。
(3)很难平衡探索和利用的问题,探索少容易导致学习一个局部最优。而保持探索性则必然会牺牲一定的最优选择机会,而且降低学习效率。
(4)其实可以把on-policy看作off-policy的一个特殊情形。

off-policy算法的好处

(1)可重复利用数据进行训练,data利用率相对较高,但是面临收敛和稳定性问题。去年,Haarnoja 提出了Soft Actor Critic,极大的提高了Off-policy RL 的稳定性和性能。
(2)off-policy劣势是曲折,收敛慢,但优势是更为强大和通用。其强大是因为它确保了数据全面性,所有行为都能覆盖。甚至其数据来源可以多样,自行产生、或者外来数据均可。
(3)迭代过程中允许存在两个policy,可以很好分离并探索和利用,可灵活调整探索概率。