Transformers documentation

Оптимизация

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.2).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Оптимизация

Модуль .optimization предоставляет:

  • оптимизатор с фиксированным weight decay, который можно использовать для дообучения моделей, и
  • несколько расписаний в виде объектов расписаний, наследующих от _LRSchedule:
  • класс накопления градиентов для накопления градиентов нескольких батчей

AdaFactor

класс transformers.Adafactor

< >

( paramslr = Noneeps = (1e-30, 0.001)clip_threshold = 1.0decay_rate = -0.8beta1 = Noneweight_decay = 0.0scale_parameter = Truerelative_step = Truewarmup_init = False )

Параметры

  • params (Iterable[nn.parameter.Parameter]) — Итерируемый объект параметров для оптимизации или словари, определяющие группы параметров.
  • lr (float, необязательный) — Внешняя скорость обучения.
  • eps (tuple[float, float], необязательный, по умолчанию (1e-30, 0.001)) — Константы регуляризации для квадратного градиента и масштаба параметра соответственно
  • clip_threshold (float, необязательный, по умолчанию 1.0) — Порог среднеквадратичного значения окончательного обновления градиента
  • decay_rate (float, необязательный, по умолчанию -0.8) — Коэффициент, используемый для вычисления скользящих средних квадратов
  • beta1 (float, необязательный) — Коэффициент, используемый для вычисления скользящих средних градиента
  • weight_decay (float, необязательный, по умолчанию 0.0) — Коэффициент затухания весов (штраф L2)
  • scale_parameter (bool, необязательный, по умолчанию True) — Если True, скорость обучения масштабируется среднеквадратичным значением
  • relative_step (bool, необязательный, по умолчанию True) — Если True, вычисляется зависящая от времени скорость обучения вместо внешней скорости обучения
  • warmup_init (bool, необязательный, по умолчанию False) — Вычисление зависимости скорости обучения от времени зависит от того, используется ли инициализация с разгоном

Реализация AdaFactor для PyTorch может использоваться как прямая замена для Adam в исходном коде fairseq: https://github.com/pytorch/fairseq/blob/master/fairseq/optim/adafactor.py

Статья: Adafactor: Adaptive Learning Rates with Sublinear Memory Cost https://huggingface.co/papers/1804.04235 Обратите внимание, что этот оптимизатор внутренним образом корректирует скорость обучения в зависимости от параметров scale_parameter, relative_step и warmup_init. Чтобы использовать ручное (внешнее) расписание скорости обучения, необходимо установить scale_parameter=False и relative_step=False.

Эта реализация поддерживает значения с низкой точностью (FP16, bfloat), однако мы не проводили её тщательное тестирование.

