Aller au contenu principal

Module 9 — Courbes d'apprentissage : lire un surapprentissage

Tracer la perte d'entraînement et la perte de validation en fonction des époques est le geste de diagnostic le plus rentable du deep learning. Deux courbes, et l'essentiel de ce qui va mal devient lisible. Ce module apprend à les lire.

Les cinq situations à reconnaître

Ce que montrent les courbesDiagnosticCe qu'il faut faire
Les deux pertes baissent et se rejoignententraînement saincontinuer, puis surveiller
Les deux restent hautessous-apprentissageagrandir le réseau, entraîner plus longtemps, augmenter le taux
L'entraînement baisse, la validation remontesurapprentissagerégulariser, arrêt anticipé, plus de données
La perte oscille violemmenttaux trop élevé ou lot trop petitréduire le taux, agrandir le lot
La perte ne bouge pas du touterreur techniquevérifier données, étiquettes, zero_grad()

Les deux dernières lignes méritent d'être distinguées avec soin, car on les confond souvent. Une perte qui oscille signifie que l'optimisation avance, mais trop brutalement. Une perte plate dès le départ n'est presque jamais un problème d'optimisation : c'est un bogue. Gradients non propagés, taux d'apprentissage nul, étiquettes mal alignées avec les entrées, ou optimiseur.zero_grad() oublié.

Le surapprentissage n'est pas l'ennemi

Contre-intuitif mais important : voir la validation remonter n'est pas un échec, c'est une information. Cela prouve que le réseau a la capacité d'apprendre les données. Le point où les deux courbes se séparent indique le moment optimal, que l'arrêt anticipé du module 7 capture automatiquement.

La situation véritablement préoccupante est l'inverse : deux courbes qui restent hautes et collées. Là, le réseau n'apprend rien, et le diagnostic est plus difficile parce que les causes possibles sont nombreuses — capacité insuffisante, taux mal réglé, données non informatives, ou défaut de préparation.

Le test qu'il faut faire avant tout entraînement long

Voici l'habitude la plus utile de ce cours, et elle prend deux minutes : surajuster délibérément un tout petit échantillon.

Prenez une dizaine d'observations et entraînez le réseau dessus, sans aucune régularisation, jusqu'à ce que la perte atteigne pratiquement zéro.

petit = torch.utils.data.Subset(donnees_entrainement, range(10))
chargeur = torch.utils.data.DataLoader(petit, batch_size=10)

for epoque in range(300):
for X_lot, y_lot in chargeur:
optimiseur.zero_grad()
perte = critere(modele(X_lot), y_lot)
perte.backward()
optimiseur.step()
if epoque % 50 == 0:
print(f"epoque {epoque} : perte {perte.item():.5f}")

L'interprétation est binaire et sans appel. Si la perte tend vers zéro, la chaîne complète fonctionne : les données arrivent bien, les gradients circulent, l'optimiseur agit. Vous pouvez lancer l'entraînement complet en confiance. Si elle stagne, il y a un bogue, et il est inutile d'espérer que le problème se règle sur des données plus nombreuses. Cherchez du côté de l'alignement des étiquettes, de la forme des tenseurs, du taux d'apprentissage ou d'un zero_grad() manquant.

Ce test évite régulièrement des heures d'entraînement sur un pipeline défectueux.

Deux signaux qui doivent inquiéter

Une perte de validation inférieure à la perte d'entraînement surprend, mais elle a le plus souvent une explication bénigne : l'abandon et la normalisation par lots pénalisent l'entraînement et sont désactivés en validation, et la perte d'entraînement est moyennée pendant l'époque alors que celle de validation est mesurée à la fin. Si l'écart est important et persistant, en revanche, soupçonnez un jeu de validation trop facile ou une fuite de données.

Une performance excellente dès la première époque doit déclencher exactement le réflexe du cours précédent : chercher une fuite. Le module 8 du cours sur l'ingénierie des variables décrit les quatre familles à passer en revue.

Ce qu'il faut journaliser

Au-delà des deux pertes, trois séries se révèlent précieuses en diagnostic. Le taux d'apprentissage effectif, pour vérifier que la planification fait ce que vous croyez. La norme des gradients, qui révèle évanescence et explosion comme au module 6. Et la métrique métier — exactitude, aire sous la courbe ROC — car une perte qui baisse pendant que la métrique stagne signale souvent un problème de calibration ou de déséquilibre des classes.

En résumé

  • Deux courbes suffisent à distinguer entraînement sain, sous-apprentissage, surapprentissage, taux trop élevé et bogue technique.
  • Une perte plate dès le départ est un bogue, pas un problème d'optimisation ; une perte qui oscille est un problème de pas.
  • Le surajustement délibéré d'un petit échantillon valide toute la chaîne en deux minutes et doit précéder tout entraînement long.
  • Une validation meilleure que l'entraînement s'explique souvent par l'abandon et le moment de la mesure ; un score excellent d'emblée appelle une recherche de fuite.

Module suivant : la mise en pratique, avec un premier réseau entraîné de bout en bout.