【问题标题】:Is it meaningless to use ReduceLROnPlateau with Adam optimizer?将 ReduceLROnPlateau 与 Adam 优化器一起使用是否毫无意义?
【发布时间】:2021-02-23 14:10:53
【问题描述】:

这个问题基本上是针对 Keras 的工作,或者tf.keras 适合对框架有非常深入了解的人

据我所知,tf.keras.optimizers.Adam 是一个优化器,它已经有一个自适应学习率方案。那么如果我们使用from keras.callbacks.ReduceLROnPlateauAdam 优化器或任何其他优化器,这样做不是没有意义吗?我没有基于KerasOptimizer 的内部工作原理,但对我来说,如果我们使用自适应优化器,为什么要使用它以及如果我们使用这个给定的回调,会发生什么?对训练有影响吗

【问题讨论】:

  • 实际上似乎不是一个编程问题——毕竟it works with Adam。你似乎在问一个理论问题。
  • Adam 仍然有一个“默认”学习率,它只是由所有自适应 thingamajigs 简单地缩放,所以对我来说似乎“很明显”它会影响学习。如果您想知道它如何影响它,为什么不尝试一下呢?
  • 我将 Adam 优化器与 ReduceLROnPlateau 一起使用,效果很好。不确定 Adam 优化器在什么基础上调整学习率,如果实际上是这样,但您想要的是根据验证损失降低学习率。
  • AdaGrad still 具有全局学习率。是的,每个参数都有“不同的”学习率,但这些都是基于全局学习率。本质上,learning_rate(param) = global_learning_rate * adaptive_terms(param)。更改 Keras 优化器中的学习率会修改此全局学习率,它充当所有每个参数学习率的尺度。
  • 再添加一件事,一个优化器实际上是正确的,没有没有全局学习率是Adadelta。然而,这里 Keras 人只是在实现中添加了这个,即使它不在论文中。一般来说,我可以从许多实验中证实,即使使用像 Adam 这样的自适应优化器,减少高原上的 LR 也可以很多。试试看!

标签: tensorflow machine-learning keras deep-learning tf.keras


【解决方案1】:

从概念上讲,将梯度视为来自自动微分的固定数学值。

除了纯 SGD 之外的每个优化器所做的就是获取梯度并应用一些统计分析来创建更好的梯度。在最简单的情况下,动量,梯度与之前的梯度进行平均。在 RMSProp 中,测量了批次间梯度的方差——噪声越大,RMSProp 越不“信任”梯度,因此梯度会减小(除以该权重的梯度的标准差)。亚当两者兼而有之。

然后,所有优化器将统计调整后的梯度乘以学习率。

因此,尽管对 Adam 的一种通俗描述是它会自动调整学习率……更详细的描述是 Adam 在统计上调整梯度以使其更可靠,但您仍然需要确定学习率及其变化方式在训练期间(例如 LR 策略)。 ReduceLROnPlateau、余弦衰减、预热等都是 LR 策略的示例。

无论你是编写 TF 还是 PyTorch,PyTorch 优化器上的伪代码都是我了解优化器算法的最佳途径。一开始看起来像一堵希腊字母墙,但如果你盯着它看几分钟,你就会摸到它。

https://pytorch.org/docs/stable/optim.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-20
    • 2021-07-28
    • 1970-01-01
    • 2018-10-02
    • 2020-06-01
    • 2012-09-13
    • 2017-09-17
    相关资源
    最近更新 更多