Q 学习和 SARSA 的区别是什么?

尽管我知道 SARSA是在策略上的,而 Q 学习是非策略的,但是当查看它们的公式时(对我来说)很难看出这两种算法之间的任何区别。

根据莎顿和巴托的书 强化学习: 简介。在 SARSA 算法中,给定一个策略,相应的操作值函数 Q (在时间步骤 t 中的状态 s 和操作 a 中) ,即 Q (sT,aT) ,可以按照以下方式更新

Q (sT,aT) = Q (sT,aT) + α * (rT + γ * Q (sT + 1,aT + 1)-Q (sT,aT))

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

Q (sT,aT) = Q (sT,aT) + α * (rT + γ * maxQ (sT + 1,a)-Q (sT,aT))

也可以写成

Q (sT,aT) = (1-α) * Q (sT,aT) + α * (rT + γ * maxQ (sT + 1,a))

其中 γ (γ)是折现因子 rT是在时间步骤 t 时从环境中获得的奖励。

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

TLDR (和我自己的答案)

感谢从我第一次问这个问题以来所有回答这个问题的人。我做了一个 Github Repo的 Q-Learning 游戏,从经验上理解了它们之间的区别。这些都相当于 你选择你的下一个最佳动作如何运行,从算法的角度来看,你选择你的下一个最佳动作可以是 刻薄Max最好的动作,这取决于您选择如何实现它。

另一个主要区别是 什么时候,这种选择正在发生(例如,在线离线) ,以及它如何/为什么影响学习。如果你正在2019年阅读这篇文章,并且更喜欢亲自动手,那么玩 RL 玩具问题可能是理解这些差异的最好方法。

很重要的最后一个注意事项是,Suton & Barto 和 Wikipedia 通常都有 混杂,令人困惑错了关于 下州最佳/最大行动和奖励的公式化表示:

R (t + 1)

事实上

R (t)

希望这能帮助任何一个困在这里的人。

68395 次浏览

是的,这是唯一的区别。在策略 SARSA 学习相对于它所遵循的策略的行为值,而非策略 Q 学习学习相对于贪婪策略的行为值。在一些常见的条件下,它们都收敛到实值函数,但收敛速度不同。Q-Learning 趋向于收敛慢一点,但是有能力在改变策略的同时继续学习。此外,Q 学习并不能保证在与线性近似结合时收敛。

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

学习: Q (sT + 1,aT + 1) = maxQ (sT + 1,a)

SARSA: Q (sT + 1,aT + 1) = ε · mean Q (sT + 1,a) + (1-ε) · maxQ (sT + 1,a)

你的 Q 学习公式中有一个索引错误。 Sutton 和 Barto 的第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 来说是正确的)。

希望这个能帮到你。

在 Q-Learning

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

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

正如您所说,您必须找到更新等式的最大 Q 值。通过改变 ,然后你将有一个新的 Q (St,At)。小心,给你最大 Q 值的 不是下一个动作。在这个阶段,您只知道下一个状态(St + 1) ,在进入下一轮之前,您希望通过 St + 1更新 St (St < —— St + 1)。

对于每个循环;

  • 使用 Q 值从 St 中选择 At

  • 服用 At 并观察 Rt + 1和 St + 1

  • 使用 eq 更新 Q 值。

  • St < —— St + 1

直到圣达到终点

当我学习这一部分的时候,我发现它也非常令人困惑,所以我把 R.Sutton 和 A.G.Barto 的两个伪代码放在一起,希望能够使区别更加清楚。

enter image description here

蓝框突出显示了这两种算法实际上存在差异的部分。数字突出了稍后将解释的更为详细的差异。

NR :

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

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

  1. 考虑到 Q 学习使用不同的策略来选择下一个动作 A’和更新 Q。换句话说,它试图在遵循另一个策略 μ 的同时计算 π,所以它是一个非策略算法。

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

更详细的解释 :

  1. 两者之间最重要的区别在于每次操作之后 Q 是如何更新的。SARSA 使用 Q’跟随 ε- 贪婪策略,因为 A’是从中提取的。相比之下,Q 学习在下一步的所有可能行动中使用最大 Q’。这使得它看起来像是遵循 ε = 0的贪婪策略,也就是说,在这一部分没有探索。

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

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

在数学上有什么区别?

正如大多数其他答案中已经描述的那样,这两种更新在数学上的区别实际上是,当更新状态操作对 (S < sub > t ,A < sub > t )问:值时:

  • Sarsa 使用行为策略(意思是,代理用来在环境中生成体验的策略,通常是 Epsilon-贪婪的)来选择一个额外的操作 A < sub > t + 1 ,然后使用 Q (S < sub > t + 1 ,A < sub > t + 1 (由 Γ贴现)作为更新目标计算中预期的未来返回值。
  • Q -学习不使用行为策略来选择额外的操作 A < sub > t + 1 。相反,它在更新规则中将预期的未来收益估计为 Max < sub > A Q (S < sub > t + 1 ,A)。这里使用的 Max操作符可以被视为“遵循”完全贪婪的策略。它只说,在更新规则中,“假设我从现在开始遵循贪婪策略,那么我期望的未来收益是什么?”.

直觉上这意味着什么?

正如在其他答案中提到的,上面描述的差异意味着,使用术语集,Sarsa 是一种 政策上的学习算法,而 Q 学习是一种 不符合规定学习算法。

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

  • Sarsa 将会收敛到 一个最优的解决方案,假设我们一直遵循用于产生经验的相同政策。这通常是一个带有某种随机性(相当“愚蠢”)的策略,比如 Epsilon贪婪,因为否则我们根本无法保证我们会收敛到任何东西。
  • Q-Learning 将会收敛到 一个最优的解决方案,假设在产生经验和训练之后,我们转向贪婪策略

什么时候使用哪个算法?

莎莎这样的算法通常更适合于 当我们在学习/产生经验的过程中关心主体的表现时。例如,考虑一下代理是一个昂贵的机器人,如果它掉下悬崖就会摔坏。我们不希望在学习过程中它掉下来太多次,因为它是昂贵的。因此,我们在学习过程中关注它的表现。然而,我们也知道有时候我们需要它随机地行动(例如,epsilon 贪婪)。这意味着机器人在悬崖边行走是非常危险的,因为它可能决定随机行动(概率为 ε)并摔倒。因此,我们更希望它能迅速了解到靠近悬崖是危险的; 即使一个贪婪的策略能够在它旁边行走而不跌倒,我们知道我们正在随机地遵循一个 ε 贪婪的策略,我们关心优化我们的性能,因为我们知道我们有时会很愚蠢。在这种情况下,萨尔萨会更好。

Q 学习这样的算法在我们不关心代理在训练过程中的表现的情况下会更好,但是我们只是想让它学习一个我们最终会切换到的最优贪婪策略。比如说,我们玩一些练习游戏(有时候我们不介意因为随机性而输掉) ,然后玩一个重要的锦标赛(在那里我们会停止学习并且从贪婪的策略转变为贪婪的策略)。这就是 Q 学习更好的地方。

SARSA 和 Qlearning 的唯一区别是 SARSA 根据当前的策略采取下一个行动,而 Qlearning 根据下一个状态的最大效用采取下一个行动

我没有读任何一本书,只是我看到了它们的含义 Q 学习只要把注意力集中在(动作网格)上 SARSA 学习只关注(状态到状态) ,观察 s 和 s 的操作列表,然后更新(状态到状态网格)