Aller au contenu principal

Chargement du lab visuel…

#optimiseursApprentissage profond

SGD, Momentum et Adam : la course vers le minimum.

Ce que tu vas manipuler

  1. Bienvenue dans #optimiseurs. À l'écran, la nappe de perte L(x, y) d'un modèle à deux poids — un bol dix fois plus raide selon y que selon x — et trois billes parties du même point : SGD (bleu), Momentum (jaune), Adam (rose). Même pente sous les pieds, trois façons de l'utiliser. Regarde SGD : il plonge le long de y puis rampe le long de x, alors que les deux autres sont déjà au fond après 60 pas. Un optimiseur, c'est la règle qui transforme le gradient en déplacement des poids ; c'est lui qui fait qu'un entraînement prend dix minutes… ou dix heures.
  2. Passons sur le vrai terrain : une vallée courbe (Rosenbrock adouci), le cauchemar classique des optimiseurs. Tape /surface vallee. Les trois repartent du même point, en haut d'un versant.
  3. Isolons le premier : /optimiseur sgd. La descente de gradient pure, p ← p − lr·∇L, rien d'autre : à chaque pas on avance de lr fois la pente, dans le sens de la descente.
  4. Triplons le pas d'apprentissage : /lr 0.3. Regarde le début du tracé.
  5. Le Momentum garde une vitesse : v ← β·v + ∇L puis p ← p − lr·v. Les zigzags, qui changent de signe à chaque pas, s'annulent dans v ; les pas cohérents le long de la vallée s'additionnent. Affiche-le : /optimiseur momentum.
  6. Adam ajoute une seconde mémoire : la moyenne des carrés du gradient, coordonnée par coordonnée, et divise le pas par sa racine. Une direction au gradient énorme reçoit un petit pas, une direction plate un grand pas. Affiche-le : /optimiseur adam.
  7. Mets les trois côte à côte : /comparer. Le tableau donne, pour chacun, la perte finale et le nombre de pas pour ramener la perte sous 1 % de sa valeur initiale.
  8. À toi de jouer : /surface collines puis /comparer — depuis la même crête, les trois peuvent finir dans trois creux différents ; /surface selle pour voir comment chacun quitte le point selle ; /bruit 0.5 pour des gradients bruités façon mini-lots ; /momentum 0.5 pour sentir l'effet de β ; /depart -2 -2 pour changer l'initialisation ; /reinit pour repartir. Prochaine étape : #batch-normalisation, ou comment rendre le paysage lui-même plus facile à descendre.

Commandes du canal

  • /surface <bol|vallee|selle|collines>Change le paysage de perte (et replace le départ conseillé).
  • /optimiseur <sgd|momentum|adam|tous>Affiche un seul optimiseur, ou les trois.
  • /lr <0.001..1>Fixe le taux d'apprentissage des trois optimiseurs et recalcule.
  • /pas <1..300>Nombre de pas joués par chaque optimiseur.
  • /momentum <0..0.99>Coefficient β : momentum de Momentum et β1 d'Adam.
  • /depart <x=-3..3> <y=-3..3>Point de départ commun aux trois optimiseurs.
  • /bruit <0..1>Écart-type du bruit ajouté au gradient (mini-lots simulés).
  • /graine <1..9999>Graine du bruit : un autre tirage, reproductible.
  • /comparerAffiche les trois tracés et le tableau des pertes finales.
  • /reinitRevient au bol, lr = 0,1, β = 0,9, 60 pas, sans bruit, les trois affichés.

Glossaire

Optimiseur
Règle qui transforme le gradient de la perte en mise à jour des poids. SGD, Momentum, RMSProp et Adam sont des optimiseurs : même pente en entrée, déplacements différents en sortie. C'est l'un des choix qui pèsent le plus sur la vitesse d'un entraînement.
Taux d'apprentissage
Facteur lr qui fixe la longueur de chaque pas : p ← p − lr·∇L. Trop petit, la descente rampe ; trop grand, elle zigzague dans les directions raides puis diverge. Sur une surface de courbure λ, la descente pure n'est stable que si lr < 2/λ.
Momentum
Ajoute une vitesse aux poids : v ← β·v + ∇L, p ← p − lr·v. Les gradients cohérents s'additionnent, les zigzags s'annulent. En régime stable le pas effectif vaut lr / (1 − β) — dix fois lr pour β = 0,9 — d'où plus de vitesse dans les vallées, mais un risque d'emballement.
Adam
Optimiseur qui combine le momentum (moyenne mobile du gradient, β1) et RMSProp (moyenne mobile du gradient au carré, β2) : p ← p − lr·m̂ / (√v̂ + ε), avec correction du biais des moyennes au démarrage. Le pas est normalisé coordonnée par coordonnée, ce qui le rend robuste au choix du lr. AdamW en est la variante avec régularisation découplée, standard pour les transformers.
RMSProp
Divise le pas de chaque coordonnée par la racine d'une moyenne mobile de son gradient au carré : les directions au gradient fort reçoivent un petit pas, les directions plates un grand pas. C'est la moitié « adaptative » d'Adam, héritée d'Adagrad qui, lui, accumulait sans oublier et finissait par s'arrêter.
Conditionnement
Rapport entre la plus grande et la plus petite courbure de la perte (valeurs propres de la hessienne). Un bol dix fois plus raide dans une direction a un conditionnement de 10 : le lr stable pour la direction raide est dix fois trop petit pour la direction plate, et la descente pure rampe ou zigzague. Momentum et Adam servent d'abord à ça.
Point selle
Point où le gradient est nul sans être un minimum : la perte monte dans certaines directions et descend dans d'autres. La descente y ralentit fortement (la pente est presque nulle) avant de s'échapper par la direction descendante. En grande dimension, les points selle sont bien plus nombreux que les minima locaux.
Minimum local
Creux de la perte plus bas que son voisinage immédiat, mais pas forcément le plus bas de tous (le minimum global). La descente de gradient s'arrête dans le premier creux venu : le point de départ (l'initialisation) et l'élan de l'optimiseur décident du creux atteint.
Planning du taux d'apprentissage
Faire varier lr au cours de l'entraînement : grand au début pour avancer vite, plus petit ensuite pour se poser au fond sans zigzaguer ni trembler sous le bruit des mini-lots. Paliers, décroissance cosinus, échauffement (warmup) : presque tous les entraînements modernes en utilisent un.
Gradient bruité
Le gradient calculé sur un mini-lot n'est qu'une estimation de celui du jeu complet : il est bruité. SGD le suit à la lettre et tremble autour du minimum ; Momentum en moyenne plusieurs et lisse ; Adam normalise son amplitude. C'est le « S » (stochastique) de SGD, simulé ici par /bruit.

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