La descente de gradient stochastique (SGD) est un algorithme d’optimisation couramment utilisé pour améliorer les performances des modèles de machine learning. Il s’agit d’une variante de l’algorithme traditionnel de descente de gradient, avec une modification de clé : au lieu de s’appuyer sur l’ensemble du jeu de données pour calculer le gradient à chaque étape, la SGD utilise un seul échantillon de données à la fois.
La descente de gradient (GD) est un algorithme d’optimisation qui minimise une fonction objective de manière itérative. Dans le contexte du machine learning (ML), la descente de gradient est essentielle pour améliorer les performances des modèles d’apprentissage supervisés pendant leur phase d’entraînement. Les modèles de machine learning, comme les réseaux de neurones, sont complexes, non linéaires et à haute dimension. Par conséquent, il n’existe pas d’équation normale pour ces modèles qui permet de calculer les pondérations optimales, contrairement à la régression linéaire. À la place, des méthodes d’approximation telles que les variantes de descente de gradient, les méthodes de Newton et la maximisation de l’espérance peuvent être utilisées.
Chaque modèle possède une fonction de perte, parfois appelée fonction de coût. Cette fonction mesure la distance entre les prédictions d’un modèle et les points de données réels. Imaginez cela comme une mesure de l’« erreur » des prédictions du modèle. Par exemple, l’erreur quadratique moyenne sert souvent de fonction de perte dans les problèmes de régression. La phase d’entraînement du modèle permet de trouver les valeurs de paramètres qui minimisent cette perte. C’est pourquoi, bien souvent, la descente de gradient est la technique d’optimisation utilisée lors de l’entraînement. L’algorithme calcule le gradient, ou la pente, de la perte par rapport aux paramètres du modèle. Avec ce gradient, il fait alors un pas dans la direction opposée pour réduire la perte. Le taux d’apprentissage (également appelé taille de pas ou alpha) correspond à la taille des pas. Il reste fixe pour tous les paramètres du modèle. Ce processus se répète jusqu’à ce que le modèle atteigne une convergence proche d’un minimum.
Dans l’idéal, la convergence se produit au minimum global. Dans la visualisation suivante, on peut voir que la valeur de perte est inférieure au minimum local par rapport à sa zone immédiate, mais pas nécessairement la valeur globale la plus faible. Le minimum global est la valeur la plus faible absolue de la fonction de perte sur l’ensemble de son domaine, représentant la meilleure solution possible pour le problème.
Si le taux d’apprentissage n’est pas suffisamment faible, l’algorithme convergera souvent vers un minimum local. Un taux bien choisi est essentiel pour minimiser la fonction de perte et réaliser une convergence à un minimum global.
Cette visualisation illustre l’effet du taux d’apprentissage sur la convergence. Un faible taux d’apprentissage entraîne une convergence lente mais stable (à gauche), tandis qu’un taux d’apprentissage élevé peut entraîner un dépassement et une instabilité (à droite).
Le principal facteur de différenciation entre la descente de gradient traditionnelle et la descente de gradient stochastique réside dans le fait que la SGD met à jour les poids du modèle à l’aide d’un seul exemple d’entraînement à la fois. L’exemple est choisi au hasard à chaque itération.1 La descente de gradient utilise l’ensemble du jeu de données d’apprentissage pour calculer le gradient avant chaque mise à jour de paramètre. Cette différence dans l’utilisation des données est ce qui rend la SGD beaucoup moins coûteuse en calcul et plus facile à dimensionner pour les grands jeux de données. Le comportement de convergence de la SGD est aussi plus bruyant que le bruit de la GD, car le point de données d’un exemple pourrait ne pas être une bonne représentation du jeu de données. Cette représentation erronée met à jour les points dans une direction légèrement « mauvaise ». Cependant, ce caractère aléatoire permet à la SGD d’être plus rapide et parfois plus efficace pour les problèmes d’optimisation non convexes, car elle permet d’échapper à des minima locaux peu profonds, ou à des points-selles.
À l’origine, la SGD a été définie pour mettre à jour les paramètres en utilisant un échantillon d’entraînement à la fois. Dans son utilisation moderne, le terme « SGD » est utilisé pour signifier « descente de gradient par mini-lots », une variante de la GD dans laquelle de petits lots de données d’entraînement sont utilisés en même temps. Utiliser un sous-ensemble de données plutôt qu’un échantillon unique est avantageux : le niveau de bruit est plus faible, car le gradient est égal à la moyenne des pertes du mini-lot. Pour cette raison, la descente de gradient par mini-lots est la méthode utilisée par défaut en apprentissage profond. En revanche, la SGD stricte est rarement utilisée dans la pratique. Ces termes sont même confondus par la plupart des bibliothèques de machine learning comme PyTorch et TensorFlow ; les optimiseurs sont souvent appelés « SGD », même s’ils utilisent généralement des mini-lots.
L’illustration suivante permet de mieux comprendre comment l’augmentation de la taille des échantillons de données d’entraînement permet de réduire les instabilités et le « bruit ».
Plusieurs autres variantes de GD sont construites sur la descente de gradient de base en ajoutant des mécanismes pour améliorer la vitesse, la stabilité et la convergence.
En accumulant du momentum dans les dimensions avec des gradients cohérents et en atténuant les mises à jour dans les dimensions avec des gradients changeants, le momentum aide la SGD à converger plus rapidement et avec moins de fluctuation.2
Les méthodes de taux d’apprentissage adaptatif, telles qu’AdaGrad et RMSProp, sont uniques car elles adaptent le taux d’apprentissage à chaque paramètre, individuellement. Cette approche est en contradiction avec les méthodes de SGD, qui utilisent un taux d’apprentissage fixe pour tous les paramètres.
AdaGrad (algorithme de gradient adaptatif) : adapte le taux d’apprentissage de chaque paramètre en fonction de ses gradients précédents. Les caractéristiques qui apparaissent moins souvent reçoivent des taux d’apprentissage plus élevés et les fonctionnalités fréquentes reçoivent des taux plus bas. Cette approche signifie que les fonctionnalités peu fréquentes sont apprises plus rapidement qu’avec la SGD. Ce taux d’apprentissage adaptatif en fait une excellente méthode pour le traitement automatique du langage naturel (NLP) et les systèmes de recommandation avec des données éparses, dans lesquelles il existe un grand écart dans la fréquence des caractéristiques.2
RMSProp (Root Mean Square Propagation) : une autre technique d’optimisation du taux d’apprentissage adaptatif qui fait évoluer le taux d’apprentissage pour chaque paramètre en utilisant une moyenne mobile de gradients quadratiques récents. Les connaissances passées sur les gradients sont éliminées et seules les connaissances actuelles sur les gradients sont conservées.4 Le taux d’apprentissage devient plus élevé pour les paramètres avec de petits gradients, et plus petit pour ceux avec de grands gradients. Cette méthode résout le problème de la diminution du taux d’apprentissage avec AdaGrad. RMSProp permet de maintenir la stabilité de l’entraînement en apprentissage profond, en particulier pour des modèles tels que les réseaux de neurones récurrents. Il fonctionne pour les problèmes où l’objectif continue de changer, comme c’est le cas en apprentissage par renforcement.
La SGD et les autres variantes de GD sont utiles lorsque le temps d’entraînement est limité.5
| Variante | Données utilisées par étape | Fonctions principales | Utilisation courante |
|---|---|---|---|
| GD | Toutes les données | Stable mais lent | Petits jeux de données |
| SGD | Un exemple de SGD classique | Bruyant mais rapide | Apprentissage en ligne |
| GD par mini-lots | Quelques échantillons | Équilibrage et évolutivité | Apprentissage en profondeur |
| Momentum | Par lots/mini-lots | Accélère dans la bonne direction | Réseaux neuronaux |
| NAG | Par lots/mini-lots | Momentum vers l’avenir | Convergence plus rapide |
| AdaGrad | Mini-lots | Taux d’apprentissage adaptatifs | Données éparses |
| RMSProp | Mini-lots | Corrige la dégradation d’AdaGrad | RNN, réseaux neuronaux profonds |
| Adam | Mini-lots | Momentum + RMSProp | Choix par défaut aujourd’hui |
L’objectif de la SGD est de trouver des paramètres qui rendent les prédictions de notre modèle aussi proches que possible des véritables valeurs . En d’autres termes, nous voulons minimiser la fonction de perte, .
Dans le cas de la régression linéaire, ces paramètres sont ( poids) et (biais). Ainsi, dans ce cas, minimiser revient à la même chose que minimiser .
Lors de l’enseignement de la descente de gradient, on utilise souvent l’analogie selon laquelle la GD est semblable à la descente d’une montagne jusqu’à l’arrivée dans une vallée (la perte minimale). Imaginez le gradient de la fonction de perte, , qui pointe en montée et qui redescend. Nous devons avancer dans la direction opposée.
La règle générale de mise à jour d’un paramètre est :
où est le taux d’apprentissage et est le gradient de la perte par rapport à .
La SGD utilise un seul échantillon choisi au hasard pour estimer le gradient :
Remarque, l’élément minuscule représente la perte d’un seul exemple d’entraînement. Alors que l’élément majuscule représente la fonction de perte globale (la moyenne de toutes les pertes individuelles sur l’ensemble du jeu de données). Cette erreur globale est ce que nous essayons de minimiser dans le cadre de l’entraînement.
Terminons l’exemple de régression linéaire avec la SGD.
Pour un échantillon , la prédiction est :
La perte locale est l’erreur quadratique pour un échantillon :
Désormais, lors de la rétropropagation, les paramètres du modèle sont mis à jour à l’aide de la règle de la chaîne qui calcule les gradients de la fonction de perte par rapport à chaque paramètre.5 Les gradients (dérivés) sont les suivants :
Avec la SGD, nous mettons à jour chacun de ces paramètres, et , en utilisant les règles suivantes :
Au lieu de calculer un gradient moyen important sur l’ensemble du jeu de données, la SGD utilise une estimation aléatoire légère.
Lorsque vous travaillez avec des cadres des exigences de machine learning, il existe des classes d’optimisation de SGD intégrées que vous pouvez utiliser. Par exemple,
Pour faciliter l’apprentissage, découvrons ensemble une implémentation Python simple de SGD à partir de zéro.
Pour réitérer, notre objectif est de trouver les meilleurs paramètres (les poids du modèle) qui minimisent la fonction de perte (une mesure du degré d’erreur de nos prédictions). Nous mettrons à jour un échantillon après l’autre ou par très petit lot.
Pour commencer, nous pouvons initialiser les valeurs des paramètres (les poids) de manière aléatoire. Ensuite, sélectionnons un point de données aléatoire . À partir de là, nous calculons la prédiction et l’erreur. Pour cette démonstration, essayons de fixer une ligne simple : . L’étape suivante du processus est la rétropropagation, dans laquelle les gradients de la fonction de perte sont calculés par rapport aux paramètres. Ces gradients (dérivés) sont ensuite utilisés pour mettre à jour les paramètres pendant le processus d’optimisation de la SGD. Comme le gradient pointe dans la direction d’augmentation de la fonction de perte, la SGD soustrait chaque gradient de sa valeur de paramètre actuelle respective. Nous pouvons voir cela comme un déplacement dans la direction opposée du gradient pour diminuer la fonction de perte, d’où le terme de « descente » dans la descente de gradient stochastique. Nous répétons ces étapes jusqu’à un nombre fixe d’époques ou une fois que la perte est inférieure à la tolérance, ce qui signifierait que la perte ne change que rarement et que nous n’améliorons plus la fonction objective. En d’autres termes, on s’arrête une fois que l’algorithme converge.
La SGD est la méthode d’optimisation la plus courante pour former des réseaux neuraux. En matière d’apprentissage profond, un sous-ensemble du machine learning dans le domaine plus large de la science des données, l’objectif des ordinateurs est de simuler le pouvoir de décision complexe du cerveau humain. Les modèles de ML traditionnels utilisent des réseaux de neurones simples, composés d’une ou de deux couches. En revanche, les modèles d’apprentissage profond utilisent trois couches ou plus. En règle générale, des centaines ou des milliers de couches sont nécessaires pour entraîner les modèles. Compte tenu de la facilité avec laquelle la SGD évolue pour dimensionner de grands ensembles d’entraînement, il s’agit souvent de l’approche de choix pour former des réseaux neuronaux profonds. Parmi les autres applications d’entraînement de la SGD, citons la régression Ridge, la régression logistique régularisée et l’optimisation de la fonction de perte de dépendance utilisée dans les machines à vecteurs de support (SVM) avec un noyau linéaire.
La SGD est une variante de la GD qui minimise la fonction de perte d’un modèle de machine learning en utilisant un seul échantillon de données à la fois. Cette approche est différente de la GD, qui dépend de l’ensemble du jeu de données à chaque étape pour calculer le gradient. Il existe plusieurs autres variantes de GD qui peuvent être regroupées en méthodes d’apprentissage adaptatives ou basées sur le momentum. La descente de gradient momentum et le gradient accéléré de Nesterov en sont des exemples. Ces méthodes tirent parti du momentum accumulé dans les dimensions avec des gradients cohérents et atténuent les mises à jour dans les dimensions avec des gradients changeants. Ainsi, la SGD permet de converger plus rapidement et avec moins de fluctuations. Les méthodes de taux d’apprentissage adaptatif telles qu’AdaGrad et RMSProp adaptent le taux d’apprentissage à chaque paramètre individuellement, contrairement à la SGD traditionnelle, qui utilise un taux d’apprentissage fixe. En outre, les méthodes hybrides comme Adam offrent une alternative puissante en combinant les forces de la GD basée sur le momentum et de la technique RMSProp.
Entraînez, validez, réglez et déployez une IA générative, des modèles de fondation et des capacités de machine learning avec IBM watsonx.ai, un studio d’entreprise nouvelle génération pour les générateurs d’IA. Créez des applications d’IA en peu de temps et avec moins de données.
Mettez l’IA au service de votre entreprise en vous appuyant sur l’expertise de pointe d’IBM dans le domaine de l’IA et sur son portefeuille de solutions.
Réinventez les workflows et les opérations critiques en ajoutant l’IA pour optimiser les expériences, la prise de décision et la valeur métier en temps réel.
1 Bottou L. (2010). Large-Scale Machine Learning with Stochastic Gradient Descent. Lechevallier Y., Saporta G. (eds) Proceedings of COMPSTAT’2010. Physica-Verlag HD.
2 Ruder S. (2016). An overview of gradient descent optimization algorithms.
3 Tian Y., Zhang Y. et Zhang H. (2023). Recent Advances in Stochastic Gradient Descent in Deep Learning. Mathematics, 11(3), 682.
4 Haji S. H. et Abdulazeez A. M. (2021). Comparison of optimization techniques based on gradient descent algorithm: A review. PalArch’s Journal of Archaeology of Egypt/Egyptology, 18(4), 2715-2743.
5 Bottou L. (2012). Stochastic Gradient Descent Tricks. Montavon G., Orr G.B., Müller KR. (eds) Neural Networks: Tricks of the Trade. Lecture Notes in Computer Science, vol 7700. Springer, Berlin, Heidelberg.