La batch normalization normalizza le attivazioni di ogni feature usando statistiche calcolate sul batch corrente. Per ogni feature, sottrae la media del batch, divide per la deviazione standard del batch, riscala con parametri imparati.
Inventata da Ioffe e Szegedy nel 2015, ha sbloccato il training di CNN profonde. Da lì in poi è apparsa ovunque, soprattutto in computer vision.
Vantaggi:
- Accelera il training: anche di 2x-10x.
- Permette learning rate più alti.
- Effetto regolarizzante: il rumore stocastico del batch funziona come regolarizzazione leggera.
- Riduce il bisogno di inizializzazione precisa.
Problemi seri:
- Dipende dal batch: con batch piccoli (1-4 esempi), le statistiche sono rumorose, batch norm impazzisce.
- Treno vs inferenza: in training usa statistiche del batch, in inferenza usa medie correnti accumulate. Mismatch frequenti.
- Pessima per RNN/Transformer: la normalizzazione attraverso il batch non ha senso per dati sequenziali di lunghezza variabile.
Per questo nei Transformer si usa layer normalization. Nelle CNN classiche (ResNet, EfficientNet) batch norm è ancora dominante.
Varianti per evitare i problemi: GroupNorm (gruppi di canali), InstanceNorm (per generazione immagini), SyncBatchNorm (sincronizza statistiche tra GPU).