澄清我对on-policy RL(在线SARSA)的理解

数据挖掘 强化学习 在线学习
2022-03-08 09:06:24

我想澄清一下,我已经了解 SARSA 如何在细微差别中发挥作用。考虑取自 ON-LINE Q-LEARNING USING CONNECTIONIST SYSTEMS 的原始定义。GA Rummery 和 M. Niranjan。CUED/F-INFENG/TR 166. 1994 年 9 月(根据维基百科的一篇文章,这是第一个提到 SARSA wss 的出版物)。

作者提出了一个更新规则,“......与普通 Q-learning 的不同之处在于使用与所选动作相关的 Qt+1,而不是 Q-learning 中使用的贪婪 max(Qt+1 | a)。” (引自第 6 页。)

请注意,这对于算法的策略性质至关重要。此定义的脚注中提到的术语 SARSA。

以及后来在许多阅读中使用的 SARSA 更新伪代码:

开始

  initialize Q[S,A] arbitrarily
  observe current state s
  select action using a policy based on Q

永远重复:

carry 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 获得的。\另一方面,我真的可以让 A和 A' 具有完全相同的 Q,并且仅在更新 Q 之后。所以我将始终考虑使用相同的函数派生的 A 和 A'。

哪个更正统/正确?

1个回答

我想了解我是否必须使用完全相同的 Q 函数(和策略)来获得 A 和 A'。如果我在每次迭代中更新 Q 函数,那么后续迭代中的下一个动作将使用最新更新的 Q 导出,而前一个动作是使用前一个 Q 获得的。\另一方面,我真的可以让 A和 A' 具有完全相同的 Q,并且仅在更新 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,并且如果您已经采取了行动,您可能只有该值A处于状态时S. 改变A因此,在那个阶段意味着回到过去。. .

实际上,这并不重要,即使您有能力回滚(在模拟器中或在计划算法中)。如果您的保单基于例如ϵ- 对当前 Q 值贪婪,那么您正在执行 SARSA 以实现最佳控制(与预测相反)。在这种情况下,改变 Q 意味着改变策略。SARSA 中用于控制的“on-policy”必须考虑到政策的非平稳性。有时这意味着A您刚刚选择的值将在更优化的策略中以较低的概率被选择。不过这次你还是选了,以后agent应该少选了。基于学习率的更新将消除由于早期较差/过于频繁采样的选择而导致的估计偏差。

修改单步“错误”是可能的,但在纯在线算法中并不常见。在我研究过的规划前瞻或离线算法中,我还没有看到它。我不确定,但我怀疑偶尔会通过修改轨迹的直接部分获得的学习提升太小,不值得失去算法的通用性。您可能会发现它有时确实有帮助,并且值得进行实验来检查它是否有帮助,前提是您正在使用回滚状态相对容易的模拟器/规划器。


请注意,在半梯度与“真梯度”方法中使用函数逼近器(例如线性函数或神经网络)时,您的思维方式确实会再次出现,这不是使用 Q 值的问题,而是当您的 TD 目标基于与您正在获取梯度的相同参数时,由于 TD 误差而导致计算梯度的问题。在半梯度方法中,这个问题被忽略了,这些方法仍然可以正常工作。但是,“真正的梯度”方法在理论上更正确。