tf.keras.dtensor.experimental.optimizers.Adam
Оптимизаторы, специфичные для DTensor.
Наследуется от: Adam, Optimizer, Module
tf.keras.dtensor.experimental.optimizers.Adam(
learning_rate=0.001,
beta_1=0.9,
beta_2=0.999,
epsilon=1e-07,
amsgrad=False,
gradients_clip_option=None,
ema_option=None,
name='Adam',
mesh=None
)
Основные изменения в этом классе заключаются в том, что вся логика инициализации переменных будет учитывать меш/макет.
Оптимизатор, реализующий алгоритм Adam.
Оптимизация Adam — это метод стохастического градиентного спуска, основанный на адаптивном оценивании моментов первого и второго порядка.
Согласно Kingma et al., 2014, этот метод «вычислительно эффективен, имеет небольшие требования к памяти, инвариантен к диагональному масштабированию градиентов и хорошо подходит для задач, больших по размеру данных/параметров».
| Аргументы | |
|---|---|
learning_rate | Значение типа tf.Tensor, с плавающей точкой, расписание, являющееся tf.keras.optimizers.schedules.LearningRateSchedule, или вызываемая функция без аргументов, возвращающая фактическое используемое значение. Скорость обучения. По умолчанию 0,001. |
beta_1 | Числовое значение с плавающей точкой или постоянный тензор с плавающей точкой, или вызываемая функция без аргументов, возвращающая фактическое используемое значение. Скорость экспоненциального затухания для оценок моментов первого порядка. По умолчанию 0,9. |
beta_2 | Числовое значение с плавающей точкой или постоянный тензор с плавающей точкой, или вызываемая функция без аргументов, возвращающая фактическое используемое значение. Скорость экспоненциального затухания для оценок моментов второго порядка. По умолчанию 0,999. |
epsilon | Маленькая константа для обеспечения числовой устойчивости. Эта величина «epsilon hat» в статье Kingma и Ba (в формуле перед разделом 2.1), а не epsilon в алгоритме 1 статьи. По умолчанию 1e-7. |
amsgrad | Булево значение. Применять ли вариант AMSGrad этого алгоритма из статьи "On the Convergence of Adam and beyond". По умолчанию False. |
name | Строка. Имя для использования в качестве накопителей импульса, созданных оптимизатором. |
clipnorm | Число с плавающей точкой. Если задано, градиент каждого веса индивидуально ограничивается так, чтобы его норма не превышала это значение. |
clipvalue | Число с плавающей точкой. Если задано, градиент каждого веса ограничивается значением, не превышающим это значение. |
global_clipnorm | Число с плавающей точкой. Если задано, градиент всех весов ограничивается так, чтобы их глобальная норма не превышала это значение. |
use_ema | Булево значение, по умолчанию False. Если True, применяется экспоненциально скользящее среднее (EMA). EMA состоит из вычисления экспоненциально скользящего среднего весов модели (поскольку значения весов изменяются после каждой обучающей группы), и периодически перезаписывания весов их скользящим средним. |
ema_momentum | Число с плавающей точкой, по умолчанию 0,99. Используется только если use_ema=True. Это импульс, используемый при вычислении EMA весов модели: new_average = ema_momentum * old_average + (1 - ema_momentum) * current_variable_value. |
ema_overwrite_frequency | Целое число или None, по умолчанию None. Используется только если use_ema=True. Каждые ema_overwrite_frequency шаги итераций мы перезаписываем переменную модели её скользящим средним. Если None, оптимизатор не перезаписывает переменные модели в середине обучения, и вам нужно явным образом перезаписать переменные в конце обучения, вызвав optimizer.finalize_variable_values() (что обновляет переменные модели на месте). При использовании встроенного цикла обучения fit(), это происходит автоматически после последней эпохи, и вам ничего не нужно делать. |
jit_compile | Булево значение, по умолчанию True. Если True, оптимизатор будет использовать компиляцию XLA. jit_compile не может быть True при обучении с помощью tf.distribute.experimental.ParameterServerStrategy. Кроме того, если не найдено устройство GPU, этот флаг будет проигнорирован. |
**kwargs | Параметры, используемые только для обеспечения обратной совместимости. |
Ссылка:
- Kingma et al., 2014
-
Reddi et al., 2018 для
amsgrad.
Примечания:
Значение 1e-7 по умолчанию для epsilon может быть не лучшим выбором в целом. Например, при обучении сети Inception на ImageNet текущим хорошим выбором является 1,0 или 0,1. Обратите внимание, что поскольку Adam использует формулу перед разделом 2.1 статьи Kingma и Ba, а не формулу в алгоритме 1, «epsilon», на которую здесь ссылаются, — это «epsilon hat» в статье.
Реализация этого алгоритма для разреженных данных (используется, когда градиент является объектом IndexedSlices, обычно из-за tf.gather или поиска встраивания в прямом проходе) применяет импульс к частям переменных, даже если они не использовались в прямом проходе (т. е. их градиент равен нулю). Затухание импульса (beta1) также применяется ко всему накопителю импульса. Это означает, что поведение в разреженных данных эквивалентно поведению в плотных данных (в отличие от некоторых реализаций импульса, которые игнорируют импульс, если часть переменной фактически не использовалась).
| Атрибуты | |
|---|---|
iterations | Количество шагов обучения, пройденных этим optimizer. По умолчанию итерации будут увеличиваться на единицу каждый раз, когда вызывается |
learning_rate | |
Методы
add_variable
add_variable(
shape, dtype=None, initializer='zeros', name=None
)
Создание переменной оптимизатора.
| Аргументы | |
|---|---|
shape | Список целых чисел, кортеж целых чисел или 1-мерный тензор типа int32. По умолчанию скаляр, если не указано иное. |
dtype | Тип данных переменной оптимизатора, которая должна быть создана. По умолчанию tf.keras.backend.floatx, если не указано иное. |
initializer | строка или вызываемая функция. Экземпляр инициализатора. |
name | Имя переменной оптимизатора, которая должна быть создана. |
| Возвращает | |
|---|---|
| Переменная оптимизатора в формате tf.Variable. |
add_variable_from_reference
add_variable_from_reference(
model_variable, variable_name, initial_value=None
)
Создание переменной оптимизатора из переменной модели.
Создание переменной оптимизатора на основе информации о переменной модели. Например, в оптимизаторе SGD momentum для каждой переменной модели создается соответствующая переменная momentum той же формы и типа данных.
| Аргументы | |
|---|---|
model_variable | Соответствующая переменная модели для создаваемой переменной оптимизатора. |
variable_name | Префикс имени создаваемой переменной оптимизатора. Имя создаваемой переменной будет соответствовать шаблону {variable_name}/{model_variable.name}, например, momemtum/dense_1. |
initial_value | Начальное значение переменной оптимизатора. Если None, значение будет по умолчанию 0. |
| Возвращает | |
|---|---|
| Переменная оптимизатора. |
apply_gradients
apply_gradients(
grads_and_vars
)
Применение градиентов к переменным.
| Аргументы | |
|---|---|
grads_and_vars | Список пар (градиент, переменная). |
| Возвращает | |
|---|---|
| None |
| Исключения | |
|---|---|
TypeError | Если grads_and_vars имеет неправильный формат. |
build
build(
var_list
)
Инициализация переменных оптимизатора.
Оптимизатор Adam имеет 3 типа переменных: моменты, скорости и скорость_hat (задается только при применении amsgrad).
| Аргументы | |
|---|---|
var_list | Список переменных модели, на которых будут строиться переменные Adam. |
compute_gradients
compute_gradients(
loss, var_list, tape=None
)
Вычисление градиентов функции потерь по обучаемым переменным.
| Аргументы | |
|---|---|
loss | Функция потерь или вызываемая функция. Если функция, то она должна не принимать аргументов и возвращать значение для минимизации. |
var_list | список или кортеж объектов Variable для обновления, чтобы минимизировать loss. |
tape | (Необязательно) tf.GradientTape. Если loss предоставляется как Tensor, должна быть предоставлена лента, вычислившая loss |
| Возвращает | |
|---|---|
Список пар (градиент, переменная). Переменная всегда присутствует, но градиент может быть None. |
finalize_variable_values
finalize_variable_values(
var_list
)
Устанавливает конечное значение обучаемых переменных модели.
Иногда перед завершением обновлений переменных выполняется несколько дополнительных шагов, таких как переопределение переменных модели их средним значением.
| Аргументы | |
|---|---|
var_list | Список переменных модели. |
from_config
@classmethod
from_config(
config
)
Создаёт оптимизатор по его конфигурации.
Этот метод является обратным к get_config, способным создать тот же оптимизатор из словаря конфигурации.
| Аргументы | |
|---|---|
config | Словарь Python, обычно результат работы get_config. |
| Возвращает | |
|---|---|
| Экземпляр оптимизатора. |
get_config
get_config()
Возвращает конфигурацию оптимизатора.
Конфигурация оптимизатора — это словарь Python (сериализуемый), содержащий конфигурацию оптимизатора. Позже из этой конфигурации можно восстановить тот же оптимизатор (без сохранения состояния).
Подклассы оптимизатора должны переопределить этот метод, чтобы включить другие гиперпараметры.
| Возвращает | |
|---|---|
| Словарь Python. |
minimize
minimize(
loss, var_list, tape=None
)
Минимизировать loss путём обновления var_list.
Этот метод просто вычисляет градиент с помощью tf.GradientTape и вызывает apply_gradients(). Если вы хотите обработать градиент перед применением, то вызовите tf.GradientTape и apply_gradients() явно, вместо использования этой функции.
| Аргументы | |
|---|---|
loss | Tensor или вызываемый объект. Если вызываемый объект, то loss не должен принимать аргументы и возвращать значение для минимизации. |
var_list | Список или кортеж объектов Variable для обновления, чтобы минимизировать loss. |
tape | (Необязательно) tf.GradientTape. |
| Возвращает | |
|---|---|
| None |
update_step
update_step(
gradient, variable
)
Шаг обновления, учитывая градиент и связанную переменную модели.
© 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/keras/dtensor/experimental/optimizers/Adam