为什么亚当的学习率会增加?

时间:2019-06-04 08:26:44

标签: machine-learning keras neural-network deep-learning 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时衰减)。

如果我们查看亚当中的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)

如果打印此方程式,则得出: enter image description here

清楚地表明,学习率随时间呈指数增长(因为t从1开始)

有人可以解释为什么会这样吗?我到处都读到,我们应该使用一个学习率,它会随着时间的推移而衰减,而不是增加。

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

1 个答案:

答案 0 :(得分:1)

查看Keras中Adam优化器的源代码,看起来实际的“衰减”是在this line处执行的。您报告的代码仅在衰减之后执行,而不是衰减本身。
如果问题是“为什么会这样”,我建议您阅读一些关于亚当的理论,例如the original paper

编辑
应该清楚的是,亚当优化器的更新方程式并不  本身包括一个衰减。衰减应单独应用。