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 типа сжатия (добавление штрафа 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 | Значение с плавающей запятой, соответствующее параметру 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
)
Исключает переменные из затухания весов.
Этот метод необходимо вызвать до вызова метода оптимизатора 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, содержащий настройки оптимизатора. Позже этот же оптимизатор можно повторно создать из данной конфигурации без сохраненного состояния.
Подклассам оптимизатора следует переопределить этот метод, чтобы добавить другие гиперпараметры.
| Возвращает | |
|---|---|
| Словарь 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