Рекомендуемые настройки дообучения T5 (https://huggingface.co/proxy/discuss.huggingface.co/t/t5-finetuning-tips/684/3):

  • Не рекомендуется выполнять обучение без LR warmup или clip_threshold.

  • Отключить относительные обновления

  • Используйте scale_parameter=False

  • Дополнительные операции оптимизатора, такие как обрезка градиентов, не следует использовать вместе с Adafactor

Пример:

Adafactor(model.parameters(), scale_parameter=False, relative_step=False, warmup_init=False, lr=1e-3)

Другие сообщали, что следующая комбинация хорошо работает:

Adafactor(model.parameters(), scale_parameter=True, relative_step=True, warmup_init=True, lr=None)

При использовании lr=None вместе с Trainer, скорее всего, вам потребуется использовать AdafactorSchedule

scheduler следующим образом:

from transformers.optimization import Adafactor, AdafactorSchedule

optimizer = Adafactor(model.parameters(), scale_parameter=True, relative_step=True, warmup_init=True, lr=None)
lr_scheduler = AdafactorSchedule(optimizer)
trainer = Trainer(..., optimizers=(optimizer, lr_scheduler))

Использование:

# replace AdamW with Adafactor
optimizer = Adafactor(
    model.parameters(),
    lr=1e-3,
    eps=(1e-30, 1e-3),
    clip_threshold=1.0,
    decay_rate=-0.8,
    beta1=None,
    weight_decay=0.0,
    relative_step=False,
    scale_parameter=False,
    warmup_init=False,
)

шаг

< >

( closure = None )

Параметры

  • closure (callable, optional) — замыкание, которое повторно вычисляет модель и возвращает потерю.

Выполняет один шаг оптимизации

Расписания

SchedulerType

класс transformers.SchedulerType

< >

( valuenames = Nonemodule = Nonequalname = Nonetype = Nonestart = 1boundary = None )

Имена планировщиков для параметра lr_scheduler_type в TrainingArguments. По умолчанию используется «linear». Внутренне это получает планировщик get_linear_schedule_with_warmup из Trainer. Типы планировщиков:

get_scheduler

transformers.get_scheduler

< >

( name: str | SchedulerTypeoptimizer: Optimizernum_warmup_steps: int | None = Nonenum_training_steps: int | None = Nonescheduler_specific_kwargs: dict | None = None )

Параметры

  • name (str или SchedulerType) — Имя планировщика, который следует использовать.
  • optimizer (torch.optim.Optimizer) — Оптимизатор, который будет использоваться во время обучения.
  • num_warmup_steps (int, необязательный) — Количество шагов прогрева. Не все планировщики требуют этот параметр (поэтому аргумент является необязательным); если он не задан, а тип планировщика его требует, функция вызовет ошибку.
  • num_training_steps (`int“, необязательный) — Количество шагов обучения. Не все планировщики требуют этот параметр (поэтому аргумент является необязательным); если он не задан, а тип планировщика его требует, функция вызовет ошибку.
  • scheduler_specific_kwargs (dict, необязательный) — Дополнительные параметры для планировщиков, например, для косинусного с перезапусками. Несоответствие типа планировщика и его параметров приведет к тому, что функция планировщика вызовет TypeError.

Единый API для получения любого планировщика по его имени.

get_constant_schedule

transformers.get_constant_schedule

< >

( optimizer: Optimizerlast_epoch: int = -1 )

Параметры

  • optimizer (~torch.optim.Optimizer) — Оптимизатор, для которого планируется изменение скорости обучения.
  • last_epoch (int, необязательный, по умолчанию -1) — Индекс последней эпохи при возобновлении обучения.

Создайте расписание с постоянной скоростью обучения, используя скорость обучения, заданную в оптимизаторе.

get_constant_schedule_with_warmup

transformers.get_constant_schedule_with_warmup

< >

( optimizer: Optimizernum_warmup_steps: intlast_epoch: int = -1 )

Параметры

  • optimizer (~torch.optim.Optimizer) — Оптимизатор, для которого планируется изменение скорости обучения.
  • num_warmup_steps (int) — Количество шагов для фазы прогрева.
  • last_epoch (int, необязательный, по умолчанию -1) — Индекс последней эпохи при возобновлении обучения.

Создайте расписание с постоянной скоростью обучения, предшествующее которому период прогрева, в течение которого скорость обучения линейно возрастает от 0 до начального значения lr, заданного в оптимизаторе.

get_cosine_schedule_with_warmup

transformers.get_cosine_schedule_with_warmup

< >

( optimizer: Optimizernum_warmup_steps: intnum_training_steps: intnum_cycles: float = 0.5last_epoch: int = -1 )

Параметры

  • optimizer (~torch.optim.Optimizer) — Оптимизатор, для которого планируется изменение скорости обучения.
  • num_warmup_steps (int) — Количество шагов для фазы прогрева.
  • num_training_steps (int) — Общее количество шагов обучения.
  • num_cycles (float, необязательный, по умолчанию 0.5) — Количество волн в косинусной расписке (по умолчанию значение просто уменьшается от максимального до 0 по закону полукосинуса).
  • last_epoch (int, необязательный, по умолчанию -1) — Индекс последней эпохи при возобновлении обучения.

Создайте расписание с коэффициентом обучения, который уменьшается по значениям косинусоидальной функции от начального значения lr, заданного в оптимизаторе, до 0, после периода прогрева, в течение которого он линейно возрастает от 0 до начального значения lr, заданного в оптимизаторе.

get_cosine_with_hard_restarts_schedule_with_warmup

transformers.get_cosine_with_hard_restarts_schedule_with_warmup

< >

( optimizer: Optimizernum_warmup_steps: intnum_training_steps: intnum_cycles: int = 1last_epoch: int = -1 )

Параметры

  • optimizer (~torch.optim.Optimizer) — Оптимизатор, для которого планируется изменение скорости обучения.
  • num_warmup_steps (int) — Количество шагов для фазы прогрева.
  • num_training_steps (int) — Общее количество шагов обучения.
  • num_cycles (int, необязательный, по умолчанию 1) — Количество жёстких перезапусков.
  • last_epoch (int, необязательный, по умолчанию -1) — Индекс последней эпохи при возобновлении обучения.

Создайте расписание с коэффициентом обучения, который уменьшается по значениям косинусоидальной функции от начального значения lr, заданного в оптимизаторе, до 0, с несколькими жёсткими перезапусками, после периода прогрева, в течение которого он линейно возрастает от 0 до начального значения lr, заданного в оптимизаторе.

get_cosine_with_min_lr_schedule_with_warmup

transformers.get_cosine_with_min_lr_schedule_with_warmup

< >

( optimizer: Optimizernum_warmup_steps: intnum_training_steps: intnum_cycles: float = 0.5last_epoch: int = -1min_lr: float | None = Nonemin_lr_rate: float | None = None )

Параметры

  • optimizer (~torch.optim.Optimizer) — Оптимизатор, для которого планируется изменение скорости обучения.
  • num_warmup_steps (int) — Количество шагов для фазы прогрева.
  • num_training_steps (int) — Общее количество шагов обучения.
  • num_cycles (float, необязательный, по умолчанию 0.5) — Количество волн в косинусной расписке (по умолчанию значение просто уменьшается от максимального до 0 по закону полукосинуса).
  • last_epoch (int, необязательный, по умолчанию -1) — Индекс последней эпохи при возобновлении обучения.
  • min_lr (float, необязательный) — Минимальная скорость обучения, к которой нужно прийти после косинусной расписки.
  • min_lr_rate (float, необязательный) — Минимальная скорость обучения как доля от начальной скорости обучения. Если задано, min_lr не должно быть задано.

Создайте расписание с коэффициентом обучения, который уменьшается по значениям косинусоидальной функции от начального lr, заданного в оптимизаторе, до min_lr, после периода прогрева, в течение которого он линейно возрастает от 0 до начального lr, заданного в оптимизаторе.

get_cosine_with_min_lr_schedule_with_warmup_lr_rate

transformers.get_cosine_with_min_lr_schedule_with_warmup_lr_rate

< >

( optimizer: Optimizernum_warmup_steps: intnum_training_steps: intnum_cycles: float = 0.5last_epoch: int = -1min_lr: float | None = Nonemin_lr_rate: float | None = Nonewarmup_lr_rate: float | None = None )

Параметры

  • optimizer (~torch.optim.Optimizer) — Оптимизатор, для которого планируется изменение скорости обучения.
  • num_warmup_steps (int) — Количество шагов для фазы прогрева.
  • num_training_steps (int) — Общее количество шагов обучения.
  • num_cycles (float, необязательный, по умолчанию 0.5) — Количество волн в косинусной расписке (по умолчанию значение просто уменьшается от максимального до 0 по закону полукосинуса).
  • last_epoch (int, необязательный, по умолчанию -1) — Индекс последней эпохи при возобновлении обучения.
  • min_lr (float, необязательный) — Минимальная скорость обучения, к которой нужно прийти после косинусной расписки.
  • min_lr_rate (float, необязательный) — Минимальная скорость обучения как доля от начальной скорости обучения. Если задано, min_lr не должно быть задано.
  • warmup_lr_rate (float, необязательный) — Минимальная скорость обучения в виде отношения к начальной скорости обучения. Если не задано, warmup_lr_rate будет рассматриваться как float(1/num_warmup_steps).

Создайте расписание с коэффициентом обучения, который уменьшается по значениям косинусоидальной функции от начального lr, заданного в оптимизаторе, до min_lr, после периода прогрева, в течение которого он линейно возрастает от 0 до начального lr, заданного в оптимизаторе.

GreedyLR

класс transformers.GreedyLR

< >

( optimizer: Optimizermode: str = 'min'factor: float = 0.95patience: int = 10threshold: float = 1e-06threshold_mode: str = 'abs'cooldown: int = 0warmup: int = 0min_lr: float | list[float] = 0.001max_lr: float | list[float] = 1.0eps: float = 1e-08verbose: bool = Falsesmooth: bool = Falsewindow_size: int = 50reset_start: int = 500 )

Параметры

  • optimizer (~torch.optim.Optimizer) — Оптимизатор, для которого планируется изменение скорости обучения.
  • mode (str, необязательный, по умолчанию "min") — Одно из значений ‘min’ или ‘max’. В режиме ‘min’ LR снижается, когда метрика перестает уменьшаться; в режиме ‘max’ — когда перестает увеличиваться.
  • factor (float, необязательный, по умолчанию 0.95) — Коэффициент, на который будет скорректирована скорость обучения. На плато скорость обучения умножается на factor, а при улучшении — делится на factor. Должно быть < 1.0.
  • patience (int, необязательный, по умолчанию 10) — Количество эпох без улучшения, после которого будет скорректирована скорость обучения.
  • threshold (float, необязательный, по умолчанию 1e-06) — Порог для измерения нового оптимума.
  • threshold_mode (str, необязательный, по умолчанию "abs") — Одно из значений ‘rel’ или ‘abs’.
  • cooldown (int, необязательный, по умолчанию 0) — Количество эпох ожидания перед возобновлением нормальной работы после снижения LR.
  • warmup (int, необязательный, по умолчанию 0) — Количество эпох ожидания перед возобновлением нормальной работы после повышения LR.
  • min_lr (float или list[float], необязательный, по умолчанию 0.001) — Нижняя граница для коэффициента обучения.
  • max_lr (float или list[float], необязательный, по умолчанию 1.0) — Верхняя граница для коэффициента обучения.
  • eps (float, необязательный, по умолчанию 1e-08) — Минимальное затухание, применяемое к lr.
  • verbose (bool, необязательный, по умолчанию False) — Если True, выводит сообщение в stdout для каждого обновления.
  • smooth (bool, необязательный, по умолчанию False) — Если True, применяется сглаживание скользящим средним к метрикам.
  • window_size (int, необязательный, по умолчанию 50) — Размер окна для скользящего среднего при smooth=True.
  • reset_start (int, необязательный, по умолчанию 500) — Количество шагов ожидания на min_lr перед сбросом к начальному состоянию.

Адаптивный планировщик скорости обучения, реагирующий на метрики обучения.

GreedyLR динамически корректирует скорость обучения на основе результатов обучения:

  • Увеличивает LR, если метрики последовательно улучшаются (делит на коэффициент)
  • Уменьшает LR при стабилизации метрик (умножает на коэффициент)

Это отличается от традиционных планировщиков, таких как косинусная аннеалинг, тем, что реагирует на фактическую динамику обучения, а не следует заранее заданному расписанию.

Ссылка: GreedyLR: A Novel Adaptive Learning Rate Scheduler <https://arxiv.org/abs/2512.14527>_

Пример:

>>> optimizer = torch.optim.SGD(model.parameters(), lr=0.1)
>>> scheduler = GreedyLR(optimizer, mode="min", patience=10)
>>> for epoch in range(100):
...     train(...)
...     val_loss = validate(...)
...     scheduler.step(val_loss)

get_last_lr

< >

( )

Возвращает последнее вычисленное значение коэффициента обучения текущим планировщиком.

load_state_dict

< >

( state_dict: dict[str, Any] )

Загрузить состояние из словаря.

state_dict

< >

( )

Возвращает состояние планировщика в виде словаря.

шаг

< >

( metrics: floatepoch: int | None = None )

Параметры

  • metrics (float) — Значение метрики, используемое для принятия решений о корректировке скорости обучения.
  • epoch (int, необязательный) — Текущий номер эпохи. Если None, используется внутренний счётчик.

Выполнить шаг планировщика на основе переданных метрик.

get_greedy_schedule

transformers.get_greedy_schedule

< >

( optimizer: Optimizer**kwargs )

Параметры

  • optimizer (~torch.optim.Optimizer) — Оптимизатор, для которого планируется изменение скорости обучения.
  • kwargs (dict, необязательный) — Дополнительные параметры, передаваемые планировщику. См. GreedyLR для списка возможных параметров.

Создайте адаптивный планировщик скорости обучения, который корректирует LR на основе метрик обучения.

get_linear_schedule_with_warmup

transformers.get_linear_schedule_with_warmup

< >

( optimizernum_warmup_stepsnum_training_stepslast_epoch = -1 )

Параметры

  • optimizer (~torch.optim.Optimizer) — Оптимизатор, для которого планируется изменение скорости обучения.
  • num_warmup_steps (int) — Количество шагов для фазы прогрева.
  • num_training_steps (int) — Общее количество шагов обучения.
  • last_epoch (int, необязательный, по умолчанию -1) — Индекс последней эпохи при возобновлении обучения.

Создайте расписание с коэффициентом обучения, который линейно уменьшается от начального lr, заданного в оптимизаторе, до 0, после периода прогрева, в течение которого он линейно возрастает от 0 до начального lr, заданного в оптимизаторе.

get_polynomial_decay_schedule_with_warmup

transformers.get_polynomial_decay_schedule_with_warmup

< >

( optimizernum_warmup_stepsnum_training_stepslr_end = 1e-07power = 1.0last_epoch = -1 )

Параметры

  • optimizer (~torch.optim.Optimizer) — Оптимизатор, для которого планируется изменение скорости обучения.
  • num_warmup_steps (int) — Количество шагов для фазы прогрева.
  • num_training_steps (int) — Общее количество шагов обучения.
  • lr_end (float, необязательный, по умолчанию 1e-7) — Конечное значение LR.
  • power (float, необязательный, по умолчанию 1.0) — Коэффициент степени.
  • last_epoch (int, необязательный, по умолчанию -1) — Индекс последней эпохи при возобновлении обучения.

Создайте расписание с коэффициентом обучения, который уменьшается по полиномиальному закону затухания от начального lr, заданного в оптимизаторе, до конечного lr, определённого параметром lr_end, после периода прогрева, в течение которого он линейно возрастает от 0 до начального lr, заданного в оптимизаторе.

Примечание: power по умолчанию равно 1.0, как в реализации fairseq, которая, в свою очередь, основана на исходной реализации BERT по адресу https://github.com/google-research/bert/blob/f39e881b169b9d53bea03d2d341b31707a6c052b/optimization.py#L37

get_inverse_sqrt_schedule

transformers.get_inverse_sqrt_schedule

< >

( optimizer: Optimizernum_warmup_steps: inttimescale: int | None = Nonelast_epoch: int = -1 )

Параметры

  • optimizer (~torch.optim.Optimizer) — Оптимизатор, для которого планируется изменение скорости обучения.
  • num_warmup_steps (int) — Количество шагов для фазы прогрева.
  • timescale (int, необязательный, по умолчанию num_warmup_steps) — Масштаб времени.
  • last_epoch (int, необязательный, по умолчанию -1) — Индекс последней эпохи при возобновлении обучения.

Создайте расписание с обратной квадратно-корневой функцией для скорости обучения, начиная с начального значения lr, заданного в оптимизаторе, после периода прогрева, в течение которого lr линейно увеличивается от 0 до начального значения lr, заданного в оптимизаторе.

get_reduce_on_plateau_schedule

transformers.get_reduce_on_plateau_schedule

< >

( optimizer: Optimizer**kwargs )

Параметры

  • optimizer (~torch.optim.Optimizer) — Оптимизатор, для которого планируется изменение скорости обучения.
  • kwargs (dict, необязательный) — Дополнительные параметры, передаваемые планировщику. См. torch.optim.lr_scheduler.ReduceLROnPlateau для списка возможных параметров.

Создайте расписание с постоянной скоростью обучения, которая снижается, когда метрика перестала улучшаться.

get_wsd_schedule

transformers.get_wsd_schedule

< >

( optimizer: Optimizernum_warmup_steps: intnum_decay_steps: intnum_training_steps: int | None = Nonenum_stable_steps: int | None = Nonewarmup_type: str = 'linear'decay_type: str = 'cosine'min_lr_ratio: float = 0num_cycles: float = 0.5last_epoch: int = -1 )

Параметры

  • optimizer (~torch.optim.Optimizer) — Оптимизатор, для которого планируется изменение скорости обучения.
  • num_warmup_steps (int) — Количество шагов для фазы прогрева.
  • num_decay_steps (int) — Количество шагов фазы затухания.
  • num_training_steps (int, необязательный) — Общее количество шагов обучения. Это сумма шагов разгона, стабильной фазы и фазы затухания. Если num_stable_steps не задан, длительность стабильной фазы будет равна num_training_steps - num_warmup_steps - num_decay_steps.
  • num_stable_steps (int, необязательный) — Количество шагов для стабильной фазы. Убедитесь, что num_warmup_steps + num_stable_steps + num_decay_steps равно num_training_steps, иначе для остальных шагов будет использоваться минимальная скорость обучения.
  • warmup_type (str, необязательный, по умолчанию “linear”) — Тип warmup. Может быть ‘linear’, ‘cosine’ или ‘1-sqrt’.
  • decay_type (str, необязательный, по умолчанию “cosine”) — Тип используемого затухания. Может быть ‘linear’, ‘cosine’ или ‘1-sqrt’.
  • min_lr_ratio (float, необязательный, по умолчанию 0) — Минимальная скорость обучения в виде отношения к начальной скорости обучения.
  • num_cycles (float, необязательный, по умолчанию 0.5) — Количество волн в косинусной расписке (по умолчанию значение просто уменьшается от максимального до 0 по закону полукосинуса).
  • last_epoch (int, необязательный, по умолчанию -1) — Индекс последней эпохи при возобновлении обучения.

Создайте расписание с коэффициентом обучения, имеющим три этапа:

  1. warmup: увеличение с min_lr_ratio от начальной скорости обучения до начальной скорости обучения в соответствии с warmup_type.
  2. stable: постоянная скорость обучения.
  3. decay: снижение от начальной скорости обучения до значения, равного min_lr_ratio от начальной скорости обучения, в соответствии с decay_type.
Update on GitHub