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

时间:2018-10-12 01:00:41

标签: python tensorflow reinforcement-learning q-learning

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

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

DQN中的问题是:

  • 有时候,它可以在100个情节中获得200分的完美成绩,但有时会卡住,无论经过多长时间的训练,都只能获得10分。
  • 此外,如果学习成功,学习速度也会有所不同。

DDQN中的问题是:

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

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

网络规模和批量大小是否有经验法则?我认为较大的网络和较大的批处理规模将增加稳定性。

是否可以使学习稳定?任何评论或参考表示赞赏!

3 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

我还一直认为问题出在(D)DQN不稳定,或者“ CartPole”有漏洞或“不稳定”。

搜索了几周后,我检查了我的代码几次,更改了每个设置,但只有一个...

  1. 将折扣系数设置为1.0(真的)使我对CartPole-v1的训练达到了最大500步。

  2. CartPole-v1在使用简单的Q-Learner进行训练时稳定(将min-alpha和min-epsilon降低至0.001):https://github.com/sanjitjain2/q-learning-for-cartpole/blob/master/qlearning.py

  3. 创建者的Gamma值为1.0(我在reddit上了解到它),因此我从此处通过一个简单的DQN(double_q = False)对其进行了测试:https://github.com/adventuresinML/adventures-in-ml-code/blob/master/double_q_tensorflow2.py

我还删除了1行:# reward = np.random.normal(1.0, RANDOM_REWARD_STD)

这样,它每步可以获得正常的+1奖励,并且在10次跑步中就“稳定”了7次。

结果如下:

ddqn-rewards-cartpole-v1

答案 2 :(得分:0)

也许这可以帮助您解决这种环境下的问题。

Cartpole problem with DQN algorithm from Udacity