虽然我知道SARSA是 on-policy 而Q-learning是 off-policy,但在查看他们的公式时(对我来说)很难看出这两种算法之间有什么区别。
根据《强化学习:简介》一书(Sutton 和 Barto 着)。在 SARSA 算法中,给定一个策略,对应的动作值函数 Q(在状态 s 和动作 a,时间步长 t),即 Q(s t , a t ),可以更新如下
Q(s t , a t ) = Q(s t , a t ) + α*(r t + γ*Q(s t+1 , a t+1 ) - Q(s t , a t ))
另一方面,Q-learning 算法的更新步骤如下
Q(s t , a t ) = Q(s t , a t ) + α*(r t + γ*max a Q(s t+1 , a) - Q(s t , a t ))
也可以写成
Q(s t , a t ) = (1 - α) * Q(s t , a t ) + α * (r t + γ*max a Q(s t+1 , a))
其中 γ (gamma) 是折扣因子,r t是在时间步 t 从环境收到的奖励。
这两种算法的区别在于 SARSA 只查找下一个策略值,而 Q-learning 查找下一个最大策略值吗?
TLDR(和我自己的答案)
感谢自从我第一次提出这个问题以来所有回答这个问题的人。我用 Q-Learning 制作了一个github repo,并凭经验理解了其中的区别。这一切都取决于您如何选择下一个最佳操作,从算法的角度来看,这可以是平均值、最大或最佳操作,具体取决于您选择实现它的方式。
另一个主要区别是这种选择何时发生(例如,在线与离线)以及如何/为什么会影响学习。如果您在 2019 年阅读这篇文章并且更喜欢动手实践,那么玩 RL 玩具问题可能是了解差异的最佳方式。
最后一个重要的注意事项是,Suton 和 Barto 以及 Wikipedia对于下一个状态的最佳/最大动作和奖励经常有混合、混淆或错误的公式表示:
r(t+1)
实际上是
r(t)
希望这可以帮助任何人陷入困境。