Comment comprendre Gradient Descent, l'algorithme de ML le plus populaire

Gradient Descent est l'un des algorithmes les plus populaires et les plus utilisés pour former des modèles d'apprentissage automatique.

Les modèles d'apprentissage automatique ont généralement des paramètres (pondérations et biais) et une fonction de coût pour évaluer la qualité d'un ensemble particulier de paramètres. De nombreux problèmes d'apprentissage automatique se réduisent à la recherche d'un ensemble de pondérations pour le modèle, ce qui minimise la fonction de coût.

Par exemple, si la prédiction est p , la cible est t , et notre métrique d'erreur est l'erreur au carré, alors la fonction de coût J (W) = (p - t) ² .

On notera que la valeur prédite p dépend de l'entrée X , ainsi que le modèle d'apprentissage de la machine et des valeurs (courants) des paramètres W . Au cours de la formation, notre objectif est de trouver un ensemble de valeurs pour W tel que (p - t) ² soit petit. Cela signifie que notre prédiction p sera proche de la cible t .

La descente de gradient est une méthode itérative. Nous commençons avec un ensemble de valeurs pour nos paramètres de modèle (pondérations et biais) et les améliorons lentement.

Pour améliorer un ensemble donné de poids, nous essayons d'avoir une idée de la valeur de la fonction de coût pour des poids similaires aux poids actuels (en calculant le gradient). Ensuite, nous allons dans le sens qui réduit la fonction de coût.

En répétant cette étape des milliers de fois, nous minimiserons continuellement notre fonction de coût.

Pseudocode pour la descente de gradient

Descente de gradient est utilisé pour minimiser une fonction de coût J (W) paramétrées par un des paramètres du modèle W .

Le gradient (ou dérivé) nous indique l'inclinaison ou la pente de la fonction de coût. Par conséquent, pour minimiser la fonction de coût, nous nous déplaçons dans la direction opposée au gradient.

  1. Initialisez les poids W au hasard.
  2. Calculez les gradients G de la fonction de coût par rapport aux paramètres. Ceci est fait en utilisant une différenciation partielle: G = ∂J (W) / ∂W. La valeur du gradient G dépend des entrées, des valeurs actuelles des paramètres du modèle et de la fonction de coût. Vous devrez peut-être revoir le sujet de la différenciation si vous calculez le dégradé à la main.
  3. Mettre à jour les poids d'un montant proportionnel à G, c'est-à-dire W = W - ηG
  4. Répétez jusqu'à ce que le coût J ( w ) cesse de diminuer ou que certains autres critères de terminaison prédéfinis soient satisfaits.

A l'étape 3, η est le taux d'apprentissage qui détermine la taille des pas que nous faisons pour atteindre un minimum. Nous devons faire très attention à ce paramètre. Des valeurs élevées de η peuvent dépasser le minimum, et des valeurs très faibles atteindront le minimum très lentement.

Un choix courant pour les critères de terminaison est que le coût J ( w ) cesse de diminuer sur un ensemble de données de validation.

Intuition pour la descente de gradient

Imagine que tu as les yeux bandésen terrain accidenté, et votre objectif est d'atteindre l'altitude la plus basse.

L'une des stratégies les plus simples que vous pouvez utiliser est de sentir le sol dans toutes les directions et de faire un pas dans la direction où le sol descend le plus rapidement.

Si vous continuez à répéter ce processus, vous pourriez vous retrouver au bord du lac, ou mieux encore, quelque part dans l'immense vallée.

Le terrain accidenté est analogue à la fonction de coût, et minimiser la fonction de coût revient à essayer d'atteindre des altitudes plus basses.

Vous êtes les yeux bandés, car nous n'avons pas le luxe d'évaluer (ou de «voir») la valeur de la fonction pour chaque ensemble de paramètres possible.

Ressentir la pente du terrain autour de vous équivaut au calcul du gradient, et faire un pas équivaut à une itération de mise à jour des paramètres.

En passant, ce tutoriel fait partie du cours gratuit de science des données et du cours d'apprentissage automatique gratuit sur Commonlounge. Les cours comprennent de nombreux travaux et projets pratiques. Si vous êtes intéressé par l'apprentissage de la science des données / ML, vous recommandons vivement de le vérifier.

Variantes de descente de gradient

Il existe plusieurs variantes de descente de gradient, en fonction de la quantité de données utilisée pour calculer le gradient.

La principale raison de ces variations est l'efficacité du calcul. Un ensemble de données peut avoir des millions de points de données et le calcul du gradient sur l'ensemble de l'ensemble de données peut être coûteux en calcul.

  • La descente de gradient par lots calcule le gradient de la fonction de coût par rapport au paramètre W pour l' ensemble des données d'apprentissage . Étant donné que nous devons calculer les gradients pour l'ensemble de données pour effectuer une mise à jour des paramètres, la descente de gradient par lots peut être très lente.
  • La descente de gradient stochastique (SGD) calcule le gradient pour chaque mise à jour en utilisant un seul point de données d'apprentissage x_i (choisi au hasard). L'idée est que le gradient calculé de cette manière est une approximation stochastique du gradient calculé en utilisant l'ensemble des données d'apprentissage. Chaque mise à jour est désormais beaucoup plus rapide à calculer qu'en descente de gradient par lots, et sur de nombreuses mises à jour, nous nous dirigerons dans la même direction générale.
  • Dans la descente de gradient par mini-lots , nous calculons le gradient pour chaque petit mini-lot de données d'entraînement. Autrement dit, nous divisons d'abord les données d'apprentissage en petits lots (disons M échantillons par lot). Nous effectuons une mise à jour par mini-lot. M est généralement compris entre 30 et 500, selon le problème. Généralement, le GD mini-batch est utilisé car l'infrastructure informatique - compilateurs, processeurs, GPU - est souvent optimisée pour effectuer des ajouts de vecteurs et des multiplications de vecteurs.

Parmi ceux-ci, SGD et mini-batch GD sont les plus populaires.

Dans un scénario typique, nous effectuons plusieurs passages sur les données d'entraînement avant que les critères de terminaison ne soient satisfaits. Chaque passage est appelé une époque . Notez également que puisque l'étape de mise à jour est beaucoup plus efficace en termes de calcul dans SGD et mini-batch GD, nous effectuons généralement des centaines de milliers de mises à jour entre les vérifications du respect des critères de terminaison.

Choisir le taux d'apprentissage

En règle générale, la valeur du taux d'apprentissage est choisie manuellement. Nous commençons généralement par une petite valeur telle que 0,1, 0,01 ou 0,001 et l'adaptons en fonction du fait que la fonction de coût se réduit très lentement (augmentation du taux d'apprentissage) ou explose / est erratique (diminution du taux d'apprentissage).

Bien que le choix manuel d'un taux d'apprentissage reste la pratique la plus courante, plusieurs méthodes telles que l'optimiseur Adam, AdaGrad et RMSProp ont été proposées pour choisir automatiquement un taux d'apprentissage approprié.

Co-écrit par Keshav Dhandhania et Savan Visalpara.

Publié à l'origine dans le cadre du cours gratuit d'apprentissage automatique et du cours gratuit de science des données sur www.commonlounge.com.