8. Normalisation

Les réseaux profonds s'entraînent plus vite et de façon plus fiable lorsque les activations qui circulent entre les couches restent bien mises à l'échelle. Cette leçon introduit les couches de normalisation, qui standardisent à la volée les entrées d'une couche, puis apprennent à les remettre à l'échelle. Nous couvrons la normalisation par lot (batch normalization) et la normalisation par couche (layer normalization), où chacune calcule ses statistiques, comment elles se comportent à l'inférence, et où les placer.

Objectifs

  • Expliquer pourquoi normaliser les activations à l'intérieur du réseau stabilise et accélère l'entraînement.
  • Dériver la transformation de la batch normalization : normaliser, puis mettre à l'échelle et décaler avec des paramètres appris \(\gamma, \beta\).
  • Comprendre pourquoi des statistiques courantes (moyenne mobile) remplacent les statistiques du lot à l'inférence.
  • Définir la layer normalization et voir pourquoi elle convient aux réseaux récurrents et aux Transformers.
  • Décider où placer une couche de normalisation par rapport à l'activation \(g^{[l]}\).
  • Comparer la batch normalization et la layer normalization selon leur axe de normalisation et leurs cas d'usage.

8.1 Pourquoi normaliser à l'intérieur du réseau

Rappelons qu'une couche calcule \(z^{[l]} = W^{[l]} a^{[l-1]} + b^{[l]}\) et \(a^{[l]} = g^{[l]}(z^{[l]})\). À mesure que l'entraînement met à jour chaque \(W^{[l]}\), la distribution de l'entrée \(a^{[l-1]}\) de chaque couche ne cesse de se déplacer. Cette cible mouvante, parfois appelée décalage de covariance interne (internal covariate shift), force les couches suivantes à se ré-adapter en permanence et ralentit l'ensemble du réseau.

Normaliser les activations à chaque couche maintient leur moyenne et leur variance stables au fil des mises à jour. Les bénéfices immédiats :

  • La surface de la fonction de coût devient plus lisse, ce qui permet d'utiliser un taux d'apprentissage plus élevé sans diverger.
  • L'entraînement converge en moins d'époques et est moins sensible à l'initialisation des poids.
  • L'échelle et le décalage appris redonnent au réseau la liberté d'annuler la normalisation si cela aide.

Remarque : la normalisation est appliquée à la pré-activation \(z^{[l]}\) ou à l'activation \(a^{[l]}\), pas aux paramètres. C'est une couche insérée dans la passe avant, avec ses propres paramètres apprenables.

8.2 Normalisation par lot (batch normalization)

La normalisation par lot (BatchNorm) standardise chaque caractéristique à travers les exemples d'un mini-lot, puis applique une transformation affine apprise. Elle opère par caractéristique, de sorte que chaque caractéristique conserve ses propres statistiques.

Histogrammes de la pré-activation brute contre normalisée

La normalisation recentre et remet à l'échelle une entrée de couche à moyenne nulle et variance unitaire avant l'échelle et le décalage appris.

8.2.1 Statistiques du lot

Pour une caractéristique \(x\) sur un mini-lot \(\mathcal{B} = \{x^{(1)}, \dots, x^{(m)}\}\) de taille \(m\), on calcule la moyenne et la variance du lot :

\[\boxed{ \mu_\mathcal{B} = \frac{1}{m}\sum_{i=1}^{m} x^{(i)}, \qquad \sigma_\mathcal{B}^2 = \frac{1}{m}\sum_{i=1}^{m}\left(x^{(i)} - \mu_\mathcal{B}\right)^2 }\]

8.2.2 Normaliser, mettre à l'échelle et décaler

On standardise chaque valeur à moyenne nulle et variance unitaire, en utilisant une petite constante \(\epsilon > 0\) pour la stabilité numérique :

\[\boxed{ \hat{x}^{(i)} = \frac{x^{(i)} - \mu_\mathcal{B}}{\sqrt{\sigma_\mathcal{B}^2 + \epsilon}} }\]

Puis on remet à l'échelle avec deux paramètres appris par caractéristique, une échelle \(\gamma\) et un décalage \(\beta\) :

\[\boxed{ y^{(i)} = \gamma\, \hat{x}^{(i)} + \beta }\]

Remarque : \(\gamma\) et \(\beta\) sont appris par descente de gradient comme n'importe quel poids. Si le comportement optimal correspond à l'entrée brute, le réseau peut le retrouver en apprenant \(\gamma = \sqrt{\sigma_\mathcal{B}^2 + \epsilon}\) et \(\beta = \mu_\mathcal{B}\). La normalisation ne retire jamais de capacité, elle ne fait que la reparamétrer.

8.2.3 Inférence avec des statistiques courantes

À l'inférence, on évalue souvent un seul exemple, de sorte qu'une moyenne et une variance de lot sont indéfinies ou dénuées de sens. À la place, BatchNorm utilise des estimations de population accumulées pendant l'entraînement sous forme de moyennes mobiles exponentielles, avec un momentum \(\alpha \in [0, 1)\) :

\[\boxed{ \mu \leftarrow \alpha\, \mu + (1 - \alpha)\, \mu_\mathcal{B}, \qquad \sigma^2 \leftarrow \alpha\, \sigma^2 + (1 - \alpha)\, \sigma_\mathcal{B}^2 }\]

