Dropout Layer
Un livello di dropout azzera casualmente una parte delle attivazioni durante l'addestramento, impedendo alla rete di fare affidamento su una singola unità e riducendo così l'overfitting.
Un livello di dropout è un componente di regolarizzazione di una rete neurale che imposta casualmente a zero una frazione p dei suoi input a ogni passaggio di addestramento e lascia passare tutti i valori invariati durante l'inferenza. Poiché qualsiasi unità può scomparire in qualsiasi passaggio, la rete non può dipendere da pochi neuroni specifici o da coadattamenti fragili tra loro; impara quindi caratteristiche ridondanti che generalizzano meglio e riducono l'overfitting sui dati di addestramento. Geoffrey Hinton e colleghi hanno introdotto la tecnica nel 2012 e Srivastava, Hinton et al. l'hanno descritta in dettaglio nel 2014. È un livello integrato in PyTorch, TensorFlow e nella maggior parte degli altri framework di deep learning, usato in architetture che vanno dalle teste di classificazione completamente connesse ai Transformer.
Come funziona il dropout#
Durante l'addestramento, il livello campiona una nuova maschera casuale a ogni passaggio in avanti, mantenendo ciascun elemento con probabilità 1 − p e azzerandolo con probabilità p. Ogni passaggio addestra quindi una sottorete ridotta diversa, mentre la rete completa usata in fase di test approssima la media su un numero esponenzialmente elevato di sottoreti che condividono i suoi pesi; per questo il dropout viene spesso descritto come una forma economica di addestramento con ensemble. Per mantenere invariata l'attivazione attesa nelle due fasi, i framework moderni usano il dropout invertito: durante l'addestramento, i valori mantenuti vengono moltiplicati per 1 / (1 − p), così il livello non esegue alcuna operazione in inferenza. In PyTorch, nn.Dropout segue la modalità di addestramento o valutazione del modulo:
import torch
from torch import nn
torch.manual_seed(0)
dropout = nn.Dropout(p=0.5)
x = torch.ones(10)
# Modalità di addestramento: circa la metà dei valori viene azzerata e quelli rimanenti vengono moltiplicati per 1 / (1 - p) = 2
dropout.train()
print("Train:", dropout(x))
# Modalità di valutazione: il livello lascia passare tutti i valori invariati
dropout.eval()
print("Eval: ", dropout(x))In modalità di addestramento vengono eliminati sei dei dieci valori e i quattro rimanenti diventano 2.0, mantenendo il valore atteso a 1.0; in modalità di valutazione tutti e dieci i valori restano a 1.0.
Varianti comuni del dropout#
- Dropout spaziale:
nn.Dropout2ddi PyTorch azzera interi canali delle mappe di caratteristiche; è adatto alle reti convoluzionali perché i pixel vicini all'interno di un canale sono fortemente correlati e l'eliminazione di singoli pixel li regolarizza appena. - Profondità stocastica (DropPath): invece delle singole attivazioni, vengono saltati casualmente interi rami residui per ogni campione; è un componente standard nell'addestramento dei Vision Transformer e delle CNN moderne.
- Dropout Monte Carlo: Il dropout rimane attivo durante l'inferenza e il modello esegue più passaggi in avanti sullo stesso input. La dispersione delle previsioni fornisce una stima del livello di incertezza del modello a basso costo, utile per i sistemi critici per la sicurezza; Gal e Ghahramani hanno interpretato il metodo come un'approssimazione dell'inferenza bayesiana.
- DropConnect: vengono azzerati singoli pesi casuali invece delle attivazioni, assegnando a ogni connessione la propria maschera.
Il dropout nella pratica#
I tassi di dropout si regolano come qualsiasi altro iperparametro. Srivastava et al. hanno osservato che eliminare unità nascoste con probabilità 0.5 funzionava bene per un'ampia gamma di reti e attività, mentre per le unità di input è preferibile una probabilità di mantenimento più vicina a 1; il Transformer originale usava p = 0.1. Un tasso troppo alto rallenta la convergenza e può causare underfitting, mentre applicare il dropout subito prima della batch normalization può ridurre l'accuratezza a causa di uno spostamento della varianza tra addestramento e test. Molte reti neurali convoluzionali si affidano soprattutto a batch normalization, data augmentation e weight decay, riservando il dropout alla testa di classificazione. I modelli di classificazione di Ultralytics YOLO26 seguono questo schema: contengono un livello di dropout tra le caratteristiche sottoposte a pooling a 1,280 canali e il classificatore lineare finale; il relativo tasso viene impostato dall'argomento di addestramento dropout (0.0 per impostazione predefinita).
from ultralytics import YOLO
# Carica un modello di classificazione YOLO26, la cui testa contiene il livello di dropout
model = YOLO("yolo26n-cls.pt")
# Esegui l'addestramento con dropout del 10% nella testa di classificazione su un piccolo sottoinsieme di MNIST
results = model.train(data="mnist160", epochs=10, imgsz=64, dropout=0.1)Applicazioni nel mondo reale#
- Analisi di immagini mediche: Le scansioni annotate sono costose, quindi spesso i classificatori diagnostici vengono sottoposti a fine-tuning partendo da un backbone preaddestrato e usando alcune migliaia di immagini. Il dropout nella testa di classificazione limita la quantità di informazioni sui singoli casi che la testa può memorizzare a partire da un insieme così piccolo.
- Elaborazione del linguaggio naturale: Durante il preaddestramento e il fine-tuning, gli encoder Transformer come BERT applicano il dropout con probabilità 0.1 a tutti i livelli, inclusi i pesi dell'attenzione.
Il dropout a confronto con le tecniche correlate#
- Batch normalization: La batch normalization standardizza gli input di ogni livello per stabilizzare l'addestramento e aggiunge solo un lieve rumore dovuto alle statistiche del batch, senza rimuovere alcuna unità.
- Label smoothing: Il label smoothing regolarizza tramite i target di addestramento, attenuando le etichette one-hot, e lascia intatte tutte le attivazioni.
- Pruning: Il pruning rimuove in modo permanente i pesi meno importanti per ridurre le dimensioni del modello, mentre l'azzeramento del dropout dura un solo passaggio di addestramento e lascia invariato il numero di parametri.










