Weight Decay
Il weight decay è una tecnica di regolarizzazione che riduce i pesi del modello avvicinandoli allo zero, aiutando le reti neurali a ridurre l’overfitting e a generalizzare a nuovi dati.
Il weight decay è una tecnica di regolarizzazione che spinge i pesi appresi di un modello verso lo zero durante l’addestramento. Questa riduzione ripetuta scoraggia valori dei parametri inutilmente elevati e aiuta una rete neurale a generalizzare a esempi mai visti. È particolarmente utile quando un modello ha capacità sufficiente per memorizzare il rumore nei dati di addestramento.
Geoffrey Hinton introdusse il weight decay nel suo articolo del 1986 Learning Distributed Representations of Concepts. Nell’esperimento dell’albero genealogico, ridusse i valori assoluti dei pesi dello 0,2% dopo ogni aggiornamento per rendere più facili da interpretare le connessioni apprese. In seguito, il weight decay è stato ampiamente utilizzato per controllare l’overfitting.
Come funziona il weight decay#
Durante la discesa del gradiente, l’ottimizzatore modifica i parametri usando i gradienti: derivate che descrivono come ogni parametro influisce sulla funzione di perdita. Il weight decay aggiunge una spinta verso lo zero. Nella convenzione usata da molti ottimizzatori, in cui il decadimento è scalato in base al tasso di apprendimento, un aggiornamento SGD semplice senza momentum è new weight = (1 - learning rate × decay) × old weight - learning rate × gradient. Questo combina l’apprendimento dagli errori di previsione con una riduzione proporzionale.
Il coefficiente di decadimento controlla l’intensità di questa spinta. Il valore zero la disattiva; valori positivi più elevati aumentano la riduzione a tasso di apprendimento costante. Il gradiente del task può comunque aumentare un peso quando ciò migliora le previsioni. Il decadimento del tasso di apprendimento riduce progressivamente la dimensione del passo dell’ottimizzatore; il weight decay agisce sui valori dei parametri.
Weight decay e regolarizzazione L2#
La regolarizzazione L2 aggiunge all’obiettivo di addestramento una somma scalata dei quadrati dei pesi. Con la semplice discesa del gradiente stocastica, la derivazione di questa penalità produce la stessa riduzione proporzionale, con coefficienti opportunamente abbinati. Nella regressione lineare, l’adattamento con questa penalità sui quadrati dei pesi è chiamato regressione ridge.
Con l’ottimizzatore Adam, aggiungere una penalità L2 fa sì che il gradiente della penalità passi attraverso le medie mobili e la scalatura specifica dei parametri di Adam. AdamW applica invece la riduzione separatamente dal calcolo del gradiente adattivo. Ilya Loshchilov e Frank Hutter introdussero AdamW nel loro articolo del 2017 Decoupled Weight Decay Regularization, pubblicato a ICLR 2019. Questa separazione rende l’intensità del decadimento indipendente dalla scalatura basata sulla cronologia dei gradienti di Adam.
Scelta dell’intensità del decadimento#
Il weight decay è un iperparametro, selezionato usando i dati di validazione. Un valore troppo basso non limita abbastanza l’overfitting. Un decadimento eccessivo causa underfitting: il modello non riesce ad adattarsi ai pattern utili, producendo errori elevati sugli esempi di addestramento e di validazione. Il confronto dei punteggi di validazione tra diverse impostazioni di decadimento permette di individuare l’intensità più efficace per uno specifico modello e dataset.
L’effetto cumulativo dipende anche dalla pianificazione del tasso di apprendimento e dal numero di aggiornamenti dell’ottimizzatore. Modificare la dimensione del batch o le epoche di addestramento può cambiare il numero di applicazioni del decadimento; l’accumulo dei gradienti combina più batch prima di un aggiornamento. Un livello di dropout regolarizza azzerando casualmente le attivazioni, mentre l’arresto anticipato limita la durata dell’addestramento.
Ultralytics YOLO espone un’impostazione di addestramento weight_decay, con valore predefinito 0.0005, per controllare la regolarizzazione durante l’addestramento di modelli come YOLO26. I gruppi di parametri dell’ottimizzatore escludono i bias e i parametri dei livelli di normalizzazione dal weight decay.
Weight decay in PyTorch#
L’ottimizzatore torch.optim.AdamW fornisce il weight decay disaccoppiato in PyTorch. Installa il pacchetto con pip install torch; questo esempio crea un gradiente del task nullo, così l’aggiornamento stampato mostra isolatamente il weight decay:
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}")L’output è Weight: 2.00 -> 1.98: un aggiornamento moltiplica il peso per 1 - 0.1 × 0.1, ovvero 0.99, riducendone il valore assoluto dell’1%.










