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