为什么 Adam 的学习率会增加?

Why does the learning rate increase in Adam?

我一直在使用以下代码为我的 trainable_model.

在 Adam() 优化器中打印 lr_t learning_rate
if(np.random.uniform()*100 < 3 and self.training):
    model = self.trainable_model
    _lr    = tf.to_float(model.optimizer.lr, name='ToFloat')
    _decay = tf.to_float(model.optimizer.decay, name='ToFloat')
    _beta1 = tf.to_float(model.optimizer.beta_1, name='ToFloat')
    _beta2 = tf.to_float(model.optimizer.beta_2, name='ToFloat')
    _iterations = tf.to_float(model.optimizer.iterations, name='ToFloat')
    t = K.cast(_iterations, K.floatx()) + 1
    _lr_t = lr * (K.sqrt(1. - K.pow(_beta2, t)) /  (1. - K.pow(_beta1, t)))
    print(" - LR_T: "+str(K.eval(_lr_t)))

我不明白的是这个学习率增加了。 (默认值为 0 时衰减)。

如果我们查看 Adam 中的 learning_rate 方程,我们会发现:

 lr_t = lr * (K.sqrt(1. - K.pow(self.beta_2, t)) /
                 (1. - K.pow(self.beta_1, t)))

对应方程(参数默认值):

= 0.001*sqrt(1-0.999^x)/(1-0.99^x)

如果我们打印这个等式,我们会得到:

这清楚地表明 learning_rate 随着时间呈指数增长(因为 t 从 1 开始)

有人可以解释为什么会这样吗?我到处都读到我们应该使用随时间衰减而不是增加的 learning_rate。

这是否意味着随着 Adam 的 learning_rate 增加,我的神经网络会随着时间的推移进行更大的更新?

查看 Keras 中 Adam 优化器的源代码,看起来实际的 "decay" 执行于:this line。您报告的代码仅在衰减之后执行,而不是衰减本身。
如果问题是 "why it is like that",我建议您阅读一些关于亚当的理论,例如 the original paper

编辑
应该清楚 Adam 优化器的更新方程式不 包括本身的衰变。衰减应该单独应用。