Descente de Gradient
Dans la partie précédente, nous avons découvert le Perceptron, un modèle simple mais instructif. Nous avons vu comment il fonctionne et quelles sont ses limitations. Cependant, nous n'avons pas encore abordé un point crucial : comment le Perceptron apprend ? Comment ajuste-t-il ses poids pour prendre les bonnes décisions ?
C'est là qu'intervient la descente de gradient, l'algorithme d'optimisation au cœur de nombreux modèles de Machine Learning, y compris les réseaux de neurones profonds.
Objectifs de cette Partie
Dans cette partie, nous allons :
- Comprendre l'intuition derrière la descente de gradient.
- Découvrir les concepts clés : fonction de perte, gradient, taux d'apprentissage.
- Visualiser le processus d'optimisation.
La descente de gradient est un concept fondamental en Machine Learning. Il est essentiel de bien le comprendre pour pouvoir entraîner des modèles efficaces.
Descente de Gradient : Intuition - Trouver le Minimum d'une Fonction
L'objectif de la descente de gradient est de trouver le minimum d'une fonction. Pour comprendre l'intuition derrière cet algorithme, imaginez la situation suivante :
Vous êtes en haut d'une montagne, en plein brouillard. Vous ne voyez pas à plus de quelques mètres. Votre objectif est de descendre dans la vallée le plus rapidement possible. Comment faites-vous ?
Une approche intuitive serait de :
- Regarder autour de vous : Sentir la pente du terrain sous vos pieds.
- Faire un pas dans la direction la plus descendante : Vous déplacez légèrement dans la direction qui semble descendre le plus.
- Répéter : Vous répétez les étapes 1 et 2 jusqu'à ce que vous ayez l'impression d'être arrivé au fond de la vallée (vous ne pouvez plus descendre).
La descente de gradient, c'est exactement ça, mais appliqué à une fonction mathématique !
Analogie Mathématique
- La montagne : C'est la fonction dont vous cherchez le minimum. Cette fonction peut avoir plusieurs dimensions (plusieurs variables), mais pour l'instant, imaginez une fonction à une seule variable, ce qui donne une courbe en 2D.
- Votre position : C'est la valeur actuelle des paramètres de votre modèle (par exemple, les poids et le biais du Perceptron).
- La pente du terrain : C'est le gradient de la fonction (nous y reviendrons en détail plus tard). Le gradient indique la direction de la plus forte pente ascendante.
- Le pas dans la direction descendante : C'est l'ajustement que vous faites à vos paramètres. Vous vous déplacez dans la direction opposée au gradient (pour descendre).
- Le fond de la vallée : C'est le minimum de la fonction, c'est-à-dire la valeur des paramètres pour laquelle la fonction atteint sa valeur la plus basse.
Visualisation
Voici un exemple de fonction simple, , et les étapes de la descente de gradient :
Sur ce graphique :
- La courbe bleue représente la fonction .
- Les points rouges représentent les étapes successives de la descente de gradient. On commence par un point de départ arbitraire (par exemple, ).
- À chaque étape, on se déplace dans la direction opposée au gradient (la pente de la courbe).
- On se rapproche progressivement du minimum de la fonction (qui est à ).
L'analogie de la montagne est utile pour comprendre l'intuition de la descente de gradient, mais il faut garder à l'esprit qu'en Machine Learning, les fonctions que l'on optimise ont souvent des centaines, voire des millions de dimensions ! Il est donc impossible de les visualiser directement.
Concept de Perte (Erreur) : Mesurer à Quel Point le Modèle est "Mauvais"
Pour que la descente de gradient fonctionne, il faut être capable de quantifier à quel point notre modèle est "bon" ou "mauvais". C'est le rôle de la fonction de perte (ou fonction de coût, loss function ou cost function en anglais).
Qu'est-ce que la Fonction de Perte ?
La fonction de perte est une fonction mathématique qui prend en entrée :
- Les prédictions du modèle (par exemple, les sorties du Perceptron).
- Les vraies valeurs (les étiquettes ou labels dans le cas de l'apprentissage supervisé).
Elle produit en sortie un nombre qui représente l'erreur du modèle :
- Plus la perte est élevée, plus le modèle est mauvais (ses prédictions sont éloignées des vraies valeurs).
- Plus la perte est faible, plus le modèle est bon (ses prédictions sont proches des vraies valeurs).
L'objectif de l'apprentissage est de minimiser la fonction de perte. C'est là que la descente de gradient entre en jeu : elle permet de trouver les paramètres du modèle (poids et biais) qui minimisent la perte.
Exemples de Fonctions de Perte
Il existe de nombreuses fonctions de perte, chacune adaptée à différents types de problèmes. Voici quelques exemples :
-
Erreur Quadratique Moyenne (Mean Squared Error - MSE) : Couramment utilisée pour les problèmes de régression (prédiction d'une valeur continue).
Où :
- est le nombre d'exemples.
- est la vraie valeur pour l'exemple .
- est la prédiction du modèle pour l'exemple .
La MSE calcule la moyenne des carrés des différences entre les prédictions et les vraies valeurs.
-
Erreur Absolue Moyenne (Mean Absolute Error - MAE) : Également utilisée pour la régression.
La MAE calcule la moyenne des valeurs absolues des différences entre les prédictions et les vraies valeurs.
-
Entropie Croisée Binaire (Binary Cross-Entropy): Souvent utilisé pour les problèmes de classification binaire (prédiction d'une classe parmi deux possibles, comme dans le cas du Perceptron).
Perte dans le Cas du Perceptron
Dans le cas du Perceptron, avec sa fonction d'activation en escalier, on pourrait utiliser une fonction de perte simple : le nombre d'erreurs de classification. Cependant, cette fonction n'est pas idéale pour la descente de gradient, car elle n'est pas différentiable (nous verrons pourquoi plus tard).
En pratique, même pour un Perceptron, on utilise souvent l'entropie croisée binaire, qui est une fonction de perte plus "douce" et mieux adaptée à la descente de gradient. L'important pour le Perceptron, c'est l'algorithme d'apprentissage, qui quantifie l'erreur et ajuste les poids du neurone.
Le choix de la fonction de perte est crucial en Machine Learning. Il dépend du type de problème que l'on cherche à résoudre et du type de modèle que l'on utilise.
Exemple : Prédiction du Prix d'une Maison
Imaginons que vous construisiez un modèle pour prédire le prix d'une maison en fonction de sa surface. Vous avez les données suivantes :
| Surface (m²) | Prix Réel (k€) |
|---|---|
| 50 | 150 |
| 75 | 220 |
| 100 | 300 |
| 125 | 370 |
Votre modèle (pour l'instant, un modèle très simple) prédit le prix comme étant simplement 3 fois la surface :
Où :
- est le prix prédit.
- est la surface.
Calculons l'erreur quadratique moyenne (MSE) pour ce modèle :
| Surface (m²) | Prix Réel (k€) | Prix Prédit (k€) | Erreur (k€) | Erreur² (k€²) |
|---|---|---|---|---|
| 50 | 150 | 150 | 0 | 0 |
| 75 | 220 | 225 | -5 | 25 |
| 100 | 300 | 300 | 0 | 0 |
| 125 | 370 | 375 | -5 | 25 |
La MSE pour ce modèle est de 12.5 (k€)².
Essayons un autre modèle, qui prédit le prix comme étant 2.5 fois la surface plus 50 :
| Surface (m²) | Prix Réel (k€) | Prix Prédit (k€) | Erreur (k€) | Erreur² (k€²) |
|---|---|---|---|---|
| 50 | 150 | 175 | -25 | 625 |
| 75 | 220 | 237.5 | -17.5 | 306.25 |
| 100 | 300 | 300 | 0 | 0 |
| 125 | 370 | 362.5 | 7.5 | 56.25 |
La MSE est beaucoup plus élevée (246.875), ce qui indique que ce deuxième modèle est moins bon que le premier pour prédire le prix des maisons dans cet exemple.
Exemple : Classification Binaire (Perceptron)
Reprenons l'exemple de la porte logique ET, et supposons que notre Perceptron ait les paramètres suivants :
Calculons l'entropie croisée binaire pour chaque exemple de la table de vérité :
| x1 | x2 | y (Sortie Réelle) | Score | p(y) | y * log(p) | (1 - y) * log(1-p) | -[y * log(p) + (1 - y) * log(1-p)] |
|---|---|---|---|---|---|---|---|
| 0 | 0 | 0 | -1 | 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | -0.2 | ~0.45 | ~0 | ~ -0.35 | ~0.35 |
| 1 | 0 | 0 | -0.2 | ~0.45 | ~0 | ~ -0.35 | ~0.35 |
| 1 | 1 | 1 | 0.6 | ~0.64 | ~ -0.29 | 0 | ~0.29 |
L'entropie croisée binaire totale serait la moyenne de ces valeurs (approximativement 0.25).
Ces exemples montrent comment la fonction de perte permet de quantifier la performance d'un modèle, que ce soit pour la régression ou la classification. Plus la perte est faible, meilleur est le modèle.
Rôle des Dérivées (Gradients) : Indiquer la Direction de la Descente
Nous avons vu que la descente de gradient consiste à se déplacer dans la direction opposée au gradient pour minimiser la fonction de perte. Mais qu'est-ce que le gradient, exactement ? Et quel est son lien avec les dérivées ?
Dérivée d'une Fonction à une Variable
Commençons par le cas simple d'une fonction à une seule variable, . La dérivée de en un point , notée ou , représente la pente de la tangente à la courbe de en ce point.
- Si la dérivée est positive, la fonction est croissante en ce point.
- Si la dérivée est négative, la fonction est décroissante en ce point.
- Si la dérivée est nulle, la fonction a un point stationnaire (un minimum, un maximum ou un point d'inflexion).
Exemple :
Pour la fonction , la dérivée est .
- En , la dérivée est (négative, la fonction décroît).
- En , la dérivée est (positive, la fonction croît).
- En , la dérivée est (nulle, la fonction a un minimum).
Gradient d'une Fonction à Plusieurs Variables
Lorsque la fonction a plusieurs variables, on parle de gradient plutôt que de dérivée. Le gradient est un vecteur qui contient les dérivées partielles de la fonction par rapport à chaque variable.
Exemple :
Pour une fonction à deux variables, , le gradient est :
Où :
- est la dérivée partielle de par rapport à (on considère comme une constante).
- est la dérivée partielle de par rapport à (on considère comme une constante).
Le gradient indique la direction de la plus forte pente ascendante de la fonction.
Lien entre Gradient et Descente de Gradient
Dans la descente de gradient, on utilise le gradient de la fonction de perte par rapport aux paramètres du modèle (poids et biais).
- Le gradient indique la direction dans laquelle il faut augmenter les paramètres pour augmenter la perte.
- On veut diminuer la perte, donc on se déplace dans la direction opposée au gradient.
C'est pourquoi on parle de "descente" de gradient : on descend la pente de la fonction de perte en suivant l'opposé du gradient.
Exemple : Perceptron
Dans le cas du Perceptron, on cherche à ajuster les poids () et le biais () pour minimiser la fonction de perte. Le gradient de la perte par rapport aux paramètres est :
Chaque composante de ce vecteur indique comment la perte varie si l'on modifie légèrement le poids ou le biais correspondant. En se déplaçant dans la direction opposée à ce gradient, on est sûr de faire diminuer la perte (au moins localement).
Le gradient est un concept fondamental en optimisation. Il généralise la notion de dérivée aux fonctions à plusieurs variables et indique la direction de la plus forte pente ascendante.
Taux d'Apprentissage : Importance de ce Paramètre
Nous savons maintenant que la descente de gradient utilise le gradient (ou plutôt son opposé) pour déterminer la direction dans laquelle ajuster les paramètres du modèle. Mais de combien faut-il ajuster les paramètres à chaque étape ? C'est là qu'intervient le taux d'apprentissage (learning rate en anglais), souvent noté (alpha).
Qu'est-ce que le Taux d'Apprentissage ?
Le taux d'apprentissage est un scalaire (un nombre) qui contrôle l'amplitude des mises à jour des paramètres à chaque étape de la descente de gradient. Il multiplie le gradient avant que celui-ci ne soit soustrait aux paramètres.
La règle de mise à jour des paramètres devient :
En notation vectorielle, pour l'ensemble des poids et du biais du Perceptron :
Importance du Choix du Taux d'Apprentissage
Le choix du taux d'apprentissage est crucial pour la réussite de la descente de gradient. Un mauvais choix peut empêcher le modèle de converger vers le minimum de la fonction de perte, ou rendre l'apprentissage très lent.
1. Taux d'Apprentissage Trop Petit
Si le taux d'apprentissage est trop petit, les mises à jour des paramètres seront minuscules. Le modèle convergera très lentement, voire pas du tout (si l'on n'effectue pas assez d'itérations).
Inconvénients :
- Apprentissage très lent.
- Risque de rester bloqué dans un minimum local (un "creux" qui n'est pas le minimum global de la fonction).
2. Taux d'Apprentissage Trop Grand
Si le taux d'apprentissage est trop grand, les mises à jour des paramètres seront trop importantes. Le modèle risque d'osciller autour du minimum, voire de diverger (s'éloigner de plus en plus du minimum).
Inconvénients :
- Oscillations autour du minimum.
- Risque de divergence (la perte augmente au lieu de diminuer).
- Impossibilité de trouver le minimum précis.
3. Taux d'Apprentissage Optimal
Un taux d'apprentissage optimal permet de converger rapidement vers le minimum de la fonction de perte, sans oscillations ni divergence.
Visualisations
Ce graphique montre les effets de différents taux d'apprentissage :
- Rouge : Taux trop petit, la descente est lente.
- Bleu: Taux trop grand, la descente oscille et diverge
- Vert : Taux optimal qui permet une bonne convergence.
Comment Choisir le Bon Taux d'Apprentissage ?
Il n'y a pas de règle magique pour choisir le taux d'apprentissage optimal. C'est souvent un processus itératif :
- Commencer par une valeur raisonnable (par exemple, 0.1, 0.01, 0.001).
- Observer la courbe de perte pendant l'entraînement.
- Ajuster le taux d'apprentissage :
- Si la perte diminue trop lentement, augmenter le taux d'apprentissage.
- Si la perte oscille ou diverge, diminuer le taux d'apprentissage.
Il existe des techniques plus avancées pour ajuster automatiquement le taux d'apprentissage pendant l'entraînement (par exemple, les algorithmes Adam, RMSprop).
Un mauvais choix de taux d'apprentissage peut complètement ruiner l'entraînement de votre modèle !
Illustration Graphique : Courbe de Perte en Fonction des Itérations
L'un des meilleurs moyens de surveiller l'apprentissage d'un modèle est de tracer la courbe de perte (loss curve) en fonction du nombre d'itérations (ou époques, epochs en anglais).
Qu'est-ce que la Courbe de Perte ?
La courbe de perte est un graphique qui montre l'évolution de la fonction de perte au fil du temps, c'est-à-dire à chaque mise à jour des paramètres du modèle.
- Axe horizontal : Le nombre d'itérations (ou d'époques).
- Axe vertical : La valeur de la fonction de perte.
Interprétation de la Courbe de Perte
Une courbe de perte typique pour un entraînement réussi devrait avoir l'allure suivante :
- Au début, la perte est élevée, car le modèle n'a pas encore appris.
- Puis, la perte diminue rapidement, au fur et à mesure que le modèle apprend et que ses paramètres s'améliorent.
- Enfin, la perte se stabilise, indiquant que le modèle a convergé (il ne s'améliore plus beaucoup).
Exemples de Courbes de Perte
Voici quelques exemples de courbes de perte, avec leur interprétation :
-
Courbe idéale (verte):
- La perte diminue rapidement au début.
- La perte se stabilise ensuite à une valeur faible.
- C'est le signe d'un apprentissage réussi.
-
Taux d'apprentissage trop faible (rouge) :
- La perte diminue très lentement.
- L'apprentissage n'est pas terminé après 50 itérations.
- Il faudrait soit augmenter le taux d'apprentissage, soit effectuer plus d'itérations.
-
Taux d'apprentissage trop élevé (bleue) :
- La perte oscille beaucoup.
- Elle ne diminue pas de manière régulière
- Le modèle ne converge pas.
- Il faut diminuer le taux d'apprentissage.
-
Signe de surapprentissage: Voir point suivant.
La courbe de perte est un outil de diagnostic essentiel pour l'apprentissage de modèles de Machine Learning. Elle permet de détecter les problèmes (taux d'apprentissage mal réglé, surapprentissage) et de suivre les progrès de l'entraînement.
Le Surapprentissage (Overfitting)
Le surapprentissage est un phénomène courant en Machine Learning. Il se produit lorsque le modèle apprend "trop bien" les données d'entraînement, au point de ne plus être capable de généraliser correctement à de nouvelles données.
Intuition
Imaginez que vous essayiez d'apprendre à un enfant à reconnaître des chats. Vous lui montrez des photos de chats, et il apprend à les identifier.
- Sous-apprentissage : L'enfant n'a vu que quelques photos de chats, et il n'a pas encore bien compris ce qui caractérise un chat. Il risque de confondre un chat avec un chien, par exemple.
- Bon apprentissage : L'enfant a vu suffisamment de photos de chats, et il a compris les caractéristiques générales des chats (fourrure, moustaches, oreilles pointues, etc.). Il est capable de reconnaître un chat qu'il n'a jamais vu auparavant.
- Surapprentissage : L'enfant a vu tellement de photos de chats qu'il a mémorisé des détails spécifiques à ces photos (par exemple, la couleur du collier d'un chat particulier). Il risque de ne pas reconnaître un chat qui a un collier différent, ou qui est dans une position inhabituelle.
En Machine Learning, c'est la même chose. Un modèle surapprend lorsqu'il mémorise les détails des données d'entraînement, au lieu d'apprendre les caractéristiques générales qui lui permettraient de faire de bonnes prédictions sur de nouvelles données.
Comment Détecter le Surapprentissage ?
On détecte généralement le surapprentissage en utilisant deux ensembles de données distincts :
-
Ensemble d'Entraînement (Training Set) :
- C'est l'ensemble de données utilisé pour entraîner le modèle, c'est-à-dire pour ajuster ses paramètres (poids et biais).
- Le modèle "voit" ces données et apprend à partir d'elles.
-
Ensemble de Validation (Validation Set) :
- C'est un ensemble de données que le modèle ne "voit" pas pendant l'entraînement.
- Il est utilisé pour évaluer la performance du modèle sur des données nouvelles, et ainsi détecter le surapprentissage.
- Idéalement, on utilise aussi un ensemble de test, mais il sert à la toute fin.
On trace ensuite les courbes de perte sur les deux ensembles :
- Courbe de perte sur l'ensemble d'entraînement : Diminue au fil des itérations.
- Courbe de perte sur l'ensemble de validation : Diminue au début, puis se stabilise, voire augmente, alors que la perte sur l'ensemble d'entraînement continue de diminuer.
C'est ce décalage entre les deux courbes qui indique le surapprentissage.
Visualisation
Voici un exemple avec un graphique :
Sur ce graphique :
- La courbe bleue représente la perte sur l'ensemble d'entraînement. Elle diminue de manière continue.
- La courbe rouge représente la perte sur l'ensemble de validation. Elle diminue au début, puis commence à augmenter (à partir de l'itération 20 environ).
C'est un signe clair de surapprentissage. Le modèle devient trop "spécialisé" dans les données d'entraînement et perd sa capacité à généraliser à de nouvelles données.
Comment Lutter Contre le Surapprentissage ?
Il existe plusieurs techniques pour lutter contre le surapprentissage :
- Augmenter la quantité de données d'entraînement : Plus le modèle voit d'exemples, moins il risque de mémoriser des détails spécifiques.
- Simplifier le modèle : Utiliser un modèle moins complexe (par exemple, moins de couches ou moins de neurones dans un réseau de neurones).
- Régularisation : Ajouter des termes de pénalité à la fonction de perte pour encourager le modèle à avoir des poids plus petits (ce qui réduit sa complexité).
- Dropout : Désactiver aléatoirement des neurones pendant l'entraînement (une technique spécifique aux réseaux de neurones).
- Early stopping : Arrêter l'entraînement dès que la perte sur l'ensemble de validation commence à augmenter.
Le surapprentissage est un problème majeur en Machine Learning. Il est essentiel de le détecter et de le corriger pour obtenir des modèles performants.
Que Peut-on Déduire d'Autre en Analysant les Courbes de Perte ?
Les courbes de perte (entraînement et validation) sont riches en informations. Elles ne permettent pas seulement de détecter le surapprentissage, mais aussi d'autres problèmes potentiels :
-
Sous-apprentissage (Underfitting) :
- Caractéristiques :
- La perte d'entraînement est élevée.
- La perte de validation est élevée et proche de la perte d'entraînement.
- Interprétation : Le modèle est trop simple pour capturer la complexité des données. Il n'apprend pas suffisamment, même sur les données d'entraînement.
- Solutions possibles :
- Utiliser un modèle plus complexe (plus de paramètres).
- Augmenter le nombre d'itérations d'entraînement.
- Ajouter des caractéristiques (features) plus pertinentes aux données d'entrée.
- Caractéristiques :
-
Manque de Données :
- Caractéristiques :
- La perte d'entraînement est faible.
- La perte de validation est beaucoup plus élevée que la perte d'entraînement, et l'écart entre les deux est important dès le début de l'entraînement.
- La courbe de validation peut être très "bruitée" (beaucoup de variations).
- Interprétation : Le modèle surapprend très vite, car il n'a pas assez de données pour généraliser correctement. Il mémorise les données d'entraînement, mais ne parvient pas à s'adapter à de nouvelles données.
- Solutions possibles :
- Obtenir plus de données (la solution idéale).
- Utiliser des techniques d'augmentation de données (data augmentation) : créer de nouvelles données d'entraînement à partir des données existantes (par exemple, en appliquant des rotations, des zooms ou des retournements à des images).
- Utiliser un modèle plus simple (pour réduire le risque de surapprentissage).
- Utiliser la régularisation.
- Caractéristiques :
-
Problème de convergence:
- Caractéristiques:
- La courbe d'entrainement n'atteint pas une valeur basse, et elle peut aussi être bruitée,
- La courbe de validation est aussi affectée.
- Interprétation: Le modèle n'arrive pas à converger, souvent lié à un mauvais choix de taux d'apprentissage.
- Solution:
- Ajuster le taux d'apprentissage
- Caractéristiques:
-
Bon Apprentissage :
- Caractéristiques :
- La perte d'entraînement diminue régulièrement et atteint une valeur faible.
- La perte de validation diminue également et atteint une valeur faible, proche de la perte d'entraînement.
- L'écart entre les deux courbes est faible.
- Interprétation : Le modèle apprend bien et généralise correctement aux nouvelles données.
- Caractéristiques :
L'analyse des courbes de perte est un art autant qu'une science. Il faut de l'expérience pour interpréter correctement ces courbes et identifier les problèmes potentiels.
Visualisation des Différents Cas
Voici des exemples de graphiques illustrant les différents cas que l'on peut rencontrer en analysant les courbes de perte :
Légende :
- Vert : Bon apprentissage (les courbes d'entraînement et de validation diminuent et restent proches). Traits pleins pour l'entraînement, pointillés pour la validation.
- Rouge: Sous-apprentissage (les deux courbes restent élevées et proches). Traits pleins pour l'entraînement, pointillés pour la validation.
- Bleu : Surapprentissage (la courbe d'entraînement diminue, mais la courbe de validation augmente). Traits pleins pour l'entraînement, pointillés pour la validation.
- Violet: Manque de données (la courbe d'entraînement est basse, mais la courbe de validation est beaucoup plus haute et bruitée). Traits pleins pour l'entraînement, pointillés pour la validation.
- Jaune: Problème de convergence du modèle. Traits pleins pour l'entraînement, pointillés pour la validation.