La layer normalization normalizza le attivazioni dentro un singolo esempio, attraverso le feature di un layer. Sottrae la media, divide per la deviazione standard, riscala con parametri imparati.
A differenza della batch normalization (che normalizza attraverso il batch), la layer norm lavora indipendente per esempio. Vantaggio: funziona anche con batch di dimensione 1, e funziona benissimo per Transformer e RNN, dove la batch norm fa schifo.
Perché è cruciale nei Transformer:
- Stabilizza il training: senza layer norm, i Transformer profondi divergono spesso.
- Permette layer profondi: combinata con residual connection, ti dà reti da 100+ strati che funzionano.
- Permette learning rate più alto: training più rapido.
Posizionamento: nei Transformer originali (post-norm) la layer norm sta DOPO la sottosezione (attention o feed-forward) e il residual. Nei modelli moderni (Llama, GPT-3+) si usa pre-norm: layer norm PRIMA della sottosezione. Pre-norm è più stabile.
Varianti:
- RMSNorm: variante semplificata, divide solo per la radice della media dei quadrati. Usata in Llama 2/3, Mistral. Più veloce, qualità simile.
- GroupNorm: normalizza per gruppi di feature. Usata in alcune CNN.
Verdetto pratico: se costruisci un Transformer e non metti la layer norm (o RMSNorm), il training non parte. È come provare a guidare un'auto senza ruote.