# Normalització (aprenentatge automàtic)

En l'aprenentatge automàtic, la normalització és una tècnica estadística amb diverses aplicacions. Hi ha dues formes principals de normalització, a saber, la normalització de dades i la normalització d'activació. La normalització de dades (o escala de característiques) inclou mètodes que canvien l'escala de les dades d'entrada de manera que les característiques tinguin el mateix rang, mitjana, variància o altres propietats estadístiques. Per exemple, una opció popular del mètode d'escala de característiques és la normalització min-max, on cada característica es transforma per tenir el mateix rang (normalment $[0,1]$ o $[-1,1]$ ). Això resol el problema de les diferents característiques que tenen escales molt diferents, per exemple, si una característica es mesura en quilòmetres i una altra en nanòmetres.
La normalització de l'activació, d'altra banda, és específica de l'aprenentatge profund i inclou mètodes que reescalen l'activació de neurones amagades dins de les xarxes neuronals.
La normalització s'utilitza sovint per:
* augmentar la velocitat de convergència de l'entrenament,
* reduir la sensibilitat a les variacions i les escales de característiques en les dades d'entrada,
* reduir el sobreajust ,
* i produir una millor generalització del model a dades no vistes.
Les tècniques de normalització sovint es justifiquen teòricament per reduir el canvi de covariància, suavitzar els paisatges d'optimització i augmentar la regularització, tot i que es justifiquen principalment per l'èxit empíric.

## Normalització de lots

La normalització de lots (BatchNorm) opera sobre les activacions d'una capa per a cada mini-lot.
Penseu en una xarxa simple de feedforward, definida encadenant mòduls:
$x^{(0)}\mapsto x^{(1)}\mapsto x^{(2)}\mapsto \cdots$on cada mòdul de xarxa pot ser una transformada lineal, una funció d'activació no lineal, una convolució, etc.
$x^{(0)}$ és el vector d'entrada, $x^{(1)}$ és el vector de sortida del primer mòdul, etc.
BatchNorm és un mòdul que es pot inserir en qualsevol punt de la xarxa feedforward. Per exemple, suposem que s'insereix just després $x^{(l)}$, aleshores la xarxa funcionaria en conseqüència:
$\cdots \mapsto x^{(l)}\mapsto \mathrm {BN} (x^{(l)})\mapsto x^{(l+1)}\mapsto \cdots$El mòdul BatchNorm no funciona amb entrades individuals. En lloc d'això, ha d'operar sobre un lot d'entrades alhora.
Concretament, suposem que tenim un lot d'entrades $x_{(1)}^{(0)},x_{(2)}^{(0)},\dots ,x_{(B)}^{(0)}$, alimentats alhora a la xarxa. Obteniríem al mig de la xarxa uns vectors:
$x_{(1)}^{(l)},x_{(2)}^{(l)},\dots ,x_{(B)}^{(l)}$El mòdul BatchNorm calcula la mitjana i la variància en coordenades d'aquests vectors:
${\begin{aligned}\mu _{i}^{(l)}&={\frac {1}{B}}\sum _{b=1}^{B}x_{(b),i}^{(l)}\\(\sigma _{i}^{(l)})^{2}&={\frac {1}{B}}\sum _{b=1}^{B}(x_{(b),i}^{(l)}-\mu _{i}^{(l)})^{2}\end{aligned}}$on
$i$ indexa les coordenades dels vectors, i $b$ indexa els elements del lot. En altres paraules, estem considerant el $i$ -ª coordenada de cada vector del lot, i calculant la mitjana i la variància d'aquests nombres.
A continuació, normalitza cada coordenada perquè tingui una mitjana zero i una variància unitària:
${\hat {x}}_{(b),i}^{(l)}={\frac {x_{(b),i}^{(l)}-\mu _{i}^{(l)}}{\sqrt {(\sigma _{i}^{(l)})^{2}+\epsilon }}}$L'$\epsilon$ és una petita constant positiva com ara $10^{-9}$ afegit a la variància per a l'estabilitat numèrica, per evitar la divisió per zero.
Finalment, aplica una transformació lineal:
$y_{(b),i}^{(l)}=\gamma _{i}{\hat {x}}_{(b),i}^{(l)}+\beta _{i}$Aquí,
$\gamma$ i $\beta$ són paràmetres dins del mòdul BatchNorm. Són paràmetres que es poden aprendre, normalment entrenats per descens de gradients.
La següent és una implementació de BatchNorm en Python

