Нет, градиенты не отменяются, они следуют правильному определению градиента.Вот пример TF 2.0 (с использованием градиентной ленты):
x = tf.constant(2.)
with tf.GradientTape() as tape:
tape.watch(x)
y = x**2
print(tape.gradient(y, x))
Это напечатает tf.Tensor(4.0, shape=(), dtype=float32)
(т.е. 2 * x), которое, как мы видим, не отменяется.
В TF 1.X, tf.gradients
дает тот же результат.optimizer.compute_gradients
просто использует эту функцию, поэтому еще раз она даст тот же результат.
Отрицание должно быть обработано пользователем, т. Е. Если вы хотите реализовать градиентный спуск самостоятельно, вам нужно будет вычесть градиенты от переменных, чтобы минимизировать потери.В классах Optimizer
это включено в шаг apply_gradients
(т. Е. Здесь применяются отрицательные градиенты).