Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Surapprentissage : le repérer et le réduire

Après cette leçon: Je peux repérer le surapprentissage d’un réseau et le réduire.

Leçon de 55 min2 commandesLab JupyterLab de science des données : pandas, Matplotlib et scikit-learn dans le navigateur

Qu’est-ce que le surapprentissage ?

Le surapprentissage (overfitting en anglais) arrive quand un modèle apprend ses exemples par cœur au lieu d’apprendre la règle. Il paraît excellent sur les données d’entraînement et se trompe sur les données nouvelles. Il faut donc savoir le repérer et le réduire.

C’est l’élève qui apprend par cœur les corrigés : il réussit ces exercices, puis échoue au contrôle.

À la fin de cette leçon

Remarque

Je peux repérer le surapprentissage d’un réseau et le réduire.

Mots clés

MotCe que ça veut direExemple
Surapprentissageun modèle qui réussit ses exemples et échoue sur des données nouvelles
Jeu d’entraînementles données qui servent à régler les poids
Jeu de validationdes données gardées pour surveiller l’entraînement
Jeu de testdes données gardées pour la note finale
Arrêt précocearrêter l’entraînement quand la validation ne progresse plus
Patiencele nombre d’époques sans progrès qu’on accepte2

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Trois jeux de données pour trois usages

On découpe les données avant d’entraîner. Le jeu d’entraînement règle les poids. Le jeu de validation surveille l’entraînement et sert à choisir les réglages.

Le jeu de test reste fermé jusqu’à la fin. On l’ouvre une seule fois, pour la note finale. Si on s’en sert pour choisir, il n’est plus neuf.

Exemple travaillé : découper 365 jours

JeuPartJoursRôle
Entraînement60 %219Régler les poids
Validation20 %73Surveiller et choisir
Test20 %73Note finale, une seule fois
Total100 %365

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Deux courbes qui s’écartent signalent le surapprentissage

À chaque époque, on note la perte sur l’entraînement et la perte sur la validation. Au début, les deux baissent ensemble.

Puis la perte d’entraînement continue de baisser, alors que celle de validation remonte. L’écart grandit. Le réseau apprend le bruit des exemples, plus la règle.

Exemple travaillé : six époques

ÉpoquePerte d’entraînementPerte de validationÉcart
199,50,5
266,80,8
345,21,2
435,02,0
52,55,63,1
62,26,44,2

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Les écarts des six époques

Commande
docker exec jupyter python3 -c "t = [9, 6, 4, 3, 2.5, 2.2]; v = [9.5, 6.8, 5.2, 5.0, 5.6, 6.4]; print([round(b - a, 1) for a, b in zip(t, v)])"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

L’époque de la plus petite validation

Commande
docker exec jupyter python3 -c "v = [9.5, 6.8, 5.2, 5.0, 5.6, 6.4]; print(v.index(min(v)) + 1)"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Une erreur fréquente

Attention

Beaucoup gardent le réseau de la dernière époque, parce que la perte d’entraînement y est la plus basse. C’est celui qui a vu les exemples le plus longtemps. Gardez celui de la meilleure perte de validation.

L’arrêt précoce coupe l’entraînement au bon moment

On ne sait pas à l’avance quelle époque sera la meilleure. L’arrêt précoce surveille la perte de validation à chaque époque.

On fixe une patience, par exemple 2. L’entraînement s’arrête après 2 époques de suite sans nouveau record. On garde alors les poids de la meilleure époque.

Exemple travaillé : une patience de 2

ÉpoquePerte de validationMeilleure jusque-làÉpoques sans progrès
12,02,00
21,51,50
31,251,250
41,01,00
51,251,01
61,51,02, on s’arrête

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Trouver la meilleure époque en Python

Code: python
# La perte de validation de six époques.
validation = [9.5, 6.8, 5.2, 5.0, 5.6, 6.4]

meilleure = 1
for numero in range(1, len(validation) + 1):
    if validation[numero - 1] < validation[meilleure - 1]:
        meilleure = numero
print("meilleure époque :", meilleure)
print("perte de validation à ce moment :", validation[meilleure - 1])
# Remplacez le dernier nombre par 4.0, puis relancez.
# Quelle est maintenant la meilleure époque ?

D’autres moyens de réduire le surapprentissage

L’arrêt précoce n’est pas le seul moyen. Le tableau ci-dessous en donne quatre autres.

Aucun ne marche toujours. On les essaie un par un, et on juge chaque essai sur la perte de validation.

Quatre moyens de réduire le surapprentissage

MoyenIdéeCe qu’il coûte
Plus de donnéesLe réseau voit plus de cas différentsDes données à trouver
Un réseau plus petitMoins de poids, moins de place pour le bruitUn risque de sous-apprentissage
Le dropoutOn éteint des neurones au hasard à chaque pasUn entraînement plus long
La régularisationOn pénalise les grands poidsUn réglage de plus à choisir

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Dans votre carnet : l’arrêt précoce

Code: python
import pandas as pd
from sklearn.neural_network import MLPClassifier

jours = pd.read_csv("hires.csv")
entrees = jours[["temp_c", "rain_mm"]]
chargees = jours["hires"] >= 300
# 20 % des jours sont gardés pour la validation, et l’arrêt vient après 10 époques sans progrès.
reseau = MLPClassifier(hidden_layer_sizes=(16,), max_iter=500, early_stopping=True,
                       validation_fraction=0.2, n_iter_no_change=10, random_state=0)
reseau.fit(entrees, chargees)
print("époques faites :", reseau.n_iter_)
print("meilleure exactitude de validation :", round(reseau.best_validation_score_, 3))
# Comparez les époques faites avec max_iter, qui vaut 500.

À propos de ce labo et de sa source: Lab JupyterLab de science des données : pandas, Matplotlib et scikit-learn dans le navigateur

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.