强化学习可以分成off-policy(离线)和on-policy(在线)两种学习方法,按照个人理解,判断一个强化学习是off-policy还是on-policy的依据在于生成样本的policy(value-funciton)和网络参数更新时的policy(value-funciton)是否相同。
off-policy的经典算法有Q-learning,而on-policy的经典算法有SARSA算法,两者的算法流程如下所示。
Q-learning算法:
initialize Q(s,a) randomly
for each episode:
initialize state s;
while s is not terminal:
choose action a from s using ε-greedy strategy;
observe reward r and next state s';
Q(s,a) <- Q(s,a) + α[r + γ*maxQ(s',a') - Q(s,a);
s <- s';]
SARAS算法:
initialize Q(s,a) randomly
for each episode:
initialize state s;
choose action a from s using ε-greedy strategy;
while s is not terminal:
observe reward r and next state s';
choose a' from s' using ε-greedy strategy;
Q(s,a) <- Q(s,a) + α[r + γ*Q(s',a') - Q(s,a);
s <- s', a <- a';]
这两个算法的流程基本一致,唯一不同在于Q函数的更新:
Q-learning在计算下一状态的预期收益时使用了max操作,直接选择最优动作,而当前policy并不一定能选择到最优动作,因此这里生成样本的policy和学习时的policy不同,为off-policy算法;
而SARAS则是基于当前的policy直接执行一次动作选择,然后用这个样本更新当前的policy,因此生成样本的policy和学习时的policy相同,算法为on-policy算法。
而最近深度强化学里中使用的experience-replay机制将生成的样本与训练的样本独立开来,使用某一policy生成的样本拿来训练的时候,很可能当前policy已经和之前有所差别,因此使用experience-replay机制的DRL算法基本上是off-policy算法