Q学习与SARSA有什么区别?

Æle*_*lex 50 artificial-intelligence reinforcement-learning q-learning sarsa

虽然我知道SARSA是在政策上,而Q-learning不合时宜的,但在查看他们的公式时,很难(对我而言)看到这两种算法之间存在任何差异.

根据" 强化学习:引言"(Sutton和Barto)一书.在SARSA算法中,给定策略,相应的动作值函数Q(在状态s和动作a,在时间步t),即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-learning查找下一个最大策略值这一事实?

TLDR(和我自己的答案)

感谢所有回答这个问题的人,因为我第一次提出这个问题.我已经制作了一个与Q-Learning一起玩的github回购,并凭经验了解了它的不同之处.这一切都取决于如何选择下一个最佳动作,从算法的角度来看,这可能是一个平均,最大最佳动作,具体取决于您选择如何实现它.

另一个主要区别是这种选择发生时(例如,在线离线)以及影响学习的方式/原因.如果您在2019年阅读此内容并且更像是一个动手的人,那么玩RL玩具问题可能是理解这些差异的最佳方式.

最后一个重要的注意事项是,Suton&Barto以及维基百科在下一个州最佳/最大行动和奖励方面经常会有混淆,混乱错误的公式化表示:

R(T + 1)

实际上是

R(T)

希望这有助于任何人陷入困境.

Don*_*eba 44

是的,这是唯一的区别.政策上的SARSA相对于其遵循的政策学习行动价值,而非政策性Q-Learning则相对于贪婪政策而言.在一些常见条件下,它们都收敛于实际价值函数,但速度不同.Q-Learning倾向于收敛一点,但有能力在改变政策的同时继续学习.此外,当与线性近似结合时,不能保证Q-Learning收敛.

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

Q-Learning:Q(s t + 1,a t + 1)= max a Q(s t + 1,a)

SARSA:Q(S t + 1中,一个T + 1)=ε·意味着一个 Q(小号T + 1,α)+(1-ε)·最大一个 Q(小号T + 1中的A)

  • 该策略是选择下一个操作的规则.在实现算法时,您需要选择它.最简单的政策是贪婪的政策 - 代理人总是选择最好的行动.根据这项政策,SARSA和Q-Learning是相同的.更好的学习选择是ε-贪婪的政策,其中一些行动是随机选择的. (5认同)
  • 好的,Sarsa然后如何选择一项政策?我看到Qlearning将始终遵循保证您采取下一个最佳策略的策略。在Sarsa中选择下一个策略的标准是什么(基本上我想知道的是如何评估策略Q(S,A)如何选择最佳操作)。是不是一样,即为状态S选择动作A,该动作A的Q'(S,A)最高(即最大)? (3认同)
  • 好的,这就是为什么我首先问这个问题,在这种情况下,它们都是相同的。非常感谢你 !我正在使用e-Greedy。因此,Qlearning仅在非政策情况下有所不同,在Off-Policy情况下,是随机选择操作,而通过Q-learning更新会最大化策略值? (2认同)
  • 根据ε-贪婪政策,SARSA下的预期值是平均作用值和最佳行动值的加权和:Q(s_t + 1,a_t + 1)=ε·均值(Q(s,a))+ (1-ε)·MAX(Q(S,A)).教科书在第5.4章"政策中的蒙特卡罗控制"中给出了它. (2认同)

zyx*_*xue 40

当我学习这一部分的时候,我发现它也很混乱,所以我把R.Sutton和AGBarto的两个伪代码放在一起,希望能让它们更加清晰.

在此输入图像描述

蓝框突出显示两种算法实际不同的部分.数字突出了稍后将要解释的更详细的差异.

TL; NR:

|             | SARSA | Q-learning |
|:-----------:|:-----:|:----------:|
| Choosing A' |   ?   |      ?     |
| Updating Q  |   ?   |      ?     |
Run Code Online (Sandbox Code Playgroud)

其中π是ε-贪婪的政策(例如ε> 0,有探索),μ是贪婪的政策(例如ε== 0,NO探索).

  1. 鉴于Q-learning使用不同的策略来选择下一个动作A'并更新Q.换句话说,它正在尝试在遵循另一个策略μ的同时评估π,因此它是一种非策略算法.

  2. 相比之下,SARSA始终使用π,因此它是一种策略上的算法.

更详细的解释:

  1. 两者之间最重要的区别是每次操作后如何更新Q. SARSA完全按照ε-贪婪的政策使用Q',因为A'来自它.相比之下,Q学习对下一步的所有可能操作使用最大Q'.这使得它看起来像遵循ε= 0的贪婪政策,即在这部分中没有探索.

  2. 然而,当实际采取行动时,Q学习仍然使用从ε-贪婪的政策中采取的行动.这就是为什么"选择A ......"在重复循环中.

  3. 遵循Q学习中的循环逻辑,A'仍然来自ε-贪婪的政策.

  • 祝贺您拥有精美的图形和图片。在问了这个问题多年后,我开始意识到状态和操作的迭代以及策略值的迭代和更新是两个不同的过程。可悲的是,萨顿和巴托对此不太清楚。正如您所解释的,如何决定动作会影响算法。Q学习中的最大动作通常意味着选择具有次优Q(s,a)的动作,例如贪婪。在Sarsa中不是这种情况,您可以遵循该策略(在线),也可以根据随机概率探索新策略。您的描述当场! (2认同)
  • @zyxue 但是在您写的表中,它更新 Q 就好像它在遵循 μ(评估 μ)而实际上遵循 ε-贪婪策略 π。 (2认同)

Den*_*ers 6

数学上有什么区别?

正如大多数其他答案中已经描述的那样,这两个更新在数学上的区别确实在于,当更新状态-动作对(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)并跌落。因此,我们希望它能够快速了解​​到靠近悬崖的危险;即使贪婪的策略能够顺其自然地走下去,我们也知道我们遵循随机的epsilon贪婪策略,并且考虑到有时候我们会变得愚蠢,因此我们关心优化性能。在这种情况下,最好使用Sarsa。

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

  • 无论算法如何,这绝对是最好的解释策略 (3认同)
  • 这是一个特别好的答案,恕我直言,应该被接受 (2认同)

Alv*_*vin 5

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

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

错字在 max 的参数中:

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

希望这个对你有帮助。