Algorithme du gradient stochastique

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher

L'algorithme du gradient stochastique est une méthode de descente de gradient (itérative) utilisée pour la minimisation d'une fonction objectif qui est écrite comme une somme de fonctions différentiables.

Préliminaires[modifier | modifier le code]

Article connexe : M-estimateur.

À la fois l'estimation statistique et l'apprentissage automatique s'intéressent au problème de la minimisation d'une fonction objectif qui a la forme d'une somme :

,

où le paramètre qui minimise doit être estimé. Chacune des fonctions est généralement associée avec la -ème observation de l'ensemble des données (utilisées pour l'apprentissage).

En statistique classique, les problèmes de minimisation de sommes apparaissent notamment dans la méthode des moindres carrés et dans la méthode de maximum de vraisemblance (pour des observations indépendantes). Les estimateurs qui apparaissent alors comme minimiseurs de sommes sont appelés M-estimateur. Cependant, en statistique, il est su depuis longtemps qu'exiger ne serait-ce qu'une minimisation locale est trop restrictive pour certains problèmes d'estimation de maximum de vraisemblance, comme montré dans le célèbre exemple de Thomas Ferguson[1]. Ainsi, les théoriciens des statistiques modernes considèrent souvent les points stationnaires de la fonction de vraisemblance (ou bien les zéros de sa dérivée, la fonction score, et d'autres équations d'estimation).

Le problème de la minimisation d'une somme se retrouve aussi dans la minimisation du risque empirique : dans ce cas, est la valeur de la fonction objectif pour le -ème exemple, et est le risque empirique.

Lorsqu'elle est utilisée pour minimiser cette fonction, la méthode standard de descente de gradient correspond à cette itération :

est le pas de l'itération (parfois appelé le taux d'apprentissage en apprentissage automatique).

Très souvent, les fonctions élémentaires constituant la somme revêtent une forme simple qui permet le calcul efficace de la fonction somme et de son gradient (qui n'est autre que la somme des gradients des fonctions élémentaires). Par exemple, en statistique, les familles exponentielle (à un paramètre) permettent une évaluation efficace de la fonction et de son gradient.

Cependant, dans d'autres cas, évaluer le gradient entier peut devenir très coûteux, lorsque le calcul des gradients de chaque morceau n'est pas simple. Et si l'ensemble d'apprentissage est très large (big data) et qu'aucune formule simple n'est disponible pour les gradients, calculer la somme des gradients peut rapidement devenir très coûteux. C'est dans le but d'améliorer le coût de calcul de chaque étape que la méthode de descente de gradient stochastique a été mise au point. En effet, à chaque étape, cette méthode tire un échantillon aléatoire de l'ensemble des fonctions constituant la somme. Cette astuce devient très efficace dans le cas de problème d'apprentissage à grande ou très grande échelles[2].

Méthode itérative[modifier | modifier le code]

Les fluctuations de la fonction coût objectif sont représentées en fonction des étapes de la descente de gradient, avec mini-lots.

Dans la descente de gradient stochastique (ou « en ligne »), la vraie valeur du gradient de est approchée par le gradient d'une seule composante de la somme (ie. d'un seul exemple) :

Alors que l'algorithme parcourt l'ensemble d'apprentissage, il réalise cette étape de mise-à-jour pour chaque exemple. Plusieurs parcours de l'ensemble d'apprentissage peuvent être nécessaires avant la convergence de la méthode. Si cela est nécessaire, les données sont habituellement mélangées à chaque parcours, afin d'éviter les cycles. Une autre astuce souvent mise en place en pratique consiste à utiliser un taux d'apprentissage adaptatif afin d'améliorer ou d'assurer la convergence de l'algorithme.

En pseudo-code, la méthode de descente de gradient stochastique peut être représentée comme suit :

  • Choisir un vecteur initial de paramètres , et un taux d'apprentissage .
  • Répéter jusqu'à ce qu'un minimum approché (assez précisément) soit obtenu :
    • Mélanger aléatoirement les échantillons de l'ensemble d'apprentissage.
    • Pour , faire :

Un compromis entre les deux formes est appelé "mini-lots" : au lieu de calculer le gradient d'un seul exemple ou le gradient de tous les exemples, la méthode calcule à chaque étape le gradient sur plusieurs exemples (des petits lots, d'où le nom). Cette variante peut être bien plus efficace que la méthode simple de descente de gradient stochastique, parce qu'une implémentation bien écrite peut utiliser des bibliothèques de calcul vectoriel, au lieu de calculer chaque étape séparément. La variante "mini-lots" peut aussi présenter une convergence plus lisse, comme le gradient calculé à chaque étape utilise plus d'exemples d'apprentissage.

