tf.stop_gradient
Останавливает вычисление градиента.
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 | Tensor. |
name | Имя операции (необязательно). |
| Возвращает | |
|---|---|
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/api_docs/python/tf/stop_gradient