我正在尝试实现DQN和DDQN(均带有经验回复)以解决OpenAI AI-健身房Cartpole环境。两种方法有时都能(但并非总是)学习并解决此问题。

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

DQN中的问题是:


有时,它可以在100个情节中获得200分的完美成绩,但是有时,它受困,无论经过多长时间的训练,都只能获得10分。
同样,在成功学习的情况下,学习速度也会有所不同。


DDQN中的问题是:


它可以学会获得200分,但是似乎忘记了所学到的知识,并且得分急剧下降。


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

网络规模和批量大小是否有任何经验法则?我认为合理的更大网络和更大批量可以提高稳定性。

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

最佳答案

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

您的问题似乎与探索技术,学习率,更新目标网络的方式以及体验重播记忆等超参数有关。我不会处理隐藏的图层大小-找到模型一次学习的值并保持不变。


探索技术:我假设您使用epsilon-greedy策略。我的建议是从较高的epsilon值开始(我通常从1.0开始),并在每个步骤或情节之后衰减它,但也要定义epsilon_min。以低ε值开始可能是学习速度和成功率不同的问题-如果完全随机,则一开始总是在内存中添加类似的过渡。一开始使用较低的epsilon速率,您的模型就有更大的机会在开发阶段开始之前就没有进行足够的探索。
学习率:确保它不会太大。较小的比率可能会降低学习速度,但会帮助学习的模型避免从全局最小值退回到某些局部的,更差的模型。此外,诸如使用Adam计算的自适应学习率可能会对您有所帮助。当然,批处理大小也会产生影响,但是我会保持不变,并且仅在其他超参数更改不起作用时才担心它。
目标网络更新(费率和价值):这也很重要。您必须进行一些试验-不仅执行更新的频率,而且还要复制多少个主要值复制到目标值中。人们通常在每个情节左右进行一次硬更新,但是如果第一种方法不起作用,则尝试进行软更新。
体验重播:您使用它吗?你应该。您的内存大小有多大?这是非常重要的因素,内存大小会影响稳定性和成功率(A Deeper Look at Experience Replay)。基本上,如果您发现算法不稳定,请尝试更大的内存大小,并且如果它对您的学习曲线有很大影响,请尝试上述论文中提出的技术。

关于python - 为什么我的Deep Q Net和Double Deep Q Net不稳定?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52770780/

10-13 00:09