## Normalització de capes

La normalització de capes (LayerNorm) és una alternativa popular a BatchNorm. A diferència de BatchNorm, que normalitza les activacions a través de la dimensió del lot per a una característica determinada, LayerNorm es normalitza en totes les funcions d'una mostra de dades única. En comparació amb BatchNorm, el rendiment de LayerNorm no es veu afectat per la mida del lot. És un component clau dels models de transformadors.
Per a una entrada i capa de dades determinades, LayerNorm calcula la mitjana $\mu$ i la variància $\sigma ^{2}$ sobre totes les neurones de la capa. Similar a BatchNorm, paràmetres aprendre $\gamma$ (escala) i $\beta$ (canvi) s'apliquen. Es defineix per:
${\hat {x_{i}}}={\frac {x_{i}-\mu }{\sqrt {\sigma ^{2}+\epsilon }}},\quad y_{i}=\gamma _{i}{\hat {x_{i}}}+\beta _{i}$on:
$\mu ={\frac {1}{D}}\sum _{i=1}^{D}x_{i},\quad \sigma ^{2}={\frac {1}{D}}\sum _{i=1}^{D}(x_{i}-\mu )^{2}$i l'índex $i$ abasta les neurones d'aquesta capa.

## Normalització de pes

La normalització de pes (WeightNorm ) és una tècnica inspirada en BatchNorm que normalitza les matrius de pes en una xarxa neuronal, en lloc de les seves activacions.
Un exemple és la normalització espectral, que divideix les matrius de pes per la seva norma espectral. La normalització espectral s'utilitza en xarxes generatives adversaries (GAN) com ara la GAN de Wasserstein.

## Transformadors

Alguns mètodes de normalització es van dissenyar per utilitzar-los en transformadors.
El transformador original del 2017 va utilitzar la configuració "post-LN" per a les seves LayerNorms. Va ser difícil d'entrenar, i va requerir una ajustada acurada dels hiperparàmetres i un "escalfament" en la taxa d'aprenentatge, on comença petit i augmenta gradualment. La convenció pre-LN, proposada diverses vegades el 2018, es va trobar que era més fàcil d'entrenar, que no requeria escalfament, la qual cosa condueix a una convergència més ràpida.
FixNorm i ScaleNorm normalitzen els vectors d'activació en un transformador. El mètode FixNorm divideix els vectors de sortida d'un transformador per les seves normes L2 i després es multiplica per un paràmetre après $g$. La ScaleNorm substitueix totes les LayerNorms dins d'un transformador per divisió amb la norma L2, i després es multiplica per un paràmetre après $g'$ (compartit per tots els mòduls ScaleNorm d'un transformador). La normalització de claus de consulta (QKNorm) normalitza els vectors de consulta i clau per tenir la norma L2 de la unitat.
En nGPT, molts vectors es normalitzen per tenir la norma L2 d'unitat: vectors d'estat ocults, vectors d'incrustació d'entrada i sortida, columnes de matriu de pes i vectors de consulta i clau.

## Referències

* ↑ Huang, Lei. Normalization Techniques in Deep Learning (en anglès). Cham: Springer International Publishing, 2022 (Synthesis Lectures on Computer Vision). DOI 10.1007/978-3-031-14595-7. ISBN 978-3-031-14594-0.
* ↑ Ioffe, Sergey; Szegedy, Christian (en anglès) Proceedings of the 32nd International Conference on Machine Learning, 01-06-2015, pàg. 448–456. arXiv: 1502.03167.
* ↑ Nguyen, Toan Q.; Salazar, Julian Improving Lexical Choice in Neural Machine Translation,, 02-11-2019. arXiv: 1910.05895. DOI: 10.5281/zenodo.3525484.
* ↑ Henry, Alex; Dachapally, Prudhvi Raj; Pawar, Shubham Shantaram; Chen, Yuxuan Findings of the Association for Computational Linguistics: EMNLP 2020 [Online], 11-2020, pàg. 4246–4253. arXiv: 2010.04245. DOI: 10.18653/v1/2020.findings-emnlp.379.