Introduction à la descente de gradient (gradient descent).

Publié: 05-02-2022

La descente de gradient est une méthode d'optimisation. L'idée de descente de gradient est la suivante, nous avons une fonction que nous voulons minimiser et nous devons trouver les entrées/valeurs optimales pour minimiser cette fonction. Habituellement, cette chose que nous voulons minimiser s'appelle la fonction de coût. Nous pouvons aussi maximiser des choses, comme la vraisemblance d'une distribution de probabilité.

Descente de gradient stochastique

La descente de gradient est le processus de minimisation d'une fonction suivant la pente ou le gradient de cette fonction. En apprentissage automatique, nous pouvons utiliser une technique qui produit et met à jour les coefficients à chaque itération appelée descente de gradient stochastique pour minimiser l'erreur d'un modèle sur nos données d'apprentissage.

La façon dont cet algorithme d'optimisation fonctionne est que chaque instance de formation est présentée au modèle une par une. Le modèle fait une prédiction pour une instance d'entraînement, l'erreur est calculée et le modèle est mis à jour afin de réduire l'erreur pour la prochaine prédiction. Ce processus est répété pour un nombre fixe d'itérations.

Cette procédure peut être utilisée pour trouver l'ensemble de coefficients dans un modèle qui entraîne la plus petite erreur pour le modèle sur les données d'apprentissage. À chaque itération, les coefficients (w) en langage d'apprentissage automatique sont mis à jour à l'aide de l'équation:

$$ W = W - taux \; d'apprentissage * erreur * X $$

w est le coefficient ou le poids optimisé, le taux d'apprentissage est un taux d'apprentissage que vous devez configurer (par exemple, 0.01), l'erreur est l'erreur de prédiction du modèle sur les données d'apprentissage attribuées au poids et x est la valeur d'entrée.

Image extraite de: PyTorchZeroToAll

Exemple numérique:

Considérons que nous voulons trouver le minimum de la fonction ci-dessous:

$$ J = w^2 $$

En utilisant la dérivée, nous pouvons savoir que le minimum est zéro.

$$ \frac{\partial J}{\partial w} = 2*w= 0 $$ $$ w = 0 $$

Supposons qu'on ne sache pas que le minimum est à w = 0. On initialise w aléatoirement et on définit un taux d'apprentissage (ta):

  • w = 20
  • ta = 0.1

Nous savons que:

$$ \frac{\partial J}{\partial w} = 2*w $$

Pour les trois premières itérations de l'algorithme de descente de gradient on obtient:

$$ w \impliedby w - ta * \frac{\partial J}{\partial w} \\ itération_1: w \impliedby 20 - 0.1 * 2 * 20 = 16 \\ itération_2: w \impliedby 16 - 0.1 * 2 * 16 = 12.8 \\ itération_3: w \impliedby 12.8 - 0.1 * 2 * 12.8 = 10.24 $$

Vous pouvez remarquer qu'après chaque itération, nous nous rapprochons de zéro, mais nous faisons des pas plus petits.

le gradient pointe directement vers le haut et le gradient négatif pointe directement vers le bas. Nous pouvons diminuer en nous déplaçant dans la direction du gradient négatif. C'est ce qu'on appelle la méthode de descente la plus raide, ou descente de gradient.



Une illustration de la façon dont l'algorithme de descente de gradient utilise les dérivées d'une fonction pour suivre la fonction vers le bas au minimum.
Image extraite de: Deep Learning, Goodfellow et al., Chapter 4.


Implémentation de la descente de gradient en Python