为什么我的 Deep Q Net 和 Double Deep Q Net 不稳定?

Jac*_*ack 2 python reinforcement-learning q-learning tensorflow

我正在尝试实施 DQN 和 DDQN(都有经验回复)来解决 OpenAI AI-Gym Cartpole Environment。这两种方法有时都能学习和解决这个问题,但并非总是如此。

我的网络只是一个前馈网络(我尝试使用 1 和 2 个隐藏层)。在 DDQN 中,我在 DQN 中创建了一个网络,在 DDQN 中创建了两个网络,一个评估 Q 值的目标网络和一个选择最佳动作的主网络,训练主网络,并在一些情节后将其复制到目标网络。

DQN 中的问题是:

  • 有时它在100集内可以达到完美的200分,但有时它会卡住,无论训练多久都只能达到10分。
  • 此外,在成功学习的情况下,学习速度不同。

DDQN 中的问题是:

  • 它可以学习达到 200 分,但随后它似乎忘记了所学,分数急剧下降。

我试过调整批量大小、学习率、隐藏层中的神经元数量、隐藏层数量、探索率,但不稳定性仍然存在。

关于网络大小和批量大小是否有任何经验法则?我认为合理更大的网络和更大的批量会增加稳定性。

是否有可能使学习稳定?任何意见或参考表示赞赏!

小智 5

这类问题经常发生,你不应该放弃。首先,当然,您应该再做一两次检查代码是否正确 - 尝试将您的代码与其他实现进行比较,查看损失函数的行为等。如果您非常确定您的代码一切正常 - 并且,正如您所说,该模型可以不时地学习任务,它可能是 - 您应该开始试验超参数。

您的问题似乎与探索技术、学习率、更新目标网络的方式以及经验回放记忆等超参数有关。我不会玩弄隐藏层的大小 - 找到模型学习一次的值并保持它们固定。

  • 探索技术:我假设您使用 epsilon-greedy 策略。我的建议是从一个高 epsilon 值开始(我通常从 1.0 开始)并在每个步骤或剧集之后衰减它,但也要定义一个 epsilon_min。从低 epsilon 值开始可能是学习速度和成功率不同的问题——如果你完全随机,你总是在开始时用类似的转换来填充你的记忆。如果开始时的 epsilon 率较低,则您的模型在开发阶段开始之前探索不够的可能性更大。
  • 学习率:确保它不会太大。较小的速率可能会降低学习速度,但有助于学习模型不会从全局最小值逃逸到一些局部的、更糟糕的模型。此外,自适应学习率(例如由Adam计算的这些)可能会对您有所帮助。当然,批量大小也有影响,但我会保持固定,只有在其他超参数更改不起作用时才担心它。
  • 目标网络更新(速率和值):这也是一个重要的更新。您必须进行一些试验 - 不仅是您执行更新的频率,还有您将多少主要值复制到目标值中。人们通常每集左右都会进行一次硬更新,但如果第一种技术不起作用,请尝试进行软更新。
  • 经验回放:你用过吗?你应该。你的内存有多大?这是非常重要的因素,内存大小会影响稳定性和成功率(A Deeper Look at Experience Replay)。基本上,如果您发现算法不稳定,请尝试更大的内存大小,如果它对您的学习曲线影响很大,请尝试上述论文中提出的技术。