tf.stop_gradient
| Просмотреть исходный код на GitHub |
Останавливает вычисление градиента.
tf.stop_gradient(
input, name=None
)
При выполнении в графике этот оператор выводит входной тензор как есть.
При построении операторов для вычисления градиентов этот оператор предотвращает учёт вклада его входных данных. Обычно генератор градиентов добавляет в граф операторы для вычисления производных заданной «потери», рекурсивно определяя входные данные, которые повлияли на её вычисление. Если вы вставите этот оператор в граф, его входные данные будут замаскированы для генератора градиентов. Они не будут учитываться при вычислении градиентов.
Это полезно всякий раз, когда вы хотите вычислить значение с помощью TensorFlow, но хотите представить, что это значение — константа. Например, функцию softmax для вектора x можно записать как
def softmax(x): numerator = tf.exp(x) denominator = tf.reduce_sum(numerator) return numerator / denominator
Однако это уязвимо к переполнению, если значения в x велики. Более стабильный альтернативный способ — вычесть максимальное значение x из каждого значения.
def stable_softmax(x): z = x - tf.reduce_max(x) numerator = tf.exp(z) denominator = tf.reduce_sum(numerator) return numerator / denominator
Однако, когда мы делаем обратное распространение через softmax к x, мы не хотим делать обратное распространение через tf.reduce_max(x) (если максимальные значения не уникальны, то градиент может передаваться не тому входному значению) и рассматривать его как константу. Поэтому мы должны записать это как
def stable_softmax(x): z = x - tf.stop_gradient(tf.reduce_max(x)) numerator = tf.exp(z) denominator = tf.reduce_sum(numerator) return numerator / denominator
Вот еще несколько примеров:
- Алгоритм EM, где M-шаг не должен включать обратное распространение через выход E-шага.
- Обучение с контрастной дивергенцией болцмановских машин, где при дифференцировании функции энергии обучение не должно производить обратное распространение через граф, который сгенерировал образцы из модели.
- Обучение с помощью антагонизма, где обратное распространение не должно происходить через процесс генерации антагонистического примера.
| Аргументы | |
|---|---|
input | A Tensor. |
name | Имя операции (необязательно). |
| Возвращаемое значение | |
|---|---|
A Tensor. Имеет тот же тип, что и input. |
© 2022 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 4.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r2.9/api_docs/python/tf/stop_gradient