Python 为什么我的深Q网和双深Q网不稳定?
我正在尝试实现DQN和DDQN(都有经验的回复)来解决OpenAI健身房Cartpole环境。这两种方法有时都能学习并解决这个问题,但并非总是如此 我的网络只是一个前馈网络(我试过使用1和2个隐藏层)。在DDQN中,我在DQN中创建了一个网络,在DDQN中创建了两个网络,一个用于评估Q值的目标网络和一个用于选择最佳动作的主网络,对主网络进行培训,并在几集后将其复制到目标网络 DQN中的问题是:Python 为什么我的深Q网和双深Q网不稳定?,python,tensorflow,reinforcement-learning,q-learning,Python,Tensorflow,Reinforcement Learning,Q Learning,我正在尝试实现DQN和DDQN(都有经验的回复)来解决OpenAI健身房Cartpole环境。这两种方法有时都能学习并解决这个问题,但并非总是如此 我的网络只是一个前馈网络(我试过使用1和2个隐藏层)。在DDQN中,我在DQN中创建了一个网络,在DDQN中创建了两个网络,一个用于评估Q值的目标网络和一个用于选择最佳动作的主网络,对主网络进行培训,并在几集后将其复制到目标网络 DQN中的问题是: 有时它可以在100集内获得完美的200分,但有时它会陷入困境,无论训练多长时间,它都只能获得10分
- 有时它可以在100集内获得完美的200分,但有时它会陷入困境,无论训练多长时间,它都只能获得10分李>
- 此外,如果学习成功,学习速度也会有所不同
- 它可以学习达到200分,但随后它似乎忘记了所学的内容,分数急剧下降
是否有可能使学习变得稳定?任何意见或参考都将不胜感激 也许这可以帮助你解决这个环境中的问题
这类问题经常发生,你不应该放弃。首先,当然,你应该再做一到两次检查,看看代码是否正确-试着将你的代码与其他实现进行比较,看看损失函数的行为如何等等。如果你非常确定你的代码是正确的-并且,正如你所说的,模型可以随时了解任务,很可能是这样-您应该开始尝试超参数 你的问题似乎与超参数有关,如探索技术、学习速度、更新目标网络的方式以及体验记忆。我不会玩弄隐藏层的大小——找到模型曾经学习过的值并保持它们不变
- 探索技术:我假设您使用epsilon贪婪策略。我的建议是从一个高的ε值开始(我通常从1.0开始),然后在每一步或每一集之后衰减它,但也要定义一个εmin。从低ε值开始可能是不同学习速度和成功率的问题-如果你完全随机,你总是在开始时用类似的过渡填充你的记忆。由于开始时的ε率较低,在开发阶段开始之前,模型没有充分探索的可能性更大李>
- 学习率:确保不要太大。较小的速率可能会降低学习速度,但有助于学习模型不会从全局极小值返回到某些局部的、更差的极小值。此外,自适应学习速率(如使用计算得出的速率)可能会对您有所帮助。当然批量大小也会有影响,但我会保持它不变,并且只在其他超参数更改不起作用时才担心它李>
- 目标网络更新(速率和值):这也是一个重要的更新。您必须进行一点实验——不仅要测试更新的频率,还要测试您将多少主值复制到目标值中。人们通常会在每集左右进行硬更新,但如果第一种技术不起作用,则尝试进行软更新李>
- 体验重播:您使用它吗?你应该。你的内存有多大?这是一个非常重要的因素,内存大小会影响稳定性和成功率()。基本上,如果您注意到算法的不稳定性,请尝试更大的内存大小,如果它严重影响您的学习曲线,请尝试上述论文中提出的技术
#raward=np.random.normal(1.0,random\u raward\u STD)
通过这种方式,它每一步获得正常+1奖励,并且在10次跑步中有7次“稳定”
结果如下: