【问题标题】:SARSA ImplementationSARSA 实施
【发布时间】:2015-04-26 14:54:28
【问题描述】:

我正在学习 SARSA 算法的实现并有一个问题。我了解一般的“学习”步骤采取以下形式:

机器人 (r) 处于状态 s。有四种可用的操作:

North (n), East (e), West (w) and South (s)

这样的动作列表,

a = {n,w,e,s}

机器人随机选择一个动作,更新如下:

Q(a,s) = Q(a,s) + L[r + DQ(a',s1) - Q(a,s)]

其中L 是学习率,r 是与(a,s) 相关联的奖励,Q(s',a') 是在新状态s' 中来自动作a' 的预期奖励,D 是折扣系数。

首先,我不理解- Q(a,s)这个词的作用,为什么要重新减去当前的Q值?

其次,在选择动作aa' 时,为什么这些必须是随机的?我知道在某些实现或 SARSA 中,所有可能的 Q(s', a') 都被考虑在内,并选择了最高值。 (我相信这是 Epsilon-Greedy?)为什么不为此也选择要更新的 Q(a,s) 值?或者为什么不将所有Q(a,s) 更新为当前的s

最后,为什么 SARSA 仅限于一步前瞻?比如说,为什么不考虑一个假设的Q(s'',a'')

我想总的来说,我的问题归结为是什么让 SARSA 比另一种呼吸优先或深度优先搜索算法更好?

【问题讨论】:

  • Sarsa(lambda) 存在并且超越一步前瞻。

标签: machine-learning sarsa


【解决方案1】:

我们为什么要减去 Q(a,s)? r + DQ(a',s1) 是我们通过采取行动 a 到达状态 s 所获得的奖励。理论上,这是Q(a,s) 应该设置的值。但是,在从动作a 进入状态 s 后,我们不会总是采取相同的动作,与进入未来状态相关的奖励将在未来发生变化。所以我们不能只设置Q(a,s) 等于r + DQ(a',s1)。相反,我们只想将其推向正确的方向,以便最终收敛到正确的值。所以我们看看预测的误差,它需要从r + DQ(a',s1) 中减去Q(a,s)。这是我们需要更改 Q(a,s) 的数量,以使其与我们刚刚观察到的奖励完全匹配。由于我们不想一次完成所有操作(我们不知道这是否总是最好的选择),我们将这个错误项乘以学习率,l,然后将此值添加到 @ 987654332@ 用于逐渐收敛到正确的值。`

为什么我们随机选择动作?之所以不总是以确定的方式选择下一个状态或动作,基本上是我们对哪个状态最好的猜测可能是错误的强>。当我们第一次开始运行 SARSA 时,我们有一个满是 0 的表。我们通过探索状态空间的这些区域并发现与它们相关的奖励将非零值放入表中。结果,我们探索过的并不可怕的东西看起来比我们没有探索过的东西更好。也许是的。但也许我们尚未探索的东西实际上比我们已经看到的要好得多。这称为探索与利用问题 - 如果我们只是继续做我们知道有效的事情,我们可能永远找不到最佳解决方案。 随机选择下一步可确保我们看到更多选项。

为什么我们不能从给定状态采取所有可能的行动?这将迫使我们基本上在每次迭代时查看整个学习表。如果我们使用 SARSA 之类的工具来解决问题,表格可能太大,无法在合理的时间内完成此操作。

为什么 SARSA 只能进行一步前瞻? 好问题。 SARSA 背后的想法是,它通过表格向后传播预期奖励。折扣因子 D 确保在最终解决方案中,您将获得逐渐增加的预期奖励,从而获得最佳奖励。如果你随机填写表格,这并不总是正确的。这不一定会破坏算法,但我怀疑它会导致效率低下。

为什么 SARSA 比搜索更好?再次,这归结为效率问题。任何人使用学习算法而不是搜索算法的根本原因是,一旦你有太多的状态和动作选项,搜索算法就会太慢。为了知道从任何其他状态动作对中采取的最佳动作(这是 SARSA 计算的),您需要从每个节点搜索整个图。这将花费 O(s*(s+a)) 时间。如果你试图解决现实世界的问题,那通常太长了。

【讨论】:

  • 太棒了! :D 这真的很有帮助,非常感谢您花时间解释它!
猜你喜欢
  • 1970-01-01
  • 2015-07-06
  • 1970-01-01
  • 2015-07-10
  • 1970-01-01
  • 1970-01-01
  • 2019-12-16
  • 2022-07-16
  • 1970-01-01
相关资源
最近更新 更多