in

L’algorithme de descente de gradient 101. Comprendre l’algorithme d’optimisation…| par Pol Marin | Avr, 2023.


ALGORITHME DE DESCENTE DE GRADIENT 101 : COMPRENDRE L’ALGORITHME D’OPTIMISATION LARGEMENT UTILISÉ EN MACHINE ET EN APPRENTISSAGE PROFOND

Introduction

L’algorithme de descente de gradient (GD) est un algorithme itératif d’optimisation de premier ordre pour trouver un minimum local d’une fonction différentiable. Bien que cela ne soit pas toujours la méthode la plus efficace, il est couramment utilisé en machine learning et en apprentissage profond, en particulier dans les réseaux neuronaux. Cet algorithme est utilisé pour minimiser la valeur d’une fonction en mettant à jour un ensemble de paramètres à chaque itération. Pourtant, toutes les fonctions ne sont pas optimisables. Nous avons besoin d’une fonction — univariée ou multivariée — qui soit différentiable et convexe (en forme de U ou similaire).

Le GD est un algorithme essentiel que tout scientifique de données doit comprendre. C’est fondamental et assez simple mais crucial. Dans cet article, nous allons vous expliquer clairement et simplement ce qu’est le GD, à quoi il sert, comment il fonctionne et les différentes variations associées à cet algorithme.

Théorie

Pour comprendre cet algorithme, prenons un exemple concret de science des données. Dans ce cas, nous allons développer un modèle de régression. La fonction de coût ou fonction de perte dans n’importe quel problème de science des données est la fonction que nous souhaitons optimiser. Comme nous utilisons une fonction de régression, nous allons utiliser celle-ci :

Le but est de trouver le minimum optimal de f(x,y). Graphiquement, cela ressemble à cela :

Maintenant, notre objectif est d’obtenir les bonnes valeurs pour “x” et “y” qui nous permettent de trouver les valeurs optimales de cette fonction. On peut déjà les voir graphiquement :

y=0
x étant -1 ou 1

Ensuite, nous pouvons entrer dans les détails de l’algorithme GD lui-même.

L’algorithme

Comme mentionné, la descente de gradient est un processus itératif dans lequel nous calculons le gradient et nous déplaçons dans la direction opposée. Le raisonnement derrière cela est que le gradient d’une fonction est utilisé pour déterminer la pente de cette fonction. Comme nous voulons descendre, pas monter, nous nous déplaçons dans la direction opposée.

C’est un processus simple dans lequel nous mettons à jour x et y à chaque itération, en suivant la méthode suivante :

Mise à jour des paramètres dans la descente de gradient

Expliqué en termes simples, à l’itération k :

Calculez le gradient en utilisant les valeurs de x et y à cette itération.

Pour chacune de ces variables — x et y — multipliez son gradient par lambda (λ), qui est un nombre à virgule flottante appelé le taux d’apprentissage.

Supprimez de x et y respectivement les valeurs calculées à l’étape 2.

Faites en sorte que x et y aient la nouvelle valeur lors de la prochaine itération.

Ce processus est ensuite répété jusqu’à ce que certaines conditions soient satisfaites (ce qui n’est pas important aujourd’hui). Une fois cela fait, l’entraînement se termine et l’optimisation également. Nous sommes (ou devrions être) à un minimum (local ou global).

Maintenant, mettons cette théorie en pratique.

Le premier élément à faire est de calculer le gradient de f(x,y). Le gradient correspond à un vecteur de dérivées partielles :

Gradient de f(x,y)

Ensuite, en utilisant Python, nous allons créer une boucle qui calcule itérativement le gradient — en utilisant le x et le y correspondants — et met à jour ces paramètres comme spécifié ci-dessus.

Avant cela, nous définirons deux autres valeurs :

Le taux d’apprentissage (λ) peut être fixe ou mobile. Pour ce tutoriel simple, il sera de 0,01.

Nous utiliserons également une valeur appelée epsilon (ε) pour déterminer quand arrêter d’itérer. Une fois que les deux dérivées partielles sont inférieures à ce seuil, la descente de gradient s’arrête. Je le fixe à 0,0001.

Finalement, l’algorithme :

import random
# Define constant
eps = 0.0001
lr = 0.01
# Initialize x and y with random values
x = random.uniform(-2, 4)
y = random.uniform(-1, 1)
def f(x,y):
return (x**2 -1)**2 +y**2
def df_x(x):
return 4*x*(x**2 – 1)
def df_y(y):
return 2*y
# Perform gradient descent
while max(df_x(x), df_y(y)) >= eps:
x = x – lr * df_x(x)
y = y – lr * df_y(y)
# Print optimal values found
print(f’x = {x}, y = {y}’)

Nous pouvons voir que le résultat est assez proche de x = 1 et y = 0, qui étaient en effet les minima de la fonction. Une chose que j’ai oubliée de mentionner était les initialisations de x et y. J’ai choisi de générer un nombre au hasard dans des plages aléatoires. Dans les problèmes réels, cela nécessite généralement plus de temps pour y réfléchir. De même, avec le taux d’apprentissage, la condition d’arrêt et de nombreux autres hyperparamètres.

Variations de la descente de gradient

Je suis sûr que vous comprenez maintenant l’algorithme de base. Cependant, plusieurs versions de celui-ci sont utilisées et je pense que certaines d’entre elles méritent d’être mentionnées.

La descente de gradient stochastique (SGD). SGD est la variation qui choisit de manière aléatoire un point de données parmi l’ensemble de données entier à chaque itération. Cela réduit le nombre de calculs mais présente évidemment des inconvénients tels que, par exemple, l’incapacité de converger vers le minimum global.

La descente de grand lot (BGD). BGD utilise l’ensemble des données entier à chaque itération. Ce n’est pas souhaitable pour les grands ensembles de données car cela peut être coûteux en termes de calculs et de lenteur, mais en revanche, la convergence vers le minimum global est théoriquement garantie.

La descente de grand lot mini-batch (MBGD). Cela peut être considéré comme un point intermédiaire entre SGD et BGD. Il n’utilise pas un point de données à la fois ni l’ensemble des données, mais un sous-ensemble de celui-ci. À chaque itération, nous choisissons un nombre aléatoire d’échantillons (préalablement défini) et effectuons la descente de gradient en n’utilisant que ceux-ci.

Conclusion

L’algorithme de descente de gradient est largement utilisé en machine et en apprentissage profond, mais également dans d’autres domaines. C’est pourquoi le comprendre est essentiel pour quiconque veut devenir un scientifique des données. Nous espérons que cet article a clarifié ce qu’est GD, à quoi il sert et comment il fonctionne. N’hésitez pas à nous suivre pour plus de contenu comme celui-ci, cela nous aide beaucoup ! Si vous voulez également nous soutenir davantage, envisagez de vous abonner au Membership de Medium via le lien ci-dessous : cela ne vous coûtera pas un centime supplémentaire, mais cela nous aidera dans ce processus. Merci beaucoup !

Ressources

[1] Descente de gradient — Wikipédia.

What do you think?

Written by Barbara

Leave a Reply

Your email address will not be published. Required fields are marked *

Générateur CSS avancé pour les ombres de boîtes.

Les créateurs d’Octodad viennent de sortir un simulateur de rencontre gratuit où vous jouez en tant que serpent.