我们应该为亚当优化器做学习率衰减吗


79

我正在使用Adam优化器训练一个用于图像定位的网络,有人建议我使用指数衰减。我不想尝试,因为Adam优化器本身会降低学习速度。但是那个家伙坚持说,他说他以前做过。所以我应该这样做,您的建议背后是否有任何理论依据?

Answers:


91

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

但是,参数的单个学习率是使用lambda(初始学习率)作为上限来计算的。这意味着每个学习速率可以从0(不更新)到lambda(最大更新)之间变化。

的确,学习速度会在训练步骤中适应,但是,如果要确保每个更新步骤都不会超过lambda,则可以使用指数衰减或其他方法降低lambda。当计算的带有先前关联的lambda参数的损失停止减少时,它可以帮助减少最新训练步骤中的损失。


38

以我的经验,通常不需要使用Adam优化器进行学习速率衰减。

从理论上讲,亚当已经在进行学习率优化(请参阅参考资料):

“我们提出亚当(Adam),这是一种有效的随机优化方法,只需要一阶梯度,而对内存的需求很少。该方法根据梯度的第一刻和第二刻的估计来计算不同参数的个体自适应学习率;亚当的名字源于自适应矩估计。”

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


20

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

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

10

亚当的学习率是单一的,但它是最大的自适应率,所以我认为没有多少人会使用学习率调度。

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

编辑:人们最近开始与亚当一起使用单周期学习率策略,并取得了不错的成绩。


您提到的一周期学习率政策有参考吗?
Thomas Johnson


1
关于周期性lr的一篇不错的相关博客文章,另一个杰里米(Jeremy)展示了损失情况。jeremyjordan.me/nn-learning-rate
pangyuteng
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.