为什么Adam优化器中的学习率会增加?

我一直在使用以下代码来打印Adam()优化器中trainable_model的lr_t学习率。

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中的学习率方程,我们会发现这个:

 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的学习率增加,我的神经网络会进行更大的更新?


回答:

查看Keras中Adam优化器的源代码,实际的“衰减”似乎是在这一行执行的。你报告的代码是在之后执行的,并不是衰减本身。
如果问题是“为什么会这样”,我建议你阅读一些关于Adam的理论,比如原始论文

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

Related Posts

在使用k近邻算法时,有没有办法获取被使用的“邻居”?

我想找到一种方法来确定在我的knn算法中实际使用了哪些…

Theano在Google Colab上无法启用GPU支持

我在尝试使用Theano库训练一个模型。由于我的电脑内…

准确性评分似乎有误

这里是代码: from sklearn.metrics…

Keras Functional API: “错误检查输入时:期望input_1具有4个维度,但得到形状为(X, Y)的数组”

我在尝试使用Keras的fit_generator来训…

如何使用sklearn.datasets.make_classification在指定范围内生成合成数据?

我想为分类问题创建合成数据。我使用了sklearn.d…

如何处理预测时不在训练集中的标签

已关闭。 此问题与编程或软件开发无关。目前不接受回答。…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注