虽然我知道 SARSA 是一种同策略学习,而 Q-learning 是一种异策略学习,但当查看它们的公式时,我(对我来说)很难看出这两种算法之间的任何区别。
根据 Sutton 和 Barto 的著作 Reinforcement Learning: An Introduction,在 SARSA 算法中,给定一个策略,相应的动作价值函数 Q(在状态 s 和动作 a,在时间步 t),即 Q(st, at),可以按照以下方式更新:
Q(st, at) = Q(st, at) + α*(rt + γ*Q(st+1, at+1) – Q(st, at))
另一方面,Q-learning 算法的更新步骤如下:
Q(st, at) = Q(st, at) + α*(rt + γ*maxa Q(st+1, a) – Q(st, at))
也可以写成:
Q(st, at) = (1 – α) * Q(st, at) + α * (rt + γ*maxa Q(st+1, a))
其中 γ (gamma) 是折扣因子,rt 是在时间步 t 从环境中获得的奖励。
这两种算法之间的区别是否在于 SARSA 只查找下一个策略值,而 Q-learning 查找下一个最大策略值?
TLDR(以及我自己的答案)
感谢所有回答我最初提出的问题的人。我创建了一个 github repo 来使用 Q-Learning,并且凭经验理解了区别。这一切都归结于你如何选择你的下一个最佳行动,从算法的角度来看,这可以是平均、最大或最佳行动,具体取决于你选择如何实现它。
另一个主要区别在于何时发生这种选择(例如,在线 vs 离线),以及这如何/为什么影响学习。如果你在 2019 年阅读本文,并且更喜欢实践,那么使用 RL 玩具问题可能是理解差异的最佳方法。
最后一条重要说明是,Suton & Barto 以及 Wikipedia 经常在关于下一个状态的最佳/最大动作和奖励方面存在混合、令人困惑或错误的公式表示:
r(t+1)
实际上是
r(t)
回答:
是的,这是唯一的区别。同策略 SARSA 学习相对于它遵循的策略的动作价值,而异策略 Q-Learning 学习相对于贪婪策略的动作价值。在一些常见条件下,它们都收敛到真实价值函数,但收敛速度不同。Q-Learning 往往收敛得慢一些,但有能力在改变策略的同时继续学习。此外,当与线性近似结合使用时,不能保证 Q-Learning 收敛。
在实践中,在 ε-贪婪策略下,Q-Learning 计算 Q(s,a) 与最大动作价值之间的差异,而 SARSA 计算 Q(s,a) 与平均动作价值和最大值的加权和之间的差异:
Q-Learning: Q(st+1,at+1) = maxaQ(st+1,a)
SARSA: Q(st+1,at+1) = ε·meanaQ(st+1,a) + (1-ε)·maxaQ(st+1,a)