Entraîner sans réciter : surapprentissage et passage à l’échelle.
Dans la leçon précédente, nous avons vu comment le modèle réduit son erreur grâce au gradient, un pas après l’autre. Mais que se passe-t-il quand on l’entraîne sur des milliers de livres ? Deux pièges guettent. Le premier est pratique : comment découper un texte gigantesque sans saturer la mémoire ? Le second est plus sournois : comment vérifier que le modèle a compris les règles de la langue, au lieu d’apprendre son texte par cœur ?
Découper le corpus : dataset, batchs et époques
L’ensemble des textes utilisés pour ajuster les poids forme le jeu d’entraînement (training dataset). Pour un grand modèle, il pèse des milliers de milliards de tokens : impossible de tout faire passer d’un coup dans la carte graphique.
On le découpe donc en lots (batches, ou mini-batches) : quelques centaines de séquences, traitées en parallèle sur le GPU. Pour chaque lot, on calcule la loss de chaque exercice, puis leur moyenne. Cette loss moyenne est plus stable que celle d’un seul exemple, qui pourrait être un cas bizarre : c’est elle qui sert à calculer le gradient, avant de mettre à jour les poids. GPT-2 utilisait par exemple des lots de 512 séquences.
Un passage complet sur tout le jeu d’entraînement s’appelle une époque (epoch). Les grands modèles de langage voient souvent leurs données une seule fois, ou à peine plus : leur corpus compte des milliers de milliards de tokens, il y a donc toujours du texte neuf à lire, et repasser plusieurs fois sur les mêmes textes favoriserait la mémorisation par cœur, le surapprentissage que nous verrons plus bas. Notre laboratoire, lui, utilise tout son jeu d’entraînement à chaque pas : chez lui, une étape correspond donc à une époque.
Les optimiseurs modernes : de SGD à AdamW
Calculer le gradient sur un lot tiré au hasard plutôt que sur toutes les données s’appelle la descente de gradient stochastique (Stochastic Gradient Descent, ou SGD). Stochastique signifie simplement « lié au hasard » : chaque lot est tiré au sort dans le corpus. Dans sa version de base, elle applique le même pas à tous les poids. Sur un grand Transformer, c’est insuffisant : certains poids reçoivent des gradients énormes, d’autres minuscules, et les gradients d’un lot à l’autre sont bruités.
On utilise donc un optimiseur (optimizer) plus malin, le plus souvent AdamW. Il fait deux choses. D’abord, il garde en mémoire l’élan des pas précédents, le momentum : comme une bille lourde qui roule dans la vallée, il ne dévie pas à chaque petite bosse. Ensuite, il adapte automatiquement la taille du pas pour chaque poids : petits pas pour les poids qui s’agitent, plus grands pour ceux qui bougent peu.
Le taux d’apprentissage, enfin, ne reste pas fixe : il suit un planning (learning rate schedule). Il commence très bas et monte doucement pendant les premiers milliers de pas : c’est le warmup, qui évite des secousses violentes tant que les poids sont encore aléatoires. Puis il redescend progressivement jusqu’à la fin : c’est le decay, qui permet de se poser finement au fond de la vallée.
taux
▲ ╭──╮
│ ╱ ╲___
│ ╱ ╲____
│ ╱ ╲______
└──┴────────────────────────▶ étapes
warmup decayApprendre par cœur n’est pas comprendre : le surapprentissage
Avant l’entraînement, on met toujours une partie des données sous clé. Le jeu d’entraînement (train set) sert à ajuster les poids ; le jeu de validation (validation set) sert uniquement à mesurer la loss sur des textes que le modèle n’a jamais le droit d’utiliser pour apprendre. Dans notre laboratoire, le modèle s’entraîne sur 90 % du texte de Jules Verne (138 797 caractères) et garde les 10 % restants (15 422 caractères) pour la validation.
Pourquoi ce coffre-fort ? Un élève qui apprend ses annales par cœur aura une note parfaite sur les sujets qu’il connaît… et ratera l’examen. Un modèle peut faire la même chose : sur un texte trop court, ou revu pendant trop d’époques, il finit par réciter son cours mot à mot au lieu d’apprendre des règles générales. C’est le surapprentissage (overfitting). Le modèle capable de bien prédire des textes nouveaux, lui, sait généraliser.
Le signal se lit sur deux courbes. Tant que la loss d’entraînement et la loss de validation baissent ensemble, le modèle apprend à généraliser. Dès que la loss d’entraînement continue de baisser mais que la loss de validation remonte, le modèle est en train de mémoriser.
entraînement validation
modèle A (1 000 caractères) 2,09 3,14 ← minimum 2,95 à l’étape 70
modèle B (138 797 caractères) 2,43 2,44Le modèle A fait mieux que B sur ses propres données (2,09 contre 2,43), mais bien moins bien sur les textes jamais vus. Sa loss de validation atteint son minimum dès l’étape 70, puis remonte : à partir de là, chaque pas supplémentaire l’aide à réciter son extrait, et l’éloigne de la langue. Le modèle B, avec ses deux courbes collées, a vraiment appris.
Protéger le modèle et passer à l’échelle
Le premier remède est évident : plus de données. Mais trois garde-fous complètent l’arsenal.
L’arrêt précoce (early stopping) consiste à arrêter l’entraînement, ou à garder la sauvegarde, au point exact où la loss de validation atteint son minimum avant de remonter : l’étape 70 pour notre modèle A.
La régularisation des poids (weight decay, le « W » de AdamW) pénalise les poids qui deviennent trop grands. Elle empêche le modèle de faire une fixation extrême sur un détail particulier de son texte d’entraînement.
Le dropout désactive au hasard une fraction des neurones à chaque étape d’entraînement. Pensez à un travail de groupe où l’on interdit au hasard à certains élèves de répondre : toute l’équipe est forcée de comprendre la méthode, au lieu de compter sur un seul élève qui récite par cœur. Le dropout ne sert que pendant l’entraînement ; tous les neurones travaillent ensuite.
Un grand entraînement dure des jours, voire des semaines, sur des milliers de cartes graphiques. On sauvegarde donc régulièrement l’état du modèle dans un checkpoint : tous les poids, l’état de l’optimiseur et l’étape atteinte, pour reprendre après une panne ou revenir au meilleur moment. Le checkpoint voyage toujours avec son tokenizer : des poids sans le bon vocabulaire ne veulent rien dire.
Enfin, les chercheurs d’OpenAI ont montré en 2020 que la loss baisse de façon très régulière, et donc prévisible, quand on augmente ensemble le nombre de paramètres, la quantité de données et le budget de calcul : ce sont les lois d’échelle (scaling laws). Un modèle plus gros n’est meilleur que s’il reçoit assez de données pour ne pas surapprendre : les trois doivent grandir de concert.
Observez par vous-même
Dans le laboratoire, tapez Phileas Fogg. Surprise : le modèle A fait mieux que le modèle B sur votre texte, avec une loss de 1,71 contre 2,18. C’est que ce nom figure dans son petit extrait : il le récite. Tapez maintenant Passepartout, absent de l’extrait : la loss du modèle A grimpe à 3,82 (il hésite comme entre 46 tokens), quand le modèle B reste à 2,32.
Descendez ensuite jusqu’aux courbes. Avec le modèle A, regardez la courbe de validation s’écarter de celle d’entraînement après le point orange, l’étape 70. Avec le modèle B, les deux courbes restent collées jusqu’au bout.
Les limites de notre exemple
Notre laboratoire reste un modèle bigramme de 12 321 paramètres, entraîné par une descente de gradient toute simple sur tout son jeu d’entraînement à chaque pas. Il n’utilise ni lots, ni AdamW, ni warmup, ni dropout : ces techniques ne prennent leur sens que sur de grands modèles. Mais la séparation entraînement / validation et le diagnostic du surapprentissage fonctionnent exactement comme pour GPT-2.
Une fois le pré-entraînement terminé, on obtient un modèle de base (base model) : il sait continuer n’importe quel document, mais pas encore dialoguer. Demandez-lui « Quelle est la capitale de la France ? », et il pourrait très bien continuer avec « Quelle est la capitale de l’Espagne ? ». Comment en faire un assistant ? C’est le sujet de la prochaine leçon : du modèle de base à l’assistant.
Le jeu d’entraînement est découpé en lots (batches) traités en parallèle ; la loss moyenne d’un lot donne le gradient, et une époque est un passage complet sur toutes les données. AdamW combine momentum et pas adaptatif pour chaque poids ; le taux d’apprentissage suit un warmup, puis un decay.
Le jeu de validation, jamais utilisé pour ajuster les poids, mesure la généralisation. Une loss d’entraînement qui baisse pendant que la loss de validation remonte signale le surapprentissage. On le combat par plus de données, l’arrêt précoce, le weight decay et le dropout. Les checkpoints sauvegardent poids, état de l’optimiseur et tokenizer ; les lois d’échelle relient la loss aux paramètres, aux données et au calcul.
Scaling Laws for Neural Language Models · OpenAI, arXiv ↗
Optimization and schedules · Hugging Face ↗