Aller au contenu principal

Entraîner un modèle : gradients, optimiseurs et taux d’apprentissage

L’entraînement transforme des exemples et un objectif en mises à jour des paramètres. Le calcul direct produit les prédictions, la perte mesure leur écart aux cibles, la rétropropagation calcule les dérivées, puis l’optimiseur utilise ces dérivées. Ces rôles sont distincts : remplacer Adam par SGD ne corrige pas des étiquettes erronées.

Le chapitre sur l’optimisation de Deep Learning distingue la minimisation de l’objectif d’entraînement de l’apprentissage d’un prédicteur qui généralise. La perte d’entraînement dirige les mises à jour ; la validation indique si elles restent utiles sur des exemples inconnus.

Calculer une mise à jour

Prenons le modèle sans constante y^=wx\hat y=wx et les observations fictives (1,2),(2,4)(1,2),(2,4). Utilisons la moitié de l’erreur quadratique moyenne :

L(w)=12ni(wxiyi)2,g(w)=1ni(wxiyi)xi.L(w)=\frac{1}{2n}\sum_i(wx_i-y_i)^2, \qquad g(w)=\frac{1}{n}\sum_i(wx_i-y_i)x_i.

À w=0w=0, la perte vaut 55 et le gradient 5-5. Avec η=0.1\eta=0.1, la mise à jour wwηgw\leftarrow w-\eta g donne w=0.5w=0.5 et une perte de 2.81252.8125. Le gradient négatif indique qu’augmenter le poids réduit localement l’erreur ; une augmentation arbitrairement grande peut toutefois l’aggraver.

Ici, L(w)=1.25(w2)2L(w)=1.25(w-2)^2. L’écart à l’optimum satisfait :

wt+12=(12.5η)(wt2).w_{t+1}-2=(1-2.5\eta)(w_t-2).

Il diminue uniquement pour 0<η<0.80<\eta<0.8. À 0.80.8, il oscille avec une amplitude constante ; au-delà, il diverge. Ce seuil appartient à cet exemple quadratique, pas aux réseaux neuronaux en général.

x, y = [1.0, 2.0], [2.0, 4.0]
w, learning_rate = 0.0, 0.1
for step in range(50):
gradient = sum((w * a - b) * a for a, b in zip(x, y)) / len(x)
w -= learning_rate * gradient
loss = sum((w * a - b) ** 2 for a, b in zip(x, y)) / (2 * len(x))
assert abs(w - 2.0) < 2e-6
print(round(w, 6), round(loss, 10))

Cet exemple utilise seulement la bibliothèque standard. Il illustre le calcul, sans jeu de test ni mesure de généralisation. Pour un modèle avec constante et une expérience visuelle, voir la régression linéaire.

Pourquoi travailler par lots

Un gradient complet parcourt toutes les observations avant chaque mise à jour. Un mini-lot l’estime à partir d’un sous-ensemble. Avec un échantillonnage approprié et une perte moyenne par exemple, cette estimation vise le gradient complet ; les paramètres changent néanmoins entre les mises à jour et les directions restent bruitées. Dive into Deep Learning explique ce point de vue stochastique.

Un step est une mise à jour de l’optimiseur ; une époque correspond à un parcours du jeu d’entraînement. Avec 1 000 exemples et des lots de 100, une époque comporte généralement 10 mises à jour. Accumuler quatre mini-lots avant d’actualiser les paramètres modifie ce nombre et la taille effective du lot. Il faut conserver une normalisation cohérente : additionner quatre pertes déjà moyennées sans diviser par quatre multiplie le gradient par quatre. Des couches dépendant du lot ou des opérations aléatoires peuvent aussi empêcher l’équivalence avec un seul grand lot.

Des lots plus grands peuvent mieux utiliser le matériel, mais demandent davantage de mémoire d’activation et produisent moins de mises à jour par parcours. Comparer seulement le nombre d’époques masque ces différences. Suivre également les exemples ou tokens traités, les mises à jour, le temps et la qualité.

Ce que conserve l’optimiseur

SGD utilise le gradient courant. Le momentum conserve aussi une direction moyenne des étapes précédentes, ce qui peut réduire les oscillations. Adam estime les premier et deuxième moments des gradients pour adapter les mises à jour. Ces états occupent de la mémoire : un modèle qui tient en mémoire pour l’inférence peut ne plus y tenir avec gradients, états d’optimisation et activations nécessaires au calcul arrière.

Les mises à jour orange du momentum traversent les courbes de niveau bleues et se rapprochent de l’origine après des oscillations verticales.Voir l’image en grand

Les courbes bleues relient les points de même perte ; les points orange sont les paramètres après chaque mise à jour. Cet exemple distinct à deux dimensions utilise f(x₁,x₂) = 0,1x₁² + 2x₂², un taux de 0,6 et un coefficient de momentum de 0,5. Les oscillations verticales diminuent à l’approche de (0, 0). Avec le même taux et le même objectif, la descente de gradient ordinaire diverge. Les gradients sont déterministes : les oscillations ne viennent pas de mini-lots et ne représentent pas le cas scalaire w précédent.

La définition d’AdamW dans PyTorch sépare la décroissance des poids de la mise à jour adaptative. Ajouter une pénalité L2 à la perte et régler le weight decay d’AdamW ne sont donc généralement pas interchangeables. Préciser la convention avant de réutiliser un coefficient de régularisation.

Aucun optimiseur ne fournit un taux d’apprentissage universel. L’échelle des entrées, l’initialisation, les lots et la normalisation de la perte changent la plage utile. Un warmup augmente progressivement le taux au début ; un calendrier de décroissance le réduit ensuite. Ces mécanismes règlent l’amplitude des mises à jour, sans prouver que la tâche est apprise.

Interpréter les échecs

Si les pertes d’entraînement et de validation restent élevées, essayer d’abord d’ajuster un petit sous-ensemble propre. Un échec suggère une cible incorrecte, un gradient interrompu, un objectif inadapté ou un mauvais pas. Si ce sous-ensemble est appris mais pas les données complètes, la capacité et le budget d’optimisation deviennent des explications plausibles.

Si l’entraînement progresse tandis que la validation se dégrade, les nouvelles mises à jour ajustent des distinctions qui se transfèrent mal. Vérifier les doublons et les groupes répartis entre jeux avant de modifier la régularisation. Choisir arrêt et hyperparamètres sur la validation ; consulter le test après chaque essai en fait un autre jeu de validation. Voir séparation des données et fuites.

Des pertes non finies demandent de vérifier entrées, divisions, exponentielles, normes des gradients et précision numérique. L’écrêtage peut limiter la norme du gradient, mais ne répare ni les mauvaises étiquettes ni les valeurs manquantes. Une perte immobile peut aussi venir de gradients effacés au mauvais moment ou accumulés involontairement entre étapes.

Reprendre le même entraînement

Sauvegarder les poids suffit pour réutiliser le prédicteur. Reprendre la même trajectoire nécessite aussi les états de l’optimiseur et du calendrier, le compteur de mises à jour et les états pertinents du hasard et du chargement des données. Avec les mêmes poids mais un momentum réinitialisé, l’étape suivante peut changer. Conserver également prétraitement et définition des étiquettes.

Le préentraînement et le post-entraînement expliquent ensuite d’où viennent les cibles ; LoRA et la distillation expliquent quels paramètres, ou quel modèle, apprennent à partir d’elles.

Explorer les liensOuvrir le réseau