Deep Q-Learning“惨败”的原因?

人工智能 q学习 深度学习 健身房 双q学习
2021-10-23 06:15:36

我在 Model Free RL 中实现了一些“经典”论文,例如 DQN、Double DQN 和 Double DQN with Prioritized Replay。

通过CartPole-v1使用相同的底层 NN 运行的各种模型,我注意到上述所有 3 个模型在达到最高分数后都表现出平均奖励的突然和严重下降(损失的突然和显着增加)。

在线阅读后,我可以看到这是一个公认的问题,但我找不到合适的解释。我试图减轻的事情:

  • 适应模型架构
  • 调整超参数,如 LR、batch_size、损失函数(MSE、Huber)

这个问题仍然存在,我似乎无法实现任何持续的峰值性能。

我发现的有用链接

例子:

  • 在带 PR 的 Double DQN 中直到约 250 集(带有退火测试版),在奖励增加和损失减少方面性能稳定上升
  • 在那个阶段之后,性能突然下降,平均奖励减少和损失增加,如下面的输出所示
Episode: Mean Reward: Mean Loss: Mean Step
  200 : 173.075 : 0.030: 173.075
  400 : 193.690 : 0.011: 193.690
  600 : 168.735 : 0.015: 168.735
  800 : 135.110 : 0.015: 135.110
 1000 : 157.700 : 0.013: 157.700
 1200 :  99.335 : 0.013: 99.335
 1400 :  97.450 : 0.015: 97.450
 1600 : 102.030 : 0.012: 102.030
 1800 : 130.815 : 0.010: 130.815
 1999 :   89.76 : 0.013: 89.76

问题:

  • 这背后的理论推理是什么?这种fragile性质是否意味着我们不能使用上述 3 种算法来解决CartPole-v1
  • 如果没有,哪些步骤可以帮助减轻这种情况?这可能是过度拟合吗?这种脆弱的性质表明了什么?
  • 关于这个“灾难性下降”的任何参考资料?
  • 我在其他环境中也观察到类似的行为,这是否意味着上述 3 种算法不足?

编辑: 从@devidduma 的回答中,我将基于时间的 LR 衰减添加到 DDQN+PRB 模型中,并保持其他一切不变。这是数字,就性能下降的幅度而言,它们看起来比以前更好。

   10 : 037.27 : 0.5029 : 037.27
   20 : 121.40 : 0.0532 : 121.40
   30 : 139.80 : 0.0181 : 139.80
   40 : 157.40 : 0.0119 : 157.40
   50 : 225.10 : 0.0107 : 225.10 <- decay starts here, factor = 0.001
   60 : 227.90 : 0.0101 : 227.90
   70 : 227.00 : 0.0087 : 227.00
   80 : 154.30 : 0.0064 : 154.30
   90 : 126.90 : 0.0054 : 126.90
   99 : 154.78 : 0.0057 : 154.78

编辑:

  • 经过进一步测试,pytorchReduceLROnPlateau似乎最适合使用patience=0param。
1个回答

这是在选择动作时过度拟合Q 函数导致复合错误的情况。

  1. 您已经在相同的数据分布上将神经网络作为函数逼近器训练了太久,因此神经网络失去了泛化能力并慢慢开始过度拟合,即完全按原样或至少非常接近地学习数据。
  2. 过度拟合的 Q 函数会在动作选择中更频繁地导致数据分布不匹配,并且复合错误会比以前更早发生。

从您发布的表格来看,您可能应该训练到 400 到 600 集,然后停止训练神经网络。

复合错误是自动驾驶中众所周知的问题。考虑以下斯坦福强化学习讲座中的幻灯片:

数据分布不匹配和复合错误

幻灯片实际上是在模仿学习的特定案例中处理这个问题,但是数据分布不匹配和复合错误的概念也可以应用于您的案例。基本上,每当由于过度拟合、有偏的 Q 值函数而选择了错误的动作时,代理就没有更多关于如何从该错误中恢复的数据,当 Q 函数过度拟合时更是如此。

此外,最初认为复合误差会随时间线性增加,但事实并非如此。正如您从下面的幻灯片中看到的那样,它们在时间上呈二次方增长。

复合误差在时间上是二次方的

一旦选择了错误的操作,您的代理只会变得更糟。我不确定以下建议是否会起作用,以便您继续训练而不会停止,但您可以尝试一下。

在 TD-0、SARSA 或 Q 学习等时间差分学习方法中,如果以下两个条件成立,则有限状态和有限动作 MDP 会收敛到最佳动作值:

  1. 政策顺序π贪婪在探索的极限(GLIE)
  2. 学习率αt满足 Robbins-Munro 序列使得:
  • t=1αt=
  • t=1αt2<

话虽如此,您可以通过任何方式推断出我们应该使用衰减学习率来满足 Robbins-Munro 序列。衰减学习率分为三种类型:

  • 基于时间的衰减
  • 阶跃衰减
  • 指数衰减

这些中的每一个都保证收敛到最优策略,当然在任何基于时间差异学习的算法的探索范围内。无需赘述,我建议您使用基于时间的衰减学习率和以下公式:

lr=1/(1+decay_factoriteration)

基于时间的衰减是Keras 在构建神经网络时设置参数时默认提供的。decay这里的一次迭代意味着一个时代。在您的情况下,您可能会在代理采取的每一步都训练您的神经网络,因此一次迭代 = 一个时期 = 代理采取的一步。

在 Keras 设置中,衰减应如下所示: model.compile(loss='mse', optimizer=Adam(lr=self.learning_rate, decay=decay_rate)) 提供您认为适合衰减率的任何值。我建议的值为0.001. 如果它不起作用,请尝试调整此超参数0.001,尽管该值应该是一个很好的起点。

试一试,告诉我它是否能解决您的问题。