talon Qu'est-ce que la descente de gradient ? - Unite.AI
Suivez nous sur
Classe de maître IA :

AI 101

Qu'est-ce que la descente de gradient ?

mm
Le kit de préparation mis à jour on

Qu'est-ce qu'une descente en dégradé ?

Si vous avez lu des informations sur la façon dont les réseaux neuronaux sont entraînés, vous avez certainement déjà rencontré le terme « descente de gradient ». Descente graduelle est la principale méthode d'optimisation des performances d'un réseau neuronal, réduisant ainsi le taux de perte/erreur du réseau. Cependant, la descente de gradient peut être un peu difficile à comprendre pour ceux qui découvrent l'apprentissage automatique, et cet article s'efforcera de vous donner une intuition décente du fonctionnement de la descente de gradient.

La descente de gradient est un algorithme d'optimisation. Il est utilisé pour améliorer les performances d'un réseau de neurones en ajustant les paramètres du réseau de sorte que la différence entre les prédictions 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 rendront le réseau aussi précis que possible. Vous n'avez pas besoin de connaître beaucoup de calcul pour comprendre comment fonctionne la descente de gradient, mais vous devez avoir une compréhension des gradients.

Que sont les dégradés ?

Supposons qu'il existe un graphique qui représente la quantité d'erreurs commises par un réseau de neurones. Le bas du graphique représente les points où l'erreur est la plus faible tandis que le haut du graphique correspond à l'endroit où l'erreur est la plus élevée. Nous voulons nous déplacer du haut du graphique vers le bas. Un gradient n'est qu'un moyen de quantifier la relation entre l'erreur et les poids du réseau de neurones. La relation entre ces deux choses peut être représenté graphiquement comme une pente, avec des poids incorrects produisant plus d'erreurs. La pente de la pente/gradient représente la vitesse d'apprentissage du modèle.

Une pente plus raide signifie que de grandes réductions d'erreur sont réalisées et que le modèle apprend rapidement, alors que si la pente est nulle, le modèle est sur un plateau et n'apprend pas. On peut descendre la pente vers moins d'erreur en calculant un gradient, un sens de déplacement (changement des paramètres du réseau) pour notre modèle.

Déplaçons légèrement la métaphore et imaginons une série de collines et de vallées. Nous voulons arriver au bas de la colline et trouver la partie de la vallée qui représente la perte la plus faible. Lorsque nous commençons au sommet de la colline, nous pouvons descendre la colline à grands pas et être sûrs que nous nous dirigeons vers le point le plus bas de la vallée.

Cependant, à mesure que nous nous rapprochons du point le plus bas de la vallée, nos pas devront devenir plus petits, sinon nous pourrions dépasser le véritable point le plus bas. De même, il est possible que lors de l'ajustement des pondérations du réseau, les ajustements puissent en fait l'éloigner du point de perte le plus faible, et donc les ajustements doivent diminuer avec le temps. Dans le contexte de la descente d'une colline vers un point de plus faible perte, le gradient est un vecteur/instructions détaillant le chemin que nous devons emprunter et la largeur de nos pas.

Maintenant que nous savons que les gradients sont des instructions qui nous indiquent dans quelle direction se déplacer (quels coefficients doivent être mis à jour) et quelle est la taille des pas que nous devons prendre (de combien les coefficients doivent être mis à jour), nous pouvons explorer comment le gradient est calculé.

Calcul des dégradés et descente de dégradé

La descente de gradient commence à un endroit de perte élevée et, à travers de multiples itérations, prend des mesures dans la direction de la perte la plus faible, dans le but de 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)

