我正在为我的副项目使用 Q-learning。几百万集之后,我发现累积奖励似乎达到了稳定。我想知道是否有一种科学的方法来确定何时停止训练而不是观察累积的奖励。
Q-learning什么时候停止训练?
这在很大程度上取决于您的目标是什么。以下是我能想到的一些不同的案例:
目标:训练直到收敛,但不再
从您的问题中,我得到的印象是这似乎是您的目标。最简单的方法可能是在训练期间绘制情节返回的“老式”方式(如果这是一个情节任务),自己检查情节,并在它似乎已经稳定/收敛时中断训练过程。这假设您实际实现了一些东西(例如带有停止按钮的非常简单的 GUI),以便您能够手动决定何时中断训练循环。
要自动执行此操作(当您说“确定何时停止训练的科学方法”时,我想您正在寻找这种方法),我想您可以做一些简单的事情,例如测量过去 10 集的平均表现,以及过去 50 集中的平均表现,以及过去 100 集中的平均表现(例如)。如果这些都非常相似,停止训练可能是安全的。或者,也许更好的是,您可以测量一段时间内的性能差异,并在差异降至某个阈值以下时停止。
目标:将一种算法的性能与出版物中描述的另一种算法/性能进行比较
在这种情况下,您只需确保使用与您要比较的基线相似的训练时间/训练步骤数。当前强化学习研究中经常发生的情况是测量特定时间点(例如 Atari 游戏中的 10M、50M、100M 和 200M 帧之后)最后 X(例如 X = 10 或 X = 100)集的平均性能,请参阅:https ://arxiv.org/abs/1709.06009 )。在我看来,更好的是在训练期间的每一个时间点都做到这一点,并绘制一条学习曲线。在这种情况下,当你停止训练时,这真的无关紧要,只要你以相同的方式对你正在比较的所有算法进行一致的训练。笔记:您何时停止训练的决定将影响您可以合理得出的结论。如果你很早就停止训练,你就无法得出关于长期训练表现的任何结论。
目标:实现一个打算长期部署的代理
在这种情况下,您甚至可以考虑永远不要停止学习(“终身学习”)。您可以简单地在代理部署并在其环境中运行时不断更新。或者你可以考虑在性能看起来足够时停止训练,如果你担心它在部署期间可能会降低。