Адам в Tensorflow: где происходят оценки моментов? - PullRequest
0 голосов
/ 18 января 2019

Я знаю, что оптимизаторы в Tensorflow делят minimize на compute_gradients и apply_gradients. Тем не менее, алгоритмы оптимизации, такие как Адам, обычно обрабатывают градиенты с импульсом и некоторые другие методы, как показано на следующем рисунке (спасибо @ kmario23 за предоставленную фигуру). enter image description here Интересно, когда эти методы применяются к градиентам? Они применяются в 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.

Ответы [ 2 ]

0 голосов
/ 24 января 2019

compute_gradients вычисляет только градиенты, все другие дополнительные операции, соответствующие определенным алгоритмам оптимизации, выполняются в apply_gradients. Код в обновлении является одним доказательством, другое доказательство - следующая фигура, вырезанная из тензорной доски, где Адам соответствует операции compute_gradient. enter image description here

0 голосов
/ 18 января 2019

Ниже приведен алгоритм Адама, представленный в книге глубокого обучения. Что касается вашего вопроса, то здесь важно отметить градиент тэты (записанный как лапласиан тэты) от второго до последнего шага.

adam

Что касается того, как TensorFlow вычисляет, это двухэтапный процесс оптимизации (т.е. минимизация )

На первом этапе вычисляются все необходимые ингредиенты для окончательных градиентов. Итак, второй шаг - это просто применить обновление к параметрам на основе градиентов, вычисленных на первом шаге, и скорости обучения (lr).

...