tf.keras.optimizers.experimental.AdamW
Оптимизатор, реализующий алгоритм AdamW.
Наследуется от: Optimizer, Module
tf.keras.optimizers.experimental.AdamW(
learning_rate=0.001,
weight_decay=0.004,
beta_1=0.9,
beta_2=0.999,
epsilon=1e-07,
amsgrad=False,
clipnorm=None,
clipvalue=None,
global_clipnorm=None,
use_ema=False,
ema_momentum=0.99,
ema_overwrite_frequency=None,
jit_compile=True,
name='AdamW',
**kwargs
)
Оптимизация AdamW — это метод стохастического градиентного спуска, основанный на адаптивной оценке моментов первого и второго порядка с добавлением метода для уменьшения весов в соответствии с техникой, обсуждаемой в статье «Decoupled Weight Decay Regularization» авторов Loshchilov, Hutter и др., 2019.
Согласно Kingma и др., 2014, основной метод Adam «вычислительно эффективен, имеет небольшие требования к памяти, инвариантен к диагональному масштабированию градиентов и хорошо подходит для задач, больших по объёму данных/параметров».
| Аргументы | |
|---|---|
learning_rate | Значение с плавающей точкой типа tf.Tensor, график, который является tf.keras.optimizers.schedules.LearningRateSchedule, или вызываемый объект без аргументов, возвращающий фактическое значение для использования. Скорость обучения. По умолчанию 0.001. |
weight_decay | Значение с плавающей точкой типа tf.Tensor. Разложение весов. По умолчанию 0.004. |
beta_1 | Вещественное значение или постоянный тензор с плавающей точкой, или вызываемый объект без аргументов, возвращающий фактическое значение для использования. Скорость экспоненциального затухания для оценок моментов первого порядка. По умолчанию 0.9. |
beta_2 | Вещественное значение или постоянный тензор с плавающей точкой, или вызываемый объект без аргументов, возвращающий фактическое значение для использования. Скорость экспоненциального затухания для оценок моментов второго порядка. По умолчанию 0.999. |
epsilon | Маленькая константа для обеспечения числовой устойчивости. Эта ε — «ε шляпа» в статье Kingma и Ba (в формуле перед разделом 2.1), а не ε в Алгоритме 1 статьи. По умолчанию 1e-7. |
amsgrad | Булево значение. Применять ли вариацию AMSGrad этого алгоритма из статьи «О сходимости Adam и далее». По умолчанию 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 | ключевые аргументы, используемые только для обратной совместимости. |
Ссылка:
- Loshchilov и др., 2019
-
Kingma и др., 2014 для
adam -
Reddi и др., 2018 для
amsgrad.
Примечания:
Значение по умолчанию 1e-7 для epsilon может не быть хорошим значением по умолчанию в общем случае. Например, при обучении сети Inception на ImageNet текущим хорошим выбором является 1.0 или 0.1. Обратите внимание, что поскольку Adam использует формулировку перед разделом 2.1 статьи Kingma и Ba, а не формулировку в Алгоритме 1, «epsilon», о котором идёт речь здесь, — это «ε шляпа» в статье.
Реализация этого алгоритма для разреженных данных (используется, когда градиент — объект 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, shape=None, initial_value=None
)
Создать переменную оптимизатора на основе переменной модели.
Создать переменную оптимизатора на основе информации о переменной модели. Например, в оптимизаторе SGD импульс, для каждой переменной модели, создаётся соответствующая переменная импульса той же формы и типа данных.
| Аргументы | |
|---|---|
model_variable | tf.Variable. Соответствующая переменная модели для создаваемой переменной оптимизатора. |
variable_name | Строка. Префикс имени создаваемой переменной оптимизатора. Имя создаваемых переменных будет следовать шаблону {variable_name}/{model_variable.name}, например, momemtum/dense_1. |
shape | Список или кортеж, по умолчанию None. Форма создаваемой переменной оптимизатора. Если None, создаваемая переменная будет иметь ту же форму, что и model_variable. |
initial_value | Тензор или Python-объект, преобразуемый в тензор, по умолчанию None. Начальное значение переменной оптимизатора, если None, начальное значение будет равно 0. |
| Возвращаемое значение | |
|---|---|
| Переменная оптимизатора. |
aggregate_gradients
aggregate_gradients(
grads_and_vars
)
Агрегировать градиенты на всех устройствах.
По умолчанию мы будем выполнять reduce_sum градиентов по устройствам. Пользователи могут реализовать свою логику агрегации, переопределив этот метод.
| Аргументы | |
|---|---|
grads_and_vars | Список пар (градиент, переменная). |
| Возвращаемое значение | |
|---|---|
| Список пар (градиент, переменная). |
apply_gradients
apply_gradients(
grads_and_vars, skip_gradients_aggregation=False
)
Применить градиенты к переменным.
| Аргументы | |
|---|---|
grads_and_vars | Список пар (градиент, переменная). |
skip_gradients_aggregation | Если True, агрегация градиентов не будет выполнена внутри оптимизатора. Обычно этот аргумент устанавливается в True, когда вы пишете пользовательский код агрегирования градиентов вне оптимизатора. |
| Возвращаемое значение | |
|---|---|
| None |
| Исключения | |
|---|---|
TypeError | Если grads_and_vars имеет неправильный формат. |
RuntimeError | Если вызов происходит в контексте кросс-реплики. |
build
build(
var_list
)
Инициализирует переменные оптимизатора.
Оптимизатор AdamW имеет 3 типа переменных: моменты, скорости и скорость_hat (устанавливается только при использовании amsgrad).
| Аргументы | |
|---|---|
var_list | список переменных модели, на которых необходимо построить переменные AdamW. |
compute_gradients
compute_gradients(
loss, var_list, tape=None
)
Вычисляет градиенты потери по обучаемым переменным.
| Аргументы | |
|---|---|
loss | Tensor или вызываемая функция. Если это вызываемая функция, то 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/optimizers/experimental/AdamW