我正在学习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')
是新动作a'
的预期奖励州s'
和D
是折扣因素。
首先,我不会理解术语- Q(a,s)
的作用,为什么我们会重新减去当前的Q值?
其次,在选择行动a
和a'
时,为什么这些必须是随机的?我知道在某些实现或SARSA中,所有可能的Q(s', a')
都被考虑在内并且选择了最高值。 (我相信这是Epsilon-Greedy?)为什么不选择更新哪个Q(a,s)
值呢?或者为什么不更新当前Q(a,s)
的所有s
?
最后,为什么SARSA仅限于一步前进?例如,为什么不考虑假设的Q(s'',a'')
?
我想总的来说,我的问题归结为什么使SARSA比另一种先呼吸或深度优先的搜索算法更好?
答案 0 :(得分:7)
为什么我们减去Q(a,s)? r + DQ(a',s1)
是我们通过采取行动{{{}来获得状态s
所获得的奖励1}}。从理论上讲,这是a
应该设置的值。但是,在从动作Q(a,s)
获取状态后,我们始终不会采取相同的行动,并且与未来状态相关的奖励将来会发生变化。因此,我们无法将a
设置为Q(a,s)
。相反,我们只是想把它推向正确的方向,以便最终收敛到正确的价值。因此,我们会查看预测中的错误,这需要从r + DQ(a',s1)
中减去Q(a,s)
。这是我们需要更改r + DQ(a',s1)
所需的金额,以使其与我们刚刚观察到的奖励完全匹配。由于我们不想一次性完成这些操作(我们不知道这是否总是最佳选择),我们将此错误项乘以学习率Q(a,s)
,并将此值添加到l
,以便在正确值上逐渐收敛。“
为什么我们会随机选择行动?不能总是以确定的方式选择下一个状态或行动的原因基本上是我们猜测哪种状态最好可能是错误的。当我们第一次开始运行SARSA时,我们有一个满0的表。我们通过探索状态空间的那些区域并发现与它们相关的奖励,将非零值放入表中。因此,我们探索过的一些不太可怕的东西看起来比我们尚未探索过的东西更好。也许是。但也许我们还没有探索过的东西实际上比我们已经看到的要好。这被称为探索与利用问题 - 如果我们只是继续做我们认识的工作,我们可能永远找不到最佳解决方案。 随机选择后续步骤可确保我们看到更多选项。
为什么我们不能从给定状态中采取所有可能的操作?这将迫使我们在每次迭代时基本上查看整个学习表。如果我们使用像SARSA这样的东西来解决问题,表格可能太大在合理的时间内执行此操作。
为什么SARSA只能一步前瞻?好问题。 SARSA背后的想法是,它通过表格向后传播预期的奖励。折扣因子D确保在最终解决方案中,您将获得逐渐增加的预期奖励,从而获得最佳奖励。如果你随机填写表格,这不会是真的。这并不一定会破坏算法,但我怀疑它会导致效率低下。
为什么SARSA比搜索更好?再次,这归结为效率的事情。任何人使用学习算法而不是搜索算法的根本原因是,一旦你有太多选项用于状态和动作,搜索算法太慢了。为了知道从任何其他状态动作对中采取的最佳动作(这是SARSA计算的),您需要从每个节点搜索整个图形。这将花费O(s *(s + a))时间。如果您正试图解决现实问题,那通常会太长。