timm documentation
Otimização
Otimização
Esta página contém a documentação de referência da API dos otimizadores incluídos em timm, bem como uma visão geral de como eles são selecionados e configurados por meio da fábrica de otimizadores.
Uso
Os otimizadores são criados por nome com create_optimizer_v2. Dado um modelo, a fábrica constrói os grupos de parâmetros (exclusões de decaimento de peso, decaimento opcional da taxa de aprendizado por camada) antes de construir o otimizador. Os argumentos específicos do otimizador são passados como argumentos de palavra-chave.
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))O script de treinamento (train.py) expõe o mesmo por meio destas flags:
--optseleciona o otimizador.--lrdefine a taxa de aprendizado.--weight-decaydefine o weight decay.--momentumdefine o momentum.--opt-epsdefine o epsilon (eps).--opt-betasdefine os coeficientes beta (betas).--layer-decaydefine o decaimento da taxa de aprendizado por camada.--opt-kwargs key=value ...passa quaisquer outros argumentos do otimizador.
Convenções de nomenclatura
Os nomes registrados são em minúsculas, um nome de otimizador base mais modificadores:
| Modificador | Significado | Exemplos |
|---|---|---|
prefixo c | Variante cautelosa, a atualização é mascarada onde seu sinal diverge do gradiente (Cautious Optimizers) | cadamw, clion, cmars, cadopt |
sufixo w | Decaimento de peso desacoplado (estilo AdamW), para otimizadores que por padrão utilizam decaimento L2 acoplado | sgdw, lambw, adoptw, novogradw, rmsproptfw |
sufixo c | Decaimento de peso corrigido, o decaimento é escalado por lr² / max_lr em vez de lr (Por que os gradientes aumentam rapidamente perto do final do treinamento) | adamc, nadamc, sgdc, lionc, adoptc, kronc |
prefixo n | Momentum de Nesterov (famílias SGD, LARS e Muon) | nesterov, nlars, nmuon, nadamuon |
prefixo lookahead_ | Envolva o otimizador em Lookahead | lookahead_adamw |
prefixo fused | Implementação fundida da NVIDIA Apex (requer apex) | fusedadamw, fusedlamb |
prefixo bnb | implementação bitsandbytes, sufixo 8bit para estado de 8 bits (requer bitsandbytes) | bnbadamw, bnbadamw8bit |
Alguns nomes são anteriores às convenções: lambc e larc são LAMB / LARS com recorte de razão de confiança (a variante corrigida de decaimento do LAMB é lambcd), momentum é SGD com momento clássico e sgd é SGD com momento de Nesterov.
As implementações legacy na tabela abaixo são anteriores à sua inclusão no PyTorch.
Famílias de otimizador
| Nomes | Implementação | Observações |
|---|---|---|
adamw, adam, nadam, radam, radamw, adamax, adadelta, adagrad, rmsprop, sgd, momentum, nesterov | torch.optim | |
adamwlegacy, adamc, cadamw, cadamc | AdamWLegacy | AdamW com cautela, decaimento corrigido, recorte de atualização, capturable |
nadamw, nadamc, cnadamw, cnadamc | NAdamW | AdamW com momento de Nesterov (forma de eficiência algorítmica do MLCommons) |
adopt, adoptw, adoptc, cadopt, cadoptw, cadoptc | Adopt | Variante do Adam que converge para qualquer β2 |
adan, adanw, cadan, cadanw | Adan | Momentum adaptativo de Nesterov |
adabelief, radabelief | AdaBelief | radabelief adiciona retificação no estilo RAdam |
adafactor, cadafactor | Adafactor | fairseq Adafactor, tamanho relativo do passo quando lr=None |
adafactorbv, adafactorbvc, cadafactorbv, cadafactorbvc | AdafactorBigVision | Big Vision Adafactor, momentos de segunda ordem fatorados, momento de baixa precisão, recorte de atualização |
adamp, cadamp, sgdp, csgdp | AdamP, SGDP | Projeção da atualização para pesos invariantes em relação à escala |
adahessian | Adahessian | Segunda ordem, requer um closure (is_second_order) |
kron, kronw, kronc | Kron | PSGD com um pré-condicionador fatorado de Kronecker |
lamb, lambc, lambw, lambcw, lambcd, clamb, clambw | Lamb | Momentos adaptativos por camada, variantes trust_clip (lambc, lambcw) |
laprop, lapropc, claprop | LaProp | Momentum e adaptividade separados |
lars, larc, nlars, nlarc | Lars | Escala adaptativa de taxa por camada, variantes trust_clip (larc, nlarc) |
lion, lionc, clion, clionc | Lion | Momentum de sinal evoluído |
madgrad, madgradw | MADGRAD | Média dupla baseada em momento |
mars, cmars | Mars | Redução de variância, atualização no estilo AdamW ou Lion |
muon, nmuon, adamuon, nadamuon | Muon | Momento ortogonalizado Newton-Schulz para pesos 2D+, fallback AdamW / NAdamW para parâmetros 1D |
novograd, novogradw, novogradc | NvNovoGrad | Momentos normalizados por camada |
rmsproptf, rmsproptfw, rmsproptfc, crmsproptf | RMSpropTF | Ordem das operações e tratamento de eps no TensorFlow, lr incorporado ao buffer de momentum |
sgdw, nesterovw, sgdc, csgdw, csgdc | SGDW | SGD com decaimento de peso desacoplado |
nadamlegacy, radamlegacy | NAdamLegacy, RAdamLegacy | Implementações de referência, substituídas por torch.optim |
fused*, bnb* | NVIDIA Apex, bitsandbytes | Registrado quando o pacote é instalado |
Opções comuns
A maioria dos otimizadores do timm compartilha um conjunto de opções além dos habituais lr, weight_decay, betas e eps. Quais
otimizadores aceitam quais opções pode ser verificado nas assinaturas de classe abaixo; a fábrica gera um erro para argumentos não suportados.
cautionaplica a máscara de atualização cautelosa, equivalente aos nomes de registro com o prefixoc.corrected_weight_decayescala o decaimento de peso desacoplado porlr² / max_lrem vez delr(os nomes com sufixoc), de modo que o decaimento efetivo siga o agendamento da taxa de aprendizado.max_lré a taxa de aprendizado com a qual o otimizador foi construído; construa-o com a taxa de pico do agendamento (comotrain.pyfaz). Ele é mantido em cada grupo de parâmetros (max_lr_snapshot) e salvo/restaurado junto com o estado do otimizador.decoupled_decay(oudecoupled) alterna otimizadores que por padrão usam decaimento L2 acoplado para o decaimento no estilo AdamW (os nomes com o sufixow).foreachseleciona a implementação multi-tensor. Por padrão (None), ela é usada em CUDA e em outros dispositivos com kernels foreach, em conformidade comtorch.optim, a menos que não seja suportada pela configuração (um tensorlrsemcapturable, oucautionem uma versão do PyTorch sem o overload_foreach_maximum_necessário). O passo multi-tensor é executado em blocos de parâmetros dimensionados de modo que o conjunto de trabalho de cada bloco permaneça no cache L2 da GPU, o que é mais rápido do que transmitir cada parâmetro pela memória uma vez por operação para modelos grandes. O tamanho do bloco é derivado do tamanho do cache L2 do dispositivo (PyTorch >= 2.5) e o particionamento em blocos é ignorado em dispositivos onde o bloco resultante seria inferior a 4M elementos.TIMM_FOREACH_CHUNK_SIZE=<elements>substitui o tamanho do bloco, e0desativa o particionamento em blocos.capturable(AdamWLegacy, NAdamW, Adopt, Muon) mantém a contagem de passos no dispositivo para que o passo possa ser capturado em um grafo CUDA. Todos os otimizadores aceitam umlrdado como um tensor de 0 dimensões, atualizado in place por um agendamento, para uso comtorch.compilee grafos CUDA.clipping_threshold(AdamWLegacy, NAdamW, AdafactorBigVision) aplica clipping na atualização pelo seu RMS,update / max(1, rms / threshold)comrmssendo o RMS do gradiente normalizado pelo segundo momento, por tensor (StableAdamW, Adafactor).1.0como nos artigos. Assim como no Adafactor, o weight decay (decoupled) não é clipado, mas o StableAdamW também escala o decay pela taxa de aprendizado clipada.maximizemaximiza o objetivo em vez de minimizá-lo.
Parâmetros de baixa precisão (bfloat16, float16) são suportados em todo o processo:
- AdaBelief, RAdamLegacy and Adafactor mantêm seu estado em
float32para parâmetros de baixa precisão. - AdafactorBigVision mantém seu momento em uma precisão reduzida (
momentum_dtype). - Kron possui opções separadas
mu_dtype/precond_dtype.
Esses dtypes de estado são preservados por load_state_dict (o carregador padrão do PyTorch converte o estado para o dtype do parâmetro).
As funções de passo evitam sincronizações com o host (ramificações Python dependentes de dados em tensores de dispositivo), sendo a verificação de projeção do AdamP / SGDP a exceção.
Grupos de parâmetros
Quando fornecido um modelo, create_optimizer_v2 agrupa os parâmetros com param_groups_weight_decay (sem decaimento para parâmetros 1D e o conjunto no_weight_decay() do modelo) ou, com layer_decay definido, param_groups_layer_decay, que atribui uma escala de taxa de aprendizado de layer_decay ** (num_layers - layer_id) por camada usando o group_matcher() do modelo. Modelos sem group_matcher() recorrem a auto_group_layers, que precisa do pretrained_cfg['classifier'] do modelo para separar a cabeça. Para otimizadores híbridos (Muon), os argumentos fallback_list e fallback_no_weight_decay direcionam os parâmetros para o otimizador de fallback (AdamW).
API
Funções de fábrica
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 )
Parâmetros
- model_or_params — Um modelo do PyTorch ou um iterável de parâmetros/grupos de parâmetros. Se um modelo for fornecido, os parâmetros serão extraídos e agrupados automaticamente com base nos outros argumentos.
- opt — Nome do otimizador a ser criado (por exemplo, ‘adam’, ‘adamw’, ‘sgd’). Use list_optimizers() para ver as opções disponíveis.
- lr — Taxa de aprendizado. Se for None, será usado o padrão do otimizador.
- weight_decay — Fator de decaimento de peso. Será usado para criar grupos de parâmetros se model_or_params for um modelo.
- momentum — Fator de momentum para otimizadores que o suportam. Usado apenas se o otimizador escolhido aceitar o parâmetro momentum.
- foreach — Ativa/desativa a implementação foreach (multi-tensor), se disponível. Se for None, usará os padrões específicos do otimizador.
- filter_bias_and_bn — Se True, os parâmetros de bias e das camadas de normalização (todos os parâmetros 1d) não terão weight decay aplicado. Usado apenas quando model_or_params é um modelo e weight_decay > 0.
- fallback_list — Coleção de padrões de nomes de parâmetros para usar o otimizador de fallback em otimizadores híbridos (por exemplo, AdamW para Muon). Suporta correspondência com curingas.
- fallback_no_weight_decay — Se True, os parâmetros na lista no_weight_decay() do modelo usarão o otimizador de fallback para otimizadores híbridos (por exemplo, AdamW para Muon).
- layer_decay — Fator opcional de decaimento da taxa de aprendizado por camada. Se fornecido, as taxas de aprendizado serão escalonadas por layer_decay^(max_depth - layer_depth). Usado apenas quando model_or_params é um modelo.
- param_group_fn — Função opcional para criar grupos de parâmetros personalizados. Se fornecida, as outras opções de agrupamento de parâmetros serão ignoradas.
- **kwargs — Argumentos adicionais específicos do otimizador (por exemplo, betas para Adam).
Crie uma instância de otimizador via registro do timm.
Cria e configura um otimizador com grupos de parâmetros e configurações apropriados. Suporta a criação automática de grupos de parâmetros para weight decay e taxas de aprendizado por camada, bem como a agrupação personalizada de parâmetros.
Exemplos:
Ao usar AdamW a partir de um modelo, os grupos de parâmetros são criados automaticamente:
optimizer = create_optimizer_v2(model, 'adamw', lr=1e-3)SGD com momentum e decaimento de peso:
optimizer = create_optimizer_v2(model, 'sgd', lr=0.1, momentum=0.9, weight_decay=1e-4)Adam com decaimento da taxa de aprendizado por camada:
optimizer = create_optimizer_v2(model, 'adam', lr=1e-3, layer_decay=0.7)Grupos de parâmetros personalizados:
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)Observação: Prioridade do tratamento de grupos de parâmetros:
- Se param_group_fn for fornecido, ele será usado exclusivamente
- Se layer_decay for fornecido, grupos por camada serão criados
- Se weight_decay > 0 e filter_bias_and_bn for True, os grupos de decaimento de peso serão criados
- Caso contrário, todos os parâmetros ficarão em um único grupo
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
Parâmetros
- filter — String de filtro no estilo curinga ou lista de strings de filtro (por exemplo, ‘adam’ para todas as variantes de Adam, ou [‘adam’, ‘*8bit’] para variantes de Adam e otimizadores de 8 bits). String vazia significa sem filtragem.
- exclude_filters — Lista opcional de padrões curinga para exclusão. Por exemplo, [’8bit’, ‘fused’] excluiria as implementações de 8 bits e fundidas.
- with_description — Se True, retorna tuplas de (name, description) em vez de apenas nomes. As descrições fornecem explicações breves sobre as características do otimizador.
Retorna
Se with_description for False
Lista de nomes de otimizadores como strings (por exemplo, [‘adam’, ‘adamw’, …]) Se with_description for True: Lista de tuplas de (name, description) (por exemplo, [(‘adam’, ‘Adaptive Moment…’), …])
Liste os nomes de otimizadores disponíveis, opcionalmente filtrados.
Liste todos os otimizadores registrados, com filtragem opcional usando padrões curinga. Os otimizadores podem ser filtrados usando padrões de include e exclude, e podem opcionalmente retornar descrições com cada nome de otimizador.
Exemplos:
>>> 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
Parâmetros
- name — Nome do otimizador a ser recuperado (ex.: ‘adam’, ‘sgd’)
- bind_defaults — Se True, retorna uma função parcial com os argumentos padrão de OptimInfo vinculados. Se False, retorna a classe de otimizador bruta.
Retorna
Se bind_defaults for False
A classe do otimizador (por exemplo, torch.optim.Adam) Se bind_defaults for True: Uma função parcial com argumentos padrão vinculados
Exceções
ValueError
ValueError— Se o nome do otimizador não for encontrado no registro
Obtém a classe do otimizador pelo nome, com a opção de vincular argumentos padrão.
Recupera a classe do otimizador ou uma função parcial com argumentos padrão vinculados. Isso permite a instanciação direta de otimizadores com suas configurações padrão sem passar pela fábrica completa.
Exemplos:
timm.optim.get_optimizer_info
< source >( name: str )
Obtenha o OptimInfo para um otimizador.
Funções de grupo de parâmetros
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 )
Grupos de parâmetros para decaimento de lr por camada & decaimento de peso Baseado no BEiT: https://github.com/microsoft/unilm/blob/master/beit/optim_factory.py#L58
Classes de Otimizador
classe 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 )
Parâmetros
- params (iterável) — iterável de parâmetros a serem otimizados ou dicionários definindo grupos de parâmetros
- lr (float, opcional) — taxa de aprendizado (padrão: 1e-3)
- betas (Tuple[float, float], opcional) — coeficientes usados para calcular as médias móveis do gradiente e seu quadrado (padrão: (0.9, 0.999))
- eps (float, opcional) — termo adicionado ao denominador para melhorar a estabilidade numérica (padrão: 1e-16)
- weight_decay (float, opcional) — decaimento de peso (penalidade L2) (padrão: 0)
- amsgrad (boolean, opcional) — se deve usar a variante AMSGrad deste
algoritmo do artigo
On the Convergence of Adam and Beyond_ (padrão: False) - decoupled_decay (boolean, opcional) — (padrão: True) Se definido como True, o otimizador usa decaimento de peso desacoplado, como no AdamW
- fixed_decay (boolean, opcional) — (padrão: False) Isso é usado quando weightdecouple é definido como True. Quando fixed_decay == True, o decaimento de peso é realizado como $W{new} = W{old} - W{old} \times decay$. Quando fixeddecay == False, o decaimento de peso é realizado como $W{new} = W{old} - W{old} \times decay \times lr$. Observe que, nesse caso, a taxa de decaimento de peso diminui com a taxa de aprendizado (lr).
- rectify (boolean, opcional) — (padrão: True) Se definido como True, executa a atualização retificada semelhante à do RAdam
- degenerated_to_sgd (boolean, opcional) (padrão —True) Se definido como True, executa a atualização por SGD quando a variância do gradiente é alta
- foreach (boolean, opcional) — usa a implementação foreach (multi-tensor), por padrão (None) é usado, a menos que não seja suportado
Implementa o algoritmo AdaBelief. Modificado a partir do Adam no PyTorch
referência: AdaBelief Optimizer, adaptando tamanhos de passo pela crença nos gradientes observados, NeurIPS 2020
Para uma tabela completa de hiperparâmetros recomendados, consulte https://github.com/juntang-zhuang/Adabelief-Optimizer’ Por exemplo, para os argumentos de treinamento do EfficientNet, consulte estes gists
- link para train_script: https://gist.github.com/juntang-zhuang/0a501dd51c02278d952cf159bc233037
- link para args.yaml: https://gist.github.com/juntang-zhuang/517ce3c27022b908bb93f78e4f786dc3
etapa
< source >( closure = None )
Executa um único passo de otimização.
classe 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 )
Implementa o algoritmo Adafactor.
Esta implementação é baseada em: Adafactor: Adaptive Learning Rates with Sublinear Memory Cost (veja https://arxiv.org/abs/1804.04235)
Observe que este otimizador ajusta internamente a taxa de aprendizado com base nas opções scale_parameter, relative_step e warmup_init.
Um agendamento manual (externo) de taxa de aprendizado é usado quando lr é definido (relative_step passa a ser False).
Observe que, nesta implementação, scale_parameter e warmup_init se aplicam apenas à taxa de aprendizado de passo relativo (lr=None), diferentemente do fairseq / HF Transformers, a escalação RMS do parâmetro não é aplicada a uma taxa de aprendizado externa.
Ags: params: iterável de parâmetros a serem otimizados ou dicionários definindo grupos de parâmetros lr: taxa de aprendizado externa eps: constantes de regularização para o gradiente quadrático e a escala do parâmetro, respectivamente eps_scale: constantes de regularização para a escala do parâmetro, respectivamente clip_threshold: limiar da raiz quadrada da média quadrática da atualização final do gradiente decay_rate: coeficiente usado para calcular as médias móveis do gradiente quadrático beta1: coeficiente usado para calcular as médias móveis do gradiente weight_decay: decaimento de peso scale_parameter: se True, a taxa de aprendizado do passo relativo é escalada pela raiz quadrada da média quadrática do parâmetro warmup_init: o cálculo da taxa de aprendizado dependente do tempo depende de se a inicialização de aquecimento está sendo usada
etapa
< source >( closure = None )
Executa um único passo de otimização.
classe 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 )
Implementação em PyTorch da variante Adafactor do BigVision, com implementações de tensor único e múltiplos tensores.
Adaptado de https://github.com/google-research/big_vision por Ross Wightman
classe 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 )
Parâmetros
- params (iterável) — iterável de parâmetros a serem otimizados ou dicionários definindo grupos de parâmetros
- lr (float, opcional) — taxa de aprendizado (padrão: 0.1)
- betas ((float, float), opcional) — coeficientes usados para calcular as médias móveis do gradiente e do traço do hessiano ao quadrado (padrão: (0.9, 0.999))
- eps (float, opcional) — termo adicionado ao denominador para melhorar a estabilidade numérica (padrão: 1e-8)
- weight_decay (float, opcional) — decaimento de peso (penalidade L2) (padrão: 0.0)
- hessian_power (float, opcional) — expoente do traço da hessiana (padrão: 1.0)
- update_each (int, opcional) — calcula a aproximação do traço da hessiana apenas a cada este número de passos (para economizar tempo) (padrão: 1)
- n_samples (int, opcional) — quantas vezes amostrar
zpara a aproximação do traço da hessiana (padrão: 1)
Implementa o algoritmo AdaHessian de “ADAHESSIAN: Um Otimizador de Segunda Ordem Adaptativo para Aprendizado de Máquina”
Obtém todos os parâmetros em todos os param_groups com gradientes
Calcula a aproximação de Hutchinson do traço da hessiana e a acumula para cada parâmetro treinável.
etapa
< source >( closure = None )
Executa um único passo de otimização.
Zera os traços da hessiana acumulada.
classe timm.optim.AdamP
< source >( paramslr = 0.001betas = (0.9, 0.999)eps = 1e-08weight_decay = 0delta = 0.1wd_ratio = 0.1nesterov = Falsecaution = False )
classe 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 )
Parâmetros
- params — iterável de parâmetros a serem otimizados ou dicionários definindo grupos de parâmetros
- lr — taxa de aprendizado
- betas — coeficientes usados para calcular as médias móveis do gradiente e do seu quadrado
- eps — termo adicionado ao denominador para melhorar a estabilidade numérica
- weight_decay — coeficiente de decaimento de peso
- amsgrad — se deve usar a variante AMSGrad deste algoritmo
do artigo
On the Convergence of Adam and Beyond - caution — tenha cautela ao usar AdamW
- corrected_weight_decay — aplicar decaimento de peso corrigido (lr**2 / max_lr)
- maximize — maximiza os parâmetros com base no objetivo, em vez de minimizá-los
- foreach — se a implementação foreach do otimizador é utilizada. Se não for especificado pelo usuário (ou seja, se foreach for None), tentaremos usar foreach em vez da implementação com laço for na CUDA, pois é mais rápida em geral.
- capturable — se esta instância é segura para ser capturada em um gráfico CUDA. Passar True pode prejudicar o desempenho sem gráfico, então, se você não pretende capturar esta instância em um gráfico, deixe como False
- clipping_threshold — limiar de clipping para a atualização RMS (StableAdamW, https://arxiv.org/abs/2304.13013), a atualização é escalada por 1 / max(1, rms / clipping_threshold), onde rms é o RMS de grad / (sqrt(v_hat) + eps). Atenua a atualização de parâmetros com um aumento súbito do gradiente em relação à sua estimativa de segundo momento. 1.0, conforme o artigo; None (padrão) desativa. Assim como no Adafactor, o weight decay desacoplado não é clipado (o StableAdamW também escala o decay pelo lr clipado).
Implementa o algoritmo AdamW.
OBSERVAÇÃO: Esta implementação foi descontinuada em favor de torch.optim.AdamW e permanece como referência
Referências:
- Adam: A Method for Stochastic Optimization: https://arxiv.org/abs/1412.6980
- Regularização de decaimento de peso desacoplado: https://arxiv.org/abs/1711.05101
- Sobre a convergência do Adam e além: https://openreview.net/forum?id=ryQu7f-RZ
etapa
< source >( closure = None )
Executa um único passo de otimização.
classe 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 )
Parâmetros
- params — Iterável de parâmetros a serem otimizados ou dicionários definindo grupos de parâmetros.
- lr — Taxa de aprendizado.
- betas — Coeficientes usados para os momentos de primeira e segunda ordem.
- eps — Termo adicionado ao denominador para melhorar a estabilidade numérica.
- weight_decay — Decaimento de peso desacoplado (penalidade L2)
- no_prox — Como executar o decaimento de peso
- caution — Ative a cautela de ‘Cautious Optimizers’
- foreach — Se True, usará a implementação torch._foreach. Mais rápido, mas usa um pouco mais de memória.
Implementa uma variante do Adan em pytorch.
Adan foi proposto em Adan: Adaptive Nesterov Momentum Algorithm for Faster Optimizing Deep Models https://arxiv.org/abs/2208.06677
Executa um único passo de otimização.
classe 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 Modificado Pode Convergir com Qualquer β2 com a Taxa Ótima: https://arxiv.org/abs/2411.02853
etapa
< source >( closure = None )
Execute um único passo de otimização.
classe 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 )
Parâmetros
- params — Iterável de parâmetros a serem otimizados ou dicionários definindo grupos de parâmetros.
- lr — Taxa de aprendizado.
- momentum — Parâmetro de impulso.
- weight_decay — Decaimento de peso.
- preconditioner_update_probability — Probabilidade de atualização do pré-condicionador. Se for None, o padrão é um agendamento que faz o resfriamento de 1.0 para 0.03 em 4000 passos.
- max_size_triangular — Tamanho máximo para o pré-condicionador de dim ser triangular.
- min_ndim_triangular — Número mínimo de dimensões que uma camada precisa ter para usar pré-condicionadores triangulares.
- memory_save_mode — ‘one_diag’, ‘smart_one_diag’ ou ‘all_diag’, o padrão é None para definir todos os pré-condicionadores como triangulares, ‘one_diag’ define a maior ou última dimensão como diagonal por camada, e ‘all_diag’ define todos os pré-condicionadores como diagonais.
- momentum_into_precond_update — se deve enviar o momentum para a atualização do pré-condicionador em vez dos gradientes brutos.
- mu_dtype — Dtype do acumulador de momento.
- precond_dtype — Dtype do pré-condicionador.
- decoupled_decay — decaimento de peso desacoplado no estilo AdamW
- corrected_weight_decay — aplicar o decaimento de peso corrigido ao usar decoupled_decay (lr**2 / max_lr)
- flatten — Achata as dimensões em vez de depender totalmente de expressões para parâmetros de rank superior
- flatten_start_dim — Início do intervalo de achatamento, padrão é 2. Parece ser um bom compromisso para redes convolucionais.
- flatten_end_dim — Fim do intervalo de achatamento, padrão -1.
- stochastic_weight_decay — Ativa a modulação aleatória do decaimento de peso
- deterministic — Comportamento determinístico entre salvar / carregar (retomar). FIXME lento, precisa de trabalho
Implementa o PSGD Kron de https://github.com/lixilinx/psgd_torch.
classe 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 )
Parâmetros
- params — Iterável de parâmetros a serem otimizados ou dicionários definindo grupos de parâmetros.
- lr — Taxa de aprendizado
- betas — Coeficientes usados para calcular as médias móveis do gradiente e sua norma.
- eps — Termo adicionado ao denominador para melhorar a estabilidade numérica.
- weight_decay — Decaimento de peso
- grad_averaging — Se aplica (1-beta2) ao grad ao calcular as médias móveis do gradiente.
- max_grad_norm — Valor usado para limitar a norma global do gradiente.
- trust_clip — Ativa o recorte da razão de confiança do LAMBC.
- always_adapt — Aplique a taxa de aprendizado adaptativa ao parâmetro de decaimento de peso 0.0.
- caution — Aplique cautela.
- decoupled — aplicar decaimento de peso desacoplado
- corrected_weight_decay — aplica o decaimento de peso corrigido (lr**2 / max_lr) ao usar decoupled_decay
- foreach — use a implementação foreach (multi-tensor), usada por padrão (None) a menos que não seja suportada
Implementa uma variante pura em PyTorch do otimizador FuseLAMB (variante NvLamb) de apex.optimizers.FusedLAMB referência: https://github.com/NVIDIA/DeepLearningExamples/blob/master/PyTorch/LanguageModeling/Transformer-XL/pytorch/lamb.py
O LAMB foi proposto em:
- Otimização de Lote Grande para Aprendizado Profundo - Treinando BERT em 76 minutos: https://arxiv.org/abs/1904.00962
- Sobre a convergência do Adam e além: https://openreview.net/forum?id=ryQu7f-RZ
etapa
< source >( closure = None )
Executa um único passo de otimização.
classe 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 )
Otimizador LaProp
Artigo: LaProp: Separating Momentum and Adaptivity in Adam, https://arxiv.org/abs/2002.04839
etapa
< source >( closure = None )
Executa um único passo de otimização.
classe 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 )
Parâmetros
- params (iterável) — iterável de parâmetros a serem otimizados ou dicionários definindo grupos de parâmetros.
- lr (float, opcional) — taxa de aprendizado (padrão: 1.0).
- momentum (float, opcional) — fator de momentum (padrão: 0)
- weight_decay (float, opcional) — decaimento de peso (penalidade L2) (padrão: 0)
- dampening (float, opcional) — amortecimento para o momentum (padrão: 0)
- nesterov (bool, opcional) — habilita o momento de Nesterov (padrão: False)
- trust_coeff (float) — coeficiente de confiança para o cálculo do lr adaptativo / trust_ratio (padrão: 0.001)
- eps (float) — eps para o denominador da divisão (padrão: 1e-8)
- trust_clip (bool) — habilita o recorte da razão de confiança do LARC (padrão: False)
- always_adapt (bool) — sempre aplicar a adaptação de LR do LARS, caso contrário, apenas quando group weight_decay != 0 (padrão: False)
- foreach (bool, opcional) — usa a implementação foreach (multi-tensor), por padrão (None) é usado, a menos que não seja suportado
LARS para PyTorch
Artigo: Large batch training of Convolutional Networks - https://arxiv.org/pdf/1708.03888.pdf
etapa
< source >( closure = None )
Executa um único passo de otimização.
classe 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 )
Implementa o algoritmo Lion.
etapa
< source >( closure = None )
Executa um único passo de otimização.
classe timm.optim.MADGRAD
< source >( params: typing.Anylr: float = 0.01momentum: float = 0.9weight_decay: float = 0eps: float = 1e-06decoupled_decay: bool = False )
Parâmetros
- params (iterável) — Iterável de parâmetros a serem otimizados ou dicionários definindo grupos de parâmetros.
- lr (float) — Taxa de aprendizado (padrão: 1e-2).
- momentum (float) — Valor do momentum no intervalo [0,1) (padrão: 0.9).
- weight_decay (float) — Decaimento de peso, ou seja, uma penalidade L2 (padrão: 0).
- eps (float) — Termo adicionado ao denominador, fora da operação de raiz, para melhorar a estabilidade numérica. (padrão: 1e-6).
MADGRAD_: Um Método de Gradiente com Momento, Adaptativo e Média Dual para Otimização Estocástica.
.. _MADGRAD: https://arxiv.org/abs/2101.11075
MADGRAD é um otimizador de uso geral que pode ser usado no lugar de SGD ou Adam e pode convergir mais rápido e generalizar melhor. Atualmente, apenas para GPU. Normalmente, a mesma agenda de taxa de aprendizado usada para SGD ou Adam pode ser usada. A taxa de aprendizado geral não é comparável a nenhum dos dois métodos e deve ser determinada por uma varredura de hiperparâmetros.
MADGRAD requer menos decaimento de peso do que outros métodos, muitas vezes tão pouco quanto zero. Os valores de momento usados para SGD ou beta1 do Adam devem funcionar aqui também.
Em problemas esparsos, tanto weight_decay quanto momentum devem ser definidos como 0.
etapa
< source >( closure: typing.Optional[typing.Callable[[], float]] = None )
Executa um único passo de otimização.
classe 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 )
Otimizador MARS
Artigo: MARS: Liberando o poder da redução de variância para treinar grandes modelos https://arxiv.org/abs/2411.10438
etapa
< source >( closure = None )
Executa um único passo de otimização.
classe 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 Ortogonalizado por Newton-schulz
Combina Muon para parâmetros 2D+ (matrizes de pesos) com AdamW para parâmetros 1D (viés, normalizações) e grupos de parâmetros com ‘use_fallback=True’ definido (ou ‘use_muon=False’ para compatibilidade).
Suporta dois algoritmos:
- “muon”: Algoritmo Muon padrão com momentum + ortogonalização
- “adamuon”: algoritmo AdaMuon que adiciona estimativa de segundo momento elemento a elemento às direções ortogonalizadas para escalonamento adaptativo semelhante ao do Adam
Executa um único passo de otimização.
classe timm.optim.NAdamLegacy
< source >( paramslr = 0.002betas = (0.9, 0.999)eps = 1e-08weight_decay = 0schedule_decay = 0.004 )
Parâmetros
- params (iterável) — iterável de parâmetros a serem otimizados ou dicionários definindo grupos de parâmetros
- lr (float, opcional) — taxa de aprendizado (padrão: 2e-3)
- betas (Tuple[float, float], opcional) — coeficientes usados para calcular as médias móveis do gradiente e do seu quadrado
- eps (float, opcional) — termo adicionado ao denominador para melhorar a estabilidade numérica (padrão: 1e-8)
- weight_decay (float, opcional) — decaimento de peso (penalidade L2) (padrão: 0)
- schedule_decay (float, opcional) — decaimento do agendamento de momentum (padrão: 4e-3)
Implementa o algoritmo Nadam (uma variante do Adam baseada no momento de Nesterov).
OBSERVAÇÃO: Esta implementação foi descontinuada em favor de torch.optim.NAdam e permanece como referência
Foi proposto em Incorporating Nesterov Momentum into Adam__.
http://cs229.stanford.edu/proj2015/054_report.pdf http://www.cs.toronto.edu/~fritz/absps/momentum.pdf
Originalmente obtido de: https://github.com/pytorch/pytorch/pull/1408 OBSERVAÇÃO: Pode ter problemas potenciais, mas funciona bem em alguns problemas.
etapa
< source >( closure = None )
Executa um único passo de otimização.
classe 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 )
Parâmetros
- params — iterável de parâmetros a serem otimizados ou dicionários definindo grupos de parâmetros
- lr — taxa de aprendizado
- betas — coeficientes usados para calcular as médias móveis do gradiente e do seu quadrado
- eps — termo adicionado ao denominador para melhorar a estabilidade numérica
- weight_decay — coeficiente de decaimento de peso
- caution — ative a cautela
- corrected_weight_decay — aplicar decaimento de peso corrigido (lr**2 / max_lr)
- maximize — maximiza os parâmetros com base no objetivo, em vez de minimizá-los
- foreach — se a implementação foreach do otimizador é usada. Se não especificado (None), a implementação foreach é usada em CUDA (dispositivos com kernels foreach), pois é mais rápida em geral.
- capturable — se esta instância é segura para ser capturada em um gráfico CUDA
- clipping_threshold — limiar de clipping para a atualização RMS (StableAdamW, https://arxiv.org/abs/2304.13013), a atualização é escalada por 1 / max(1, rms / clipping_threshold), onde rms é o RMS de grad / (sqrt(v_hat) + eps). Atenua a atualização de parâmetros com um aumento súbito do gradiente em relação à sua estimativa de segundo momento. 1.0, conforme o artigo; None (padrão) desativa. Assim como no Adafactor, o weight decay desacoplado não é clipado (o StableAdamW também escala o decay pelo lr clipado).
Implementa o algoritmo NAdamW.
Veja a Tabela 1 em https://arxiv.org/abs/1910.05446 para a implementação do algoritmo NAdam (há também um comentário no código que destaca a única diferença entre NAdamW e AdamW).
Para mais detalhes sobre o algoritmo, remetemos a
- Regularização de decaimento de peso desacoplado: https://arxiv.org/abs/1711.05101
- Sobre a convergência do Adam e além: https://openreview.net/forum?id=ryQu7f-RZ
etapa
< source >( closure = None )
Executa um único passo de otimização.
classe timm.optim.NvNovoGrad
< source >( paramslr = 0.001betas = (0.95, 0.98)eps = 1e-08weight_decay = 0grad_averaging = Falseamsgrad = Falsedecoupled_decay = Falsecorrected_weight_decay = False )
Parâmetros
- params (iterável) — iterável de parâmetros a serem otimizados ou dicionários definindo grupos de parâmetros
- lr (float, opcional) — taxa de aprendizado (padrão: 1e-3)
- betas (Tuple[float, float], opcional) — coeficientes usados para calcular as médias móveis do gradiente e seu quadrado (padrão: (0.95, 0.98))
- eps (float, opcional) — termo adicionado ao denominador para melhorar a estabilidade numérica (padrão: 1e-8)
- weight_decay (float, opcional) — decaimento de peso (penalidade L2) (padrão: 0)
- grad_averaging — média de gradientes
- amsgrad (boolean, opcional) — se deve usar a variante AMSGrad deste
algoritmo do artigo
On the Convergence of Adam and Beyond_ (padrão: False) - decoupled_decay — aplica o decaimento de peso diretamente aos pesos (lr * weight_decay por passo) em vez de adicioná-lo ao gradiente normalizado antes da atualização do momento (conforme o artigo)
- corrected_weight_decay — aplica o decaimento de peso corrigido (lr**2 / max_lr) quando decoupled_decay é True
Implementa o algoritmo Novograd.
etapa
< source >( closure = None )
Executa um único passo de otimização.
classe timm.optim.RAdamLegacy
< source >( paramslr = 0.001betas = (0.9, 0.999)eps = 1e-08weight_decay = 0 )
Otimizador RAdam do PyTorch
OBSERVAÇÃO: Esta implementação foi descontinuada em favor de torch.optim.AdamW e permanece como referência
classe 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 )
Parâmetros
- params — iterável de parâmetros a serem otimizados ou dicionários definindo grupos de parâmetros
- lr — taxa de aprendizado
- momentum — fator de momentum
- alpha — constante de suavização (decaimento)
- eps — termo adicionado ao denominador para melhorar a estabilidade numérica
- centered — se
True, calcula o RMSProp centralizado, a gradiente é normalizada por uma estimativa de sua variância - weight_decay — decaimento de peso (penalidade L2) (padrão: 0)
- decoupled_decay — decaimento de peso desacoplado conforme https://arxiv.org/abs/1711.05101
- corrected_weight_decay — aplica o decaimento de peso corrigido (lr**2 / max_lr) quando decoupled_decay é True
- lr_in_momentum — a escala da taxa de aprendizado está incluída na atualização do buffer de momentum, conforme os padrões do Tensorflow
- caution — aplicar cautela
- foreach — use a implementação foreach (multi-tensor), usada por padrão (None) a menos que não seja suportada (veja rmsprop_tf())
Implementa o algoritmo RMSprop (epsilon no estilo TensorFlow)
OBSERVAÇÃO: Este é um recorte direto do RMSprop do PyTorch com eps aplicado antes da raiz quadrada e algumas outras modificações para corresponder mais de perto ao Tensorflow, de modo a alinhar os hiperparâmetros.
As alterações notáveis incluem:
- Epsilon aplicado dentro da raiz quadrada
- square_avg inicializado com uns
- Escalação de LR da atualização acumulada no buffer de momentum
Proposto por G. Hinton em seu curso.
A versão centralizada aparece pela primeira vez em Generating Sequences With Recurrent Neural Networks.
etapa
< source >( closure = None )
Executa um único passo de otimização.
classe timm.optim.SGDP
< source >( paramslr = torch.optim.optimizer.requiredmomentum = 0dampening = 0weight_decay = 0nesterov = Falseeps = 1e-08delta = 0.1wd_ratio = 0.1caution = False )
classe 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 )
etapa
< source >( closure = None )
Executa um único passo de otimização.