我想澄清一下,我已经理解了SARSA是如何在细微差别中工作的。考虑使用CONNECTIONIST系统从在线Q学习中提取的原始定义。作者声明: G. A. Rummery & M. NiranjanCUED/F-INFENG/TR 1661994年9月(根据维基百科的一篇文章,这是SARSA wss提到的第一份出版物)。
作者提出了一种更新规则,“.在使用与所选动作相关的Qt+1时,与正常的Q-学习不同,而不是在Q-学习中使用贪婪的最大值(Qt+1\ a)”。(引自第6页)
请注意,这是必要的政策上的性质的算法.本定义脚注中提到的SARSA一词。
随后,SARSA更新的伪代码在许多阅读中使用:
initialize Q[S,A] arbitrarily
observe current state s
select action using a policy based on Qcarry out an action a
observe reward r and state s'
select action a' using a poicy based on Q
Q[s,a] <- Q[s,a] + alpha * (r + gamma * Q[s', a'] - Q[s, a])
s <- s'
a <- a'来源:http://www.cse.unsw.edu.au/~cs9417ml/RL1/algorithms.html
我想了解我是否必须使用完全相同的q函数(和策略)来得到A和A‘。如果我在每一次迭代中更新Q函数,那么下一次迭代中的下一个动作将使用最新的Q更新得到,而前一个动作是用前Q得到的。另一方面,我真的可以用完全相同的Q生成A和A‘,只有在更新Q之后,我才会考虑使用相同函数导出的A和A’。
发布于 2018-02-02 12:48:53
我想了解我是否必须使用完全相同的q函数(和策略)来得到A和A‘。如果我在每一次迭代中更新Q函数,那么下一次迭代中的下一个动作将使用最新的Q更新得到,而前一个动作是用前Q得到的。另一方面,我真的可以用完全相同的Q生成A和A‘,只有在更新Q之后,我才会考虑使用相同函数导出的A和A’。哪个更正统/更正确?
给出的算法伪代码更为正统,因为为了修改A的值,您必须“回滚”环境,并查看新采样的A将把您从状态S带到哪里。为了更清楚地说明这一点,你可以看到:
select action a' using a policy based on Q可以重新措辞:
select action a' by sampling epsilon-greedy function over Q(s',*)。。。除非您有S'的值,否则您不能这样做,并且只有当您在状态S时已经采取了A操作时,您才可能具有该值。因此,在那个阶段改变A意味着回到过去。。。
在实践中,这并不重要,即使您有能力回滚(在模拟器,或规划算法)。如果您的策略基于当前Q值的\epsilon-greedy,那么您将执行SARSA以实现最优控制(而不是预测)。在这种情况下,改变q意味着改变策略。SARSA中的"On- policy“为了控制,必须考虑到策略的非平稳性。偶尔,这意味着您刚刚选择的A'值会在更优策略中以较低的概率选择。但是这次你还是选择了它,而且代理商以后应该少选择它。基于学习率的更新将消除估计偏差,因为随着时间的推移,早期糟糕的/过于频繁的抽样选择。
修改一个单一步骤的“错误”是可能的,但在纯在线算法中并不常见。我没有在规划前瞻性或离线算法中看到它,我已经研究过了。我不确定,但我怀疑修正轨迹的直接部分对学习可能带来的偶尔的促进作用太小,不值得失去算法的一般性。但是,您可能会发现它有时确实有帮助,并且值得进行一次实验,以检查它是否有用,前提是您正在使用模拟器/计划器,而在这种情况下,回滚状态相对容易。
请注意,在半梯度与“真实梯度”方法中使用函数逼近器(例如线性函数或神经网络)时,您的思维方式确实会再次出现,而不是使用Q值的问题,而是由于TD误差而导致的梯度计算问题,当TD目标是基于与您所使用的梯度相同的参数时。在半梯度法中,这个问题被忽略了,而且这些方法仍然正常工作.然而,“真实梯度”方法在理论上是正确的。
https://datascience.stackexchange.com/questions/27378
复制相似问题