Adam方法的学习率是否很好?

Joh*_*ohn 16 machine-learning neural-network deep-learning caffe

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

在此输入图像描述

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"
Run Code Online (Sandbox Code Playgroud)

这是参考

学习率低时,改进将是线性的.随着高学习率,他们将开始看起来更具指数性.较高的学习率会更快地减少损失,但是他们会陷入更糟糕的损失值 在此输入图像描述

小智 8

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

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

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

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

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


Jua*_*ata 7

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

还要记住图表上的验证丢失行为,以确定您是否过度拟合数据.

  • 即使在亚当优化方法中,学习速率也是一个超参数,需要调整,学习速率衰减通常比不这样做更好. (3认同)
  • 亚当不应该自己做吗?应该将包名设置为固定数字不是很重要(例如1或1e-1) (2认同)

Tho*_*etz 7

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

您需要问自己的问题是,您需要多少性能以及您与实现所需性能的距离.我的意思是你可能正在为特定目的训练神经网络.通常情况下,通过增加容量可以从网络中获得更多性能,而不是微调学习速率,如果不是完美的话,这是非常好的.


Sau*_*mar 5

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

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

  • 一个简单的谷歌搜索“adam 的最佳学习率”目前告诉我“3e-4 是 Adam 的最佳学习率,毫无疑问”。这听起来很有说服力。 (4认同)
  • 这句话是 Andrej Karpathy 的一条推文,他回复道:“(我只是想确保人们明白这是一个笑话......)”。仅供参考。 (2认同)