La convergence de l'algorithme de descente de gradient stochastique a été analysée via les théories de l'optimisation convexe et de l'approximation stochastique. En bref, lorsque l'on peut assurer que le taux d'apprentissage est décroissant (avec une vitesse suffisante), et vérifie certaines hypothèses de régularité, alors l'algorithme converge presque sûrement vers un minimum global, si la fonction coût est convexe ou quasi-convexe, ou sinon converge presque sûrement vers un minimum local[3],[4]. Ce résultat peut aussi être obtenu comme une application du théorème de Robbins-Siegmund[5].

Exemple[modifier | modifier le code]

Supposons que nous voulions utiliser une ligne droite () pour représenter un ensemble de points d'apprentissages (en deux dimensions) , en utilisant les moindres carrés. La fonction coût à minimiser est alors :

La dernière ligne de l'algorithme en pseudo-code (voir ci-dessus) pour ce problème précis devient :

Applications[modifier | modifier le code]

La descente de gradient stochastique est un algorithme très utilisé pour l'entraînement de nombreuses familles de modèles en apprentissage automatique, notamment les machines à vecteurs support (linéaires), la régression logistique (voir par exemple Vowpal Wabbit) et les modèles graphiques[6]. Lorsqu'elle est combinée à l'algorithme de propagation inverse, la méthode obtenue est l'algorithme standard de facto, le plus utilisé pour l'entraînement des réseaux neuronaux artificiels.

La méthode DGS (SGD en anglais) est en compétition directe avec l'algorithme L-BFGS, [citation nécessaire] qui lui aussi est très utilisé. SGD a été utilisé depuis les années 1960 (au moins), pour entraîner des modèles de régression linéaire, initialement sous le nom ADALINE[7].

Un autre algorithme populaire de descente de gradient stochastique est le filtre moyen des moindres carrés (LMS) adaptatif.

Extensions et variantes[modifier | modifier le code]

