Normalisation des pixels

Idée

Recadrer les valeurs des pixels pour qu'elles vivent dans une plage centrée et bornée (ici autour de zéro, entre $-1$ et $+1$), au lieu de leur plage brute de 0 à 255.

Pourquoi

Recadrer les valeurs des pixels pour qu'elles vivent dans une plage centrée et bornée (ici autour de zéro, entre $-1$ et $+1$), au lieu de leur plage brute de 0 à 255. Toutes les entrées du réseau parlent alors la même langue numérique, et l'apprentissage devient bien plus stable.

Outil

Centrer-réduire une variable aléatoire (analogue à $X' = (X - \mu)/\sigma$ en proba/stat) : on standardise pour que les ordres de grandeur soient comparables, exactement comme on adimensionnalise une équation différentielle en physique avant de résoudre.

Formule

La transformation utilisée est $\text{ToTensor}$ suivie de $\text{Normalize}(\mu, \sigma)$ avec $\mu = 0{,}5$ et $\sigma = 0{,}5$. ToTensor envoie les pixels entiers ${0, 1, \dots, 255}$ vers $[0, 1]$ (division par 255), puis Normalize appliqué $x \mapsto (x - 0{,}5)/0{,}5 = 2x - 1$, ce qui envoie $[0, 1]$ sur $[-1, 1]$. Le tenseur final a donc des entrées centrées en zéro.

Piège

Tentation : alimenter le réseau directement avec les valeurs brutes des pixels (entiers de 0 à 255). Pourquoi c'est faux : les valeurs d'entrée sont alors deux ordres de grandeur plus grandes que les poids initialisés (qui suivent une loi normale standard). Les pré-activations $Z^{(1)} = W^{(1)} X + b^{(1)}$ saturent immédiatement la sigmoïde (toutes les sorties valent ~0 ou ~1), les gradients deviennent quasi-nuls (vanishing gradient), et l'apprentissage ne décolle pas. La normalisation $x \mapsto 2x - 1$ ramène l'entrée dans $[-1, 1]$ et préserve la dynamique des activations.