Tensorflow中的亚当:力矩估计发生在哪里?

Tensorflow中的亚当:力矩估计发生在哪里?,tensorflow,deep-learning,mathematical-optimization,tensor,Tensorflow,Deep Learning,Mathematical Optimization,Tensor,我知道Tensorflow中的优化器将最小化分为计算梯度和应用梯度。然而,像Adam这样的优化算法通常使用动量和一些其他技术处理梯度,如下图所示,Hanks@kmario23提供了该图。 我想知道这些技术何时应用于渐变?它们是应用于计算梯度还是应用梯度 使现代化 上面的代码两次输出相同的结果,这是否表明力矩估计是在apply_梯度中计算的?因为,IMHO,如果在apply_梯度中计算矩估计,那么在第一个print语句之后,第一个和第二个矩将被更新,这将在第二个printstatement中产生不

我知道Tensorflow中的优化器将最小化分为计算梯度和应用梯度。然而,像Adam这样的优化算法通常使用动量和一些其他技术处理梯度,如下图所示,Hanks@kmario23提供了该图。 我想知道这些技术何时应用于渐变?它们是应用于计算梯度还是应用梯度

使现代化
上面的代码两次输出相同的结果,这是否表明力矩估计是在apply_梯度中计算的?因为,IMHO,如果在apply_梯度中计算矩估计,那么在第一个print语句之后,第一个和第二个矩将被更新,这将在第二个printstatement中产生不同的结果。

下面是深度学习书中介绍的Adam算法。至于你的问题,这里需要注意的重要一点是θ的梯度,在倒数第二步中写成θ的拉普拉斯函数

至于TensorFlow如何计算,这是一个,即最小化

1. 2. 在第一步中,计算最终渐变的所有必要成分。因此,第二步只是基于第一步中计算的梯度和学习率lr对参数应用更新。

计算梯度仅计算梯度,与特定优化算法相对应的所有其他附加操作在应用梯度中完成。更新中的代码是一个证据,另一个证据是从tensorboard截取的下图,其中Adam对应于compute_gradient操作。

您好,我已经通过运行两次compute_渐变并检查它们的输出渐变来测试您的答案。两者都输出相同的结果。如果在计算梯度中更新了图形中的力矩估计值,则在第一次调用后应更新hat s和hat r,这将导致第二次调用中不同的Deltaθ。为什么两个梯度仍然相同?
sess = tf.Session()
x = tf.placeholder(tf.float32, [None, 1])
y = tf.layers.dense(x, 1)
loss = tf.losses.mean_squared_error(tf.ones_like(y), y)
opt = tf.train.AdamOptimizer()
grads = opt.compute_gradients(loss)
sess.run(tf.global_variables_initializer())
print(sess.run(grads, feed_dict={x: [[1]]}))
print(sess.run(grads, feed_dict={x: [[1]]}))