【问题标题】:Why does AdamOptimizer seem not apply the correct gradient?为什么 AdamOptimizer 似乎没有应用正确的渐变?
【发布时间】:2019-01-12 03:52:50
【问题描述】:

我可能只是误解了 Adam 的工作原理,但为什么会这样:

x = tf.Variable([0.0, 0.0]) # variable
y = tf.constant([5.0, 1.0]) # target
cost = tf.abs(x-y)**2

由于y 的第一个维度大于第二个维度,因此第一个维度中的梯度大于第二个维度(应该如此),x 的每个维度都以自己的速率接近其目标值:

sgd = tf.train.GradientDescentOptimizer(0.001)
train = sgd.minimize(cost)

with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for _ in range(5):
    sess.run(train)
    grad,variable = sess.run(opt.compute_gradients(cost))[0]
    print(grad,variable)

#[-9.98  -1.996] [0.01  0.002]
#[-9.96004  -1.992008] [0.01998  0.003996]
#[-9.94012  -1.988024] [0.02994004 0.00598801]
#[-9.920239  -1.9840479] [0.03988016 0.00797603]
#[-9.900399  -1.9800799] [0.0498004  0.00996008]

如果我们使用 Adam,为什么即使梯度具有完全不同的值,速率也基本相等?

adam = tf.train.AdamOptimizer(0.001)
train = adam.minimize(cost)

with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for _ in range(5):
    sess.run(train)
    grad,variable = sess.run(opt.compute_gradients(cost))[0]
    print(grad,variable)

#[-9.998 -1.998] [0.001 0.001]
#[-9.996 -1.996] [0.00199999 0.00199997]
#[-9.994     -1.9940002] [0.00299997 0.00299989]
#[-9.992001  -1.9920005] [0.00399994 0.00399976]
#[-9.99     -1.990001] [0.0049999  0.00499955]

【问题讨论】:

  • 我的意思是,对于 SGD,x 的第一个维度以大于第二个维度的速率接近 5.0 的目标值(比较 0.01 -> 0.01998 -> 0.2994004 -> 等等... 0.002 -> 0.003996 -> 0.00598801 等。)在亚当的情况下,这两个比率基本相等。
  • 啊,我明白了。我会尝试在我的答案中加入更多信息。谢谢,我真的很喜欢这个问题 - 我之前没有这么清楚地看到亚当的这个特征(+1)。

标签: python tensorflow machine-learning optimization deep-learning


【解决方案1】:

ADAM 或自适应动量的工作原理如下:

速度v 累积梯度元素。

当您在paper 中查看 Adam 方程时,您会看到,步长在学习率处具有上限。在论文中,他们将 Adam 的这一特征称为:“其对步长的谨慎选择”(在论文的 2.1 节中讨论)。 这正是您在前 5 个步骤中观察到的“基本相等速率”,Adam 中的速率在多个先前的梯度上建立(累积),而步长被限制为学习速率本身。

有关如何在 Tensorflow 中计算和更新变量的更多信息(请参阅方程式 here)。

关于亚当的补充说明:

α 相对于学习率越大,之前的梯度对当前方向的影响越大。

在 sgd 中,步长的大小只是梯度范数乘以学习率。

在 Adam 中,步长的大小取决于大小和方式 对齐的梯度序列是。连续多次时步长最大 梯度指向完全相同的方向。如果动量算法总是 观察 Gradient g,那么它最终会朝着−g 的方向加速。

这是来自 Ian Goodfellow 的深度学习书籍,您可以阅读有关 Adam here 的更多详细信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-16
    • 2012-07-28
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    • 2016-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多