Q-learning 和 SARSA 有啥区别?
Posted
技术标签:
【中文标题】Q-learning 和 SARSA 有啥区别?【英文标题】:What is the difference between Q-learning and SARSA?Q-learning 和 SARSA 有什么区别? 【发布时间】:2011-10-14 11:57:11 【问题描述】:虽然我知道SARSA 是on-policy 而Q-learning 是off-policy,但在查看他们的公式时(对我来说)很难看出这两种算法之间有什么区别。
根据书Reinforcement Learning: An Introduction(萨顿和巴托)。在SARSA算法中,给定一个策略,对应的动作值函数Q(在状态s和动作a,时间步长t),即Q(st, at sub>),可以更新如下
Q(st, at) = Q(st, at) + α *(rt + γ*Q(st+1, at+1) - Q(st sub>, at))
另一方面,Q-learning 算法的更新步骤如下
Q(st, at) = Q(st, at) + α *(rt + γ*maxa Q(st+1, a) - Q(st, at))
也可以写成
Q(st, at) = (1 - α) * Q(st, at) + α * (rt + γ*maxa Q(st+1, a))
其中 γ (gamma) 是折扣因子,rt 是在时间步 t 从环境中获得的奖励。
这两种算法的区别是否在于 SARSA 只查找下一个策略值而 Q-learning 查找下一个最大策略值?
TLDR(以及我自己的答案)
感谢自从我第一次提出这个问题以来所有回答这个问题的人。我做了一个github repo 玩 Q-Learning 并凭经验理解了其中的区别。这一切都取决于您如何选择下一个最佳操作,从算法的角度来看,这可以是 mean、max 或 最佳 操作,具体取决于您选择实施的方式。
另一个主要区别是何时发生这种选择(例如,在线 vs 离线)以及如何/为什么会影响学习。如果您在 2019 年阅读这篇文章并且更喜欢动手实践,那么玩 RL 玩具问题可能是了解这些差异的最佳方式。
最后一个重要注意事项是,Suton 和 Barto 以及 Wikipedia 在关于下一个状态最佳/最大动作和奖励:
r(t+1)
事实上
r(t)
希望这可以帮助任何人陷入困境。
【问题讨论】:
【参考方案1】:是的,这是唯一的区别。 On-policy SARSA 学习与其遵循的策略相关的动作值,而 off-policy Q-Learning 则相对于贪婪策略进行学习。在一些常见的条件下,它们都收敛到实际价值函数,但速度不同。 Q-Learning 趋于收敛速度较慢,但能够在更改策略的同时继续学习。此外,Q-Learning 在与线性逼近结合时也不能保证收敛。
实际上,在 ε-greedy 策略下,Q-Learning 计算 Q(s,a) 与最大动作值之间的差异,而 SARSA 计算 Q(s,a) 与加权和之间的差异平均动作值和最大值:
Q-Learning:Q(st+1,at+1) = maxaQ(st +1,a)
SARSA:Q(st+1,at+1) = ε·meanaQ(st +1,a) + (1-ε)·maxaQ(st+1,a)
【讨论】:
好的,那么 Sarsa 如何选择策略?我看到 Qlearning 将始终遵循承诺采取行动将您带到下一个最佳政策的政策。在 Sarsa 中选择下一个 Policy 的标准是什么(基本上我想知道的是如何评估 Policy Q(S,A) 如何选择最佳操作)。是不是一样,即为状态 S 选择动作 A,它将具有最高(即最大)Q'(S,A) ? 策略是选择下一步动作的规则。这是您在实现算法时需要选择的东西。最简单的策略是贪心策略——代理总是选择最好的动作。有了这个政策,SARSA 和 Q-Learning 是一样的。更好的学习选择是 ε-greedy 策略,其中一些动作是随机选择的。 好的,这就是我首先问这个问题的原因,在这种情况下它们都是相同的。非常感谢 !我正在使用电子贪婪。所以 Qlearning 只在 Off-Policy 的情况下有所不同,其中动作是随机选择的,但使用 Q-learning 更新会使策略值最大化? 在ε-greedy策略下,SARSA下的期望值是平均动作值和最佳动作值的加权和:Q(s_t+1,a_t+1)=ε·mean( Q(s,a))+(1-ε)·max(Q(s,a))。教科书在第 5.4 章中给出了 On-Policy Monte Carlo Control。【参考方案2】:您的 Q-Learning 公式中存在索引错误。 萨顿和巴托的第 148 页。
Q(st,at)
笔误在 max 的参数中:
索引是 st+1 和 a, 而在您的问题中,它们是 st+1 和 at+1(这些对于 SARSA 是正确的)。
希望这会有所帮助。
【讨论】:
【参考方案3】:在 Q-Learning 中
这是你的: Q-Learning:Q(St,At) = Q(St,At) + a [ R(t+1) + discount * max Q(St+1,At) - Q(St,在)]
应该改为 Q-Learning:Q(St,At) = Q(St,At) + a [ R(t+1) + discount * max Q(St+1,a) - Q(St,在)]
正如你所说,你必须找到更新 eq 的最大 Q 值。通过改变a,你将得到一个新的Q(St,At)。请注意,为您提供最大 Q 值的 a 不是下一步操作。在这个阶段,你只知道下一个状态(St+1),在进入下一轮之前,你想用 St+1 更新 St(St
对于每个循环;
使用 Q 值从 St 中选择 At
取 At 并观察 Rt+1 和 St+1
使用 eq 更新 Q 值。
St
直到 St 是终点站
【讨论】:
其实他们把观众搞糊涂了;它不是 R[t+1] 它是 R[t],但他们确实在书中的某一点将其显示为 R[t+1]。但是(不要相信我的话,自己试试)如果你设置 R[t+1] 奖励值不在 0 - 1 之间缩放,更糟糕的是你会遇到算法迭代问题,因为 Q[t ] = R[t],当状态为终端时,如果使用 R[t+1],则永远不会为真。***错了(我已经编辑过),萨顿和巴托在书中使用了这两种变体,但没有真正解释原因。【参考方案4】:当我学习这部分的时候,我也觉得很困惑,所以我把 R.Sutton 和 A.G.Barto 的两个伪代码放在一起,希望能更清楚地区别。
蓝色框突出显示了两种算法实际不同的部分。数字突出了稍后将解释的更详细的差异。
TL;NR:
| | SARSA | Q-learning |
|:-----------:|:-----:|:----------:|
| Choosing A' | π | π |
| Updating Q | π | μ |
其中 π 是一个 ε-贪婪策略(例如 ε > 0 进行探索),μ 是一个贪婪策略(例如 ε == 0,不进行探索)。
鉴于 Q-learning 使用不同的策略来选择下一个动作 A' 和更新 Q。换句话说,它试图在遵循另一个策略 μ 的同时评估 π,因此它是一种离策略算法。
相比之下,SARSA 一直使用 π,因此它是一种 on-policy 算法。
更详细的解释:
两者之间最重要的区别是 Q 在每次操作后如何更新。 SARSA 使用 Q' 完全遵循 ε-greedy 策略,因为 A' 是从中得出的。相比之下,Q-learning 在下一步的所有可能动作中使用最大 Q'。这使它看起来像遵循 ε=0 的贪婪策略,即在这部分没有探索。
但是,当实际采取行动时,Q-learning 仍然使用从 ε-greedy 策略采取的行动。这就是为什么“选择 A ...”在重复循环中的原因。
按照 Q-learning 中的循环逻辑,A' 仍然来自 ε-greedy 策略。
【讨论】:
祝贺精美的图形和图片。在我提出这个问题多年后,我开始意识到状态和动作的迭代,以及策略值的迭代和更新,是两个不同的过程。可悲的是,萨顿和巴托并没有说得很清楚。正如您所解释的,您如何决定操作会影响算法。 Q-Learning 中的最大动作通常意味着选择具有下一个最佳 Q(s,a) 的动作,例如贪婪。在 Sarsa 中,情况并非如此,您要么遵循策略(在线),要么根据随机概率探索新策略。你的描述很到位! @SilentCrash,不,它正在评估 π。 μ 是贪心策略,仅用于选择动作。 @zyxue 但是在表格中你写道,它更新 Q 就好像它遵循 μ(评估 μ),而实际上遵循 ε-贪婪策略 π。 off-policy方法能否从人类行为(π)中选择A'并从贪婪策略(μ)中更新Q? 我想说的另一点是,虽然在选择下一个动作时,SARSA 和 Q-learning 都使用 epsilon-greedy 策略,如果所有 Q 值都相同,它们应该选择相同的动作如果忽略 epsilon-greedy 中的随机部分。然而,在学习过程中的某个时刻,Q 值会变得更加不同,因为 SARSA 和 Q 学习的更新方程不同,因此即使使用相同的 epsilon-greedy 策略改进策略,它们最终也可能会选择不同的动作。也就是说,迭代后的策略会变得不一样。【参考方案5】:数学上有什么区别?
正如大多数其他答案中已经描述的那样,两次更新之间的数学差异确实在于,当更新状态-动作对的 Q 值时 (S t, At):
Sarsa 使用行为策略(意思是代理用来在环境中产生经验的策略,通常是 epsilon-greedy)来选择一个额外的动作 A t+1,然后使用Q(St+1, At+1)(打折gamma) 作为更新目标计算中预期的未来回报。 Q-learning 不使用行为策略来选择附加动作At+1。相反,它将更新规则中的预期未来回报估计为 maxA Q(St+1, A)。此处使用的 max 运算符可以被视为“遵循”完全贪婪的策略。 尽管代理实际上并未遵循贪婪策略;它只是在更新规则中说,“假设我从现在开始遵循贪婪策略,那么我预期的未来回报是多少?”。这直观上是什么意思?
正如其他答案中提到的,上述差异意味着,使用技术术语,Sarsa 是一种 on-policy 学习算法,而 Q-learning 是一种 off-policy em> 学习算法。
在极限(给定无限的时间来产生经验和学习)和一些额外的假设下,这意味着 Sarsa 和 Q-learning 收敛到不同的解决方案/“最佳”策略 :
Sarsa 将收敛到在我们继续遵循用于生成体验的相同策略的假设下的最佳解决方案。这通常是一个包含一些(相当“愚蠢”)随机性元素的策略,例如 epsilon-贪婪,因为否则我们无法保证我们会收敛到任何东西。 Q-Learning 将收敛到一个最优的解决方案,假设在产生经验和训练之后,我们切换到贪婪策略。何时使用哪种算法?
Sarsa 等算法通常在我们关心代理在学习/生成经验过程中的表现的情况下更可取。例如,考虑代理是一个昂贵的机器人,如果它掉下悬崖就会摔断。我们不想让它在学习过程中经常掉下来,因为它很贵。因此,我们关心它在学习过程中的表现。但是,我们也知道有时我们需要它随机运行(例如 epsilon-greedy)。这意味着机器人沿着悬崖行走是非常危险的,因为它可能会决定随机行动(概率为 epsilon)并跌倒。因此,我们希望它能够快速了解靠近悬崖是危险的; 即使贪婪策略能够顺着它走而不会跌倒,我们知道我们正在遵循一个随机的 epsilon-greedy 策略,并且我们关心优化我们的性能,因为我们知道我们会有时很愚蠢。在这种情况下,Sarsa 会更受欢迎。
像 Q-learning 这样的算法在我们不关心代理在训练过程中的表现的情况下会更可取,但我们只是希望它学习我们将要学习的最优贪心策略最终切换到。例如,考虑一下我们玩了一些练习游戏(有时我们不介意由于随机性而输掉比赛),然后再参加一场重要的比赛(我们将停止学习并从 epsilon-greedy 切换到 greedy 策略)。这就是 Q-learning 更好的地方。
【讨论】:
不管算法如何,这绝对是最好的解释策略 这是一个特别好的答案,恕我直言应该被接受【参考方案6】:SARSA 和 Qlearning 的唯一区别是 SARSA 根据当前策略采取下一步行动,而 qlearning 采取下一个状态效用最大的行动
【讨论】:
这不是真的。两种方法都采取相同的行动(ε-greedy)。不同之处在于(如其他答案中所述)他们使用不同的策略来更新 Q 函数。【参考方案7】:我没有读过任何书,只是看到了它们的含义 q 学习只关注(动作网格) SARSA 学习只关注 (state to state) 并观察 s 和 s' 的动作列表,然后更新 (state to state grid)
【讨论】:
您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。以上是关于Q-learning 和 SARSA 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章