De nombreuses améliorations sur l'algorithme SGD initial ont été proposées et utilisées. En particulier, en apprentissage automatique, la nécessité de fixer un taux d'apprentissage (le pas de l'algorithme) a souvent été décrite comme problématique. Un choix de paramètre trop grand peut rendre l'algorithme divergent tandis qu'un choix trop petit rend la convergence trop lente.

Une extension de SGD relativement simple consiste à choisir comme taux d'apprentissage une fonction décroissante en fonction du nombre d'itération , donnant une progression du taux d'apprentissage, de sorte que les premières itérations permettent de forts changements dans les paramètres, tandis que les itérations tardives ne feront que les peaufiner légèrement. De telles progressions décroissantes sont connues depuis les travaux de MacQueen sur les K-moyennes[8].

SGD Moment[modifier | modifier le code]

Parmi les autres propositions, on notera notamment la méthode du moment, qui apparaît dans un article de Rumelhart, Hinton et Williams sur l'apprentissage par rétro-propagation[9]. La méthode SGD avec moment conserve en mémoire la mise-à-jour à chaque étape (), et calcule la suivante comme une combinaison convexe du gradient actuel et de la modification précédente :

Le nom moment vient d'une analogie avec le moment en physique : le vecteur de paramètres , considéré comme une particule qui voyage au travers de l'espace des paramètres (souvent en grande dimension), subit une accélération via le gradient (qui agit comme une "force"). Contrairement à la méthode SGD classique, cette variante a tendance à continuer de voyager dans la même direction, en empêchant les oscillations. La méthode SGD moment a été utilisé avec succès depuis plusieurs dizaines d'années [10].

Moyennage[modifier | modifier le code]

L'algorithme de SGD moyenné, inventé indépendamment par Ruppert et Polyak à la fin des années 1980, est une méthode SGD qui conserve en mémoire la valeur moyenne (cumulée) de son vecteur de paramètre au cours du temps. C'est-à-dire que l'étape de mise-à-jour est la même que pour l'algorithme SGD ordinaire, mais en gardant aussi la trace de la valeur moyenne (étape après étape)[11] :

.

Lorsque l'optimisation est terminée, ce vecteur moyenné de paramètres sera utilisé à la place de .

AdaGrad[modifier | modifier le code]

AdaGrad (diminutif de adaptive gradient, anglais pour gradient adaptatif) est une amélioration de la méthode SGD qui va déterminer automatiquement un taux d'apprentissage pour chaque paramètre[12],[13]. On doit toujours choisir un taux d'apprentissage commun (), mais celui-ci est multiplié par les éléments du vecteur , qui est obtenu comme diagonale de la matrice G suivante :

est le gradient à l'étape . La diagonale est donnée par : .

Ce vecteur est mis-à-jour à chaque itération. Ainsi, la formule pour chaque mise-à-jour est désormais :

[note 1]

ou si on écrit la mise-à-jour pour chaque paramètre :

Chaque donne un facteur multiplicatif appliqué au taux d'apprentissage correspondant à l'unique paramètre . Et comme le dénominateur de ce facteur () est la norme 2 des dérivées précédentes, les mises-à-jour trop importantes des paramètres sont atténuées tandis que les petites modifications sont faites avec un taux d'apprentissage plus grand (et donc sont amplifiées) [10].

Alors qu'elle fut initialement pensée pour des problèmes convexes, AdaGrad a été appliquée avec succès à l'optimisation non-convexe[14].

Notes et références[modifier | modifier le code]

Notes[modifier | modifier le code]

  1. est le produit matriciel.

Références[modifier | modifier le code]

  1. Thomas S. Ferguson, « An inconsistent maximum likelihood estimate », Journal of the American Statistical Association, vol. 77, no 380,‎ , p. 831–834 (DOI 10.1080/01621459.1982.10477894, JSTOR 2287314)
  2. Léon Bottou et Olivier Bousquet (2008) « The Tradeoffs of Large Scale Learning » in Advances in Neural Information Processing Systems. 20: 161–168. 
  3. (en) Léon Bottou, Online Learning and Neural Networks, Cambridge University Press, (ISBN 978-0-521-65263-6, lire en ligne)
  4. Krzysztof C. Kiwiel, « Convergence and efficiency of subgradient methods for quasiconvex minimization », Mathematical Programming (Series A), Berlin, Heidelberg, Springer, vol. 90, no 1,‎ , p. 1–25 (ISSN 0025-5610, DOI 10.1007/PL00011414, Math Reviews 1819784)
  5. (en) Herbert Robbins et David O. Siegmund, Optimizing Methods in Statistics, Academic Press,
  6. Jenny Rose Finkel, Alex Kleeman, Christopher D. Manning (2008).
  7. Avi Pfeffer, « CS181 Lecture 5 — Perceptrons », Harvard University
  8. Cited by Christian Darken et John Moody (1990) « Fast adaptive k-means clustering: some empirical results » in Int'l Joint Conf. on Neural Networks (IJCNN). . 
  9. David E. Rumelhart, Hinton, Geoffrey E. et Williams, Ronald J., « Learning representations by back-propagating errors », Nature, vol. 323, no 6088,‎ , p. 533–536 (DOI 10.1038/323533a0)
  10. a et b (en) Auteur inconnu « ADADELTA: An adaptive learning rate method », 2012.
  11. Boris T. Polyak et Anatoli B. Juditsky, « Acceleration of stochastic approximation by averaging », SIAM J. Control and Optimization, vol. 30, no 4,‎ , p. 838–855
  12. John Duchi, Elad Hazan et Yoram Singer, « Adaptive subgradient methods for online learning and stochastic optimization », JMLR, vol. 12,‎ , p. 2121–2159 (lire en ligne)
  13. Joseph Perla, « Notes on AdaGrad »,
  14. Maya R. Gupta, Samy Bengio et Jason Weston, « Training highly multiclass classifiers », JMLR, vol. 15, no 1,‎ , p. 1461–1492 (lire en ligne)

Voir aussi[modifier | modifier le code]

Articles connexes[modifier | modifier le code]

Lectures supplémentaires[modifier | modifier le code]

Logiciels[modifier | modifier le code]

  • sgd : une bibliothèque C++ (sous licence LGPL) qui utilise la descente de gradient stochastique pour entraîner des MVS et des modèles ''conditional random field''.
  • CRF-ADF : une bibliothèque C# implémentant la méthode de descente de gradient stochastique et sa variation AdaGrad pour entraîner des modèles conditional random field.
  • Vowpal Wabbit : une solution d'apprentissage rapide et scalable (sous licence BSD) par John Langford et d'autres contributeurs. Contient notamment quelques variantes de l'algorithme de descente de gradient stochastique. Le dépôt source est sur GitHub.

Liens externes[modifier | modifier le code]