Q学习和SARSA有什么区别?


80

尽管我知道SARSA策略性的,而Q学习策略性的,但当查看它们的公式时,(对我而言)很难看出这两种算法之间的区别。

根据《强化学习:入门》一书(萨顿和巴托撰写)。在SARSA算法中,在给定策略的情况下,可以按以下方式更新对应的动作值函数Q(在时间步t处于状态s和动作a),即Q(s t,a t)。

Q(s t,a t)= Q(s t,a t)+α*(r t +γ* Q(s t + 1,a t + 1)-Q(s t,a t))

另一方面,Q学习算法的更新步骤如下

Q(s t,a t)= Q(s t,a t)+α*(r t +γ* max a Q(s t + 1,a)-Q(s t,a t))

也可以写成

Q(s t,a t)=(1-α)* Q(s t,a t)+α*(r t +γ* max a Q(s t + 1,a))

其中γ(伽玛)是折现因子,而r t是在时间步长t从环境中获得的报酬。

这两种算法之间的区别是否是SARSA仅查找下一个策略值而Q学习查找下一个最大策略值的事实?

TLDR(和我自己的答案)

自从我第一次提出这个问题以来,感谢所有回答这个问题的人。我制作了一个Q-Learning的github存储库,从经验上了解了区别。这一切都取决于如何选择下一个最佳操作,从算法的角度来看,这取决于您选择实施的方式是平均最大最佳操作。

另一个主要区别是,当这种选择正在发生(例如,在线VS离线),以及如何/为什么会影响学习。如果您在2019年阅读此书,并且更喜欢动手,那么玩RL玩具问题可能是理解差异的最佳方法。

最后一个重要说明是,关于下一个状态的最佳/最大动作和奖励,Suton&Barto以及Wikipedia经常使用混合,混淆错误的公式表示形式:

r(t + 1)

实际上是

希望这可以帮助任何陷入困境的人。

Answers:


56

是的,这是唯一的区别。策略上SARSA会根据其遵循的策略来学习操作值,而策略外Q-Learning则相对于贪婪策略来学习操作值。在某些常见条件下,它们都收敛于实值函数,但速率不同。Q-Learning趋向于收敛较慢,但具有在更改政策时继续学习的能力。此外,与线性逼近结合使用时,不能保证Q-Learning收敛。

实际上,在ε贪婪策略下,Q-Learning计算Q(s,a)和最大动作值之间的差,而SARSA计算Q(s,a)和平均动作的加权和之间的差值和最大值:

Q学习:Q(s t + 1,a t + 1)= max a Q(s t + 1,a)

SARSA:Q(s t + 1,a t + 1)=ε·平均a Q(s t + 1,a)+(1-ε)·max a Q(s t + 1,a)


4
好的,Sarsa然后如何选择一项政策?我看到Qlearning将始终遵循保证您采取下一个最佳策略的策略。在Sarsa中选择下一个策略的标准是什么(基本上我想知道的是如何评估策略Q(S,A)如何选择最佳操作)。是不一样的,即为状态S选择动作A,该动作A具有最高(即最大)的Q'(S,A)吗?
Ælex

6
该策略是选择下一个操作的规则。实现算法时需要选择它。最简单的策略是贪婪的策略-代理始终选择最佳操作。使用此策略,SARSA和Q-Learning相同。学习的更好选择是ε贪婪策略,其中一些动作是随机选择的。
唐·雷巴

2
好的,这就是为什么我首先问这个问题,在这种情况下,它们都是相同的。非常感谢你 !我正在使用e-Greedy。因此,Qlearning仅在非政策情况下有所不同,在Off-Policy情况下,是随机选择操作,而通过Q-learning更新会最大化策略值?
Ælex

2
在ε贪婪策略下,SARSA下的期望值是平均操作值和最佳操作值的加权和:Q(s_t + 1,a_t + 1)=ε·mean(Q(s,a))+ (1-ε)·max(Q(s,a))。教科书在第5.4节“基于策略的蒙特卡洛控制”中对此进行了说明。
唐·雷巴

