Weight Decay
O decaimento de pesos é uma técnica de regularização que aproxima os pesos do modelo de zero, ajudando as redes neurais a reduzir o sobreajuste e a generalizar para novos dados.
O decaimento de pesos é uma técnica de regularização que aproxima os pesos aprendidos por um modelo de zero durante o treinamento. Essa redução repetida desestimula valores de parâmetros desnecessariamente grandes e ajuda uma rede neural a generalizar para exemplos não vistos. É especialmente útil quando um modelo tem capacidade suficiente para memorizar ruído nos dados de treinamento.
Geoffrey Hinton introduziu o decaimento de pesos em seu artigo de 1986 Learning Distributed Representations of Concepts. No experimento da árvore genealógica, ele reduziu a magnitude dos pesos em 0,2% após cada atualização para facilitar a interpretação das conexões aprendidas. Posteriormente, o decaimento de pesos passou a ser amplamente usado para controlar o sobreajuste.
Como funciona o decaimento de pesos#
Durante a descida do gradiente, o otimizador altera os parâmetros usando gradientes: derivadas que descrevem como cada parâmetro afeta a função de perda. O decaimento de pesos adiciona uma força que aproxima os pesos de zero. Na convenção escalada pela taxa de aprendizagem, usada por muitos otimizadores, uma atualização simples de SGD sem momento é new weight = (1 - learning rate × decay) × old weight - learning rate × gradient. Isso combina o aprendizado com base nos erros de previsão com uma redução proporcional.
O coeficiente de decaimento controla a intensidade dessa força. O valor zero a desativa; valores positivos maiores aumentam a redução quando a taxa de aprendizagem é fixa. O gradiente da tarefa ainda pode aumentar um peso quando isso melhora as previsões. O decaimento da taxa de aprendizagem reduz progressivamente o tamanho do passo do otimizador; o decaimento de pesos atua sobre os valores dos parâmetros.
Decaimento de pesos vs. regularização L2#
A regularização L2 adiciona à função objetivo de treinamento uma soma escalada dos quadrados dos pesos. Com a descida estocástica do gradiente simples, derivar essa penalização produz a mesma redução proporcional, com coeficientes devidamente ajustados. Em regressão linear, o ajuste com essa penalização dos pesos ao quadrado é chamado de regressão ridge.
Com o otimizador Adam, adicionar uma penalização L2 faz com que o gradiente da penalização passe pelas médias móveis e pela escala específica de cada parâmetro do Adam. Já o AdamW aplica a redução separadamente desse cálculo adaptativo do gradiente. Ilya Loshchilov e Frank Hutter introduziram o AdamW em seu artigo de 2017 Decoupled Weight Decay Regularization, publicado na ICLR 2019. Essa separação torna a intensidade do decaimento independente da escala baseada no histórico de gradientes do Adam.
Como escolher a intensidade do decaimento#
O decaimento de pesos é um hiperparâmetro, selecionado usando dados de validação. Um valor muito baixo não limita suficientemente o sobreajuste. Um decaimento excessivo causa subajuste: o modelo não consegue ajustar padrões úteis, o que resulta em erros elevados nos exemplos de treinamento e validação. Comparar as pontuações de validação para diferentes valores de decaimento revela a intensidade adequada para um determinado modelo e conjunto de dados.
O efeito acumulado também depende do cronograma da taxa de aprendizagem e do número de atualizações do otimizador. Alterar o tamanho do lote ou as épocas de treinamento pode mudar o número de aplicações do decaimento; a acumulação de gradientes combina vários lotes antes de uma atualização. Uma camada de dropout regulariza zerando ativações aleatoriamente, enquanto a parada antecipada limita a duração do treinamento.
O Ultralytics YOLO disponibiliza uma configuração de treinamento weight_decay, com valor padrão de 0,0005, para controlar a regularização durante o treinamento de modelos como o YOLO26. Seus grupos de parâmetros do otimizador excluem os vieses e os parâmetros das camadas de normalização do decaimento de pesos.
Decaimento de pesos no PyTorch#
O otimizador torch.optim.AdamW oferece decaimento de pesos desacoplado no PyTorch. Instala o pacote com pip install torch; este exemplo cria um gradiente da tarefa igual a zero para que a atualização impressa isole o decaimento de pesos:
import torch
weight = torch.nn.Parameter(torch.tensor([2.0]))
optimizer = torch.optim.AdamW([weight], lr=0.1, weight_decay=0.1)
before = weight.item()
# Create a zero gradient while keeping the parameter in the computation.
optimizer.zero_grad()
loss = (weight * 0).sum()
loss.backward()
optimizer.step()
print(f"Weight: {before:.2f} -> {weight.item():.2f}")A saída é Weight: 2.00 -> 1.98: uma atualização multiplica o peso por 1 - 0.1 × 0.1, ou seja, por 0,99, reduzindo sua magnitude em 1%.










