最近在学习强化学习,Sarsa和Q-learning作为强化学习中较为经典的的方法,两者之间有一定的相似之处,但又有较大的区别,能够很好的区分两种方法对区分on-policy和off-policy,以及之后对强化学习的进一步学习都很有帮助。
先介绍Sarsa和Q-learning共用的探索策略,再说明Sarsa和Q-learning的区别,最后拓展到on-policy和off-policy的区别。
一、ε-greedy
Sarsa和Q-learning在探索时都是用到了ε-greedy的策略。在训练过程中我们既要保证我们会沿着Q表格的指引进行活动,但同时我们有需要进行探索,我们不能固守已有的Q表格而不做出新的尝试,如何确定某一步是按照Q表格进行还是进行一步随机探索呢,这里使用到了ε-greedy,我们会事先设定一个ε的值,假设我设定ε值为0,1,在每一部行动前我们会掷色子(在0-1之间生成一个随机数),随机数如果大于ε我们选择按Q表格行动,小于ε我们会在可能的行动中随机探索一次。
ε-greedy:
二、Sarsa和Q-learning的区别
首先来对比Sarsa和Q-learning对于Q值更新的区别,将通过伪代码额方式来直观展示两者在计算Q值时的区别
1.Sarsa
Sarsa的伪代码:
在Sarsa的Q值更新公式,r+γQ(s’,a’)可以视为目标Q值,Sarsa每次都是在下一次采取实际动作之后再更新Q值,a’代表下一次的实际action,Sarsa的每次更新都是在动作实际发生以后。
Sarsa的步骤如下图所示:
Sarsa会在实际动作发生后来更新Q值,在实际的训练过程中我们会采取ε-greedy策略来实现探索,因此Sarsa会有几率将探索的动作Q值更新在Q表格中,表现在悬崖问题中,掉入悬崖的reward为-100,在悬崖边上会有几率掉入悬崖而获得特别差的分数,所以Sarsa会选择离悬崖最远的路径。
2.Q-learning
Sarsa的伪代码
可以看到Q-learning的Q值更新策略与Sarsa的一个大的区别来自于对于目标Q值的更新,Q-learning在更新Q值时下一步动作是不确定的,它会选取Q值最大的动作来作为下一步的更新。
3.总结
综上,Sarsa和Q-learning的本质区别来自于对于Q值的更新方式不同,Sarsa使用下一步的实际动作来作为更新,而Q-learning选取下一步Q值最大的动作作为更新。
因此两种算法在表现上也会有很大的区别,Sarsa表现得更为胆小,因为它会记住每一次错误的探索,它会对错误较为敏感,而Q-learning只在乎Q值的最大化,因此Q-learning会十分贪婪,表现得十分大胆。
三、举例
下面我将分别用Sarsa和Q-learning来解决悬崖问题,来直观展示两者方法的区别
悬崖问题:
我们需要从起点运动到终点,其中黑色的为陷阱,掉入陷阱会reward为-100,其他每运动一步reward为-1
1.代码区别
实现代码的主要区别来自于上文提到的对于Q值更新的不同
Sarsa:
target_Q = reward + self.gamma * self.Q[next_obs, next_action]
self.Q[obs, action] += self.lr * (target_Q - predict_Q) # 修正q
Q-learning:
target_Q = reward + self.gamma * np.max(self.Q[next_obs, :])
self.Q[obs, action] += self.lr * (target_Q - predict_Q) # 修正q
2.运行区别
Q-learning:
Sarsa:
可以看到同样训练500次,最后Sarsa和Q-learning给了不同的代价,Sarsa为-17,Q-learning为-13
形象展示的的话
可以看出Q-learning表现得更加大胆,贴着悬崖,而Sarsa却选择了离悬崖最远的路线。
四、off-policy和on-policy对比
On-policy:是指产生数据的策略与评估和要改善的策略是同一个策略。
Off-policy是指产生数据的策略与评估和改善的策略不是同一个策略。
对比Sarsa和Q-learning就能很好对比off-policy和on-policy,Sarsa是on-policy,而Q-learning是off-policy。
Sarsa优化的是实际上执行的策略,每一步action都是实际发生的,受到探索的影响,可能学不到最优解,收敛到局部最优。
Q-learning则进行了改进,Q-learning会有行为策略和目标策略,行为策略来用于大胆探索,目标策略根据行为策略来优化自己,两者在一定程度上相互独立,所以off-policy不仅可以使用自己的训练数据,也可以使用外来数据。
参考:https://blog.csdn.net/deepseazbw/article/details/109843238?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-5.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-5.no_search_link