Au moment du test, la transformation est fixe et déterministe, en utilisant ces statistiques courantes à la place de celles du lot :

\[\boxed{ y = \gamma\, \frac{x - \mu}{\sqrt{\sigma^2 + \epsilon}} + \beta }\]

Remarque : cette séparation entraînement/inférence est la source de la plupart des bugs de BatchNorm. Oublier de basculer la couche en mode évaluation la laisse calculer les statistiques du lot au moment du test, ce qui corrompt les prédictions.

8.3 Normalisation par couche (layer normalization)

La normalisation par couche (LayerNorm) conserve la même recette normaliser-mettre à l'échelle-décaler mais change l'axe sur lequel elle moyenne. Plutôt que d'agréger à travers le lot, elle calcule les statistiques sur les caractéristiques d'un seul exemple. Chaque exemple est donc normalisé de manière autonome, indépendamment des autres dans le lot.

8.3.1 Statistiques par exemple

Pour un exemple avec un vecteur de caractéristiques \(a \in \mathbb{R}^{H}\) (ses \(H\) activations dans une couche), on moyenne sur les caractéristiques :

\[\boxed{ \mu = \frac{1}{H}\sum_{k=1}^{H} a_k, \qquad \sigma^2 = \frac{1}{H}\sum_{k=1}^{H}\left(a_k - \mu\right)^2 }\]

La normalisation, l'échelle et le décalage ont une forme identique à BatchNorm, appliqués par exemple :

\[\boxed{ \hat{a}_k = \frac{a_k - \mu}{\sqrt{\sigma^2 + \epsilon}}, \qquad y_k = \gamma_k\, \hat{a}_k + \beta_k }\]

8.3.2 Pourquoi LayerNorm pour les séquences

Parce que les statistiques proviennent d'un seul exemple, LayerNorm se comporte de la même manière à l'entraînement et à l'inférence, et ne dépend pas de la taille du lot. Cela compte lorsque le lot est minuscule ou lorsque les exemples ont une longueur variable, comme dans le texte. LayerNorm est la normalisation de choix pour les réseaux récurrents et les Transformers, où la longueur de la séquence varie et où une moyenne de lot par pas de temps serait mal définie.

Remarque : LayerNorm n'a besoin d'aucune statistique courante, il n'y a donc aucune divergence entraînement/inférence à gérer. Cela seul la rend plus simple à déployer que BatchNorm.

8.4 Placement et effets pratiques

Une couche de normalisation se situe entre l'étape linéaire \(W^{[l]} a^{[l-1]} + b^{[l]}\) et la non-linéarité \(g^{[l]}\). Deux ordres sont courants.

Flux d'une couche, de la transformation linéaire à travers la normalisation et l'activation

La normalisation est insérée entre la transformation linéaire et l'activation à l'intérieur de chaque couche.

  • Avant l'activation (normaliser \(z^{[l]}\), puis appliquer \(g^{[l]}\)) : le placement d'origine et le plus courant. Il maintient l'entrée de la non-linéarité centrée, là où la saturation nuit le plus.
  • Après l'activation (normaliser \(a^{[l]}\)) : parfois utilisé et occasionnellement meilleur en pratique, bien qu'il soit moins standard.

Deux autres points pratiques :

  • Le biais devient redondant. Le décalage \(\beta\) remplace le biais de la couche, puisque la normalisation soustrait la moyenne et annulerait de toute façon \(b^{[l]}\). Les couches suivies d'une normalisation sont souvent écrites sans leur propre biais.
  • BatchNorm dépend de la taille du lot. Ses statistiques sont plus bruitées avec de petits lots, ce qui agit comme un régulariseur léger mais se dégrade fortement lorsque le lot est très petit. LayerNorm y est insensible, ce qui est une autre raison pour laquelle les modèles de séquence la préfèrent.

Remarque : le bruit dépendant du lot dans BatchNorm peut se substituer en partie à d'autres régulariseurs, de sorte que les réseaux qui l'utilisent ont parfois besoin de moins de dropout.

8.5 BatchNorm contre LayerNorm

Les deux couches partagent la transformation normaliser-mettre à l'échelle-décaler et ne diffèrent que par l'axe des statistiques et les conséquences qui en découlent.

Aspect Normalisation par lot Normalisation par couche
Axe de normalisation à travers le lot, par caractéristique à travers les caractéristiques, par exemple
Dépend de la taille du lot oui non
Entraînement vs inférence statistiques du lot vs statistiques courantes identique dans les deux
Statistiques courantes nécessaires oui non
Usage typique CNN et modèles de vision feedforward RNN et Transformers

Axes de la normalisation par lot contre par couche sur une grille lot par caractéristique

La normalisation par lot calcule les statistiques le long d'une colonne de caractéristique à travers le lot, la normalisation par couche à travers les caractéristiques d'un seul exemple.

Remarque : le bloc Transformer de la leçon 16 place une LayerNorm avant ou après chaque sous-couche, précisément parce qu'elle supprime la dépendance au lot qui, sinon, lierait entre eux des exemples de longueurs différentes.

Les activations restant bien mises à l'échelle, le réseau s'entraîne de façon stable à des taux d'apprentissage plus élevés. La prochaine leçon aborde le contrôle du surapprentissage par la régularisation et le dropout.


Suivant : Régularisation et dropout · Vue d'ensemble du cours