Я знаю, что оптимизаторы в Tensorflow делят minimize
на compute_gradients
и apply_gradients
. Тем не менее, алгоритмы оптимизации, такие как Адам, обычно обрабатывают градиенты с импульсом и некоторые другие методы, как показано на следующем рисунке (спасибо @ kmario23 за предоставленную фигуру).
Интересно, когда эти методы применяются к градиентам? Они применяются в compute_gradients
или apply_gradients
?
Обновление
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]]}))
Приведенный выше код выводит одинаковые результаты дважды, предполагает ли это, что оценки моментов вычисляются в apply_gradients
? Потому что, ИМХО, если оценки моментов вычисляются в apply_gradients
, то после первого оператора print
будут обновлены первый и второй моменты, что должно привести к разным результатам во втором операторе print
.