tf.keras.optimizers.experimental.Ftrl
Оптимизатор, реализующий алгоритм FTRL.
Наследуется от: Optimizer, Module
tf.keras.optimizers.experimental.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,
clipnorm=None,
clipvalue=None,
global_clipnorm=None,
use_ema=False,
ema_momentum=0.99,
ema_overwrite_frequency=None,
jit_compile=True,
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 | Значение с плавающей запятой, расписание, которое является tf.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 | Строка. Имя для использования для весов аккумуляторов импульса, созданных оптимизатором. |
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 | Аргументы ключевых слов, используемые только для обратной совместимости. |
| Атрибуты | |
|---|---|
iterations | Количество шагов обучения, которые выполнил этот optimizer. По умолчанию, итерации будут увеличиваться на единицу каждый раз, когда вызывается |
learning_rate | |
Методы
add_variable
add_variable(
shape, dtype=None, initializer='zeros', name=None
)
Создать переменную оптимизатора.
| Аргументы | |
|---|---|
shape | Список целых чисел, кортеж целых чисел или одномерный тензор типа 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
)
Инициализировать переменные оптимизатора.
| Аргументы | |
|---|---|
var_list | Список переменных модели, на которых нужно создать переменные Ftrl. |
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/Ftrl