SARSA实施

MrD*_*MrD 3 machine-learning sarsa

我正在学习SARSA算法的实现,并有一个问题.我理解一般的"学习"步骤采取以下形式:

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

North (n), East (e), West (w) and South (s)
Run Code Online (Sandbox Code Playgroud)

这样的行动清单,

a = {n,w,e,s}
Run Code Online (Sandbox Code Playgroud)

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

Q(a,s) = Q(a,s) + L[r + DQ(a',s1) - Q(a,s)]
Run Code Online (Sandbox Code Playgroud)

哪里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比另一种先呼吸或深度优先搜索算法更好?

sea*_*erd 7

为什么我们减去Q(a,s)? r + DQ(a',s1)这是我们s通过采取行动从达到状态所获得的回报a.从理论上讲,这是Q(a,s)应该设定的价值.但是,在从州采取行动之后,我们不会总是采取相同的行动a,并且与未来国家相关的回报将来会发生变化.所以我们不能只是Q(a,s)等于r + DQ(a',s1).相反,我们只是想把它推向正确的方向,以便最终收敛到正确的价值.所以我们看一下预测Q(a,s)r + DQ(a',s1)Q(a,s)的错误,这需要从中减去.这是我们需要改变的数量,以使其与我们刚刚观察到的奖励完全匹配.因为我们不想这样做,所有在一次(我们不知道这是否总是将是最好的选择),我们通过学习率乘以这个误差项l,并且这个值增加Q(a,s)一个更平缓收敛正确的价值 .`

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

为什么我们不能从一个特定的国家采取所有可能的行动?这将迫使我们在每次迭代时基本查看整个学习表.如果我们使用像SARSA这样的东西来解决这个问题,那么这个表可能太大而无法在合理的时间内完成.

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

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