Deux problèmes aux deux extrémités de l’entraînement
Problème des premiers pas : les poids frais ne peuvent pas supporter de grands pas
À l’étape 0, chaque poids commence comme un petit nombre aléatoire tiré d’une distribution proche de zéro. Les activations restent proches de zéro. Les gradients ne portent presque aucune information sur une solution finale. Appliquer un taux d’apprentissage maximal à ces gradients et le modèle s’éloigne fortement de l’initialisation dans des directions qui n’encodent aucune structure significative.
ANDREA-120M v1 a commis cette erreur. Pas de warmup. L’étape 1 utilisait lr = 0.0003 sur des poids fraîchement initialisés. Résultat : le modèle s’est retrouvé dans un mauvais bassin de paramètres en quelques centaines de pas. Les valeurs de perte semblaient raisonnables ; les échantillons produisaient des boucles de répétition dès l’étape 80K et ne s’en sont jamais remis.
Problème de fin d’entraînement : les grands pas ne peuvent pas polir une solution
À l’étape 100K, le modèle a appris la structure grossière. Les gradients portent désormais un signal fin : quel poids de token a besoin d’une petite correction, quelle tête d’attention a besoin d’un léger rééquilibrage. Appliquer un taux d’apprentissage maximal à ce stade fait dépasser chaque ajustement fin, oscillant autour d’un optimum sans jamais s’y stabiliser.
Deux problèmes, aux extrémités opposées de l’entraînement. Une seule planification, deux régions : monter doucement, puis décroître progressivement.
Warmup linéaire : les 2000 premiers pas
La formule
ANDREA-120M v2 utilise un warmup linéaire sur 2000 pas :
lr(t) = lr_scheduled(t) * min(1, (t + 1) / warmup_steps)
où t est le numéro de l'étape (indexé à partir de 0), warmup_steps = 2000, et lr_scheduled(t) est ce que la planification cosinus prescrirait en ignorant le warmup.
Lecture de la formule :
- À t = 0 : lr = lr_scheduled(0) min(1, 1/2000) = lr_scheduled(0) 0.0005. Premier pas minuscule.
- À t = 1000 : lr = lr_scheduled(1000) min(1, 1001/2000) = lr_scheduled(1000) 0.5. Moitié de la force.
- À t = 2000 : lr = lr_scheduled(2000) min(1, 2001/2000) = lr_scheduled(2000) 1.0. Force totale.
- À t > 2000 : le clamp maintient le multiplicateur à 1, le warmup n’a plus d’effet, la décroissance cosinus prend seule le relais.
La rampe linéaire depuis zéro donne au modèle 2000 pas pour former des représentations grossières avant qu’AdamW et le clipping de gradient ne voient des mises à jour à pleine force. À l’étape 2000, les poids ont suffisamment dérivé pour que le lr maximal ne les pousse plus dans un mauvais bassin.
Calcul du taux d’apprentissage pendant le warmup
Décroissance cosinus après warmup
La courbe
Une fois le warmup terminé à l'étape 2000, le taux d'apprentissage suit une courbe cosinus depuis le pic jusqu'à zéro sur les étapes restantes :
lr(t) = lr_min + (lr_peak - lr_min) 0.5 (1 + cos(pi * progress))
où progress = (t - warmup_steps) / (total_steps - warmup_steps). À progress = 0 (juste après le warmup), cos(0) = 1, lr = peak. À progress = 1 (dernière étape), cos(pi) = -1, lr = lr_min (généralement 0 ou un petit plancher).
Pourquoi Cosinus, et non Linéaire ou Exponentiel ?
La décroissance cosinus commence lentement (courbe presque plate près du pic), accélère au milieu, puis ralentit à nouveau près de zéro. Trois avantages :
1. Plateau près du pic. Les premières étapes après le warmup conservent encore un lr presque maximal, permettant au modèle d’utiliser une longue période de taux d’apprentissage élevé pour construire des représentations.
2. Transition fluide au milieu. Pas de sauts brusques que AdamW doit absorber.
3. Plateau près de zéro. Les dernières étapes reçoivent un lr minuscule pour le polissage fin, similaire au recuit simulé.
ANDREA-120M s’entraîne sur 200K étapes au total ; 198K de ces étapes se trouvent dans la région de décroissance cosinus après le warmup de 2000 étapes.
Redémarrage chaud d’ANDREA-12M à l’étape 25K
Le plateau
ANDREA-12M s’est entraîné pendant 60K étapes avec une décroissance cosinus depuis le pic lr = 0.0004. Vers l’étape 22K, la perte s’est stabilisée à une EMA ~2.4. La décroissance cosinus avait réduit lr à ~0.00015. Le bandit continuait à fournir des données diversifiées ; le modèle a cessé de s’améliorer.
Diagnostic : le lr avait décru trop bas pour que le modèle puisse sortir de son bassin actuel. Les données Hermes allaient entrer dans le programme (étape 25K), apportant 590K nouvelles conversations. Le modèle avait besoin d’énergie pour absorber ce choc de données.
Le redémarrage
À l’étape 25K, le calendrier a exécuté un redémarrage chaud : il a fait passer le lr de 0.00015 (décru) à 0.0004 (pic initial), puis a repris la décroissance cosinus sur les étapes restantes.
Loshchilov & Hutter (2017) ont nommé cette technique « SGDR » (stochastic gradient descent with warm restarts). L’intuition : un lr élevé apporte suffisamment d’énergie cinétique pour sortir d’un bassin local et explorer les bassins voisins ; la décroissance cosinus suivante permet de se ré-anneler dans un meilleur bassin.
Résultat. La perte EMA est passée de 2,40 à 2,10 au cours des 10K étapes suivantes après le redémarrage. Le modèle a été livré à l'étape 43,6K avec une perte SMMA de 2,0, démontrant une structure cohérente de tours de questions-réponses.
ANDREA-120M v2 a choisi de NE PAS utiliser de redémarrages chauds : avec 200K étapes disponibles et un nombre de paramètres beaucoup plus élevé, une décroissance monotone régulière a produit une convergence plus stable. Le redémarrage fonctionne mieux lorsque l'entraînement est court et qu'un plateau coïncide avec un changement de données connu.
Diagnostic de l'échec de v1
Choix de planification en pratique
Activités connexes
Trois liens frères vers le planning du LR :
- Activité 10 : AdamW. Le warmup laisse au biais de correction d'AdamW le temps de se stabiliser. Sans warmup, l'amplification 10x à l'étape 1 multiplie le bruit présent dans les gradients ; avec warmup, le multiplicateur agit sur un signal réel.
- Activité 12 : Gradient clipping. Le clipping limite la norme L2 du gradient à 1.0 AVANT AdamW. Le warmup amortit lr ; le clipping amortit g. Ensemble, ils sécurisent les premières étapes même sur des curricula sensibles aux chocs.
- Activité 22 : Checkpointing. Un warm restart nécessite de charger l'état de l'optimiseur (m, v, compteur d'étapes) depuis un checkpoint, puis de modifier la planification en cours d'exécution. Le restart d'ANDREA-12M à l'étape 25K illustre cela ; il a fallu deux tentatives pour obtenir la logique de chargement d'état correcte.
Schedule, optimiseur et clipping forment un triangle de stabilité. Supprimez un sommet, et ANDREA répétera son effondrement v1.