时间差分方法Q-learning和sarsa的区别

更新时间:2018-07-24 18:27:41 点击次数:1524次

Q-learning和sarsa都是利用时间差分目标来更新当前行为值函数的。不同的是在Q-learning中,行动策略(产生数据的策略)和要评估的策略不是一个策略,因此称之为异策略(off-policy),而在sarsa中,正好相反,也就是行动策略(产生数据的策略)和要评估的策略是一个策略,称之为同策略(on-policy)。下面从算法的角度解释其中的区别。

如上图所示,为sarsa的算法流程图。

个repeat循环表示每一幕(产生一轮数据或者对游戏来说是玩一局完整的游戏)。首先初始化状态S,然后根据Q网络结构和\varepsilon -greedy策略选择一个动作A,下面的循环是对当前幕来说,划个重点!!这里和Q-learning有个很大的区别就是这里的选择策略A在下面循环的外面,因为对当前幕的循环来说,选择策略只需要开始选择一次就行了,因为同策略(on-policy)的关系,行动策略(对应于当前的选择策略A)和要评估的策略(下面进行更新的策略)是一个策略,所以下一轮的行动策略会被要评估的策略赋值,也就不需要再初始化了。然后下面就是选择完策略A之后,执行策略A,得到当前价值R,观测到下一个状态S'。在状态S'处,同样根据Q网络结构和\varepsilon -greedy策略选择一个动作A',这样就得到了一个完整的数据序列<S,A,R,S',A'>,这也就是sarsa名字的由来。

然后根据公式

Q(S,A)\leftarrow Q(S,A)+\alpha [R+\gamma Q(S',A')-Q(S,A)]

更新Q网络。

然后更新S=S',A=A',A=A'

下面介绍Q-learning算法

Q-learning算法流程图如上所示。

首先和sarsa一样,对每一幕进行循环,然后初始化状态S。接下来的不同之处在于Q-learning的初始化选择动作A在当前幕循环的里面,上面也解释到了sarsa中为啥在外面的原因,这里选择动作A在循环里面就是因为在异策略(off-policy)的情况下,行动策略和下面的要评估的策略不是一个策略,不能通过要评估的策略进行更新,所以选择策略A必须在循环里面,每轮循环都进行赋值。选择完策略A之后,执行策略A,得到当前价值R,观测到下一个状态S'。注意!!!!这里并没有和sarsa算法一样,对当前的状态S'更具Q网络和\varepsilon -greedy选择一个策略A',而是根据当前Q网络计算出在状态S'处Q值大的策略进行更新。即如下的公式

Q(S,A)\leftarrow Q(S,A)+\alpha [R+\gamma max_a{}Q(S',a)-Q(S,A)]

这里的要评估的策略是使得对当前网络Q来说,在状态S'Q网络值大的动作,与下一轮循环所选择的行动策略A不是一个策略(即异策略)

所以接下来只需要更新S=S'

本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是一个个人学习交流的平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽,造成漏登,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

回到顶部
嘿,我来帮您!