首先引经据典一番,在sutton的introduction to reinforcement中,82页(第二版,November 5, 2017)中写道:
On-policy methods attempt to evaluate or improve the policy that is used to make decisions, whereas off-policy methods evaluate or improve a policy different from that used to generate the data.
On-policy 方法试图评估和更新做决定的策略,而off-policy方法所评估和更新的策略是和生成数据的策略不相同的。
简而言之,on-policy(中文翻作同策)就是要更新的策略和与环境交互产生数据的策略是同一个策略,off-policy(中文翻作异策)就是要更新的策略和与环境交互产生数据的策略是不同的策略。
在此并不打算举强化的例子,而是用深度强化学习的例子来说明。
典型的异策算法有:DQN族、DDPG族、SAC等,凡是包含经验回放的,可以说都是异策算法。因为在更新策略的时候,会从经验回放中取出数据来对现在的策略进行更新,而这些数据是先前的策略生成的,也就是说,生成数据的策略和当前要更新的策略是不同的策略,即off-policy。
典型的同策算法有:原始AC、REINFORCE、A3C等,这些算法在更新时都需要用当前策略去获得一个trajectory,然后用这个trajectory数据来更新当前策略,即on-policy。
特别提名一个特殊的异策算法:PPO,有很多人认为PPO算法是同策算法(许多论文中也这么定义),但事实上PPO是用同策算法的套路,行异策更新的实际。看以下PPO的伪代码:
这其中包含两个循环,外循环的策略更新收敛循环,重点在于内循环,内循环是使用策略 π o l d \pi_{old} πold