亚当方法的学习率好吗?

Posted

技术标签:

【中文标题】亚当方法的学习率好吗?【英文标题】:Is it good learning rate for Adam method? 【发布时间】:2017-08-15 10:30:12 【问题描述】:

我正在训练我的方法。我得到的结果如下。这是一个很好的学习率吗?如果不是,是高还是低? 这是我的结果

lr_policy: "step"
gamma: 0.1
stepsize: 10000
power: 0.75
# lr for unnormalized softmax
base_lr: 0.001
# high momentum
momentum: 0.99
# no gradient accumulation
iter_size: 1
max_iter: 100000
weight_decay: 0.0005
snapshot: 4000
snapshot_prefix: "snapshot/train"
type:"Adam"

这是参考

在学习率低的情况下,改进将是线性的。随着高学习率,它们将开始看起来更具指数性。更高的学习率会更快地衰减损失,但它们会陷入更差的损失值

【问题讨论】:

这里的上下文很少,但看起来不错。您可以尝试提高学习率(以节省训练时间),直到您看到它不再收敛。最后训练集的准确率是多少? @Simon:在上述设置中,50000 次迭代的最终错误率为 0.05。我将 base_lr 增加到 0.002,而不是 0.001 以查看改进 Adam 有一个内部 LR,因此在步骤中更改外部 LR 可能没有意义。 【参考方案1】:

学习率看起来有点高。曲线下降得太快,不符合我的口味,很快就变平了。如果我想获得额外的性能,我会尝试 0.0005 或 0.0001 作为基础学习率。如果你发现这不起作用,你可以在几个 epoch 后退出。

但您必须问自己的问题是您需要多少性能以及距离实现所需性能还有多远。我的意思是您可能正在为特定目的训练神经网络。很多时候,你可以通过增加网络容量来提高网络性能,而不是微调学习率,如果不完美的话,这是相当不错的。

【讨论】:

【参考方案2】:

您可以从较高的学习率(例如 0.1)开始以摆脱局部最小值,然后将其降低到一个非常小的值以让事情稳定下来。为此,将步长更改为 100 次迭代,以每 100 次迭代减小学习率的大小。这些数字对于您的问题来说确实是独一无二的,并且取决于您的数据规模等多种因素。

还要记住图表上的验证损失行为,以查看您是否过度拟合数据。

【讨论】:

亚当不应该自己做这一切吗? lrate应该设置为一个固定的数字不是很重要(例如1或1e-1) 即使在 Adam 优化方法中,学习率也是一个超参数,需要调整,学习率衰减通常比不做要好。 Adam 有时会给我“U”形损失曲线,默认 lr=0.001,而低 lr 没有:gist.github.com/Naetmul/218a6f9e4f1523d24bea5ac02c1b450d【参考方案3】:

我想在胡安的一些陈述中更具体一些。但是我的声誉还不够,所以我将其发布为答案。

您不应该害怕当地的最低要求。在实践中,据我所知,我们可以将它们分类为“好的局部最小值”和“坏的局部最小值”。正如 Juan 所说,我们想要更高的学习率的原因是我们想要找到一个更好的“良好的局部最小值”。如果您将初始学习率设置得太高,那将很糟糕,因为您的模型可能会落入“糟糕的局部最小值”区域。如果发生这种情况,“衰减学习率”练习将无济于事。

那么,我们怎样才能保证你的权重落在好区域呢?答案是我们不能,但我们可以通过选择一组好的初始权重来增加它的可能性。再一次,太大的初始学习率会使你的初始化毫无意义。

其次,了解您的优化器总是好的。花点时间看看它的实现,你会发现一些有趣的东西。例如,“学习率”实际上并不是“学习率”。

总而言之:1/不用说,学习率小不好,但学习率太大肯定不好。 2/ 权重初始化是您的第一个猜测,它确实会影响您的结果 3/ 花时间理解您的代码可能是一个好习惯。

【讨论】:

【参考方案4】:

在选择 adam 的超参数时,人们已经做了很多实验,如果你从头开始学习,3e-4 到 5e-4 是最好的学习率。

请注意,如果您正在进行迁移学习并微调模型,请保持较低的学习率,因为最初梯度会更大,并且反向传播会对预训练模型产生更大的影响。您不希望在培训开始时发生这种情况

【讨论】:

一个简单的谷歌搜索“亚当的最佳学习率”目前告诉我“3e-4 是亚当的最佳学习率,毫无疑问。”这听起来很有说服力。【参考方案5】:

Adam 是一种优化器方法,其结果取决于两件事:优化器(包括参数)和数据(包括批量大小、数据量和数据分散度)。那么,我认为你提出的曲线还可以。

关于学习率,Tensorflow、Pytorch 等推荐学习率等于 0.001。但在自然语言处理中,学习率在 0.002 到 0.003 之间时效果最好。

我制作了一个图表,比较了 Adam(学习率 1e-3、2e-3、3e-3 和 5e-3)与 Proximal Adagrad 和 Proximal Gradient Descent。如果是这种情况,所有这些都推荐给 NLP。

【讨论】:

以上是关于亚当方法的学习率好吗?的主要内容,如果未能解决你的问题,请参考以下文章

机器学习梯度下降与拟牛顿

神经网络优化中的学习率调整(下)

深度学习中手动调整学习率与自适应学习率方法怎样区分?

机器学习算法:分类评估方法

探究各种学习率策略--模拟学习率变化过程

机器学习-分类评估方法(召回率ROC与混淆矩阵)