具有指数衰减的 Adam 优化器

机器算法验证 神经网络 深度学习 梯度下降 张量流 亚当
2022-01-17 05:51:31

在我见过的大多数 Tensorflow 代码中,Adam Optimizer 以恒定的学习率1e-4(即 0.0001)使用。代码通常如下所示:

...build the model...
# Add the optimizer
train_op = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)
# Add the ops to initialize variables.  These will include 
# the optimizer slots added by AdamOptimizer().
init_op = tf.initialize_all_variables()

# launch the graph in a session
sess = tf.Session()
# Actually intialize the variables
sess.run(init_op)
# now train your model
for ...:
  sess.run(train_op)

我想知道,在使用亚当优化器时使用指数衰减是否有用,即使用以下代码:

...build the model...
# Add the optimizer
step = tf.Variable(0, trainable=False)
rate = tf.train.exponential_decay(0.15, step, 1, 0.9999)
optimizer = tf.train.AdamOptimizer(rate).minimize(cross_entropy, global_step=step)
# Add the ops to initialize variables.  These will include 
# the optimizer slots added by AdamOptimizer().
init_op = tf.initialize_all_variables()

# launch the graph in a session
sess = tf.Session()
# Actually intialize the variables
sess.run(init_op)
# now train your model
for ...:
  sess.run(train_op)

通常,人们使用某种学习率衰减,对于亚当来说这似乎并不常见。这有什么理论上的原因吗?将 Adam 优化器与衰减结合起来有用吗?

4个回答

从经验上讲:一定要试试,你可能会发现一些非常有用的训练启发式,在这种情况下,请分享!

通常人们使用某种衰变,对于亚当来说这似乎并不常见。这有什么理论上的原因吗?将 Adam 优化器与衰减结合起来有用吗?

我还没有看到足够多的人使用 ADAM 优化器来说明这是否正确。如果这是真的,也许是因为 ADAM 相对较新,学习率衰减“最佳实践”尚未建立。

但是我确实想指出,学习率衰减实际上是 ADAM 理论保证的一部分。特别是在他们ICLR 文章的 Theorem 4.1 中,他们的假设之一是学习率具有平方根衰减,此外,对于他们的逻辑回归实验,他们也使用平方根衰减。αt=α/t

简单地说:我认为理论上没有任何东西不鼓励在 ADAM 中使用学习率衰减规则。我看到人们使用 ADAM 报告了一些好的结果,并且找到一些好的训练启发式方法将非常有价值。

Adam 根据原始论文的术语使用初始学习率或步长,同时自适应地计算更新。步长也给出了更新的近似范围。在这方面,我认为在训练结束时减小步长是一个好主意。NIPS 2017 最近的一项工作也支持这一点:机器学习中自适应梯度方法的边际价值

第 4 节的最后一行:深度学习实验说

尽管传统观点认为 Adam 不需要调整,但我们发现调整 Adam 的初始学习率和衰减方案在所有情况下都比其默认设置产生了显着改进。

最后但同样重要的是,该论文建议我们无论如何都要使用 SGD。

大多数人不使用 Adam 的学习率衰减的原因是算法本身通过以下方式进行学习率衰减:

t <- t + 1
lr_t <- learning_rate * sqrt(1 - beta2^t) / (1 - beta1^t)

其中t0是初始时间步长,lr_t是使用的新学习率。

我同意@Indie AI 的观点,在这里我提供一些其他信息:

来自CS231n

...其中许多方法可能仍需要其他超参数设置,但其论点是它们在比原始学习率更广​​泛的超参数值范围内表现良好。...

同样来自论文Rethinking the Inception Architecture for Computer Vision第 8 节:

...而我们最好的模型是使用 RMSProp [21] 实现的,衰减为 0.9 和 ε = 1.0。我们使用 0.045 的学习率,使用 0.94 的指数率每两个 epoch 衰减一次。...