我们应该为adam优化器学习衰减吗?

时间:2016-09-15 17:54:16

标签: neural-network tensorflow

我正在使用Adam优化器训练网络进行图像本地化,有人建议我使用指数衰减。我不想尝试,因为Adam优化器本身会降低学习速度。但那家伙坚持认为他说他之前就这么做过。我应该这样做,你的建议背后有任何理论吗?

5 个答案:

答案 0 :(得分:51)

这取决于。 ADAM使用个人学习速率更新任何参数。这意味着网络中的每个参数都具有相关的特定学习速率。

参数的单一学习率是使用lambda(初始学习率)作为上限计算的。这意味着每个学习速率可以从0(无更新)到lambda(最大更新)不等。

学习速度在训练阶段适应自己,这是正确的,但是如果你想确保每个更新步骤都不超过lambda,你可以使用指数衰减或其他任何方式降低lambda。 它可以帮助减少最新训练阶段的损失,当先前相关的lambda参数的计算损失已经停止减少时。

答案 1 :(得分:27)

根据我的经验,通常没有必要使用Adam优化器进行学习率衰减。

理论是亚当已经处理了学习率优化(check reference):

  

“我们提出亚当,一种有效的随机优化方法   只需要具有很少内存要求的一阶梯度。   方法计算不同的个人自适应学习率   来自第一和第二时刻估计的参数   梯度;亚当的名字源于自适应矩估计。“

与任何深度学习问题YMMV一样,一种尺寸并不适合所有人,你应该尝试不同的方法,看看哪些适合你,等等。

答案 2 :(得分:2)

是的,绝对如此。根据我自己的经验,这对亚当的学习率下降非常有用。如果没有衰减,则必须将学习速率设置得很小,这样损失减少到一定程度后才不会开始分散。在这里,我发布代码以使用Adam使用TensorFlow降低学习率。希望对别人有帮助。

decayed_lr = tf.train.exponential_decay(learning_rate,
                                        global_step, 10000,
                                        0.95, staircase=True)
opt = tf.train.AdamOptimizer(decayed_lr, epsilon=adam_epsilon)

答案 3 :(得分:1)

Adam有一个学习率,但它是一个自适应的最大速率,所以我不认为很多人使用学习速率调度。

由于自适应特性,默认速率相当稳健,但有时您可能希望对其进行优化。您可以做的是事先找到一个最佳的默认率,从一个非常小的速率开始并增加它直到损失停止减少,然后查看损失曲线的斜率并选择与损失最快减少相关的学习率(不是损失实际上最低的点)。杰里米·霍华德在fast.ai深度学习课程中提到了这一点,并从“循环学习率”论文中提到了这一点。

编辑:最近,人们开始与Adam一起使用单周期学习率政策,效果很好。

答案 4 :(得分:0)

一个简单的替代方法是增加批量大小。每次更新更多的样本将迫使优化器对更新更加谨慎。如果 GPU 内存限制了每次更新可以跟踪的样本数量,您可能不得不求助于 CPU 和传统 RAM 进行训练,这显然会进一步减慢训练速度。