65

当我学习这一部分时,我也感到很困惑,因此我将R.Sutton和AGBarto的两个伪代码放在一起,希望能使两者之间的区别更加清晰。

在此处输入图片说明

蓝色框突出显示了两种算法实际上不同的部分。数字突出显示了更详细的区别,稍后将进行解释。

TL; NR

|             | SARSA | Q-learning |
|:-----------:|:-----:|:----------:|
| Choosing A' |   π   |      π     |
| Updating Q  |   π   |      μ     |

其中π是ε贪心策略(例如,探索时ε> 0),μ是贪婪策略(例如ε== 0,无探索)。

  1. 假设Q学习使用不同的策略来选择下一个动作A'并更新Q。换句话说,它试图在遵循另一个策略μ时评估π,因此它是一种非策略算法。

  2. 相反,SARSA始终使用π,因此它是一种基于策略的算法。

更详细的解释

  1. 两者之间最重要的区别是每次操作后如何更新Q。SARSA完全按照ε贪婪策略使用Q',因为从中得出A'。相反,Q学习在下一步所有可能的动作中使用最大Q'。这使其看起来像遵循ε= 0的贪婪策略,即在此部分中不进行探索。

  2. 但是,当实际采取行动时,Q学习仍然使用从ε贪婪策略采取的行动。这就是为什么“选择A ...”位于重复循环内的原因。

  3. 遵循Q学习中的循环逻辑,A'仍来自ε贪心策略。


4
祝贺您拥有精美的图形和图片。在问了这个问题多年后,我开始意识到状态和操作的迭代以及策略值的迭代和更新是两个不同的过程。可悲的是,萨顿和巴托对此不太清楚。正如您所解释的,如何决定动作会影响算法。Q学习中的最大动作通常意味着选择具有次优Q(s,a)的动作,例如贪婪。在Sarsa中并非如此,您可以遵循该策略(在线),也可以根据随机概率探索新策略。您的描述当场!
Ælex

@SilentCrash,不,它正在评估π。μ是贪婪策略,仅用于选择操作。
zyxue'5

1
@zyxue但是您在表中写道,它实际上在遵循ε贪婪策略π的情况下更新了Q,就好像它跟随μ(评估μ)一样。
SilentCrash

脱离政策的方法是否可以从人类行为(π)中选择A'并从贪婪的政策(μ)中更新Q?
罗伯特

1
我想说的另一点是,尽管在选择下一个动作时,SARSA和Q学习都使用epsilon-greedy策略,如果所有Q值都相同,则如果忽略epsilon-random中的随机部分,他们应该选择相同的动作贪婪。但是,由于在SARSA和Q学习中更新方程是不同的,因此Q值在学习过程中的某个时刻会变得更加不同,因此即使使用相同的epsilon-greedy策略改进策略,Q值也可能最终选择不同的动作。换句话说,重复的策略将变得不同。
StayFoolish

13

数学上的区别是什么?

