了解了强化学习各种算法及其分类关系后,就可以开始逐个击破和提升,在这里,我主要参考B站上莫烦大神的视频课程学习,并记录下自己的一些浅显的理解。
详细文档可以直接移步莫大神的社区:https://morvanzhou.github.io/tutorials/machine-learning/reinforcement-learning/
Q-learning
个人感觉Q-learning核心在于一张Q表格,表格纵轴是状态值state,横轴是动作值action。机器在学习的过程中,就是不断的训练和修正这张表格的参数,使得真正需要做决策的时候,可以从表格中查询,在什么state的情况下,做什么action,可能获得的正面影响更大。
难点在于,怎么训练和更新这种表格。见下图,当我们从s1->a2走到s2的状态,根据Q(s2)的最大值,机器人会假设自己走s2->a2这条路,乘以一个系数后得到目前s2状态下的Q(s1,a2)的现实值,根据差距会对刚刚走过的Q(s1,a2)进行更新。同样会乘以一个系数降低一下差距的影响。这个时候,在s2的机器人其实还没有做出任何决策。为了保证机器人不是每一轮都走同样的路,会有一个ε-greedy的值,保证机器有一定概率走别的路,对未知的路进行探索。
Q-learning只合适有限的状态和步骤的游戏。
算法如下:Sarsa
Sarsa和Q-learning的算法极其类似,都是更新Q表格,但是更新Q表的计算方式不一样,可以从图中明显的看到,主要区别在于Q现实的估计,永远选择自己要走的那条路。- 第一点区别在于,Q-learning在s2的时候无论如何都选最大的action的Q值作为反馈,但是Sarsa就会不会改变主意选最大的,而是就选了自己随便选的那个step走走看再更新。
- 第二点区别在于:区别就在a'那里,Q-learning预选一个a'但是下一回合并不一定执行a'(因为下一回合Q表就更新了)。可是Sarsa下一回合却一定会执行a'
可以看到Sarsa是说到做到类型,也成为在线学习【On-policy】,学着自己在做的事情。
而Q-learning是说到并不一定做到,也称为离线学习【Off-policy】,在更新了Q值之后,勇敢的选择了最大的那个Q,然后再更新,不计后果。
Sarsa是一种单步更新算法,Sarsa(0),每一步都在更新Q表,但是会造成一直在不被惩罚的区域活动,到达目标的速度可能会非常慢
因此有了Sarsa(λ),当λ=1时就是回合更新,一个回合后再更新Q表,获得奖励后,不仅更新最新的一步的Q值,同时更新来时的路。