Supposons que nous ayons un ensemble dentraînement $ (x _ {(i)}, y _ {(i)}) $ pour $ i = 1, \ dots, m $ . Supposons également que nous exécutions un type dalgorithme dapprentissage supervisé sur lensemble dapprentissage. Les hypothèses sont représentées par $ h _ {\ theta} (x _ {(i)}) = \ theta_0 + \ theta_ {1} x _ {(i) 1} + \ cdots + \ theta_ { n} x _ {(i) n} $ . Nous devons trouver les paramètres $ \ mathbf {\ theta} $ qui minimisent la « distance » entre $ y _ {(i )} $ et $ h _ {\ theta} (x _ {(i)}) $ . Soit $$ J (\ theta) = \ frac {1} {2} \ sum_ {i = 1} ^ {m} (y _ {(i)} – h _ {\ theta } (x _ {(i)}) ^ {2} $$
Ensuite, nous voulons trouver $ \ theta $ qui minimise $ J (\ theta) $ . Dans la descente de gradient, nous initialisons chaque paramètre et effectuons la mise à jour suivante: $$ \ theta_j : = \ theta_j- \ alpha \ frac {\ partial} {\ partial \ theta_ {j}} J (\ theta) $$
Quelle est la principale différence entre la descente de gradient par lots et la descente de gradient stochastique?
Les deux utilisent la règle de mise à jour ci-dessus. Mais est-ce que lun est meilleur que lautre?
Réponse
Lapplicabilité de la descente de gradient par lots ou stochastique dépend vraiment de la variété derreur attendue.
La descente de gradient par lots calcule le gradient à laide de lensemble de données. Ceci est idéal pour les variétés derreur convexes ou relativement lisses. Dans ce cas, nous nous déplaçons directement vers une solution optimale, locale ou globale. De plus, la descente de gradient par lots, étant donné un taux dapprentissage recuit, finira par trouver le minimum situé dans son bassin dattraction.
La descente de gradient stochastique (SGD) calcule le gradient en utilisant un seul échantillon. La plupart des applications de SGD utilise en fait un minibatch de plusieurs échantillons, pour des raisons qui seront expliquées un peu plus tard. SGD fonctionne bien (pas bien, je suppose, mais mieux que la descente de gradient par lots) pour les variétés derreur qui ont beaucoup de maxima / minima locaux. Dans ce cas, le gradient un peu plus bruyant calculé à laide du nombre réduit déchantillons a tendance à faire sortir le modèle des minima locaux dans une région qui, espérons-le, est plus optimale. Les échantillons uniques sont vraiment bruyants, tandis que les minibatchs ont tendance à faire la moyenne dun peu de bruit. Ainsi , la quantité de secousse est réduite lors de lutilisation de minibatchs. Un bon équilibre est atteint lorsque la taille du minibatch est suffisamment petite pour éviter certains des minima locaux médiocres, mais suffisamment grande pour ne pas éviter les minima globaux ou les performances les plus élevées. minima ocaux. (Incidemment, cela suppose que les meilleurs minima ont un bassin dattraction plus grand et plus profond, et sont donc plus faciles à atteindre.)
Lun des avantages de SGD est que le calcul est beaucoup plus rapide. les ensembles de données ne peuvent souvent pas être stockés dans la RAM, ce qui rend la vectorisation beaucoup moins efficace. Au contraire, chaque échantillon ou lot déchantillons doit être chargé, manipulé, les résultats stockés, etc. Le minibatch SGD, en revanche, est généralement rendu suffisamment petit pour être traitable par le calcul.
Habituellement, cet avantage de calcul est exploité en effectuant beaucoup plus ditérations de SGD, faisant beaucoup plus détapes que la descente de gradient par lots conventionnelle . Cela aboutit généralement à un modèle très proche de celui qui serait trouvé par descente de gradient par lots, ou mieux.
La façon dont jaime penser au fonctionnement de SGD est dimaginer que jai un point sur lequel représente ma distribution dentrée. Mon modèle tente dapprendre cette distribution dentrée. Autour de la distribution dentrée se trouve une zone ombrée qui représente les distributions dentrée de tous les minibatchs possibles que jai pu échantillonner. Il est généralement juste de supposer que les distributions d’entrée des minibatchs sont proches de la distribution d’entrée réelle. La descente de gradient par lots, à toutes les étapes, emprunte le chemin le plus raide pour atteindre la distribution d’entrée réelle. SGD, en revanche, choisit un point aléatoire dans la zone ombrée, et emprunte litinéraire le plus raide vers ce point. À chaque itération, cependant, il choisit un nouveau point. La moyenne de toutes ces étapes se rapprochera de la vraie distribution dentrée, généralement assez bien.
Commentaires
- En pratique, personne nutilise la descente de gradient par lots. ‘ est tout simplement trop coûteux en calcul pour pas tant que ça dun gain. (Le gain étant que vous ‘ réduisez en fait » true » gradient.) Lorsque vous avez une fonction de perte hautement non convexe, il vous suffit de marcher dans la bonne direction et vous ‘ finira par converger o n un minimum local. Ainsi, minibatch SGD.
- @Jason_L_Bens avez-vous des références (articles ou textes en ligne) où je peux en savoir plus sur ces algorithmes?
- @ user110320 Pas par hasard, non, bien quils ‘ sont des algorithmes très courants, et il devrait donc y avoir une tonne de ressources disponibles sur le sujet avec un peu de recherche. Si vous ‘ recherchez une approche générale, je ‘ vous recommande de lire quelques articles de Yoshua Bengio ‘ s Apprentissage des architectures profondes pour lIA. Cest ‘ que jai commencé.
Réponse
Comme le suggère une autre réponse, la principale raison dutiliser SGD est de réduire le coût de calcul du gradient tout en maintenant largement la direction du gradient lors de la moyenne sur de nombreux mini-lots ou échantillons – cela vous aide sûrement à atteindre les minima locaux.
- Pourquoi le minibatch fonctionne .
Les mathématiques derrière cela sont que, le gradient » true » de la fonction de coût (le gradient pour lerreur de généralisation ou pour un ensemble déchantillons infiniment grand) est lespérance du gradient $ g $ sur la vraie distribution génératrice de données $ p_ {data} $ ; le gradient réel $ \ hat {g} $ calculé sur un lot déchantillons est toujours une approximation du gradient réel avec la distribution de données empiriques $ \ hat {p} _ {data} $ . $$ \ hat {g} = E _ {\ hat {p} _ {data}} ({\ partial J (\ theta) \ over \ partial \ theta}) $$ La descente de gradient par lots peut vous apporter le gradient » optimal » possible étant donné tous vos échantillons de données, ce nest pas le » true » gradient cependant. Un lot plus petit (cest-à-dire un mini-lot) nest probablement pas aussi optimal que le lot complet, mais ce sont tous deux des approximations – tout comme le mini-patch à échantillon unique (SGD).
En supposant quil ny ait pas de dépendance entre le $ m $ échantillons dans un minibatch, le $ \ hat {g} (m) $ calculé est un estimation du gradient réel. Les erreurs standard (au carré) des estimations avec différentes tailles de mini-patch sont inversement proportionnelles aux tailles du mini-patch. Autrement dit, $$ {SE ({\ hat {g} (n)}) \ over SE ({\ hat {g} (m)})} = {\ sqrt { m \ over n}} $$ Cest-à-dire que la réduction de lerreur standard est la racine carrée de laugmentation de la taille de léchantillon. Cela signifie que si la taille du minibatch est petite, le taux dapprentissage doit également être petit, afin dobtenir une stabilité sur la grande variance. Lorsque les échantillons ne sont pas indépendants, la propriété destimation sans biais nest plus conservée. Cela vous oblige à mélanger les échantillons avant lentraînement, si les échantillons ne sont pas séquencés assez aléatoirement.
- Pourquoi le minibatch peut fonctionne mieux .
Premièrement, le minibatch rend certains problèmes dapprentissage techniquement insolubles à traitables en raison de la demande de calcul réduite avec une taille de lot plus petite.
Deuxièmement, une taille de lot réduite ne signifie pas nécessairement une précision de gradient réduite. Les échantillons de formation ont beaucoup de bruits, de valeurs aberrantes ou de biais. Un minibatch échantillonné aléatoirement peut refléter la distribution réelle de génération de données mieux (ou pas pire) que le lot complet dorigine. Si certaines itérations des mises à jour du gradient du minibatch vous donnent une meilleure estimation, dans lensemble, le résultat moyen dune époque peut être meilleur que le gradient calculé à partir dun lot complet.
Troisièmement, le minibatch ne permet pas seulement de gérer les désagréables échantillons de données, mais aussi aider à gérer la fonction de coût désagréable qui a de nombreux minima locaux. Comme le mentionne Jason_L_Bens, parfois les variétés derreur peuvent être plus faciles à piéger un gradient régulier dans un minimum local, alors quil est plus difficile de piéger le gradient temporairement aléatoire calculé avec un minibatch.
Enfin, avec la descente de gradient, vous nêtes pas atteindre les minima globaux en une seule étape, mais itérer sur la variété derreur. Gradient ne vous donne en grande partie que la direction à parcourir. Avec minibatch, vous pouvez itérer beaucoup plus rapidement. Dans de nombreux cas, plus il y a ditérations, meilleur est le point que vous pouvez atteindre. Vous ne vous souciez pas vraiment de tout temps le point est optimal globalement ou même localement. Vous voulez simplement atteindre un modèle raisonnable qui vous apporte une erreur de généralisation acceptable. Minibatch rend cela plus facile.
Vous pouvez trouver le livre » Deep learning » par Ian Goodfellow, et al, a de très bonnes discussions sur ce sujet si vous le lisez attentivement.
Commentaires
- Pour les problèmes doptimisation convexe, ce que vous avez dit est bien.Mais pour utiliser des méthodes de gradient sur des fonctions non convexes, vous avez manqué une raison très critique pour laquelle SGD est meilleur que le batch GD. Voir ma réponse datascience.stackexchange.com/questions/16807/…
- @horaceT Merci pour votre commentaire. Puisque le point que vous avez mentionné a été décrit par Jason_L_Bens ci-dessus avec des détails, je nai pas pris la peine de répéter mais de renvoyer sa réponse dans le dernier troisième paragraphe, avec le respect que je vous dois. Pour le problème doptimisation de la descente de gradient, le non-convexe est reflété par les minima locaux incluant le point de selle (voir le dernier troisième paragraphe); et dans un souci de description, ma réponse décrit SGD comme un mini-lot mais avec une taille de lot de 1 (voir le troisième paragraphe).
- Pourquoi avez-vous dit virtuellement en * enfin à une époque, vous calculez virtuellement la moyenne des gradients basés sur tous les échantillons donnés. *? ‘ ne pensez-vous pas que cette affirmation est erronée en raison de la mise à jour des pondérations à chaque étape?
- @Media Vous avez raison. Jai ‘ supprimé le dernier paragraphe. Merci.
Réponse
Pour moi, le dégradé par lots ressemble au dégradé maigre. En gradient maigre, la taille du lot est choisie de sorte que chaque paramètre qui doit être mis à jour soit également modifié indépendamment, mais pas nécessairement orthogonalement, dans le lot. Par exemple, si le lot contient 10 expériences, 10 lignes, il est alors possible de former $ 2 ^ {10-1} = 512 $ colonnes indépendantes. 10 lignes permettent une mise à jour indépendante, mais non orthogonale, de 512 paramètres.