Pour effectuer une descente de gradient, les gradients doivent d'abord être calculés. En ordre calculer la pente, nous avons besoin de connaître la fonction perte/coût. Nous utiliserons la fonction de coût pour déterminer la dérivée. En calcul, la dérivée se réfère simplement à la pente d'une fonction à un point donné, donc nous calculons simplement la pente de la colline en fonction de la fonction de perte. Nous déterminons la perte en faisant passer les coefficients par la fonction de perte. Si nous représentons la fonction de perte par "f", alors nous pouvons affirmer que l'équation pour calculer la perte est la suivante (nous exécutons simplement les coefficients via notre fonction de coût choisie) :

Perte = f(coefficient)

Nous calculons ensuite la dérivée, ou déterminons la pente. Obtenir la dérivée de la perte nous indiquera dans quelle direction est vers le haut ou vers le bas la pente, en nous donnant le signe approprié pour ajuster nos coefficients. Nous représenterons la direction appropriée par "delta".

delta = fonction_dérivé(perte)

Nous avons maintenant déterminé quelle direction descend vers le point de perte la plus faible. Cela signifie que nous pouvons mettre à jour les coefficients dans les paramètres du réseau neuronal et, espérons-le, réduire la perte. Nous mettrons à 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 l'ampleur du changement (la taille de notre pas). L'argument qui contrôle la taille de la mise à jour est appelé "taux d'apprentissage" et nous le représenterons par " alpha ".

coefficient = coefficient – ​​(alpha * delta)

Nous répétons ensuite ce processus jusqu'à ce que le réseau ait convergé autour du point de perte la plus faible, qui devrait être proche de zéro.

Il est très important de choisir la bonne valeur pour le taux d'apprentissage (alpha). Le taux d'apprentissage choisi ne doit être ni trop petit ni trop grand. Rappelez-vous qu'à mesure que nous approchons du point de perte la plus faible, nos pas doivent devenir plus petits, sinon nous dépasserons le véritable point de perte la plus faible et finirons de l'autre côté. Le point de plus petite perte est petit et si notre taux de variation est trop important, l'erreur peut finir par augmenter à nouveau. Si les tailles de pas sont trop grandes, les performances du réseau continueront de rebondir autour du point de perte la plus faible, 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 faible, le réseau peut potentiellement prendre un temps extraordinairement long pour converger vers les poids optimaux.

Types de descente de gradient

Maintenant que nous comprenons comment fonctionne la descente de gradient en général, examinons quelques-unes des différentes types de descente de gradient.

Descente de gradient par lots : cette forme de descente de gradient parcourt tous les échantillons d'apprentissage avant de mettre à jour les coefficients. Ce type de descente de gradient est probablement la forme de descente de gradient la plus efficace en termes de calcul, 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 l'ensemble de données contient un grand nombre d'exemples d'apprentissage, la descente de gradient par lots peut rendre l'apprentissage plus long.

Descente de gradient stochastique : dans la descente de gradient stochastique, un seul exemple d'apprentissage est traité pour chaque itération de descente de gradient et de mise à jour des paramètres. Cela se produit pour chaque exemple de formation. Étant donné qu'un seul exemple d'apprentissage est traité avant la mise à jour des paramètres, il a tendance à converger plus rapidement que Batch Gradient Descent, car les mises à jour sont effectuées plus tôt. Cependant, étant donné que le processus doit être effectué sur chaque élément de l'ensemble d'apprentissage, il peut prendre beaucoup de temps si l'ensemble de données est volumineux, et donc l'utilisation de l'un des autres types de descente de gradient si vous préférez.

Descente de gradient en mini-lot : La descente de gradient en mini-lot fonctionne en divisant l'ensemble des données d'apprentissage en sous-sections. Il crée des mini-lots plus petits qui sont exécutés sur le réseau, et lorsque le mini-lot a été utilisé pour calculer l'erreur, les coefficients sont mis à jour. La descente de gradient en mini-lots trouve un terrain d'entente 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 Batch Gradient Descent, ce qui signifie une convergence légèrement plus rapide et plus robuste sur les paramètres optimaux du modèle. Il est également plus efficace en termes de calcul que Stochastic Gradient Descent