tf.keras.optimizers.Ftrl
Оптимизатор, реализующий алгоритм FTRL.
Наследуется от: Optimizer
tf.keras.optimizers.Ftrl(
learning_rate=0.001,
learning_rate_power=-0.5,
initial_accumulator_value=0.1,
l1_regularization_strength=0.0,
l2_regularization_strength=0.0,
l2_shrinkage_regularization_strength=0.0,
beta=0.0,
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='ftrl',
**kwargs
)
"Follow The Regularized Leader" (FTRL) — алгоритм оптимизации, разработанный в Google для предсказания показателя кликабельности в начале 2010-х годов. Он наиболее подходит для неглубоких моделей с большими и разреженными пространствами признаков. Алгоритм описан в статье McMahan et al., 2013. Версия Keras поддерживает как онлайн L2-регуляризацию (L2-регуляризацию, описанную в вышеупомянутой статье), так и регуляризацию типа сжатия (добавление L2-штрафа к функции потерь).
Инициализация:
n = 0 sigma = 0 z = 0
Правило обновления для одной переменной w:
prev_n = n n = n + g ** 2 sigma = (n ** -lr_power - prev_n ** -lr_power) / lr z = z + g - sigma * w if abs(z) < lambda_1: w = 0 else: w = (sgn(z) * lambda_1 - z) / ((beta + sqrt(n)) / alpha + lambda_2)
Обозначения:
-
lr— скорость обучения -
g— градиент для переменной -
lambda_1— сила L1-регуляризации -
lambda_2— сила L2-регуляризации -
lr_power— степень масштабирования n.
См. документацию параметра l2_shrinkage_regularization_strength для получения более подробной информации при включенном сжатии, в этом случае градиент заменяется градиентом со сжатием.
| Аргументы | |
|---|---|
learning_rate | Вещественное число, экземпляр keras.optimizers.schedules.LearningRateSchedule или вызываемый объект, не принимающий аргументы и возвращающий фактическое значение для использования. Скорость обучения. По умолчанию 0.001. |
learning_rate_power | Вещественное значение, должно быть меньше или равно нулю. Управляет тем, как скорость обучения уменьшается во время обучения. Используйте ноль для фиксированной скорости обучения. |
initial_accumulator_value | Начальное значение для аккумуляторов. Разрешены только нулевые или положительные значения. |
l1_regularization_strength | Вещественное значение, должно быть больше или равно нулю. По умолчанию 0.0. |
l2_regularization_strength | Вещественное значение, должно быть больше или равно нулю. По умолчанию 0.0. |
l2_shrinkage_regularization_strength | Вещественное значение, должно быть больше или равно нулю. Отличается от L2 выше тем, что L2 выше — это штраф за стабилизацию, а это L2 сжатия — штраф за величину. При разряжённом вводе сжатие произойдёт только для активных весов. |
beta | Вещественное значение, представляющее значение бета из статьи. По умолчанию 0.0. |
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
)
Инициализировать переменные оптимизатора.
| Аргументы | |
|---|---|
var_list | список переменных модели для построения переменных Ftrl. |
exclude_from_weight_decay
exclude_from_weight_decay(
var_list=None, var_names=None
)
Исключить переменные из расчёта weight decay.
Этот метод должен быть вызван до вызова метода build оптимизатора. Вы можете задать определённые переменные для исключения или задать список строк в качестве ключевых слов, если любая из них встречается в имени переменной, то переменная исключается.
| Аргументы | |
|---|---|
var_list | Список переменных Variable для исключения из расчёта weight decay. |
var_names | Список строк. Если любая строка из var_names встречается в имени переменной модели, то эта переменная модели исключается из расчёта weight decay. Например, var_names=['bias'] исключает все переменные смещения из расчёта weight decay. |
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 (сериализуемый), содержащий конфигурацию оптимизатора. Этот же оптимизатор можно позже воссоздать (без сохранённого состояния) из этой конфигурации.
Подкласс оптимизатора должен переопределить этот метод, чтобы включить другие гиперпараметры.
| Возвращает | |
|---|---|
| Словарь 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/Ftrl