强化学习之Q-learning && SARSA 对比
Q-learning(on-policy)
参考:http://www.mnemstudio.org/path-finding-q-learning-tutorial.htm
http://www.mnemstudio.org/path-finding-q-learning-tutorial.htm
理论知识:
假设一个小学生放学后有两种选择——看电视或者是做作业,这里小学生就是agent,看电视和做作业就是两种action,分别记为a1和a2。然后建立奖惩机制,看电视会扣2分,做作业会加1分,初始化Q表在初始化状态下为0.然后根据我们的奖惩机制可以,更新在S1状态的Q表值。
由于做作业的Q值高,所以我们会选择a2动作,也即Q(s1, a2),这样下一个状态S2也同样会对应两个动作。Q-learning就是在考虑本步状态的同时也会涉及到下一个状态。对于这里S2中a2动作的Q值比a1大,所以在更新Q(s1, a2)时,把大的 Q(s2, a2) 乘上一个衰减值 gamma (比如是0.9) 并加上到达s2时所获取的奖励 R (这里还没有获取到我们的棒棒糖, 所以奖励为 0), 因为会获取实实在在的奖励 R , 我们将这个作为我现实中 Q(s1, a2) 的值,这个现实值会与老值做差,然后以一个学习效率 alpha 累加上老的 Q(s1, a2) 的值 变成新的值,如下图。
算法的思路如下:
问题1:更新到什么时候是个头啊?
式子中的Gamma,取不同值对应的效果,如下图:
趣味例子:
结合一个例子介绍Q-learning算法,首先,假设我们有五个房间0-4,其中5代表的是外面,这个小迷宫如下图。部分房间与房间是相通的,例如:房间4和房间0,3以及5相通。
简化上述过程如下:相互连接起来的两个房间代表相通。
现在我们将一个agent随机放进这个小迷宫中,我们的目标是让agent走出去,也就是到达5号房。基于此,我们建立了如下的奖惩机制,能够直接引导agent到达目的地的路径给予100奖励,其他的没有和5号房直接连接的路径给
予0奖励,表示如下:
在此基础上,我们初始化Q值表为0,如下:
路径对应的回报如下:
现在假设我们的agent位于房间1,然后随机选择下一个状态为房间5,则对于房间5会有1,4,5三种选择。
Q(state, action) = R(state, action) + Gamma * Max[Q(next state, all actions)]
Q(1, 5) = R(1, 5) + 0.8 *Max[Q(5, 1), Q(5, 4), Q(5, 5)] = 100 + 0.8 * 0 = 100
Q值表更新为:
(100写错位了,对应(1,5)处为100才对)
此时,到达终点房间5,然后结束本回合。开始下一回合,假设在房间3,我们有1,2和4三种选择,随机选择1为下一个状态,则:
Q(state, action) = R(state, action) + Gamma * Max[Q(next state, all actions)]
Q(3,1) = R(3, 1) + 0.8 * Max[Q(1, 3), Q(1, 5)] = 0 + 0.8 * Max(0, 100) = 80
以此类推不断更新最后得到:
(其中对于Q值更新部分说明:对于这个例子来说,即便是按Q值更新,一旦所有位置的Q值确定后,除了第五列的三个值以外,其他值无论再算,都是固定的了,因为对应的路径回报值R都是0,所以这些Q值也就取决于其对应下一个状态的最大Q值了,至于第五列的三个Q值更新问题倒是值得进一步细究)
问题2:第五列的三个Q值更新问题?
SARSA(off-policy)
理论知识
类比Q-learning,SARSA就相对好理解很多,差别仅仅在于现实值求法的不同,其中Q-learning中取的是下一个状态中所有动作对应的最大的Q值,而此处取的是下一个状态确定动作的Q值。对比下图和上面Q-learning对应的算法图。
细节算法流程对比: