Qu’est-ce que la descente de gradient stochastique ?

Qu’est-ce que la descente de gradient stochastique ?

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.

Descente de gradient

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.

Représentation graphique de la convergence Représentation graphique de la convergence

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.

Minimum local et global dans un espace à tridimensionnel Minimum local et global dans un espace à tridimensionnel

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.

Effet du taux d’apprentissage sur la convergence Effet du taux d’apprentissage sur la convergence

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).

De la GD à la SGD

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 ».

Variantes de la descente de gradient

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.

Méthodes basées sur le momentum :

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

SGD avec et sans momentum
  • Descente de gradient de momentum : intègre un terme de « vitesse », une moyenne des gradients précédents qui donne plus d’importance aux gradients récents. Cette approche réduit les fluctuations, permettant ainsi à l’algorithme de se déplacer plus rapidement dans la bonne direction.

  • NAG (descente de gradient accélérée de Nesterov) : une méthode de momentum améliorée qui accélère et facilite la convergence en « regardant en avant », là où les paramètres se dirigent, avant de calculer le gradient. En d’autres termes, la méthode anticipe le gradient futur et utilise ces informations pour informer l’étape de mise à jour actuelle.3

Méthodes de taux d’apprentissage adaptatif :

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.

Méthodes hybrides :

  • Adam (Adaptive Moment Estimation) : associe la GD basée sur le momentum et la technique de RMSProp en suivant à la fois les gradients passés et la moyenne des gradients quadratiques.4Cette association permet d’obtenir un taux de convergence rapide, même pour les jeux de données bruités et clairsemés.3 De plus, les hyperparamètres par défaut, comme le taux d’apprentissage de 0,001 dans de nombreux cadres, fonctionnent immédiatement. En revanche, pour les jeux de données à très grande échelle, la SGD avec momentum peut conduire à une meilleure généralisation. Les ajustements agressifs par paramètre de la méthode Adam peuvent entraîner un surajustement des données d’entraînement ou l’installation dans des minima nets qui ne se généralisent pas aussi bien.

La SGD et les autres variantes de GD sont utiles lorsque le temps d’entraînement est limité.5

VarianteDonnées utilisées par étapeFonctions principalesUtilisation courante
GDToutes les donnéesStable mais lentPetits jeux de données
SGDUn exemple de SGD classiqueBruyant mais rapideApprentissage en ligne
GD par mini-lotsQuelques échantillonsÉquilibrage et évolutivitéApprentissage en profondeur
MomentumPar lots/mini-lotsAccélère dans la bonne directionRéseaux neuronaux
NAGPar lots/mini-lotsMomentum vers l’avenirConvergence plus rapide
AdaGradMini-lotsTaux d’apprentissage adaptatifsDonnées éparses
RMSPropMini-lotsCorrige la dégradation d’AdaGradRNN, réseaux neuronaux profonds
AdamMini-lotsMomentum + RMSPropChoix par défaut aujourd’hui

Comprendre le raisonnement

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 y . En d’autres termes, nous voulons minimiser la fonction de perte, L(θ) .

Dans le cas de la régression linéaire, ces paramètres sont w ( poids) et b (biais). Ainsi, dans ce cas, minimiser L(θ) revient à la même chose que minimiser  L(w,b) .

 yi^=w·xi+b

L(w,b)=1ni=1n(yi-yi^)2

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, L , 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 :

θ:=θ-η·θL(θ)

où η est le taux d’apprentissage et θL(θ) est le gradient de la perte par rapport à θ .

La SGD utilise un seul échantillon choisi au hasard (xi,yi) pour estimer le gradient :

θL(θ)θ(xi,yi;θ)

Remarque, l’élément minuscule (xi,yi;θ) représente la perte d’un seul exemple d’entraînement. Alors que l’élément majuscule L(θ) 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.

Exemple : régression linéaire avec la SGD

Terminons l’exemple de régression linéaire avec la SGD.

Pour un échantillon (xi,yi) , la prédiction est :

 yi^=w·xi+b

La perte locale est l’erreur quadratique pour un échantillon :

 (xi,yi;w,b)=(yi-(wxi+b))2

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 :

 w=-2xi(yi-(wxi+b))

 b=-2(yi-(wxi+b))

Avec la SGD, nous mettons à jour chacun de ces paramètres, w et b , en utilisant les règles suivantes :

 w:=w-η·(-2xi(yi-(wxi+b)))

 b:=b-η·(-2(yi-(wxi+b)))

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.

Implémentation Python simple de la SGD

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, torch.optim.SGD  pour PyTorch, tf.keras.optimizers.SGD  pour Keras intégrée à TensorFlow, et SGDRegressor  pour Scikit-learn.

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 (x,y) . À partir de là, nous calculons la prédiction et l’erreur. Pour cette démonstration, essayons de fixer une ligne simple : y=mx+b . 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.

import numpy as np 
 
def stochastic_gradient_descent(X, y, lr=0.01, epochs=100, tol=1e-6): 
    “”” 
    Perform Stochastic Gradient Descent (SGD) to fit a line y = w*x + b 
     
    Parameters: 
        X (ndarray): Input features 
        y (ndarray): Target values 
        lr (float): Learning rate (step size for updates) 
        epochs (int): Number of iterations through the dataset 
     
    Returns: 
        w (float): Learned weight 
        b (float): Learned bias 
    “”” 
    # Initialize parameters randomly 
    w = np.random.randn() 
    b = np.random.randn() 
     
    n = len(X) 
 
    prev_loss = float(‘inf’) 
     
    for epoch in range(epochs): 
        # Shuffle the data for each epoch 
        indices = np.arange(n) 
        np.random.shuffle(indices) 
         
        for i in indices: 
            xi = X[i] 
            yi = y[i] 
             
            # Prediction 
            y_pred = w * xi + b 
             
            # Compute gradients (derivatives) 
            dw = -2 * xi * (yi - y_pred)   # derivative wrt w 
            db = -2 * (yi - y_pred)        # derivative wrt b 
             
            # Update parameters 
            w -= lr * dw 
            b -= lr * db 
         
        
        # Compute loss at the end of the epoch 
        loss = np.mean((y - (w*X + b))**2) 
         
        # Check stopping condition 
        if abs(prev_loss - loss) < tol: 
            print(f”Stopped early at epoch {epoch+1}”) 
            break 
                 
        prev_loss = loss 
             
    return w, b

Applications de la SGD

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.

Conclusion

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.

Solutions connexes
IBM watsonx.ai

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.

Découvrir watsonx.ai
Solutions d’intelligence artificielle

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.

Découvrir les solutions d’IA
Conseils et services en matière d’IA

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.

Découvrir les services d’IA
Passez à l’étape suivante

Bénéficiez d’un accès centralisé aux fonctionnalités couvrant le cycle de développement de l’IA. Produisez des solutions IA puissantes offrant des interfaces conviviales, des workflows et un accès à des API et SDK conformes aux normes du secteur.

Découvrir watsonx.ai Réserver une démo en direct
Notes de bas de page

Bottou L. (2010). Large-Scale Machine Learning with Stochastic Gradient DescentLechevallier Y., Saporta G. (eds) Proceedings of COMPSTAT’2010. Physica-Verlag HD. 

Ruder S. (2016). An overview of gradient descent optimization algorithms

Tian Y., Zhang Y. et Zhang H. (2023). Recent Advances in Stochastic Gradient Descent in Deep LearningMathematics, 11(3), 682. 

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.

Bottou L. (2012). Stochastic Gradient Descent TricksMontavon G., Orr G.B., Müller KR. (eds) Neural Networks: Tricks of the Trade. Lecture Notes in Computer Science, vol 7700. Springer, Berlin, Heidelberg.