Q学习与SARSA有什么区别?

时间:2011-07-27 17:46:30

标签: artificial-intelligence reinforcement-learning q-learning sarsa

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

根据书Reinforcement Learning: An Introduction(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 t ))

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

  

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

也可以写成

  

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

其中γ(gamma)是贴现因子,r t 是在时间步t从环境收到的奖励。

这两种算法之间的区别在于,当Q-learning查找下一个最大策略值时,SARSA只查找下一个策略值吗?

TLDR(以及我自己的答案)

感谢所有回答这个问题的人,因为我第一次提出这个问题。我做了一个github repo玩Q-Learning,并凭经验理解了它的不同之处。这一切都等于 你选择下一个最佳动作 的方式,从算法的角度来看,它可以是卑鄙 max 最佳操作,具体取决于您选择如何实施。

另一个主要区别是 此选择发生时(例如,在线 vs 离线)以及影响学习的方式/原因。如果你在2019年阅读这篇文章并且更像是一个动手的人,那么玩RL玩具问题可能是了解这些差异的最好方法。

最后一个重要注意事项是Suton&amp;对于下一个状态最佳/最大行动和奖励,Barto以及维基百科经常有混合,混淆错误的公式化表示:

  

R(T + 1)

实际上是

  

R(T)

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

6 个答案:

答案 0 :(得分:42)

是的,这是唯一的区别。政策上的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 ,一个)

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

答案 1 :(得分:37)

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

What event to use when pasting something in a JTextField?

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

<强> TL; NR

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

其中π是ε-贪婪的策略(例如,具有探索的ε> 0),并且μ是贪婪的策略(例如,ε== 0,NO探索)。

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

  2. 相比之下,SARSA一直使用π,因此它是一种政策上的算法。

  3. 更详细的解释

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

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

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

答案 2 :(得分:6)

数学上有什么区别?

正如大多数其他答案中已经描述的那样,两个更新之间的差异在数学上确实是在更新状态 - 动作对 Q - 值时(S t ,A t

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

这直觉意味着什么?

正如其他答案所述,上述差异意味着,使用技术术语,Sarsa是 on-policy 学习算法,而Q-learning是 off-policy 学习算法。

在极限(给予无限的时间来产生经验和学习),并在一些额外的假设下,这意味着Sarsa和Q-learning汇聚到不同的解决方案/“最优”政策

  • Sarsa 会在我们继续遵循用于生成体验的相同政策的假设下,收敛到最佳解决方案。这通常是一个带有某种(相当“愚蠢”)随机性元素的政策,比如 epsilon -greedy,因为否则我们无法保证我们会收敛到任何东西。
  • Q-Learning 将汇聚到最佳解决方案,假设在产生经验和培训后,我们会切换到贪婪政策

何时使用哪种算法?

在我们关心代理在学习/生成体验过程中的表现的情况下,像 Sarsa 这样的算法通常更可取。例如,考虑一下代理是一个昂贵的机器人,如果它从悬崖上掉下来就会破碎。我们宁愿在学习过程中不要经常摔倒,因为它很昂贵。因此,我们关心其在学习过程中的表现。但是,我们也知道有时需要它随机行动(例如epsilon-greedy)。这意味着机器人在悬崖旁边行走是非常危险的,因为它可能决定随机行动(概率为epsilon)并摔倒。因此,我们希望它能够快速了解​​到靠近悬崖是危险的; 即使一个贪婪的政策能够在不下降的情况下走在它旁边,我们知道我们正在遵循一个随机性的贪婪政策,我们关心优化我们的表现,因为我们知道我们将会愚蠢有时。在这种情况下,Sarsa会更受欢迎。

Q-learning 这样的算法在我们不关心代理在培训过程中的表现的情况下会更受欢迎,但我们只是希望它能够学习我们将要学习的最佳贪婪政策最终转向。例如,考虑一下我们玩一些练习游戏(我们不介意有时会因为随机性而失败),然后参加一个重要的比赛(我们将停止学习并从epsilon-greedy切换到贪婪的政策) )。这就是Q-learning会更好的地方。

答案 3 :(得分:3)

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

  

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

拼写错误在max:

的参数中

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

希望这有点帮助。

答案 4 :(得分:0)

在Q-Learning中

这是你的: Q-Learning:Q(St,At)= Q(St,At)+ a [R(t + 1)+折扣*最大Q(St + 1, At ) - Q(St,在))

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

正如您所说,您必须找到更新eq的最大Q值。通过更改 a ,然后您将有一个新的Q(St,At)。小心地,给你最大Q值的 a 不是下一个动作。在这个阶段,你只知道下一个状态(St + 1),在进入下一轮之前,你想要用St + 1更新St(St&lt; -St + 1)。

对于每个循环;

  • 使用Q值从St选择At

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

  • 使用方程

  • 更新Q值
  • St&lt; - St + 1

直到St是终端

答案 5 :(得分:0)

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