正如大多数其他答案中已经描述的那样,在数学上,两次更新之间的区别确实在于,当更新状态-动作对(S t,A tQ值时:

  • Sarsa使用行为策略(即代理用于在环境中生成经验的策略,通常是epsilon- greedy)来选择其他操作A t + 1,然后使用Q(S t + 1,A t +1)(以γ折价)作为更新目标计算中的预期未来回报。
  • Q学习不会使用行为策略来选择其他操作A t + 1。相反,它将更新规则中的预期未来回报估计为max A Q(S t + 1,A)。这里使用的max运算符可以看作是“遵循”完全贪婪的策略。但是代理实际上并没有遵循贪婪的政策; 它只是在更新规则中说:“假设我将从现在开始遵循贪婪的政策,那么我的预期未来收益将是多少?”。

这直观上是什么意思?

如其他答案中所述,上述区别在于,使用技术术语意味着,Sarsa是一种策略上的学习算法,而Q学习是一种策略外的学习算法。

在极限(给了无穷的时间来积累经验和学习)的情况下,并且在一些其他假设下,这意味着Sarsa和Q学习会收敛到不同的解决方案/“最佳”策略

  • 在我们一直遵循用于产生体验的相同策略的假设下,Sarsa将收敛到最佳解决方案。这通常是一种具有(而不是“愚蠢”)随机性元素的策略,例如epsilon -greedy,因为否则我们将无法保证将完全收敛于任何事物。
  • Q-Learning将收敛到一个最佳解决方案,该假设是在获得经验和培训后,我们将转向贪婪策略

什么时候使用哪种算法?

在我们关心代理在学习/产生经验的过程中的表现的情况下,Sarsa这样的算法通常是更可取的。例如,考虑代理是一个昂贵的机器人,如果它掉下悬崖会摔坏。我们不希望它在学习过程中掉落得太频繁,因为它很昂贵。因此,我们关心其在学习过程中的表现。但是,我们也知道有时需要它随机执行(例如epsilon-greedy)。这意味着机器人沿着悬崖行走非常危险,因为它可能会决定随机动作(概率为ε)并跌落。因此,我们希望它能够快速了解​​到靠近悬崖的危险;即使贪婪的策略能够顺其自然地走下去,我们也知道我们遵循随机的epsilon贪婪策略,并且考虑到有时候我们会变得愚蠢,因此我们关心优化性能。在这种情况下,最好使用Sarsa。

如果我们在训练过程中不关心智能体的性能,但是我们只希望它学习一种最优的贪婪策略(最终将要切换到该策略),则最好使用Q学习这样的算法。例如,考虑我们玩一些练习游戏(有时我们不介意由于随机性而输掉比赛),然后玩一场重要的比赛(在此我们将停止学习并从epsilon-greedy切换到贪婪策略) )。这是Q学习会更好的地方。


无论使用哪种算法,这绝对是最佳的解释策略
Ege

4

Q学习的公式中存在索引错误。萨顿和巴托的第148页。

Q(st,at)<-Q(st,at)+ alpha * [r(t + 1)+伽玛* max Q(st + 1,a)-Q(st,at)]

错字在max的参数中:

索引是st + 1和a,而在您的问题中,它们分别是st + 1和at + 1(这些对于SARSA是正确的)。

希望这个对你有帮助。


1

在Q学习中

这是您的:Q学习:Q(St,At)= Q(St,At)+ a [R(t + 1)+折扣*最大Q(St + 1,At)-Q(St,At)]

应该更改为Q学习:Q(St,At)= Q(St,At)+ a [R(t + 1)+折扣*最大Q(St + 1,a)-Q(St,At)]

如您所说,您必须找到更新eq的最大Q值。通过更改a,您将获得一个新的Q(St,At)。仔细的一个,给你最大的Q值是不是下一个动作。在此阶段,您仅知道下一个状态(St + 1),并且在进行下一轮之前,您想通过St + 1(St <-St + 1)更新St。

对于每个循环;

  • 使用Q值从St中选择At

  • 取At并观察Rt + 1和St + 1

  • 使用eq更新Q值。

  • 圣<-圣+1

直到St是终点站


实际上,他们使观众感到困惑。它不是R [t + 1]而是R [t],但确实确实在书中的某一点将其显示为R [t + 1]。但是(如果您设置R [t + 1],则(不要相信我的话,请自己尝试一下)),因为Q [t ] = R [t](当状态为终端时),如果使用R [t + 1],则永远不会为真。维基百科是错误的(我已对其进行了编辑),萨顿和巴托使用了本书中的两个变体而没有真正解释原因。
Ælex

0

SARSA和Qlearning之间的唯一区别是SARSA根据当前策略执行下一个操作,而qlearning采取具有下一个状态的最大效用的操作


这不是真的。两种方法都执行相同的精确操作(ε贪心)。区别在于(如其他答案中所述),他们使用不同的策略来更新Q功能。
mobeets
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.