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

标签 machine-learning keras neural-network deep-learning adam

我一直在使用以下代码在 Adam() 优化器中为我的 trainable_model 打印 lr_tlearning_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)

如果我们打印这个方程,我们会得到: enter image description here

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

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

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

最佳答案

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

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

关于machine-learning - 为什么 Adam 的学习率会增加?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56440068/

相关文章:

machine-learning - 优化神经网络输入以实现收敛

Python 小批量字典学习

python - Tensorflow InvalidArgumentError : 2 root error(s) found. 索引 [28,0] = 11292 不在 [0, 11272)

tensorflow - 我正在阅读一本关于深度学习的书,但我无法理解关于 Conv2D 的这一部分

python - Keras Conv1D 步骤参数

python - keras:如何编写自定义损失函数以将帧级预测聚合到歌曲级预测

numpy - 为什么我实现深度神经网络的成本在几次迭代后会增加?

algorithm - 2个神经元的多层神经网络是否与1个神经元相同

python - 如何为 ML 模型正确设置种子值?

R mlr - 包装器特征选择+超参数调整,无需嵌套交叉验证?