Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么我的深Q网和双深Q网不稳定?_Python_Tensorflow_Reinforcement Learning_Q Learning - Fatal编程技术网

Python 为什么我的深Q网和双深Q网不稳定?

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分

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

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

DQN中的问题是:

  • 有时它可以在100集内获得完美的200分,但有时它会陷入困境,无论训练多长时间,它都只能获得10分
  • 此外,如果学习成功,学习速度也会有所不同
DDQN中的问题是:

  • 它可以学习达到200分,但随后它似乎忘记了所学的内容,分数急剧下降
我试过调整批量大小、学习速度、隐藏层中神经元的数量、隐藏层的数量、探索速度,但不稳定性依然存在

网络规模和批量大小是否有经验法则?我认为较大的网络和较大的批量将提高稳定性


是否有可能使学习变得稳定?任何意见或参考都将不胜感激

也许这可以帮助你解决这个环境中的问题


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

你的问题似乎与超参数有关,如探索技术、学习速度、更新目标网络的方式以及体验记忆。我不会玩弄隐藏层的大小——找到模型曾经学习过的值并保持它们不变

  • 探索技术:我假设您使用epsilon贪婪策略。我的建议是从一个高的ε值开始(我通常从1.0开始),然后在每一步或每一集之后衰减它,但也要定义一个εmin。从低ε值开始可能是不同学习速度和成功率的问题-如果你完全随机,你总是在开始时用类似的过渡填充你的记忆。由于开始时的ε率较低,在开发阶段开始之前,模型没有充分探索的可能性更大
  • 学习率:确保不要太大。较小的速率可能会降低学习速度,但有助于学习模型不会从全局极小值返回到某些局部的、更差的极小值。此外,自适应学习速率(如使用计算得出的速率)可能会对您有所帮助。当然批量大小也会有影响,但我会保持它不变,并且只在其他超参数更改不起作用时才担心它
  • 目标网络更新(速率和值):这也是一个重要的更新。您必须进行一点实验——不仅要测试更新的频率,还要测试您将多少主值复制到目标值中。人们通常会在每集左右进行硬更新,但如果第一种技术不起作用,则尝试进行软更新
  • 体验重播:您使用它吗?你应该。你的内存有多大?这是一个非常重要的因素,内存大小会影响稳定性和成功率()。基本上,如果您注意到算法的不稳定性,请尝试更大的内存大小,如果它严重影响您的学习曲线,请尝试上述论文中提出的技术

我还认为问题在于不稳定的(D)DQN或“CartPole”被窃听或“不稳定可解”

在搜索了几个星期后,我检查了我的代码好几次,更改了每一个设置,只有一个

  • 折扣系数设置为1.0(真的)使我在CartPole-v1上的训练更稳定,最大步数为500步

  • CartPole-v1在简单Q-学习者的训练中稳定(将最小α和最小ε降低至0.001):

  • creator的Gamma值为1.0(我在reddit上读到过),所以我在这里用一个简单的DQN(double_q=False)测试了它:

  • 我还删除了一行:
    #raward=np.random.normal(1.0,random\u raward\u STD)

    通过这种方式,它每一步获得正常+1奖励,并且在10次跑步中有7次“稳定”

    结果如下: