我目前正在尝试实现 Q 学习算法。在阅读了足够多的内容以很好地理解它的工作原理之后,我现在想知道如何知道算法何时真正达到收敛。比如说,我有一个生成的 Q 表,如本例所示,我怎么知道工作已经完成,即算法已经收敛?
谢谢!
我目前正在尝试实现 Q 学习算法。在阅读了足够多的内容以很好地理解它的工作原理之后,我现在想知道如何知道算法何时真正达到收敛。比如说,我有一个生成的 Q 表,如本例所示,我怎么知道工作已经完成,即算法已经收敛?
谢谢!
在实践中,当学习曲线变得平坦并且不再增加时,强化学习算法被认为是收敛的。
但是,应考虑其他元素,因为它取决于您的用例和设置。理论上,Q-Learning 已被证明可以收敛到最优解。然而,在(Sutton 和 Barto,1998)的这一部分中,由于勘探参数参数不会逐渐增加,Q-Learning 会过早地收敛(在达到最优策略之前)。
根据我的经验,使和学习率以确保收敛的方式减小,并且在大多数情况下,此处涉及一些调整(移动这些参数时,您的 Q-Learning 曲线将稳定在不同的水平)。
最后,别忘了 Q-Learning 是 Watkins 在 1989 年提出的,它有点过时了。当您学习强化学习时它非常适合,但在实施真正的学习代理时就不那么适合了。我建议探索更多最先进的技术。
e
,您就可以停止运行剧集/迭代。 e = 0.001 # some small number
while True: # improving our Q
delta = 0 # track updates
while True: # running episode
old_Q = Q[s, a]
new_Q = Q[s, a] + alpha * (r + gamma*max_a(Q[s', a']) - Q[s, a])
delta = max(delta, old_Q-new_Q)
if delta < e:
# Assuming Q has been converged, no major updates
# while running an episode (max update was less
# than small `e`)
break
^^ 仅将代码应用于值迭代。
另请检查此问题以获取更多信息。