当代理与自己对战时,是否需要定期清除 DQN 中的回放内存?

人工智能 深度学习 强化学习
2021-11-10 12:48:39

在过去的几天里,我广泛研究了“Demystifying Deep Reinforcement Learning”一文,同时尝试自己实现所提出的算法。

我的目标是让代理通过使用深度强化学习的方法与自己玩一个简单的棋盘游戏来学习。在“深度 Q 学习算法”一章中用伪代码描述的算法是直截了当的,但我无法理解回放内存只初始化一次并且永远不会被清除的事实。

除了可用内存增长过大的明显问题外,似乎还有一个更根本的缺陷。一开始游戏几乎是随机的,因为 Q 函数刚刚被随机初始化。这意味着糟糕的举动几乎不会受到对手的惩罚。从一开始的随机遭遇中学习是有意义的,因为我们没有更好的数据可以学习,这实际上很好地描述了观察到的环境行为。

但是当智能体改进时,旧的记忆玩法将不再有价值,因为某些动作将不再被对手玩,因此旧的游戏将不再反映环境的当前行为。

这至少是我的解释。现在我想知道这是否只是文章中的伪代码中缺少,或者我的思维方式在这方面是错误的。我的问题是,如果我们需要在给定的设置中定期刷新回放内存,应该多久刷新一次?

1个回答

DQN 和类似架构中重放内存的目的是确保深度网络的梯度稳定且不会发散。限制要保留的内存以及它到达过去的距离是实际 AI 部署中出现的一个问题。扔掉它通常不是最好的决定,因为代理的梯度可能会变得不稳定。相反,保留最后 T 个时间步长/游戏玩法的窗口可以保留足够的信息,同时确保随着代理的改进数据是相关的。还有一些其他方法也可以改善结果:

  • 只保留相关的时间步长(相关高度取决于应用程序)
  • 以相对于其年龄的概率从内存中删除时间步长(最旧的被删除概率最高)

需要注意的是,较大的重放内存通常比较小的重放内存更好,以确保稳定性,但尽管内存很便宜,但它不是无限的。