Comment un réseau corrige-t-il ses erreurs ?
La descente de gradient est la méthode qui règle les poids d’un réseau de neurones pour réduire son erreur. C’est elle qui transforme un réseau de nombres au hasard en un réseau qui répond bien.
Un loueur de vélos prédit ses locations à partir de la température. Chaque jour, il compare sa prédiction à la réalité, et il corrige un peu son réglage.
À la fin de cette leçon
Remarque
Je peux expliquer comment un réseau de neurones apprend de ses erreurs.
Mots clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Perte | un nombre qui mesure l’erreur du réseau | |
| Gradient | la pente de la perte quand on change un poids | |
| Descente de gradient | corriger les poids en descendant la pente de la perte | |
| Taux d’apprentissage | la taille de chaque correction | 0.125 |
| Époque | un passage sur toutes les données d’entraînement | |
| Rétropropagation | le calcul des gradients, de la sortie vers l’entrée |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
La perte mesure l’erreur du réseau
Pour corriger un réseau, il faut mesurer son erreur en un seul nombre. Ce nombre est la perte.
Pour chaque jour, on prend l’écart entre la prédiction et la vraie valeur, puis on le met au carré. La perte est la moyenne de ces carrés. Elle vaut 0 quand toutes les prédictions sont justes.
Exemple travaillé : la perte pour quatre poids
| Poids | Prédictions (x = 1, puis 2) | Erreurs | Perte |
|---|---|---|---|
| 0 | 0 et 0 | -2 et -4 | (4 + 16) / 2 = 10 |
| 1 | 1 et 2 | -1 et -2 | (1 + 4) / 2 = 2,5 |
| 2 | 2 et 4 | 0 et 0 | 0 |
| 3 | 3 et 6 | 1 et 2 | (1 + 4) / 2 = 2,5 |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
La perte pour cinq poids
docker exec jupyter python3 -c "for w in [0, 1, 2, 3, 4]: print(w, ((w * 1 - 2) ** 2 + (w * 2 - 4) ** 2) / 2)"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.
Le gradient donne le sens de la correction
Imaginez la perte comme une vallée dont le poids est la position. Le gradient est la pente à l’endroit où vous êtes. Il vaut 0 au fond.
Une pente négative veut dire que la perte baisse quand le poids monte : il faut donc l’augmenter. On corrige le poids ainsi : nouveau poids = ancien poids - taux × pente.
Exemple travaillé : un pas depuis le poids 0
| x | y | Prédiction | Erreur | 2 × erreur × x |
|---|---|---|---|---|
| 1 | 2 | 0 | -2 | -4 |
| 2 | 4 | 0 | -4 | -16 |
| Moyenne | -10, c’est la pente | |||
| Nouveau poids | 0 - 0,125 × (-10) = 1,25 |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Quatre pas de descente en Python
xs = [1, 2]
ys = [2, 4]
w = 0.0
taux = 0.125
for pas in range(4):
pente = 0.0
perte = 0.0
for n in range(len(xs)):
erreur = w * xs[n] - ys[n]
pente = pente + 2 * erreur * xs[n] / len(xs)
perte = perte + erreur * erreur / len(xs)
print(pas, "poids", w, "perte", perte, "pente", pente)
w = w - taux * pente
# Passez taux à 0.5 puis relancez.
# Que devient la perte d’un pas au suivant ?
Le taux d’apprentissage règle la taille du pas
Le taux d’apprentissage multiplie la pente. Un petit taux avance prudemment mais lentement. Un grand taux avance vite.
Trop grand, il fait sauter par-dessus le fond de la vallée. Avec un taux de 0,5, le poids passe de 0 à 5, puis à -2,5, puis à 8,75. La perte monte au lieu de baisser.
Une erreur fréquente
Attention
Beaucoup pensent qu’un taux plus grand fait toujours apprendre plus vite. Ce n’est vrai que jusqu’à un seuil. Au-delà, la perte monte : si elle augmente d’une époque à l’autre, baissez le taux.
La rétropropagation calcule les gradients d’un réseau
Un vrai réseau a des milliers de poids. Il faut la pente de la perte pour chacun. La rétropropagation (backpropagation en anglais) les calcule de la sortie vers l’entrée.
Chaque couche reçoit l’erreur de la couche d’après et en tire ses propres pentes. Les bibliothèques font ce calcul pour vous. La boucle d’entraînement, elle, reste celle de cette leçon.