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

时间:2017-03-23 02:53:10

标签: machine-learning neural-network deep-learning caffe

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

enter image description here

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"

这是参考资料

  
    

学习率低时,改进将是线性的。随着高学习率,他们将开始看起来更具指数性。较高的学习率会更快地减少损失,但是他们会陷入更糟糕的损失值     enter image description here

  

5 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:7)

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

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

答案 2 :(得分:2)

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

你不应该害怕当地的最低限度。在实践中,据我所知,我们可以将它们归类为“良好的本地最小值”和“糟糕的本地最小值”。正如胡安所说,我们希望获得更高学习率的原因是我们希望找到一个更好的“良好的地方最低”。如果您将初始学习率设置得太高,那将是不好的,因为您的模型可能会落入“糟糕的本地最小”区域。如果发生这种情况,“腐朽学习率”的做法无法帮助你。

然后,我们如何确保你的体重会落在好地区?答案是我们不能,但我们可以通过选择一组好的初始权重来增加其可能性。再一次,初始学习速度太大会使初始化变得毫无意义。

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

总之:1 /毋庸置疑,学习率不高,但学习率过高肯定是不好的。 2 /重量初始化是你的第一个猜测,它会影响你的结果3 /花时间理解你的代码可能是一个很好的做法。

答案 3 :(得分:2)

Adam是一种优化器方法,其结果取决于两件事:优化器(包括参数)和数据(包括批处理大小,数据量和数据分散度)。然后,我认为您呈现的曲线还可以。

关于学习率,Tensorflow,Pytorch等建议的学习率等于0.001。但是在自然语言处理中,学习率在0.002到0.003之间达到了最佳结果。

我制作了一张图,将亚当(学习率1e-3、2e-3、3e-3和5e-3)与近端Adagrad和近端梯度下降进行了比较。如果您遇到这种情况,建议将它们全部推荐给NLP。

enter image description here

答案 4 :(得分:1)

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

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