Aller au contenu principal

Chargement du lab visuel…

#batch-normalisationApprentissage profond

Batch normalisation : garder les activations dans la bonne plage.

Ce que tu vas manipuler

  1. Bienvenue dans #batch-normalisation. À l'écran, quatre colonnes bleues : une par couche cachée d'un petit réseau (4 couches de 16 neurones, activation tanh). Chaque colonne est l'histogramme des activations de la couche quand un lot de 64 points la traverse : 16 barres entre −1 et +1, une barre jaune pour la moyenne, une ombre pour ± l'écart-type. Regarde de gauche à droite : l'histogramme se resserre déjà (σ 0,64 → 0,29) alors que l'initialisation est « correcte ». C'est comme une chaîne de photocopieuses réglées chacune un peu trop clair : à la sixième copie, la page est blanche. Chaque couche reçoit une distribution que la précédente a déformée — la dérive de covariance interne. La batch normalisation recentre et réduit chaque couche à la volée, puis la laisse se réajuster avec deux paramètres appris, γ et β.
  2. Caricaturons la dérive. Multiplie les poids initiaux par 6 : tape /init grande.
  3. Un réseau plus profond arrange-t-il les choses ? Ajoute deux couches : /couches 6.
  4. Active la batch normalisation : /bn on. Pour chaque neurone, on calcule la moyenne μ et l'écart-type σ de sa pré-activation sur le lot, puis on remplace z par (z − μ) / σ avant d'appliquer tanh.
  5. BN ne fige pas tout : après normalisation, la couche multiplie par γ et décale de β, deux paramètres qu'elle apprend. Essaie /gamma 2.
  6. Coupe la BN pour préparer la suite : /bn off.
  7. L'autre pathologie : des poids trop petits. Tape /init petite (poids × 0,25).
  8. Voyons ce que ça coûte à l'apprentissage. Le même réseau (mêmes poids de départ) va être entraîné deux fois sur le jeu « lunes », une fois sans BN, une fois avec : /entrainer 40.
  9. À toi de jouer : /activation relu puis /bn on et /beta -2 pour tuer presque tous les neurones ReLU ; /lot 8 pour voir des statistiques de lot bruyantes ; /propager pour un autre tirage de poids et de points ; /init normale puis /entrainer 60 pour comparer quand l'initialisation est bonne ; /reinit pour repartir. Prochaine étape : le canal #rnn-lstm, où le signal ne traverse plus des couches mais le temps — et dérive de la même façon.

Commandes du canal

  • /couches <2..6>Nombre de couches cachées (16 neurones chacune).
  • /activation <tanh|relu|sigmoide>Fonction d'activation des couches cachées.
  • /init <petite|normale|grande>Échelle des poids initiaux : petite (× 0,25), normale (Xavier / He), grande (× 6).
  • /bn <on|off>Active ou coupe la batch normalisation sur chaque couche cachée.
  • /gamma <0.1..3>Facteur d'échelle γ appliqué après normalisation (écart-type des pré-activations).
  • /beta <-2..2>Décalage β appliqué après normalisation (moyenne des pré-activations).
  • /lot <8..128>Taille du lot (batch) qui traverse le réseau et sert au calcul de μ, σ.
  • /propagerNouveau tirage (poids initiaux et lot), recalcule tous les histogrammes.
  • /entrainer <5..60>Entraîne le même réseau avec et sans BN sur « lunes » et trace les deux pertes.
  • /reinitRevient à 4 couches tanh, init normale, BN off, γ = 1, β = 0, lot 64.

Glossaire

batch normalisation
Couche qui recentre et réduit chaque pré-activation sur le lot courant, ẑ = (z − μ) / σ, puis la réajuste avec deux paramètres appris, y = γ·ẑ + β. Elle stabilise la distribution reçue par chaque couche, autorise des pas d'apprentissage plus grands et rend le réseau moins sensible à l'initialisation.
dérive de covariance interne
Le fait que la distribution des entrées d'une couche change au fil de l'entraînement et de la profondeur, parce que les couches précédentes bougent. Chaque couche doit alors réapprendre sur une cible mouvante ; c'est le problème que la batch normalisation a été conçue pour atténuer.
moyenne et écart-type de lot
Statistiques μ et σ calculées, pour chaque neurone, sur les exemples du lot courant. Ce sont elles qui servent à normaliser pendant l'entraînement : plus le lot est petit, plus elles sont bruyantes, et moins la BN est fiable.
gamma et beta
Les deux paramètres appris de la batch normalisation : γ multiplie la valeur normalisée (son écart-type), β la décale (sa moyenne). Ils rendent à la couche la liberté de choisir sa plage — y compris de défaire la normalisation si c'est utile.
saturation
Zone d'une activation où la pente est quasi nulle : les bords de tanh (±1) ou de la sigmoïde (0 et 1). Une activation saturée ne transmet presque plus de gradient : c'est la source du gradient qui disparaît.
neurones morts
Neurones ReLU dont la pré-activation est négative pour (presque) tous les exemples : leur sortie vaut 0, leur gradient aussi, et ils ne réapprennent plus. Une moyenne trop négative (β ≪ 0) ou de mauvais poids en tuent des couches entières.
layer normalisation
Variante qui normalise chaque exemple sur ses propres neurones (une moyenne et un écart-type par exemple, pas par neurone) au lieu de normaliser sur le lot. Indépendante de la taille du lot, elle est la norme des transformers et des réseaux récurrents.
moyennes mobiles
À l'inférence, il n'y a plus de lot : la batch normalisation utilise des moyennes et variances accumulées pendant l'entraînement (moyenne mobile exponentielle des statistiques de lot). Le réseau se comporte alors comme une fonction fixe, exemple par exemple.
initialisation des poids
Choix de l'écart-type des poids au départ. Xavier / Glorot (1/√n, pour tanh et sigmoïde) et He (√(2/n), pour ReLU) sont calibrés pour conserver la variance d'une couche à la suivante. Trop grand : saturation ; trop petit : le signal s'effondre.
lot
Sous-ensemble d'exemples traités ensemble à chaque pas de descente de gradient (8 à 128 ici). La batch normalisation calcule ses statistiques sur ce lot : sa taille est donc un hyperparamètre qui change le comportement du réseau, pas seulement sa vitesse.

Autres canaux du thème Apprentissage profond

  • #optimiseursSGD, Momentum et Adam : la course vers le minimum.
  • #batch-normalisationBatch normalisation : garder les activations dans la bonne plage.
  • #rnn-lstmRNN et LSTM : se souvenir d'une séquence.
  • #autoencodeurAutoencodeur : compresser puis reconstruire.
  • #transfer-learningApprentissage par transfert : repartir d'un réseau déjà entraîné.
  • #ganGAN : un faussaire contre un inspecteur