La descente de gradient
Ce que ce chapitre apporte
- Dire pourquoi une formule fermée n'existe pas en général.
- Écrire l'itération de la descente de gradient et le rôle du pas.
- Reconnaître les quatre régimes : ramper, converger, rebondir, diverger.
- Calculer à la main le gradient d'une erreur quadratique et le vérifier numériquement.
- Expliquer pourquoi la mise à l'échelle change le nombre d'itérations d'un facteur cent.
- Distinguer minimum local et minimum global, et dire quand cela compte.
- Comparer descente par lots, par mini-lots et stochastique.
Pourquoi il faut chercher
Il suffit de très peu pour perdre cela. Une fonction de sortie qui n'est pas l'identité, une pénalité qui n'est pas quadratique, deux couches de calcul l'une après l'autre : dans chacun de ces cas, annuler les dérivées donne un système qu'aucune méthode ne résout exactement.
Or l'objectif reste le même : trouver les paramètres qui rendent l'erreur minimale. Puisqu'on ne sait plus résoudre, on va chercher, et la seule information disponible en un point est la pente de l'erreur.
Partir d'une valeur quelconque des paramètres, puis répéter :
où est le gradient de l'erreur, c'est-à-dire le vecteur de ses dérivées partielles, et le pas d'apprentissage.
Le gradient pointe dans la direction où l'erreur monte le plus vite. On avance donc dans la direction opposée.
La distance est le produit du pas par la pente. Elle est donc grande là où c'est raide et petite là où c'est plat. La descente ralentit d'elle-même en approchant, ce qui est une propriété heureuse et non un réglage.
L'arrêt vient tout seul : au minimum, la pente est nulle, donc le déplacement aussi. L'algorithme se fige sans qu'on ait à lui dire de s'arrêter.
La figure ci-dessous déroule cela sur une parabole. Le curseur du pas est le sujet du chapitre : il faut le pousser dans tous les sens.
La pente est nulle : plus aucun saut ne déplace quoi que ce soit. La descente est arrivée.
Pas bien réglé (0,25) : la descente arrive en quelques sauts, chacun plus court que le précédent.
Pas trop grand (0,9) : chaque saut dépasse le minimum et atterrit de l'autre côté, mais plus près. La descente rebondit et finit par arriver.
Pas au-delà de la limite (1,25) : chaque saut dépasse le minimum plus loin que le précédent. La position s'échappe et l'erreur part à l'infini.
Le cas exactement critique mérite d'être vu : à 0,5 la descente arrive en un seul saut, et à 1,0 elle saute éternellement entre 8 et sans jamais s'approcher.
Ce facteur est inférieur à 1, donc la descente converge, tant que . Il vaut exactement 0 pour , ce qui explique l'arrivée en un seul saut. Il vaut pour , ce qui explique le rebond éternel.
En dimension quelconque, est remplacé par la plus grande courbure de la surface d'erreur. La limite du pas est donc fixée par la direction la plus raide, alors que la vitesse d'arrivée est fixée par la direction la plus plate. Tout le problème du conditionnement est là, et il est traité plus bas.
Le gradient, calculé puis vérifié
L'erreur vaut .
Sa dérivée par rapport à la composante de vaut .
En notation matricielle, cela s'écrit , ce qui est exactement la ligne de code.
Le facteur vient du carré, et la division par rend l'erreur indépendante du nombre d'exemples, ce qui permet de garder le même pas quand la taille du jeu change.
Un gradient faux ne provoque pas d'erreur : il produit un apprentissage qui converge mal, ou vers autre chose, et l'on cherche alors le problème partout ailleurs. Quelques lignes de vérification épargnent des heures.
Utiliser la forme centrée, avec et : son erreur est en alors que la forme simple est en . Avec les deux gradients doivent coïncider sur cinq ou six décimales, ce que fait le bloc ci-dessus.
Le pas, en figure
En bas, l'écart du coefficient au but. C'est là que tout se voit : le pas 0,005 rampe en ligne droite sans arriver, le pas 0,20 arrive en huit tours, le pas 0,95 zigzague de part et d'autre en s'approchant lentement, et le pas 1,05 zigzague en s'éloignant.
Le tableau confirme les valeurs : à 0,005 l'erreur reste à 339 alors que le plancher est à 2,16, et à 0,95 elle vaut 2,36, c'est-à-dire qu'après quarante tours elle n'est toujours pas arrivée.
Le conditionnement, ou pourquoi la mise à l'échelle est indispensable
La figure explique pourquoi. À gauche, les lignes de niveau sont des ellipses très allongées : la surface est un ravin étroit, raide dans une direction et presque plate dans l'autre. Le gradient pointe vers la paroi du ravin, pas vers le fond, et la descente monte la paroi puis s'arrête, sans jamais parcourir la longueur.
À droite, les lignes de niveau sont des cercles. Le gradient pointe exactement sur le but, et la descente y va en ligne droite.
La raison en une phrase : la limite du pas est fixée par la direction la plus raide, tandis que la vitesse d'arrivée est fixée par la direction la plus plate. Plus l'écart entre les deux est grand, plus le pas admissible est petit par rapport à la distance à parcourir.
Tout ce qui apprend par descente de gradient est concerné, ce qui veut dire à peu près tout ce que ce module verra ensuite. C'est pourquoi la standardisation est une étape systématique et non un raffinement.
Le minimum trouvé n'est pas forcément le bon
La pente est nulle : plus aucun saut ne déplace quoi que ce soit. La descente est arrivée.
La pente est nulle : plus aucun saut ne déplace quoi que ce soit. La descente est arrivée.
Un minimum local est un point dont aucun voisin immédiat n'a une erreur plus faible.
Un minimum global est le point de plus faible erreur de tout l'espace.
La descente de gradient ne sait aller que vers un minimum local, puisque son unique information est la pente immédiate.
En petite dimension, on peut relancer depuis plusieurs départs et garder le meilleur, comme pour les k moyennes du chapitre 4. C'est exactement le même remède au même problème.
En grande dimension, la question change de nature. Avec des millions de paramètres, les vrais minima locaux sont rares : ce que l'on rencontre sont surtout des points-selles, descendants dans certaines directions et montants dans d'autres, dont le bruit des mini-lots suffit à sortir.
Et surtout, l'objectif n'est pas de minimiser l'erreur sur les données d'apprentissage : c'est de bien se comporter sur des données nouvelles. Un minimum local un peu moins profond fait souvent tout aussi bien, parfois mieux. Le chapitre suivant est entièrement consacré à cette distinction.
Lots, mini-lots, stochastique
Par lots entiers : le gradient est calculé sur toutes les données. Une mise à jour par passage, exacte et coûteuse.
Stochastique : le gradient est calculé sur un seul exemple. Autant de mises à jour que d'exemples, chacune très bruitée.
Par mini-lots : le gradient est calculé sur un petit paquet, typiquement 32 à 256 exemples. C'est le compromis employé partout.
À gauche, le stochastique et les mini-lots atteignent le plancher dès le premier passage sur les données, là où les lots entiers en demandent quatre. Pour le même coût en lectures, on a fait 2000 pas au lieu d'un seul.
À droite, en zoomant sur le plancher, le tableau s'inverse. Les lots entiers s'y posent exactement et n'en bougent plus. Les mini-lots restent juste au-dessus. Le stochastique rebondit sans cesse entre 0,99 et 1,06, sans jamais se poser.
C'est le compromis complet, en une figure : plus de mises à jour donne une descente plus rapide et une arrivée moins précise. Le bruit est le prix de la vitesse.
Elle permet de sortir des points-selles et des minima peu profonds, là où un gradient exact resterait bloqué.
Elle rend le coût d'une mise à jour indépendant de la taille du jeu, ce qui est la seule façon d'apprendre sur des données qui ne tiennent pas en mémoire.
Elle agit comme une régularisation légère, en empêchant de se poser exactement au fond du minimum d'apprentissage, ce qui se révèle souvent bénéfique sur des données nouvelles.
La contrepartie s'annule en diminuant le pas au fil des passages : on garde le bruit tant qu'il aide à explorer, puis on le réduit pour se poser.
Le moment : accumuler les gradients successifs, comme une bille qui garde son élan. Cela traverse les ravins étroits sans osciller d'une paroi à l'autre.
Un pas par paramètre : diviser le pas de chaque coordonnée par l'ampleur récente de son gradient. Les directions plates avancent alors autant que les raides, ce qui corrige en partie le problème de conditionnement vu plus haut. C'est l'idée d'Adam, l'optimiseur employé par défaut aujourd'hui.
Un pas qui décroît : grand au début pour explorer, petit à la fin pour se poser.
Aucune de ces idées ne change la nature de la méthode. Elles règlent le pas mieux qu'à la main, et c'est tout.
Exercices type
Pourquoi la descente ralentit-elle toute seule en approchant du minimum ?
Parce que la distance parcourue à chaque saut est le produit du pas par la pente, et que la pente s'annule au minimum.
Loin du minimum, la surface est raide, la pente est grande, les sauts sont longs. Près du minimum, elle s'aplatit, et les sauts se raccourcissent d'eux-mêmes.
C'est une propriété de la méthode, pas un réglage : rien dans le code ne dit de ralentir.
C'est aussi ce qui fait que l'algorithme s'arrête sans qu'on le lui demande. Au minimum exact, le déplacement est nul.
La courbe d'erreur descend régulièrement. Le pas est-il bien réglé ?
On ne peut pas le dire à partir de cette seule courbe.
Le chapitre le montre : avec un pas de 0,95, la descente saute de part et d'autre du but à chaque tour, et son erreur baisse pourtant à chaque saut. La courbe d'erreur est lisse et le comportement est mauvais.
Ce qu'il faut regarder est la trajectoire des paramètres, ou à défaut la vitesse d'arrivée : après quarante tours, le pas 0,20 est au plancher de 2,1617 tandis que le pas 0,95 est encore à 2,36.
Une courbe d'erreur qui descend écarte seulement la divergence. Elle ne dit rien sur le fait qu'on aurait pu arriver dix fois plus vite.
Une descente diverge. Quelles sont les causes possibles, et dans quel ordre les examiner ?
Le pas trop grand, d'abord et presque toujours. Le diviser par dix et regarder. Si la divergence disparaît, c'était cela.
Des attributs non mis à l'échelle, ensuite. Un attribut à grande étendue rend la surface très raide dans sa direction, ce qui abaisse la limite du pas pour tout le monde. Standardiser, puis retenter avec le pas initial.
Un gradient faux, enfin. Le vérifier par différence finie centrée. Un signe inversé produit une remontée systématique, qui ressemble à s'y méprendre à un pas trop grand.
Ces trois causes couvrent la quasi-totalité des cas, et il est inutile de chercher plus loin avant de les avoir écartées.
Faut-il craindre les minima locaux ?
En petite dimension, oui, et le remède est de relancer depuis plusieurs départs, exactement comme pour les k moyennes. Le chapitre en donne l'exemple : la même erreur et le même pas, deux départs différents, deux vallées d'erreurs 3,90 et .
En grande dimension, beaucoup moins. Avec des millions de paramètres, un vrai minimum local exige que la surface remonte dans toutes les directions à la fois, ce qui est très improbable. On rencontre plutôt des points-selles, dont le bruit des mini-lots suffit à sortir.
Et surtout, la question est mal posée. L'objectif n'est pas de minimiser l'erreur sur les données d'apprentissage mais de bien se comporter sur des données nouvelles, et le minimum global de la première n'est pas nécessairement le meilleur choix pour la seconde.
Pourquoi la mise à l'échelle change-t-elle le nombre d'itérations d'un facteur cent ?
Parce que la limite du pas est fixée par la direction la plus raide de la surface, alors que la vitesse d'arrivée est fixée par la direction la plus plate.
Sans mise à l'échelle, les lignes de niveau sont des ellipses très allongées. Le pas doit rester assez petit pour ne pas diverger dans la direction raide, ce qui le rend ridiculement petit par rapport à la distance à parcourir dans la direction plate. Le gradient pointe alors vers la paroi du ravin plutôt que vers le fond.
Après standardisation, les lignes de niveau deviennent des cercles, le gradient pointe droit sur le but, et la descente y va en ligne droite.
Le chapitre le mesure : cent tours contre plus de dix mille, sur exactement les mêmes données.
Quelle taille de lot choisir ?
Des mini-lots, de 32 à 256 exemples, dans la quasi-totalité des cas.
Les lots entiers donnent un gradient exact et une arrivée précise, mais une seule mise à jour par passage sur les données. Ils sont impraticables dès que le jeu ne tient plus en mémoire.
Le stochastique, un exemple à la fois, avance très vite au début mais rebondit indéfiniment autour du minimum sans jamais s'y poser, comme le montre la figure du chapitre.
Les mini-lots prennent le meilleur des deux : assez d'exemples pour que le gradient soit à peu près juste, assez peu pour faire beaucoup de mises à jour, et une taille qui exploite bien le calcul vectoriel.
Le résidu de bruit se règle en diminuant le pas au fil des passages.
1.Que fait la descente de gradient à chaque itération ?
2.Un pas trop grand produit…
3.La courbe d'erreur descend régulièrement. Que peut-on en conclure ?
4.Pourquoi standardiser avant une descente de gradient ?
5.Comment vérifier qu'un gradient calculé à la main est juste ?
6.Par rapport aux lots entiers, la descente stochastique…
La méthode
- Standardiser les attributs, sans exception, avant toute descente.
- Écrire le gradient à la main, puis le vérifier par différence finie centrée.
- Partir d'un pas modeste, puis le multiplier par trois tant que la descente reste stable.
- Tracer l'erreur en échelle logarithmique au fil des tours, et non seulement sa valeur finale.
- Regarder aussi la trajectoire des paramètres, où le rebond se voit et où l'erreur ne le montre pas.
- Employer des mini-lots de 32 à 256, et rebattre les données à chaque passage.
- Diminuer le pas au fil des passages pour se poser.
- Relancer depuis plusieurs départs quand la dimension est petite et la surface accidentée.
Synthèse
- La formule fermée du chapitre précédent est l'exception ; en général il faut chercher.
- La descente répète : la pente donne la direction, le pas multiplié par la pente donne la distance.
- Elle ralentit d'elle-même en approchant, et s'arrête là où la pente est nulle.
- Quatre régimes : ramper, converger, rebondir, diverger. Sur , la limite est .
- Une courbe d'erreur lisse n'est pas la preuve d'un bon réglage ; la trajectoire des paramètres l'est.
- Le gradient de l'erreur quadratique vaut , et se vérifie par différence finie centrée.
- La mise à l'échelle n'est plus une commodité : cent tours contre plus de dix mille sur les mêmes données.
- Des lignes de niveau allongées signifient que le gradient pointe vers la paroi du ravin, pas vers le fond.
- La descente ne trouve qu'un minimum local ; le résultat dépend du départ.
- En grande dimension, les points-selles sont le vrai obstacle, et le bruit des mini-lots en sort.
- Mini-lots de 32 à 256 partout : assez précis pour avancer droit, assez nombreux pour avancer vite.
- Le bruit du gradient est aussi un avantage, et son résidu se règle en diminuant le pas.