我已经实现了一个基于Deep Q-Learning的 RL 模型,用于学习如何玩 2D 游戏,就像 OpenAI Gym 中的游戏一样。为了测试模型,与大多数人不同,我选择在不同级别上评估其性能,而不是用于训练的级别。这样,我可以评估模型学到的知识是否可以很好地推广到以前看不见的水平。
在做了一些测试并绘制了结果之后,我注意到了一个问题。尽管该模型泛化得很好,但如果训练过程持续时间过长,它最终会过度拟合训练集(用于训练的级别)。这是有道理的,因为提前停止是用于防止过度拟合的常用技术。问题是训练持续的时间越长,代理训练的样本越多,这应该会提高其测试性能。然而,正如我所解释的,由于过度拟合,这不会发生。
我想运行模型并绘制随着体验回放中样本数量的增加在测试集上获得的性能(获得的奖励)。我想获得的图应该显示性能如何随着样本数量的增加而增加,但是过度拟合会导致在一个点之后,性能下降,即使更多的样本用于训练。我想避免这种情况。这些是我能想到的解决方案:
- 使用技术来防止过拟合。现在我正在使用 Dropout,但它仍然会发生。
- 使用指数衰减学习率。现在我使用的是一个常数,因为我不希望新样本对训练的影响小于旧样本。
- 根据我要用于训练的样本数量放弃并更改训练步骤的数量。然后,为了获得图,我将不得不对图的每个点(样本数)重复一次训练,以便为每个不同大小的体验回放获得最佳性能。当然,这是我最后的手段。
你觉得我应该怎么做?
编辑:我刚刚尝试了 L2 正则化。它的工作原理与 Dropout 差不多。