IA 101
Qu’est-ce que la descente de gradient ?

Qu’est-ce que la descente de gradient ?
Si vous avez lu comment les réseaux de neurones sont formés, vous avez probablement déjà entendu parler du terme “descente de gradient”. La descente de gradient est la méthode principale d’optimisation des performances d’un réseau de neurones, en réduisant le taux d’erreur/rate du réseau. Cependant, la descente de gradient peut être un peu difficile à comprendre pour ceux qui sont nouveaux dans l’apprentissage automatique, et cet article tentera de vous donner une intuition décente de la façon dont la descente de gradient fonctionne.
La descente de gradient est un algorithme d’optimisation. Il est utilisé pour améliorer les performances d’un réseau de neurones en effectuant des ajustements sur les paramètres du réseau de telle sorte que la différence entre les prévisions du réseau et les valeurs réelles/attendues du réseau (appelées perte) soit la plus petite possible. La descente de gradient prend les valeurs initiales des paramètres et utilise des opérations basées sur le calcul pour ajuster leurs valeurs vers les valeurs qui feront que le réseau sera le plus précis possible. Vous n’avez pas besoin de connaître beaucoup de calcul pour comprendre comment la descente de gradient fonctionne, mais vous devez avoir une compréhension des gradients.
Qu’est-ce qu’un gradient ?
Supposons qu’il existe un graphique qui représente la quantité d’erreur qu’un réseau de neurones commet. Le bas du graphique représente les points d’erreur les plus bas, tandis que le haut du graphique est où l’erreur est la plus élevée. Nous voulons passer du haut du graphique vers le bas. Un gradient est simplement une façon de quantifier la relation entre l’erreur et les poids du réseau de neurones. La relation entre ces deux choses peut être tracée comme une pente, avec des poids incorrects produisant plus d’erreur. La pente de la pente/gradient représente à quelle vitesse le modèle apprend.
Une pente plus raide signifie que de grandes réductions d’erreur sont effectuées et que le modèle apprend rapidement, tandis que si la pente est nulle, le modèle est sur un plateau et n’apprend pas. Nous pouvons descendre la pente vers moins d’erreur en calculant un gradient, une direction de mouvement (changement dans les paramètres du réseau) pour notre modèle.
Changeons légèrement la métaphore et imaginons une série de collines et de vallées. Nous voulons atteindre le bas de la colline et trouver la partie de la vallée qui représente la perte la plus basse. Lorsque nous commençons au sommet de la colline, nous pouvons prendre de grandes étapes vers le bas de la colline et être confiants que nous allons dans la direction de la plus basse pointe de la vallée.
Cependant, à mesure que nous nous rapprochons du point le plus bas de la vallée, nos étapes devront devenir plus petites, ou nous pourrions dépasser le véritable point le plus bas. De même, il est possible que, lors de l’ajustement des poids du réseau, les ajustements puissent en fait éloigner le réseau du point de perte la plus basse, et donc les ajustements doivent devenir plus petits avec le temps. Dans le contexte de la descente d’une colline vers un point de perte la plus basse, le gradient est un vecteur/instructions détaillant le chemin que nous devons prendre et la taille de nos étapes.
Maintenant que nous savons que les gradients sont des instructions qui nous disent dans quelle direction aller (quels coefficients doivent être mis à jour) et quelle taille les étapes doivent être (combien les coefficients doivent être mis à jour), nous pouvons explorer comment le gradient est calculé.
Calcul des gradients et de la descente de gradient

La descente de gradient commence à un point de perte élevée et, à travers de multiples itérations, prend des étapes dans la direction de la perte la plus basse, en visant à trouver la configuration de poids optimale. Photo: Роман Сузи via Wikimedia Commons, CCY BY SA 3.0 (https://commons.wikimedia.org/wiki/File:Gradient_descent_method.png)
Afin de réaliser la descente de gradient, les gradients doivent d’abord être calculés. Afin de calculer le gradient, nous devons connaître la fonction de perte/coût. Nous allons utiliser la fonction de coût pour déterminer la dérivée. En calcul, la dérivée fait référence à la pente d’une fonction à un point donné, nous calculons donc essentiellement la pente de la colline en fonction de la fonction de perte. Nous déterminons la perte en faisant passer les coefficients à travers la fonction de perte. Si nous représentons la fonction de perte par “f”, nous pouvons alors dire que l’équation pour calculer la perte est la suivante (nous faisons simplement passer les coefficients à travers notre fonction de coût choisie):
Perte = f(coefficient)
Nous calculons ensuite la dérivée, ou déterminons la pente. L’obtention de la dérivée de la perte nous indique dans quelle direction aller, en nous donnant le signe approprié pour ajuster nos coefficients. Nous allons représenter la direction appropriée par “delta”.
delta = fonction_dérivée(perte)
Nous avons maintenant déterminé dans quelle direction aller pour descendre la pente vers le point de perte la plus basse. Cela signifie que nous pouvons mettre à jour les coefficients dans les paramètres du réseau de neurones et espérer réduire la perte. Nous allons mettre à jour les coefficients en fonction des coefficients précédents moins le changement de valeur approprié, tel que déterminé par la direction (delta) et un argument qui contrôle la grandeur du changement (la taille de notre étape). L’argument qui contrôle la taille de la mise à jour est appelé “taux d’apprentissage” et nous allons le représenter par “alpha”.
coefficient = coefficient – (alpha * delta)
Nous répétons simplement ce processus jusqu’à ce que le réseau ait convergé vers le point de perte la plus basse, qui devrait être proche de zéro.
Il est très important de choisir la bonne valeur pour le taux d’apprentissage (alpha). La valeur choisie pour le taux d’apprentissage doit être ni trop petite ni trop grande. Rappelez-vous que, à mesure que nous nous rapprochons du point de perte la plus basse, nos étapes doivent devenir plus petites, ou nous pourrions dépasser le véritable point de perte la plus basse et finir de l’autre côté. Le point de perte la plus basse est petit et si notre taux de changement est trop grand, l’erreur peut finir par augmenter à nouveau. Si les tailles d’étape sont trop grandes, les performances du réseau continueront à osciller autour du point de perte la plus basse, le dépassant d’un côté puis de l’autre. Si cela se produit, le réseau ne convergera jamais vers la véritable configuration de poids optimale.
En revanche, si le taux d’apprentissage est trop petit, le réseau peut potentiellement prendre un temps extrêmement long pour converger vers les poids optimaux.
Types de descente de gradient
Maintenant que nous comprenons comment la descente de gradient fonctionne en général, regardons quelques-uns des types de descente de gradient.
Descente de gradient par lots : Cette forme de descente de gradient parcourt tous les exemples d’entraînement avant de mettre à jour les coefficients. Ce type de descente de gradient est susceptible d’être la forme la plus efficace sur le plan computationnel de la descente de gradient, car les poids ne sont mis à jour qu’une fois que l’ensemble du lot a été traité, ce qui signifie qu’il y a moins de mises à jour au total. Cependant, si le jeu de données contient un grand nombre d’exemples d’entraînement, la descente de gradient par lots peut rendre l’entraînement long.
Descente de gradient stochastique : Dans la descente de gradient stochastique, seul un exemple d’entraînement est traité pour chaque itération de la descente de gradient et de la mise à jour des paramètres. Cela se produit pour chaque exemple d’entraînement. Puisque seul un exemple d’entraînement est traité avant que les paramètres soient mis à jour, il a tendance à converger plus rapidement que la descente de gradient par lots, car les mises à jour sont effectuées plus tôt. Cependant, puisque le processus doit être effectué sur chaque élément du jeu d’entraînement, il peut prendre beaucoup de temps pour terminer si le jeu de données est grand, et donc l’utilisation d’un autre type de descente de gradient est préférée.
Descente de gradient par mini-lots : La descente de gradient par mini-lots fonctionne en divisant l’ensemble du jeu d’entraînement en sous-sections. Il crée de petits mini-lots qui sont passés à travers le réseau, et lorsque le mini-lot a été utilisé pour calculer l’erreur, les coefficients sont mis à jour. La descente de gradient par mini-lots trouve un juste milieu entre la descente de gradient stochastique et la descente de gradient par lots. Le modèle est mis à jour plus fréquemment que dans le cas de la descente de gradient par lots, ce qui signifie une convergence légèrement plus rapide et plus robuste sur les paramètres optimaux du modèle. C’est également plus efficace sur le plan computationnel que la descente de gradient stochastique












