tf.keras.optimizers.Lion
Оптимизатор, реализующий алгоритм Lion.
Наследует: Optimizer
tf.keras.optimizers.Lion(
learning_rate=0.001,
beta_1=0.9,
beta_2=0.99,
weight_decay=None,
clipnorm=None,
clipvalue=None,
global_clipnorm=None,
use_ema=False,
ema_momentum=0.99,
ema_overwrite_frequency=None,
loss_scale_factor=None,
gradient_accumulation_steps=None,
name='lion',
**kwargs
)
Оптимизатор Lion — это метод стохастического градиентного спуска, который использует оператор знака для управления величиной обновления, в отличие от других адаптивных оптимизаторов, таких как Adam, использующих моменты второго порядка. Благодаря этому Lion эффективнее расходует память, поскольку отслеживает только импульс. Согласно авторам (см. ссылку), преимущество в производительности по сравнению с Adam увеличивается с ростом размера пакета. Поскольку обновление Lion выполняется с помощью операции взятия знака, что приводит к большей норме, подходящая скорость обучения для Lion обычно в 3–10 раз меньше, чем для AdamW. Чтобы сохранить сопоставимую силу регуляризации (lr * wd), значение затухания весов для Lion должно быть, в свою очередь, в 3–10 раз больше, чем для AdamW.
| Аргументы | |
|---|---|
learning_rate | Число с плавающей точкой, экземпляр keras.optimizers.schedules.LearningRateSchedule или вызываемый объект без аргументов, возвращающий фактическое используемое значение. Скорость обучения. По умолчанию — 0.001. |
beta_1 | Значение с плавающей точкой, константный тензор с плавающей точкой или вызываемый объект без аргументов, возвращающий фактическое используемое значение. Коэффициент объединения текущего градиента и оценки первого момента. По умолчанию — 0.9. |
beta_2 | Значение с плавающей точкой, константный тензор с плавающей точкой или вызываемый объект без аргументов, возвращающий фактическое используемое значение. Коэффициент экспоненциального затухания оценки первого момента. По умолчанию — 0.99. |
name | Строка. Имя, используемое для весов аккумулятора импульса, создаваемых оптимизатором. |
weight_decay | Число с плавающей точкой. Если задано, применяется затухание весов. |
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() это выполняется автоматически после последней эпохи, и никаких дополнительных действий не требуется. |
loss_scale_factor | Число с плавающей точкой или None. Если задано число с плавающей точкой, коэффициент масштабирования умножается на функцию потерь перед вычислением градиентов, а градиенты перед обновлением переменных умножаются на обратный коэффициент масштабирования. Это помогает предотвратить потерю значимости при обучении со смешанной точностью. В качестве альтернативы keras.optimizers.LossScaleOptimizer автоматически задаёт коэффициент масштабирования функции потерь. |
gradient_accumulation_steps | Целое число или None. Если задано целое число, переменные модели и оптимизатора обновляются не на каждом шаге, а каждые gradient_accumulation_steps шагов с использованием среднего значения градиентов, вычисленных с момента последнего обновления. Это называется «накоплением градиентов». Такой подход может быть полезен при очень маленьком размере пакета, чтобы уменьшить шум градиентов на каждом шаге обновления. |
Ссылки:
| Атрибуты | |
|---|---|
learning_rate | |
variables | |
Методы
add_variable
add_variable(
shape,
initializer='zeros',
dtype=None,
aggregation='mean',
name=None
)
add_variable_from_reference
add_variable_from_reference(
reference_variable, name=None, initializer='zeros'
)
Добавляет переменную, заполненную нулями, с формой и типом данных переменной-образца.
apply
apply(
grads, trainable_variables=None
)
Обновляет обучаемые переменные в соответствии с заданными значениями градиентов.
grads должен быть списком тензоров градиентов, каждый из которых соответствует одной переменной из списка переменных, для которых был создан оптимизатор.
trainable_variables можно передать при первом вызове для создания оптимизатора.
apply_gradients
apply_gradients(
grads_and_vars
)
assign
assign(
variable, value
)
Присваивает значение переменной.
В оптимизаторах следует использовать этот метод вместо variable.assign(value) для поддержки специфичных для бэкенда оптимизаций. Обратите внимание, что переменная может быть переменной модели или оптимизатора; она может быть нативной переменной бэкенда или переменной Keras.
| Аргументы | |
|---|---|
variable | Переменная, которую нужно обновить. |
value | Значение, которое нужно добавить к переменной. |
assign_add
assign_add(
variable, value
)
Добавляет значение к переменной.
В оптимизаторах следует использовать этот метод вместо variable.assign_add(value) для поддержки специфичных для бэкенда оптимизаций. Обратите внимание, что переменная может быть переменной модели или оптимизатора; она может быть нативной переменной бэкенда или переменной Keras.
| Аргументы | |
|---|---|
variable | Переменная, которую нужно обновить. |
value | Значение, которое нужно добавить к переменной. |
assign_sub
assign_sub(
variable, value
)
Вычитает значение из переменной.
В оптимизаторах следует использовать этот метод вместо variable.assign_sub(value) для поддержки специфичных для бэкенда оптимизаций. Обратите внимание, что переменная может быть переменной модели или оптимизатора; она может быть нативной переменной бэкенда или переменной Keras.
| Аргументы | |
|---|---|
variable | Переменная, которую нужно обновить. |
value | Значение, которое нужно добавить к переменной. |
build
build(
var_list
)
Инициализирует переменные оптимизатора.
У оптимизатора Lion есть одна переменная momentums.
| Аргументы | |
|---|---|
var_list | Список переменных модели, на основе которых создаются переменные Lion. |
exclude_from_weight_decay
exclude_from_weight_decay(
var_list=None, var_names=None
)
Исключает переменные из затухания весов.
Этот метод необходимо вызвать до вызова метода оптимизатора build. Можно указать переменные, которые нужно исключить, либо задать список строк в качестве ключевых слов: если одно из них встречается в имени переменной, эта переменная исключается.
| Аргументы | |
|---|---|
var_list | Список объектов Variable, исключаемых из затухания весов. |
var_names | Список строк. Если любая строка из var_names встречается в имени переменной модели, эта переменная исключается из затухания весов. Например, var_names=['bias'] исключает все переменные смещения из затухания весов. |
finalize_variable_values
finalize_variable_values(
var_list
)
Задаёт итоговые значения обучаемых переменных модели.
Перед завершением обновления переменных иногда требуется выполнить дополнительные действия, например заменить переменные модели их средними значениями.
| Аргументы | |
|---|---|
var_list | Список переменных модели. |
from_config
@classmethod
from_config(
config, custom_objects=None
)
Создаёт оптимизатор на основе его конфигурации.
Этот метод является обратным по отношению к get_config и позволяет создать такой же оптимизатор из словаря конфигурации.
| Аргументы | |
|---|---|
config | Словарь Python, обычно являющийся результатом вызова get_config. |
custom_objects | Словарь Python, сопоставляющий имена дополнительным объектам Python, определённым пользователем и необходимым для повторного создания этого оптимизатора. |
| Возвращает | |
|---|---|
| Экземпляр оптимизатора. |
get_config
get_config()
Возвращает конфигурацию оптимизатора.
Конфигурация оптимизатора — это сериализуемый словарь Python, содержащий параметры оптимизатора. Позже оптимизатор можно создать заново на основе этой конфигурации (без сохранённого состояния).
Подклассам Optimizer следует переопределять этот метод, чтобы включить другие гиперпараметры.
| Возвращает | |
|---|---|
| Словарь Python. |
load_own_variables
load_own_variables(
store
)
Задаёт состояние этого объекта оптимизатора.
save_own_variables
save_own_variables(
store
)
Получает состояние этого объекта оптимизатора.
scale_loss
scale_loss(
loss
)
Масштабирует функцию потерь перед вычислением градиентов.
Масштабирует функцию потерь перед вычислением градиентов в train_step. Это особенно полезно при обучении со смешанной точностью, чтобы предотвратить численное исчезновение значений.
set_weights
set_weights(
weights
)
Задаёт веса оптимизатора.
stateless_apply
stateless_apply(
optimizer_variables, grads, trainable_variables
)
update_step
update_step(
gradient, variable, learning_rate
)
Обновляет шаг с учётом градиента и соответствующей переменной модели.
© 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/keras/optimizers/Lion