timm documentation
Оптимизация
Оптимизация
На этой странице представлена справочная документация по API оптимизаторов, включённых в timm, а также обзор того, как они выбираются и настраиваются через фабрику оптимизаторов.
Использование
Оптимизаторы создаются по имени с помощью create_optimizer_v2. Получив модель, фабрика формирует группы параметров (исключения для weight decay, необязательное затухание скорости обучения по слоям), прежде чем создать оптимизатор. Специфические для оптимизатора аргументы передаются как именованные аргументы.
import timm
from timm.optim import create_optimizer_v2, list_optimizers
model = timm.create_model('vit_base_patch16_224')
# AdamW. 1D params (biases, norm scales) and params in model.no_weight_decay() are excluded from weight decay.
optimizer = create_optimizer_v2(model, opt='adamw', lr=1e-3, weight_decay=0.05)
# Layer-wise learning rate decay (fine-tuning), per-layer lr scales from the model's group_matcher().
optimizer = create_optimizer_v2(model, opt='adamw', lr=1e-3, weight_decay=0.05, layer_decay=0.75)
# Optimizer specific arguments are passed through.
optimizer = create_optimizer_v2(model, opt='lamb', lr=5e-3, weight_decay=0.02, trust_clip=True)
# A list of params or param groups can be passed instead of a model, weight decay grouping is then up to the caller.
optimizer = create_optimizer_v2(model.parameters(), opt='sgd', lr=0.1, momentum=0.9)
# All registered names, optionally with a description.
print(list_optimizers(with_description=True))Скрипт обучения (train.py) предоставляет тот же функционал через эти флаги:
--optвыбирает оптимизатор.--lrзадает скорость обучения.--weight-decayзадаёт весовое затухание.--momentumзадаёт импульс.--opt-epsзадает значение эпсилон (eps).--opt-betasзадаёт коэффициенты бета (betas).--layer-decayзадаёт послойное затухание скорости обучения.--opt-kwargs key=value ...передаёт любые другие аргументы оптимизатора.
Соглашения о наименовании
Зарегистрированные имена пишутся в нижнем регистре и состоят из базового имени оптимизатора и модификаторов:
| Изменить | Значение | Примеры |
|---|---|---|
префикс c | Осторожный вариант: обновление маскируется там, где его знак не совпадает с градиентом (Cautious Optimizers) | cadamw, clion, cmars, cadopt |
суффикс w | Развязанное (в стиле AdamW) затухание весов для оптимизаторов, по умолчанию использующих связанное L2-затухание | sgdw, lambw, adoptw, novogradw, rmsproptfw |
суффикс c | Скорректированное затухание весов: затухание масштабируется множителем lr² / max_lr вместо lr (Почему градиенты резко возрастают в конце обучения) | adamc, nadamc, sgdc, lionc, adoptc, kronc |
Префикс n | Импульс Нестерова (семейства SGD, LARS и Muon) | nesterov, nlars, nmuon, nadamuon |
префикс lookahead_ | Оберните оптимизатор в Lookahead | lookahead_adamw |
префикс fused | Слиянная реализация NVIDIA Apex (требуется apex) | fusedadamw, fusedlamb |
префикс bnb | реализация bitsandbytes, суффикс 8bit для состояния 8 бит (требуется bitsandbytes) | bnbadamw, bnbadamw8bit |
Некоторые названия появились раньше принятых соглашений: lambc и larc — это LAMB / LARS с обрезкой отношения доверия (исправленный вариант LAMB с затуханием — lambcd), momentum — это SGD с классическим импульсом, а sgd — SGD с импульсом Нестерова.
Реализации legacy в таблице ниже предшествовали их включению в PyTorch.
Семейства оптимизаторов
| Имена | Реализация | Примечания |
|---|---|---|
adamw, adam, nadam, radam, radamw, adamax, adadelta, adagrad, rmsprop, sgd, momentum, nesterov | torch.optim | |
adamwlegacy, adamc, cadamw, cadamc | AdamWLegacy | AdamW с осторожностью, исправленное затухание, обрезание обновлений, capturable |
nadamw, nadamc, cnadamw, cnadamc | NAdamW | AdamW с импульсом Нестерова (форма алгоритмической эффективности MLCommons) |
adopt, adoptw, adoptc, cadopt, cadoptw, cadoptc | Adopt | Вариант Adam, сходящийся для любого β2 |
adan, adanw, cadan, cadanw | Adan | Адаптивный импульс Нестерова |
adabelief, radabelief | AdaBelief | radabelief добавляет коррекцию в стиле RAdam |
adafactor, cadafactor | Adafactor | fairseq Adafactor, относительный размер шага, когда lr=None |
adafactorbv, adafactorbvc, cadafactorbv, cadafactorbvc | AdafactorBigVision | Big Vision Adafactor, факторизованные моменты второго порядка, импульс с низкой точностью, обрезание обновлений |
adamp, cadamp, sgdp, csgdp | AdamP, SGDP | Проекция обновления для масштабно-инвариантных весов |
adahessian | Adahessian | Второго порядка, требует замыкание (is_second_order) |
kron, kronw, kronc | Kron | PSGD с преобразователем, факторизованным по Кронекеру |
lamb, lambc, lambw, lambcw, lambcd, clamb, clambw | Lamb | Послойные адаптивные моменты, варианты trust_clip (lambc, lambcw) |
laprop, lapropc, claprop | LaProp | Разделение импульса и адаптивности |
lars, larc, nlars, nlarc | Lars | Масштабирование адаптивной скорости по слоям, варианты trust_clip (larc, nlarc) |
lion, lionc, clion, clionc | Lion | Эволюционированный знак импульса |
madgrad, madgradw | MADGRAD | Двойное усреднение на основе импульса |
mars, cmars | Mars | Снижение дисперсии, обновление в стиле AdamW или Lion |
muon, nmuon, adamuon, nadamuon | Muon | Ортогонализированный импульс Ньютона-Шульца для весов размерности 2D и выше, резервный режим AdamW / NAdamW для параметров размерности 1D |
novograd, novogradw, novogradc | NvNovoGrad | Нормализованные моменты по слоям |
rmsproptf, rmsproptfw, rmsproptfc, crmsproptf | RMSpropTF | Порядок операций в TensorFlow и обработка eps, lr, встроенная в буфер импульса |
sgdw, nesterovw, sgdc, csgdw, csgdc | SGDW | SGD с отделённым затуханием весов |
nadamlegacy, radamlegacy | NAdamLegacy, RAdamLegacy | Референсные реализации, заменённые на torch.optim |
fused*, bnb* | NVIDIA Apex, bitsandbytes | Регистрируется при установке пакета |
Часто используемые параметры
Большинство оптимизаторов timm поддерживают набор параметров, выходящий за рамки стандартных lr, weight_decay, betas и eps. Какие именно оптимизаторы принимают какие параметры, можно узнать по сигнатурам классов ниже; фабрика вызывает исключение при передаче неподдерживаемых аргументов.
cautionприменяет маску осторожного обновления, что эквивалентно именам реестра с префиксомc.corrected_weight_decayмасштабирует развязанное затухание весов множителемlr² / max_lrвместоlr(имена с суффиксомc), благодаря чему эффективное затухание следует расписанию скорости обучения.max_lr— это скорость обучения, с которой был создан оптимизатор; создавайте его с пиковой скоростью обучения из расписания (как это делаетtrain.py). Значение хранится в каждой группе параметров (max_lr_snapshot) и сохраняется/восстанавливается вместе с состоянием оптимизатора.decoupled_decay(илиdecoupled) переключает оптимизаторы, по умолчанию использующие связанное L2-затухание, на затухание в стиле AdamW (имена с суффиксомw).foreachвыбирает реализацию для нескольких тензоров. По умолчанию (None) она используется на CUDA и других устройствах с ядрами foreach, как вtorch.optim, если конфигурация не поддерживает её (тензорlrбезcapturableилиcautionв версии PyTorch без требуемой перегрузки_foreach_maximum_). Шаг для нескольких тензоров выполняется в блоках параметров, размер которых подбирается так, чтобы рабочий набор каждого блока помещался в кэш L2 GPU, что быстрее, чем пропускать каждый параметр через память один раз на операцию для больших моделей. Размер блока вычисляется на основе размера кэша L2 устройства (PyTorch >= 2.5), а разбиение на блоки пропускается на устройствах, где получившийся блок был бы меньше 4M элементов. ПеременнаяTIMM_FOREACH_CHUNK_SIZE=<elements>переопределяет размер блока, а0отключает разбиение на блоки.capturable(AdamWLegacy, NAdamW, Adopt, Muon) хранит счётчик шагов на устройстве, чтобы шаг можно было захватить в CUDA-графе. Все оптимизаторы принимаютlr, заданный как тензор нулевого измерения, который обновляется на месте расписанием, для использования сtorch.compileи CUDA-графами.clipping_threshold(AdamWLegacy, NAdamW, AdafactorBigVision) обрезает обновление по его RMS:update / max(1, rms / threshold), гдеrms— это RMS градиента, нормированного вторым моментом, для каждого тензора (StableAdamW, Adafactor).1.0, как в статьях. Как и в Adafactor, (развязанное) затухание веса не обрезается, а StableAdamW также масштабирует затухание обрезанной скоростью обучения.maximizeмаксимизирует целевую функцию, а не минимизирует её.
Поддержка параметров с низкой точностью (bfloat16, float16) обеспечивается на всех этапах:
- AdaBelief, RAdamLegacy and Adafactor хранят своё состояние в
float32для параметров с низкой точностью. - AdafactorBigVision хранит свой импульс в пониженной точности (
momentum_dtype). - Kron имеет отдельные параметры
mu_dtype/precond_dtype.
Эти state dtypes сохраняются при вызове load_state_dict (загрузчик по умолчанию в PyTorch приводит state к dtype параметра).
Функции step избегают синхронизации с хостом (ветвления Python, зависящие от данных, на тензорах устройства), исключение составляет проверка проекции в AdamP / SGDP.
Группы параметров
При передаче модели create_optimizer_v2 группирует параметры с помощью param_groups_weight_decay (без затухания для 1D-параметров и набора no_weight_decay() модели) или, при установленном layer_decay, с помощью param_groups_layer_decay, который назначает масштаб коэффициента обучения layer_decay ** (num_layers - layer_id) для каждого слоя, используя group_matcher() модели. Модели без group_matcher() используют auto_group_layers, для которого требуется pretrained_cfg['classifier'] модели для выделения головы. Для гибридных оптимизаторов (Muon) аргументы fallback_list и fallback_no_weight_decay направляют параметры в запасной (AdamW) оптимизатор.
API
Фабричные функции
timm.optim.create_optimizer_v2
< source >( model_or_params: typing.Union[torch.nn.Module, torch.optim.optimizer.ParamsT]opt: str = 'sgd'lr: typing.Optional[float] = Noneweight_decay: float = 0.0momentum: float = 0.9foreach: typing.Optional[bool] = Nonefilter_bias_and_bn: bool = Truefallback_list: typing.Collection[str] = ()fallback_no_weight_decay: bool = Falselayer_decay: typing.Optional[float] = Nonelayer_decay_min_scale: float = 0.0layer_decay_no_opt_scale: typing.Optional[float] = Noneparam_group_fn: typing.Optional[typing.Callable[[torch.nn.Module], torch.optim.optimizer.ParamsT]] = None**kwargs: typing.Any )
Параметры
- model_or_params — модель PyTorch или итерируемый объект параметров/групп параметров. Если предоставлена модель, параметры будут автоматически извлечены и сгруппированы на основе остальных аргументов.
- opt — Имя создаваемого оптимизатора (например, ‘adam’, ‘adamw’, ‘sgd’). Используйте list_optimizers(), чтобы просмотреть доступные варианты.
- lr — Learning rate. Если None, будет использовано значение по умолчанию для оптимизатора.
- weight_decay — Коэффициент затухания весов. Будет использован для создания групп параметров, если model_or_params является моделью.
- momentum — Коэффициент импульса для оптимизаторов, которые его поддерживают. Используется только в том случае, если выбранный оптимизатор принимает параметр momentum.
- foreach — Включить/отключить foreach (multi-tensor) реализацию, если она доступна. Если None, будут использоваться значения по умолчанию, специфичные для данного оптимизатора.
- filter_bias_and_bn — Если True, к параметрам bias и слоёв нормализации (все 1d-параметры) не будет применяться weight decay. Используется только тогда, когда model_or_params является моделью и weight_decay > 0.
- fallback_list — Коллекция шаблонов имён параметров, для которых следует использовать резервный оптимизатор в гибридных оптимизаторах (например, AdamW для Muon). Поддерживает сопоставление с подстановочными знаками.
- fallback_no_weight_decay — Если True, параметры из списка no_weight_decay() модели будут использовать резервный оптимизатор для гибридных оптимизаторов (например, AdamW для Muon).
- layer_decay — Необязательный коэффициент затухания скорости обучения по слоям. Если указан, скорости обучения масштабируются по формуле layer_decay^(max_depth - layer_depth). Используется только в том случае, если model_or_params является моделью.
- param_group_fn — Необязательная функция для создания пользовательских групп параметров. Если указана, другие параметры группировки параметров будут проигнорированы.
- **kwargs — Дополнительные аргументы, специфичные для оптимизатора (например, betas для Adam).
Создайте экземпляр оптимизатора через реестр timm.
Создаёт и настраивает оптимизатор с соответствующими группами параметров и параметрами конфигурации. Поддерживает автоматическое создание групп параметров для weight decay и layer-wise learning rates, а также пользовательское группирование параметров.
Примеры:
AdamW из модели, группы параметров создаются автоматически:
optimizer = create_optimizer_v2(model, 'adamw', lr=1e-3)SGD с импульсом и затуханием весов:
optimizer = create_optimizer_v2(model, 'sgd', lr=0.1, momentum=0.9, weight_decay=1e-4)Adam с послойным затуханием коэффициента обучения:
optimizer = create_optimizer_v2(model, 'adam', lr=1e-3, layer_decay=0.7)Пользовательские группы параметров:
def group_fn(model):
return [
{'params': model.backbone.parameters(), 'lr': 1e-4},
{'params': model.head.parameters(), 'lr': 1e-3},
]
optimizer = create_optimizer_v2(model, 'sgd', param_group_fn=group_fn)Примечание: Приоритет обработки групп параметров:
- Если указан param_group_fn, он будет использоваться исключительно
- Если указан layer_decay, будут созданы послойные группы
- Если weight_decay > 0 и filter_bias_and_bn равно True, будут созданы группы weight decay
- В противном случае все параметры будут находиться в одной группе
timm.optim.list_optimizers
< source >( filter: typing.Union[str, typing.List[str]] = ''exclude_filters: typing.Optional[typing.List[str]] = Nonewith_description: bool = False ) → If with_description is False
Параметры
- filter — строка фильтра в стиле wildcards или список строк фильтров (например, ‘adam’ для всех вариантов Adam или [‘adam’, ‘*8bit’] для вариантов Adam и 8-битных оптимизаторов). Пустая строка означает отсутствие фильтрации.
- exclude_filters — Необязательный список шаблонов с подстановочными знаками для исключения. Например, [’8bit’, ‘fused’] исключит 8-битные и слиянные реализации.
- with_description — Если True, возвращает кортежи (name, description) вместо одних только имён. Описания дают краткие пояснения характеристик оптимизатора.
Возвращает
Если with_description равно False
Список имён оптимизаторов в виде строк (например, ['adam', 'adamw', ...]) Если with_description равно True: Список кортежей вида (имя, описание) (например, [('adam', 'Adaptive Moment…'), ...])
Список доступных имён оптимизаторов, при необходимости с фильтрацией.
Выводит список всех зарегистрированных оптимизаторов с возможностью фильтрации с использованием шаблонов с подстановочными знаками. Оптимизаторы можно фильтровать с помощью шаблонов include и exclude, а также при необходимости возвращать описания вместе с каждым именем оптимизатора.
Примеры:
>>> list_optimizers()
['adam', 'adamw', 'sgd', ...]
>>> list_optimizers(['la*', 'nla*']) # List lamb & lars
['lamb', 'lambc', 'larc', 'lars', 'nlarc', 'nlars']
>>> list_optimizers('*adam*', exclude_filters=['bnb*', 'fused*']) # Exclude bnb & apex adam optimizers
['adam', 'adamax', 'adamp', 'adamw', 'nadam', 'nadamw', 'radam']
>>> list_optimizers(with_description=True) # Get descriptions
[('adabelief', 'Adapts learning rate based on gradient prediction error'),
('adadelta', 'torch.optim Adadelta, Adapts learning rates based on running windows of gradients'),
('adafactor', 'Memory-efficient implementation of Adam with factored gradients'),
...]timm.optim.get_optimizer_class
< source >( name: strbind_defaults: bool = True ) → If bind_defaults is False
Параметры
- name — Название оптимизатора для получения (например, ‘adam’, ‘sgd’)
- bind_defaults — Если True, возвращает частичную функцию с аргументами по умолчанию, связанными из OptimInfo. Если False, возвращает исходный класс оптимизатора.
Возвращает
Если bind_defaults равно False
Класс оптимизатора (например, torch.optim.Adam) Если bind_defaults равно True: Частичная функция с привязанными аргументами по умолчанию
Исключения
ValueError
ValueError— если имя оптимизатора не найдено в реестре
Получить класс оптимизатора по имени с возможностью привязать аргументы по умолчанию.
Получает класс оптимизатора или частичную функцию с привязанными аргументами по умолчанию. Это позволяет напрямую создавать экземпляры оптимизаторов с их конфигурациями по умолчанию, не прибегая к полному фабричному механизму.
Примеры:
timm.optim.get_optimizer_info
< source >( name: str )
Получите OptimInfo для оптимизатора.
Функции групп параметров
timm.optim.param_groups_weight_decay
< source >( model: Moduleweight_decay: typing.Optional[float] = 1e-05weight_decay_exclude_1d: bool = Trueno_weight_decay_list: typing.Collection[str] = ()fallback_list: typing.Collection[str] = ()fallback_no_weight_decay: bool = False )
timm.optim.param_groups_layer_decay
< source >( model: Moduleweight_decay: float = 0.05no_weight_decay_list: typing.Collection[str] = ()fallback_list: typing.Collection[str] = ()fallback_no_weight_decay: bool = Falseweight_decay_exclude_1d: bool = Truelayer_decay: float = 0.75min_scale: float = 0.0no_opt_scale: typing.Optional[float] = Noneverbose: bool = False )
Группы параметров для послойного затухания lr и weight decay Основано на BEiT: https://github.com/microsoft/unilm/blob/master/beit/optim_factory.py#L58
Классы оптимизаторов
класс timm.optim.AdaBelief
< source >( paramslr = 0.001betas = (0.9, 0.999)eps = 1e-16weight_decay = 0amsgrad = Falsedecoupled_decay = Truefixed_decay = Falserectify = Truedegenerated_to_sgd = Trueforeach: typing.Optional[bool] = None )
Параметры
- params (iterable) — итерируемый объект с параметрами для оптимизации или словарями, определяющими группы параметров
- lr (float, optional) — скорость обучения (по умолчанию: 1e-3)
- betas (Tuple[float, float], optional) — коэффициенты, используемые для вычисления скользящих средних градиента и его квадрата (по умолчанию: (0.9, 0.999))
- eps (float, optional) — величина, добавляемая к знаменателю для повышения численной устойчивости (по умолчанию: 1e-16)
- weight_decay (float, optional) — весовое затухание (штраф L2) (по умолчанию: 0)
- amsgrad (boolean, optional) — использовать ли вариант AMSGrad данного алгоритма из статьи
On the Convergence of Adam and Beyond_ (по умолчанию: False) - decoupled_decay (boolean, optional) — (по умолчанию: True) Если установлено в True, оптимизатор использует развязанное затухание весов, как в AdamW
- fixed_decay (boolean, optional) — (по умолчанию: False) Используется, когда decouple установлено в True. Если fixed_decay == True, затухание весов выполняется по формуле $W{new} = W{old} - W{old} \times decay$. Если fixeddecay == False, затухание весов выполняется по формуле $W{new} = W{old} - W{old} \times decay \times lr$. Обратите внимание, что в этом случае коэффициент затухания весов уменьшается вместе с шагом обучения (lr).
- rectify (boolean, optional) — (по умолчанию: True) Если установлено в True, выполняется исправленное обновление, аналогичное RAdam
- degenerated_to_sgd (boolean, optional) (по умолчанию —True) Если установлено в True, выполняется обновление SGD, когда дисперсия градиента высока
- foreach (boolean, optional) — использовать реализацию foreach (для нескольких тензоров); по умолчанию (None) используется, если только это не поддерживается
Реализует алгоритм AdaBelief. Модифицирован на основе Adam из PyTorch
reference: Оптимизатор AdaBelief, адаптация шагов по степени доверия к наблюдаемым градиентам, NeurIPS 2020
Полную таблицу рекомендуемых гиперпараметров см. по адресу https://github.com/juntang-zhuang/Adabelief-Optimizer’ Например, для EfficientNet параметры train/args можно найти в этих gists
- ссылка на train_script: https://gist.github.com/juntang-zhuang/0a501dd51c02278d952cf159bc233037
- ссылка на args.yaml: https://gist.github.com/juntang-zhuang/517ce3c27022b908bb93f78e4f786dc3
шаг
< source >( closure = None )
Выполняет один шаг оптимизации.
класс timm.optim.Adafactor
< source >( params: ParamsTlr: typing.Optional[float] = Noneeps: float = 1e-30eps_scale: float = 0.001clip_threshold: float = 1.0decay_rate: float = -0.8betas: typing.Optional[typing.Tuple[float, float]] = Noneweight_decay: float = 0.0scale_parameter: bool = Truewarmup_init: bool = Falsemin_dim_size_to_factor: int = 16caution: bool = False )
Реализует алгоритм Adafactor.
Эта реализация основана на: Adafactor: Adaptive Learning Rates with Sublinear Memory Cost (см. https://arxiv.org/abs/1804.04235)
Обратите внимание, что этот оптимизатор внутренним образом корректирует скорость обучения в зависимости от параметров scale_parameter, relative_step и warmup_init.
Ручной (внешний) график изменения скорости обучения используется, когда задано lr (тогда relative_step равно False).
Обратите внимание, что в этой реализации scale_parameter и warmup_init применяются только к относительной скорости обучения (lr=None), в отличие от fairseq / HF Transformers, масштабирование RMS параметров не применяется к внешней скорости обучения.
Ags: params: итерируемый объект с параметрами для оптимизации или словарями, определяющими группы параметров lr: внешняя скорость обучения eps: константы регуляризации для квадратного градиента и масштаба параметров соответственно eps_scale: константы регуляризации для масштаба параметров соответственно clip_threshold: порог среднеквадратичного значения окончательного обновления градиента decay_rate: коэффициент, используемый для вычисления скользящих средних квадратного градиента beta1: коэффициент, используемый для вычисления скользящих средних градиента weight_decay: затухание весов scale_parameter: если True, относительная скорость обучения шага масштабируется среднеквадратичным значением параметра warmup_init: вычисление скорости обучения, зависящей от времени, зависит от того, используется ли инициализация с разгоном
шаг
< source >( closure = None )
Выполняет один шаг оптимизации.
класс timm.optim.AdafactorBigVision
< source >( params: ParamsTlr: float = 1.0min_dim_size_to_factor: int = 16decay_rate: float = 0.8decay_offset: int = 0beta2_cap: float = 0.999momentum: typing.Optional[float] = 0.9momentum_dtype: typing.Union[str, torch.dtype] = torch.bfloat16eps: typing.Optional[float] = Noneweight_decay: float = 0.0clipping_threshold: typing.Optional[float] = Noneunscaled_wd: bool = Falsecaution: bool = Falsecorrected_weight_decay: bool = False )
Реализация PyTorch варианта Adafactor от BigVision с реализациями для одиночных и множественных тензоров.
Адаптировано из https://github.com/google-research/big_vision Россом Уайтменом
класс timm.optim.Adahessian
< source >( paramslr = 0.1betas = (0.9, 0.999)eps = 1e-08weight_decay = 0.0hessian_power = 1.0update_each = 1n_samples = 1avg_conv_kernel = False )
Параметры
- params (iterable) — итерируемый объект с параметрами для оптимизации или словарями, определяющими группы параметров
- lr (float, optional) — скорость обучения (по умолчанию: 0.1)
- betas ((float, float), optional) — коэффициенты, используемые для вычисления скользящих средних градиента и следа квадратичной гессиана (по умолчанию: (0.9, 0.999))
- eps (float, optional) — величина, добавляемая к знаменателю для повышения численной устойчивости (по умолчанию: 1e-8)
- weight_decay (float, optional) — весовое затухание (штраф L2) (по умолчанию: 0.0)
- hessian_power (float, optional) — показатель степени следа гессиана (по умолчанию: 1.0)
- update_each (int, optional) — вычислять приближение следа гессиана только после этого количества шагов (для экономии времени) (по умолчанию: 1)
- n_samples (int, optional) — количество раз, для которого выполняется выборка
zдля приближения следа гессиана (по умолчанию: 1)
Реализует алгоритм AdaHessian из статьи «ADAHESSIAN: адаптивный оптимизатор второго порядка для машинного обучения»
Получает все параметры во всех param_groups, у которых есть градиенты
Вычисляет приближение Хатчинсона для следа гессиана и накапливает его для каждого обучаемого параметра.
шаг
< source >( closure = None )
Выполняет один шаг оптимизации.
Обнуляет накопленные следы гессиана.
класс timm.optim.AdamP
< source >( paramslr = 0.001betas = (0.9, 0.999)eps = 1e-08weight_decay = 0delta = 0.1wd_ratio = 0.1nesterov = Falsecaution = False )
класс timm.optim.AdamWLegacy
< source >( params: ParamsTlr: float = 0.001betas: typing.Tuple[float, float] = (0.9, 0.999)eps: float = 1e-08weight_decay: float = 0.01amsgrad: bool = Falsecaution: bool = Falsecorrected_weight_decay: bool = Falsemaximize: bool = Falseforeach: typing.Optional[bool] = Nonecapturable: bool = Falseclipping_threshold: typing.Optional[float] = None )
Параметры
- params — итерируемый объект параметров для оптимизации или словари, определяющие группы параметров
- lr — скорость обучения
- betas — коэффициенты, используемые для вычисления скользящих средних градиента и его квадрата
- eps — величина, добавляемая в знаменатель для повышения численной устойчивости
- weight_decay — коэффициент затухания весов
- amsgrad — использовать ли вариант AMSGrad данного алгоритма из статьи
On the Convergence of Adam and Beyond - caution — будьте осторожны при использовании AdamW
- corrected_weight_decay — применить скорректированное затухание весов (lr**2 / max_lr)
- maximize — максимизировать параметры на основе целевой функции, а не минимизировать
- foreach — whether foreach implementation of optimizer is used. If unspecified by the user (so foreach is None), we will try to use foreach over for-loop implementation on CUDA, since it is faster in general.
- capturable — указывает, безопасно ли захватывать этот экземпляр в графе CUDA. Передача True может ухудшить производительность при отсутствии графа, поэтому, если вы не планируете захватывать этот экземпляр в графе, оставьте значение False
- clipping_threshold — порог обрезки обновления RMS (StableAdamW, https://arxiv.org/abs/2304.13013), обновление масштабируется множителем 1 / max(1, rms / clipping_threshold), где rms — это RMS от grad / (sqrt(v_hat) + eps). Затухание обновления параметров при резком увеличении градиента относительно их оценки второго момента. 1.0, как в статье, None (по умолчанию) отключает. Как в Adafactor, отделённое затухание весов не обрезается (StableAdamW также масштабирует затухание обрезанным lr).
Реализует алгоритм AdamW.
NOTE: Данная реализация устарела в пользу torch.optim.AdamW и остаётся в качестве справочного материала
Ссылки:
- Adam: A Method for Stochastic Optimization: https://arxiv.org/abs/1412.6980
- Регуляризация с отделённым затуханием весов: https://arxiv.org/abs/1711.05101
- О сходимости Adam и далее: https://openreview.net/forum?id=ryQu7f-RZ
шаг
< source >( closure = None )
Выполняет один шаг оптимизации.
класс timm.optim.Adan
< source >( paramslr: float = 0.001betas: typing.Tuple[float, float, float] = (0.98, 0.92, 0.99)eps: float = 1e-08weight_decay: float = 0.0no_prox: bool = Falsecaution: bool = Falseforeach: typing.Optional[bool] = None )
Параметры
- params — итерируемый объект с параметрами для оптимизации или словарями, определяющими группы параметров.
- lr — learning rate.
- betas — Коэффициенты, используемые для моментов первого и второго порядка.
- eps — Слагаемое, добавляемое к знаменателю для повышения численной устойчивости.
- weight_decay — Развязанное затухание весов (штраф L2)
- no_prox — способ применения весового затухания
- caution — Включить осторожность из «Осторожных оптимизаторов»
- foreach — Если True, будет использоваться реализация torch._foreach. Быстрее, но потребляет немного больше памяти.
Реализует pytorch-вариант Adan.
Adan был предложен в статье Adan: Adaptive Nesterov Momentum Algorithm for Faster Optimizing Deep Models https://arxiv.org/abs/2208.06677
Выполняет один шаг оптимизации.
класс timm.optim.Adopt
< source >( params: ParamsTlr: typing.Union[float, torch.Tensor] = 0.001betas: typing.Tuple[float, float] = (0.9, 0.9999)eps: float = 1e-06clip_exp: typing.Optional[float] = 0.333weight_decay: float = 0.0decoupled: bool = Falsecorrected_weight_decay: bool = Falsecaution: bool = Falseforeach: typing.Optional[bool] = Nonemaximize: bool = Falsecapturable: bool = Falsedifferentiable: bool = False )
ADOPT: Модифицированный Adam может сходиться с любым β2 с оптимальной скоростью: https://arxiv.org/abs/2411.02853
шаг
< source >( closure = None )
Выполните один шаг оптимизации.
класс timm.optim.kron.Kron
< source >( params: ParamsTlr: float = 0.001momentum: float = 0.9weight_decay: float = 0.0preconditioner_update_probability: typing.Union[typing.Callable, float, NoneType] = Nonemax_size_triangular: int = 2048min_ndim_triangular: int = 2memory_save_mode: typing.Optional[str] = Nonemomentum_into_precond_update: bool = Trueprecond_lr: float = 0.1precond_init_scale: float = 1.0mu_dtype: typing.Optional[torch.dtype] = Noneprecond_dtype: typing.Optional[torch.dtype] = Nonedecoupled_decay: bool = Falsecorrected_weight_decay: bool = Falseflatten: bool = Falseflatten_start_dim: int = 2flatten_end_dim: int = -1stochastic_weight_decay: bool = Falsedeterministic: bool = False )
Параметры
- params — итерируемый объект с параметрами для оптимизации или словарями, определяющими группы параметров.
- lr — learning rate.
- momentum — Параметр импульса.
- weight_decay — Завышение веса.
- preconditioner_update_probability — Вероятность обновления преобразователя. Если значение равно None, по умолчанию используется расписание, которое аннелирует значение с 1.0 до 0.03 к 4000 шагам.
- max_size_triangular — Максимальный размер для того, чтобы преобразователь (preconditioner) для dim был треугольным.
- min_ndim_triangular — минимальное количество измерений, которое должен иметь слой, чтобы использовать треугольные преобразователи.
- memory_save_mode — ‘one_diag’, ‘smart_one_diag’ или ‘all_diag’, по умолчанию None для установки всех преобразователей в треугольный вид, ‘one_diag’ устанавливает диагональный вид для наибольшего или последнего измерения в каждом слое, а ‘all_diag’ устанавливает диагональный вид для всех преобразователей.
- momentum_into_precond_update — передавать ли импульс в обновление преобразователя вместо исходных градиентов.
- mu_dtype — Тип данных (Dtype) для накопителя импульса.
- precond_dtype — Тип данных преобразователя.
- decoupled_decay — развязанное затухание весов в стиле AdamW
- corrected_weight_decay — применять скорректированный весовой распад при использовании decoupled_decay (lr**2 / max_lr)
- flatten — Схлопнуть измерения, а не полагаться полностью на выражения для параметров более высокого ранга
- flatten_start_dim — начало диапазона сглаживания, по умолчанию 2. Хороший компромисс для ConvNets.
- flatten_end_dim — Конец диапазона сглаживания, по умолчанию -1.
- stochastic_weight_decay — Включает случайную модуляцию затухания весов
- deterministic — Детерминированное поведение при сохранении / загрузке (возобновлении). FIXME медленный, требует доработки
Реализует PSGD Kron из https://github.com/lixilinx/psgd_torch.
класс timm.optim.Lamb
< source >( params: ParamsTlr: float = 0.001bias_correction: bool = Truebetas: typing.Tuple[float, float] = (0.9, 0.999)eps: float = 1e-06weight_decay: float = 0.01grad_averaging: bool = Truemax_grad_norm: typing.Optional[float] = 1.0trust_clip: bool = Falsealways_adapt: bool = Falsecaution: bool = Falsedecoupled_decay: bool = Falsecorrected_weight_decay: bool = Falseforeach: typing.Optional[bool] = None )
Параметры
- params — итерируемый объект с параметрами для оптимизации или словарями, определяющими группы параметров.
- lr — learning rate
- betas — Коэффициенты, используемые для вычисления скользящих средних градиента и его нормы.
- eps — Слагаемое, добавляемое к знаменателю для повышения численной устойчивости.
- weight_decay — Затухание весов
- grad_averaging — Применяется ли (1-beta2) к градиенту при вычислении скользящих средних градиента.
- max_grad_norm — Значение, используемое для обрезки глобальной нормы градиентов.
- trust_clip — Включает обрезание отношения доверия LAMBC.
- always_adapt — Применить адаптивную скорость обучения к параметру 0.0 weight decay.
- caution — Будьте осторожны.
- decoupled — применить раздельное затухание весов
- corrected_weight_decay — применять скорректированный весовой распад (lr**2 / max_lr) при использовании decoupled_decay
- foreach — использовать реализацию foreach (для нескольких тензоров), по умолчанию (None) используется, если не поддерживается
Реализует чистый pytorch-вариант оптимизатора FuseLAMB (вариант NvLamb) из apex.optimizers.FusedLAMB ссылка: https://github.com/NVIDIA/DeepLearningExamples/blob/master/PyTorch/LanguageModeling/Transformer-XL/pytorch/lamb.py
LAMB был предложен в:
- Оптимизация с большими батчами для глубокого обучения — обучение BERT за 76 минут: https://arxiv.org/abs/1904.00962
- О сходимости Adam и далее: https://openreview.net/forum?id=ryQu7f-RZ
шаг
< source >( closure = None )
Выполняет один шаг оптимизации.
класс timm.optim.LaProp
< source >( params: ParamsTlr: float = 0.0004betas: typing.Tuple[float, float] = (0.9, 0.999)eps: float = 1e-15weight_decay: float = 0.0caution: bool = Falsecorrected_weight_decay: bool = Falseforeach: typing.Optional[bool] = None )
Оптимизатор LaProp
Статья: LaProp: Separating Momentum and Adaptivity in Adam, https://arxiv.org/abs/2002.04839
шаг
< source >( closure = None )
Выполняет один шаг оптимизации.
класс timm.optim.Lars
< source >( paramslr = 1.0momentum = 0dampening = 0weight_decay = 0nesterov = Falsetrust_coeff = 0.001eps = 1e-08trust_clip = Falsealways_adapt = Falseforeach: typing.Optional[bool] = None )
Параметры
- params (iterable) — итерируемый объект с параметрами для оптимизации или словарями, определяющими группы параметров.
- lr (float, optional) — скорость обучения (по умолчанию: 1.0).
- momentum (float, optional) — коэффициент импульса (по умолчанию: 0)
- weight_decay (float, optional) — весовое затухание (штраф L2) (по умолчанию: 0)
- dampening (float, optional) — затухание для импульса (по умолчанию: 0)
- nesterov (bool, optional) — включает импульс Нестерова (по умолчанию: False)
- trust_coeff (float) — коэффициент доверия для вычисления адаптивной lr / trust_ratio (по умолчанию: 0.001)
- eps (float) — eps для знаменателя деления (по умолчанию: 1e-8)
- trust_clip (bool) — включить обрезание отношения доверия LARC (по умолчанию: False)
- always_adapt (bool) — всегда применять адаптацию LARS LR, иначе только когда group weight_decay != 0 (по умолчанию: False)
- foreach (bool, optional) — использовать реализацию foreach (для нескольких тензоров); по умолчанию (None) используется, если только это не поддерживается
LARS для PyTorch
Статья: Large batch training of Convolutional Networks - https://arxiv.org/pdf/1708.03888.pdf
шаг
< source >( closure = None )
Выполняет один шаг оптимизации.
класс timm.optim.Lion
< source >( params: ParamsTlr: float = 0.0001betas: typing.Tuple[float, float] = (0.9, 0.99)weight_decay: float = 0.0caution: bool = Falsecorrected_weight_decay: bool = Falsemaximize: bool = Falseforeach: typing.Optional[bool] = None )
Реализует алгоритм Lion.
шаг
< source >( closure = None )
Выполняет один шаг оптимизации.
класс timm.optim.MADGRAD
< source >( params: typing.Anylr: float = 0.01momentum: float = 0.9weight_decay: float = 0eps: float = 1e-06decoupled_decay: bool = False )
Параметры
- params (iterable) — Итерируемый объект с параметрами для оптимизации или словарями, определяющими группы параметров.
- lr (float) — Коэффициент обучения (по умолчанию: 1e-2).
- momentum (float) — Значение импульса в диапазоне [0,1) (по умолчанию: 0.9).
- weight_decay (float) — Коэффициент затухания весов, то есть L2-штраф (по умолчанию: 0).
- eps (float) — Член, добавляемый к знаменателю вне операции извлечения корня для повышения численной устойчивости. (по умолчанию: 1e-6).
MADGRAD_: метод стохастической оптимизации с импульсом, адаптивным и двойным усреднением градиента.
.. _MADGRAD: https://arxiv.org/abs/2101.11075
MADGRAD — это универсальный оптимизатор, который можно использовать вместо SGD или Adam; он может сходиться быстрее и лучше обобщать. В настоящее время поддерживается только GPU. Как правило, можно использовать те же расписания скорости обучения, что и для SGD или Adam. Общая скорость обучения не сопоставима с ни одним из этих методов и должна определяться с помощью перебора гиперпараметров.
MADGRAD требует меньшего затухания весов, чем другие методы, часто вплоть до нуля. Значения импульса, используемые для SGD или beta1 в Adam, должны работать и здесь.
Для разреженных задач оба параметра weight_decay и momentum должны быть установлены в 0.
шаг
< source >( closure: typing.Optional[typing.Callable[[], float]] = None )
Выполняет один шаг оптимизации.
класс timm.optim.Mars
< source >( params: ParamsTlr: float = 0.003betas: typing.Tuple[float, float] = (0.9, 0.99)eps: float = 1e-08weight_decay: float = 0.0gamma: float = 0.025mars_type: str = 'adamw'optimize_1d: bool = Falselr_1d_factor: float = 1.0betas_1d: typing.Optional[typing.Tuple[float, float]] = Nonecaution: bool = False )
Оптимизатор MARS
Статья: MARS: Освобождение потенциала снижения дисперсии для обучения больших моделей https://arxiv.org/abs/2411.10438
шаг
< source >( closure = None )
Выполняет один шаг оптимизации.
класс timm.optim.Muon
< source >( params: ParamsTlr: float = 0.02weight_decay: float = 0momentum: float = 0.95nesterov: bool = Falsens_steps: int = 5ns_coefficients: typing.Union[str, typing.Tuple[float, float, float], typing.List[typing.Tuple[float, float, float]]] = 'quintic'eps: float = 1e-07safety_factor: float = 1.0adjust_lr_fn: typing.Optional[str] = 'match_rms_adamw'conv_mode: str = 'flatten'normalize_spatial: bool = Trueadamw_lr: typing.Optional[float] = Nonefallback_lr_scale: float = 1.0betas: typing.Tuple[float, float] = (0.9, 0.95)algo: str = 'muon'scale_eps: bool = Falsecapturable: bool = Falseverbose: bool = False )
Muon - MomentUm, ортогонализированный методом Ньютона-Шульца
Сочетает Muon для параметров размерности 2D и выше (матрицы весов) с AdamW для параметров размерности 1D (смещения, нормализации) и групп параметров, для которых установлено ‘use_fallback=True’ (или ‘use_muon=False’ для совместимости).
Поддерживает два алгоритма:
- “muon”: стандартный алгоритм Muon с импульсом + ортогонализацией
- “adamuon”: алгоритм AdaMuon, добавляющий поэлементную оценку второго момента к ортогонализированным направлениям для адаптивного масштабирования, похожего на Adam
Выполняет один шаг оптимизации.
класс timm.optim.NAdamLegacy
< source >( paramslr = 0.002betas = (0.9, 0.999)eps = 1e-08weight_decay = 0schedule_decay = 0.004 )
Параметры
- params (iterable) — итерируемый объект с параметрами для оптимизации или словарями, определяющими группы параметров
- lr (float, optional) — скорость обучения (по умолчанию: 2e-3)
- betas (Tuple[float, float], optional) — коэффициенты, используемые для вычисления скользящих средних градиента и его квадрата
- eps (float, optional) — величина, добавляемая к знаменателю для повышения численной устойчивости (по умолчанию: 1e-8)
- weight_decay (float, optional) — весовое затухание (штраф L2) (по умолчанию: 0)
- schedule_decay (float, optional) — коэффициент затухания расписания импульса (по умолчанию: 4e-3)
Реализует алгоритм Nadam (вариант Adam на основе импульса Нестерова).
NOTE: Данная реализация устарела в пользу torch.optim.NAdam и остаётся в качестве справочного материала
В статье Incorporating Nesterov Momentum into Adam__ это было предложено.
http://cs229.stanford.edu/proj2015/054_report.pdf http://www.cs.toronto.edu/~fritz/absps/momentum.pdf
Изначально взято из: https://github.com/pytorch/pytorch/pull/1408 Примечание: возможны проблемы, но хорошо работает на некоторых задачах.
шаг
< source >( closure = None )
Выполняет один шаг оптимизации.
класс timm.optim.NAdamW
< source >( params: ParamsTlr: float = 0.001betas: typing.Tuple[float, float] = (0.9, 0.999)eps: float = 1e-08weight_decay: float = 0.01caution: bool = Falsecorrected_weight_decay: bool = Falsemaximize: bool = Falseforeach: typing.Optional[bool] = Nonecapturable: bool = Falseclipping_threshold: typing.Optional[float] = None )
Параметры
- params — итерируемый объект параметров для оптимизации или словари, определяющие группы параметров
- lr — скорость обучения
- betas — коэффициенты, используемые для вычисления скользящих средних градиента и его квадрата
- eps — величина, добавляемая в знаменатель для повышения численной устойчивости
- weight_decay — коэффициент затухания весов
- caution — включить режим осторожности
- corrected_weight_decay — применить скорректированное затухание весов (lr**2 / max_lr)
- maximize — максимизировать параметры на основе целевой функции, а не минимизировать
- foreach — используется ли foreach-реализация оптимизатора. Если не указано (None), то foreach-реализация применяется на CUDA (устройства с foreach-ядрами), поскольку в целом она быстрее.
- capturable — указывает, безопасно ли захватывать этот экземпляр в графе CUDA
- clipping_threshold — порог обрезки обновления RMS (StableAdamW, https://arxiv.org/abs/2304.13013), обновление масштабируется множителем 1 / max(1, rms / clipping_threshold), где rms — это RMS от grad / (sqrt(v_hat) + eps). Затухание обновления параметров при резком увеличении градиента относительно их оценки второго момента. 1.0, как в статье, None (по умолчанию) отключает. Как в Adafactor, отделённое затухание весов не обрезается (StableAdamW также масштабирует затухание обрезанным lr).
Реализует алгоритм NAdamW.
Реализация алгоритма NAdam описана в таблице 1 в https://arxiv.org/abs/1910.05446 (в коде также есть комментарий, указывающий на единственное отличие NAdamW от AdamW).
За дополнительными деталями относительно алгоритма мы отсылаем к
- Регуляризация с отделённым затуханием весов: https://arxiv.org/abs/1711.05101
- О сходимости Adam и далее: https://openreview.net/forum?id=ryQu7f-RZ
шаг
< source >( closure = None )
Выполняет один шаг оптимизации.
класс timm.optim.NvNovoGrad
< source >( paramslr = 0.001betas = (0.95, 0.98)eps = 1e-08weight_decay = 0grad_averaging = Falseamsgrad = Falsedecoupled_decay = Falsecorrected_weight_decay = False )
Параметры
- params (iterable) — итерируемый объект с параметрами для оптимизации или словарями, определяющими группы параметров
- lr (float, optional) — скорость обучения (по умолчанию: 1e-3)
- betas (Tuple[float, float], optional) — коэффициенты, используемые для вычисления скользящих средних градиента и его квадрата (по умолчанию: (0.95, 0.98))
- eps (float, optional) — величина, добавляемая к знаменателю для повышения численной устойчивости (по умолчанию: 1e-8)
- weight_decay (float, optional) — весовое затухание (штраф L2) (по умолчанию: 0)
- grad_averaging — усреднение градиентов
- amsgrad (boolean, optional) — использовать ли вариант AMSGrad данного алгоритма из статьи
On the Convergence of Adam and Beyond_ (по умолчанию: False) - decoupled_decay — применять весовое затухание непосредственно к весам (lr * weight_decay на каждом шаге), а не добавлять его к нормализованному градиенту перед обновлением импульса (как описано в статье)
- corrected_weight_decay — применять скорректированное затухание весов (lr**2 / max_lr), если decoupled_decay равно True
Реализует алгоритм Novograd.
шаг
< source >( closure = None )
Выполняет один шаг оптимизации.
класс timm.optim.RAdamLegacy
< source >( paramslr = 0.001betas = (0.9, 0.999)eps = 1e-08weight_decay = 0 )
Оптимизатор RAdam для PyTorch
NOTE: Данная реализация устарела в пользу torch.optim.AdamW и остаётся в качестве справочного материала
класс timm.optim.RMSpropTF
< source >( params: ParamsTlr: float = 0.01alpha: float = 0.9eps: float = 1e-10weight_decay: float = 0momentum: float = 0.0centered: bool = Falsedecoupled_decay: bool = Falsecorrected_weight_decay: bool = Falselr_in_momentum: bool = Truecaution: bool = Falseforeach: typing.Optional[bool] = None )
Параметры
- params — итерируемый объект параметров для оптимизации или словари, определяющие группы параметров
- lr — скорость обучения
- momentum — коэффициент импульса
- alpha — константа сглаживания (затухания)
- eps — величина, добавляемая в знаменатель для повышения численной устойчивости
- centered — если
True, вычисляется центрированный RMSProp, градиент нормализуется по оценке его дисперсии - weight_decay — весовое затухание (L2-штраф) (по умолчанию: 0)
- decoupled_decay — раздельное затухание весов согласно https://arxiv.org/abs/1711.05101
- corrected_weight_decay — применять скорректированное затухание весов (lr**2 / max_lr), если decoupled_decay равно True
- lr_in_momentum — масштабирование скорости обучения включено в обновление буфера импульса в соответствии с настройками по умолчанию в Tensorflow
- caution — проявляйте осторожность
- foreach — использовать реализацию foreach (для нескольких тензоров), по умолчанию (None) используется, если не поддерживается (см. rmsprop_tf())
Реализует алгоритм RMSprop (эпсилон в стиле TensorFlow)
NOTE: Это прямое копирование PyTorch RMSprop с применением eps перед sqrt и несколькими другими изменениями для более точного соответствия Tensorflow при совпадающих гиперпараметрах.
Среди значимых изменений:
- Epsilon, применяемый внутри квадратного корня
- square_avg инициализирован единицами
- Масштабирование LR обновления, накопленного в буфере импульса
Предложено Дж. Хинтоном в его курсе.
Центрированная версия впервые появляется в Генерация последовательностей с помощью рекуррентных нейронных сетей.
шаг
< source >( closure = None )
Выполняет один шаг оптимизации.
класс timm.optim.SGDP
< source >( paramslr = torch.optim.optimizer.requiredmomentum = 0dampening = 0weight_decay = 0nesterov = Falseeps = 1e-08delta = 0.1wd_ratio = 0.1caution = False )
класс timm.optim.SGDW
< source >( params: ParamsTlr: float = 0.001momentum: float = 0.0dampening: float = 0.0weight_decay: float = 0.0nesterov: bool = Falsecaution: bool = Falsecorrected_weight_decay: bool = Falsemaximize: bool = Falseforeach: typing.Optional[bool] = Nonedifferentiable: bool = False )
шаг
< source >( closure = None )
Выполняет один шаг оптимизации.