【问题标题】:Resetting Adam optimizer reduces validation loss重置 Adam 优化器可减少验证损失
【发布时间】:2020-09-22 14:41:54
【问题描述】:

我正在 LibriSpeech 上训练一个循环神经网络。我尝试了关于学习率、批量大小等的不同变化。。在每次训练中,有一件事是相似的,即验证损失在 7 个 epoch 后达到饱和。我认为这可能是由于过度拟合。但是,我注意到一个奇怪的行为,在重置 Adam 优化器之后,即它的插槽变量 mv ,经过 7 个 epoch 的训练后,validation loss 降低到比前一个更低的新 minima,然后开始围绕该值振荡其余的训练。我推测由于训练时间较长,slot v 变量与 slot m 变量相比变得更小.所以在重置它们之后,就会发生这种未知的行为。不过我不确定。那么,我们是否需要在每个固定步数之后重置 Adam 优化器?或者如果不是,那么为什么验证损失会降低到一个新的更低的最小值?我正在使用 beta_1beta_2epsilon 的默认值 用于 Tensorflow

中的 Adam 优化器

【问题讨论】:

  • 这可能不太适合作为 SO 的问题,因为这可能需要实证研究来验证这是一致的行为,而不仅仅是您偶然观察到的事情。我至少可以告诉你,重置窗口绝对不是标准做法(至少据我所知)。在您的情况下,重置窗口可能会导致有效学习率的短期增加,因为重置动量可以解释您的观察结果,包括最后的振荡。
  • 嗨,是的,你是对的,这不是经验行为。我目前的神经网络遇到了这个问题。以前,我从来没有遇到过亚当这样的异常情况。是的,由于重置动量,有效学习率应该会增加。感谢您的直觉。这就解释了为什么验证损失会突然减少。另外,这是否意味着以更仔细的学习率训练我的模型应该可以减少验证损失,而无需重置优化器?

标签: tensorflow deep-learning neural-network recurrent-neural-network


【解决方案1】:

不确定是什么造成了这种行为,但我相信您可以通过使用可调节的学习率来避免这种情况。 keras 回调 ReduceLROnPlateau 使这很容易做到。文档是here. 将其设置为监控验证损失,如果验证损失在指定数量(耐心)的连续时期内未能减少,它将自动将学习率降低指定因子。我使用 0.6 的因子和 1 的耐心值。试一试,希望您的验证损失能够在不重置优化器的情况下达到较低的水平。

【讨论】:

  • 嗨,格里,感谢您的建议。我目前正在使用可调整的学习率。我在验证损失上使用 Newbob 训练策略来改变学习率。
【解决方案2】:

重置窗口绝对不是标准做法(至少据我所知)。在您的情况下,由于重置动量,重置它可能会导致有效学习率的短期增加,这可以解释您的两个观察结果:

  • 网络突然好转:重置充当“kickstarter”,即网络能够跳出之前的局部最小值。这表明它之前卡在这里,即学习率要么太小(如果误差曲线平坦或下降非常缓慢)要么太大(如果它围绕该点振荡)

  • 最后的振荡:增加的步长会导致一个新的局部最小值,但它现在太大而无法真正摆脱它,因此会发生振荡。

虽然您做了一个有趣的观察,但需要更多的研究来验证这是一致的行为,而不仅仅是轶事。一般来说(和你的情况),我总是建议对学习率和批量大小运行网格搜索(记住通过重复每个配置几次来考虑随机初始权重),直到你找到合适的训练曲线t 过早饱和或过拟合,同时不会在非常小的但很多梯度更新上浪费太多的训练资源。 early stopping 和学习率衰减都可以对此有所帮助,even if you're using Adam。如果您对调整过程有一定的耐心,这些都是经过充分研究的既定做法,几乎总能奏效。

【讨论】:

  • 我已经进一步验证了这种行为。由于有效学习率的增加,验证损失降至较低的最小值。但是我在 LibriSpeech 测试集上评估了模型以进行 WER 计算。即使在验证损失下降之后,WER 仍然保持不变。这意味着,损失突然减少,但模型的预测能力保持不变。
猜你喜欢
  • 2017-08-14
  • 1970-01-01
  • 2021-03-20
  • 1970-01-01
  • 2020-08-17
  • 2017-07-08
  • 2021-03-11
  • 2020-05-18
  • 2018-10-02
相关资源
最近更新 更多