Learning Rate (Taux d’apprentissage)
Le learning rate (ou taux d’apprentissage) est l’hyperparamètre qui contrôle l’ampleur des mises à jour des poids d’un modèle de machine learning à chaque étape de la descente de gradient.
C’est l’hyperparamètre le plus important de tout entraînement de modèle. Trop élevé : le modèle diverge (la loss explose ou oscille). Trop faible : le modèle converge si lentement qu’il semble ne rien apprendre. Le bon learning rate fait la différence entre un entraînement qui converge en quelques heures et un entraînement qui ne converge jamais. La grande majorité des problèmes d’entraînement (« mon modèle n’apprend pas », « ma loss oscille », « mes résultats sont mauvais ») peuvent être résolus en ajustant le learning rate.
- Aussi appelé
- Taux d’apprentissage, LR, η (eta), α (alpha)
- Rôle
- Contrôler la taille des pas de mise à jour des poids pendant l’entraînement
- Formule de base
- w = w – η × ∂Loss/∂w
- Valeurs typiques
- SGD : 1e-2 à 1e-1 | Adam : 1e-4 à 1e-3 | Fine-tuning : 1e-5 à 5e-5
- Schedulers
- Cosine annealing, step decay, warmup + decay, reduce on plateau
- Outil de diagnostic
- LR Finder (augmentation progressive du LR pour trouver la plage optimale)
Le rôle du learning rate
Pendant l’entraînement, un optimizer calcule le gradient de la fonction de loss par rapport à chaque poids du modèle (via la rétropropagation). Le gradient indique la direction dans laquelle les poids doivent être modifiés pour réduire la loss. Le learning rate détermine l’ampleur du pas dans cette direction :
w_nouveau = w_actuel – η × gradient
Où η (eta) est le learning rate. C’est un multiplicateur appliqué à chaque gradient avant la mise à jour des poids. Si η = 0, le modèle ne bouge pas (pas d’apprentissage). Si η est très grand, le modèle fait des bonds énormes qui le font rebondir d’un côté à l’autre du paysage de loss sans converger. Si η est bien calibré, le modèle descend progressivement vers un minimum de la loss.
L’effet du learning rate sur l’entraînement
| Learning rate | Comportement de la loss | Résultat |
|---|---|---|
| Trop élevé | Oscille violemment ou diverge (→ ∞) | Le modèle ne converge jamais, la loss explose |
| Légèrement trop élevé | Descend puis oscille autour d’un minimum sans se stabiliser | Convergence instable, résultats sous-optimaux |
| Optimal | Descente régulière et rapide vers un bon minimum | Convergence rapide, bonne performance |
| Trop faible | Descend extrêmement lentement | Convergence très lente, risque de rester piégé dans un minimum local |
| Beaucoup trop faible | Quasi-aucun mouvement | Le modèle semble ne rien apprendre (underfitting apparent) |
L’analogie classique : imaginez que vous descendez une montagne dans le brouillard. Le learning rate, c’est la taille de vos pas. Des pas trop grands et vous dévalez de façon incontrôlée (divergence). Des pas trop petits et vous mettez une journée pour descendre ce que vous pourriez parcourir en une heure. Le bon pas est celui qui vous fait descendre efficacement sans vous mettre en danger.
Valeurs typiques par contexte
| Contexte | Optimizer | Learning rate typique | Notes |
|---|---|---|---|
| Entraînement from scratch (CNN) | SGD + momentum | 1e-2 à 1e-1 | SGD nécessite un LR plus élevé que Adam |
| Entraînement from scratch | Adam / AdamW | 1e-4 à 1e-3 | Adam est moins sensible au choix du LR que SGD |
| Fine-tuning de modèle pré-entraîné | AdamW | 1e-5 à 5e-5 | LR faible pour ne pas « oublier » les features pré-apprises |
| Pré-entraînement LLM | AdamW | 1e-4 à 6e-4 | Avec warmup linéaire + cosine decay |
| Fine-tuning LLM | AdamW | 1e-5 à 2e-5 | LR très faible pour éviter le catastrophic forgetting |
| Gradient boosting (XGBoost) | N/A | 0,01 à 0,3 | Appelé « eta » dans XGBoost, LR faible + beaucoup d’arbres |
Trouver le bon learning rate : LR Finder
La technique du « LR Finder » (proposée par Leslie Smith) est l’outil le plus pratique pour trouver la plage optimale de learning rate. Le principe :
1. Commencez avec un LR très faible (par exemple, 1e-7). 2. Augmentez progressivement le LR à chaque batch (progression géométrique). 3. Enregistrez la loss à chaque étape. 4. Tracez la courbe loss vs LR. 5. Le bon LR se situe dans la zone où la loss descend le plus rapidement, juste avant qu’elle ne commence à remonter ou à osciller.
# PyTorch Lightning : LR Finder intégré
from pytorch_lightning import Trainer
from pytorch_lightning.tuner import Tuner
trainer = Trainer(max_epochs=10)
tuner = Tuner(trainer)
lr_finder = tuner.lr_find(model, datamodule=dm)
# Afficher la courbe
fig = lr_finder.plot(suggest=True)
# Récupérer le LR suggéré
suggested_lr = lr_finder.suggestion()
print(f"LR suggéré : {suggested_lr}")
Le LR Finder est rapide (quelques minutes) et vous évite des heures de grid search aveugle. C’est la première chose à faire quand vous démarrez un nouveau projet.
Les schedulers de learning rate
Un learning rate fixe est rarement optimal. La pratique standard est de faire varier le LR pendant l’entraînement via un scheduler. L’intuition : au début, un LR élevé permet de descendre rapidement vers la bonne zone du paysage de loss. En fin d’entraînement, un LR faible permet de s’installer précisément dans un bon minimum sans le dépasser.
Cosine annealing (décroissance en cosinus)
Le scheduler le plus populaire en deep learning. Le LR suit une demi-courbe de cosinus : il part de la valeur maximale et décroît progressivement jusqu’à un minimum, avec une décroissance rapide au début et un plateau plus doux vers la fin. C’est le standard pour l’entraînement des CNN de vision et de nombreux Transformers.
Variante : le cosine annealing avec warm restarts (SGDR) relance périodiquement le LR à sa valeur maximale. Ces « redémarrages à chaud » permettent au modèle d’explorer de nouvelles régions du paysage de loss, ce qui peut aider à échapper aux minima locaux.
Warmup + decay (le standard pour les LLM)
Le scheduler le plus utilisé pour l’entraînement des LLM et des Transformers. Deux phases :
Phase 1 : Warmup linéaire. Le LR augmente linéairement de 0 (ou d’une très petite valeur) jusqu’au LR maximal pendant les premiers milliers de steps. Cela stabilise l’entraînement au début, quand les paramètres sont aléatoires et que les gradients sont bruités et imprévisibles.
Phase 2 : Decay. Après le warmup, le LR décroît selon un profil choisi : cosine decay (le plus courant), linear decay, ou polynomial decay. Le LR descend progressivement vers un minimum (typiquement 10× plus petit que le LR maximal).
Ce pattern « warmup + cosine decay » est celui utilisé par GPT, BERT, LLaMA et la quasi-totalité des LLM modernes. Le warmup représente typiquement 1 à 10% du nombre total de steps d’entraînement.
Step decay
Le LR est divisé par un facteur (typiquement 10) à des epochs prédéfinies. Par exemple : LR = 0,1 pendant les 30 premières epochs, puis 0,01 pendant les 30 suivantes, puis 0,001. C’est le scheduler historique utilisé dans les premiers entraînements de ResNet. Plus simple que le cosine annealing mais moins doux (les transitions abruptes peuvent déstabiliser temporairement l’entraînement).
Reduce on plateau
Le LR est divisé par un facteur quand la métrique de validation cesse de s’améliorer pendant N epochs (patience). C’est un scheduler réactif (il s’adapte au comportement réel du modèle) contrairement aux schedulers prédéfinis. Utile quand vous ne savez pas combien de temps l’entraînement durera ou combien d’epochs sont nécessaires.
Warmup-Stable-Decay (WSD)
Un pattern émergent en pré-entraînement de LLM : le LR monte pendant le warmup, reste constant pendant une longue phase de plateau, puis décroît brusquement en fin d’entraînement. Des études récentes montrent que cette approche peut surpasser le warmup + cosine decay classique, car le plateau prolongé permet une réduction du bruit plus efficace avant la phase de convergence fine.
| Scheduler | Profil | Usage principal | Implémentation PyTorch |
|---|---|---|---|
| Cosine annealing | Demi-cosinus de max à min | CNN, vision, entraînement général | CosineAnnealingLR |
| Warmup + cosine decay | Montée linéaire puis cosinus | Transformers, LLM | get_cosine_schedule_with_warmup (HF) |
| Step decay | Paliers avec divisions | ResNet classique | StepLR, MultiStepLR |
| Reduce on plateau | Réduction quand stagnation | Tout (adaptatif) | ReduceLROnPlateau |
| Cosine avec warm restarts | Cycles cosinus répétés | Exploration longue | CosineAnnealingWarmRestarts |
Learning rates discriminatifs
En transfer learning et en fine-tuning, toutes les couches du modèle n’ont pas besoin du même learning rate. Les premières couches (features génériques pré-apprises) doivent bouger très peu ; les dernières couches (classification spécifique à votre tâche) doivent apprendre plus vite.
La technique des « discriminative learning rates » (ou differential learning rates) attribue des LR différents par groupe de couches. Par exemple : couches basses (features génériques) à 1e-5, couches intermédiaires à 1e-4, tête de classification à 1e-3. C’est une pratique standard popularisée par les bibliothèques fastai et Hugging Face Transformers.
# PyTorch : LR discriminatifs par groupe de paramètres
optimizer = torch.optim.AdamW([
{'params': model.backbone.parameters(), 'lr': 1e-5},
{'params': model.neck.parameters(), 'lr': 1e-4},
{'params': model.head.parameters(), 'lr': 1e-3},
], weight_decay=0.01)
Learning rate et taille du batch
Il existe une relation entre le learning rate et la taille du batch. La règle empirique la plus connue est la « linear scaling rule » : quand vous multipliez la taille du batch par k, multipliez le LR par k. L’intuition : un batch plus grand produit un gradient plus précis (moins bruité), ce qui permet de faire des pas plus grands.
En pratique, cette règle linéaire fonctionne bien jusqu’à une certaine taille de batch, après quoi il faut utiliser un warmup plus long pour stabiliser l’entraînement. C’est pourquoi les entraînements à très grande échelle (LLM sur des milliers de GPU) combinent systématiquement linear scaling + warmup prolongé.
Erreurs fréquentes
Utiliser le même LR pour Adam et SGD. Adam et SGD ont des dynamiques très différentes. Un LR de 0,1 est raisonnable pour SGD mais fait diverger Adam immédiatement. Les valeurs par défaut des frameworks (1e-3 pour Adam dans PyTorch) sont de bons points de départ.
Utiliser le LR d’un papier sans ajuster. Le LR optimal dépend de l’optimizer, du batch size, de l’architecture et du dataset. Un LR de 3e-4 qui fonctionne dans un papier sur ImageNet avec batch 256 ne marchera pas nécessairement sur votre dataset avec batch 16.
Ne pas utiliser de scheduler. Un LR fixe est presque toujours sous-optimal. Au minimum, utilisez un cosine annealing ou un reduce on plateau. La différence de performance entre LR fixe et LR schedulé est souvent de 1 à 5% d’accuracy.
Warmup trop court ou absent pour les Transformers. Les Transformers sont sensibles au LR initial. Sans warmup, un LR élevé au premier step peut causer des gradients explosifs et un effondrement irréversible de l’entraînement. Prévoyez au minimum 1% des steps totaux en warmup (10% est plus sûr).
Ne pas ajuster le LR quand on change le batch size. Doubler le batch size sans ajuster le LR revient à diviser l’efficacité de l’apprentissage par deux. Appliquez la linear scaling rule (ou une variante comme la square root scaling rule pour Adam).
Questions fréquentes sur le learning rate
Quel est le meilleur learning rate ?
Il n’y a pas de valeur universelle. Le LR optimal dépend de l’optimizer (1e-3 pour Adam, 1e-1 pour SGD), du type de tâche (from scratch vs fine-tuning), de la taille du batch et de l’architecture. La meilleure approche est d’utiliser un LR Finder pour identifier la plage optimale, puis d’appliquer un scheduler (cosine annealing ou warmup + decay). En cas de doute : 1e-3 avec Adam pour un entraînement from scratch, 2e-5 avec AdamW pour du fine-tuning de Transformer.
Pourquoi ma loss oscille au lieu de descendre ?
Le learning rate est probablement trop élevé. Les gradients font « rebondir » les poids d’un côté et de l’autre du minimum sans le trouver. Solution : divisez le LR par 5 ou 10, ou utilisez un scheduler qui réduit progressivement le LR. Si la loss oscille dès le début de l’entraînement, ajoutez un warmup qui démarre avec un LR très faible et l’augmente progressivement.
Pourquoi utiliser un warmup ?
Au début de l’entraînement, les poids sont aléatoires et les gradients sont bruités et imprévisibles. Un LR élevé dans ces conditions peut pousser le modèle dans des régions « sharp » (courbure élevée) du paysage de loss dont il aura du mal à sortir. Le warmup commence avec un LR très faible pour traverser cette zone instable, puis augmente progressivement le LR une fois que les statistiques de gradient se sont stabilisées. C’est particulièrement important pour les Transformers et l’optimizer Adam, dont les estimations de variance sont initialement biaisées.
Faut-il un learning rate différent pour chaque couche ?
En transfer learning, oui. Les couches basses (features génériques) doivent être modifiées très peu (LR faible) tandis que les couches hautes (spécifiques à votre tâche) doivent apprendre plus vite (LR élevé). Un facteur de 10 à 100× entre les couches basses et hautes est courant. Pour un entraînement from scratch, un LR unique suffit généralement, éventuellement avec une exception pour la couche d’embedding ou la tête de classification.
Cosine annealing ou reduce on plateau ?
Le cosine annealing est préférable quand vous connaissez à l’avance le nombre total d’epochs/steps (ce qui est le cas pour la plupart des entraînements planifiés). Il produit une décroissance douce et prévisible. Le reduce on plateau est préférable quand vous ne savez pas combien de temps l’entraînement durera, ou quand vous voulez un scheduler réactif qui s’adapte au comportement réel du modèle. Pour les LLM, le warmup + cosine decay est le standard incontesté. Pour l’expérimentation rapide sur des projets de taille moyenne, reduce on plateau est pratique et robuste.