我如何知道 Q 学习算法何时收敛?

机器算法验证 机器学习 强化学习
2022-03-21 13:23:52

我目前正在尝试实现 Q 学习算法。在阅读了足够多的内容以很好地理解它的工作原理之后,我现在想知道如何知道算法何时真正达到收敛。比如说,我有一个生成的 Q 表,如本例所示,我怎么知道工作已经完成,即算法已经收敛?

谢谢!

2个回答

在实践中,当学习曲线变得平坦并且不再增加时,强化学习算法被认为是收敛的。

但是,应考虑其他元素,因为它取决于您的用例和设置。理论上,Q-Learning 已被证明可以收敛到最优解。然而,在(Sutton 和 Barto,1998)的这一部分中,由于勘探参数ε参数不会逐渐增加,Q-Learning 会过早地收敛(在达到最优策略之前)。

根据我的经验,使ε和学习率α以确保收敛的方式减小,并且在大多数情况下,此处涉及一些调整(移动这些参数时,您的 Q-Learning 曲线将稳定在不同的水平)。

最后,别忘了 Q-Learning 是 Watkins 在 1989 年提出的,它有点过时了。当您学习强化学习时它非常适合,但在实施真正的学习代理时就不那么适合了。我建议探索更多最先进的技术。

  1. 进行固定数量的剧集/迭代。最简单的方法将为您提供接近最佳的解决方案。
  2. 评估 N 集并取平均值。例如推出 5 集,取平均回报G并将其与最好的进行比较Gmax(如果该信息可用)或具有 2-3 个以前的结果,例如 RMSE。
  3. 升级版这个是不正确的。由于算法中涉及的随机性,您不能这样做。这仅适用于值迭代。跟踪 Q 函数更新。一旦它变得小于某个小数字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

^^ 仅将代码应用于值迭代。

另请检查此问题以获取更多信息。