Pourquoi la taille d'un mini-lot est-elle meilleure qu'un seul «lot» avec toutes les données d'apprentissage?


40

Je lis souvent que dans le cas des modèles d'apprentissage en profondeur, la pratique habituelle consiste à appliquer des mini-lots (généralement un petit, 32/64) sur plusieurs périodes d'entraînement. Je ne peux pas vraiment comprendre la raison derrière cela.

Sauf erreur de ma part, la taille du lot correspond au nombre d'instances de formation laissées par le modèle lors d'une itération de formation. et epoch est un tour complet lorsque chacune des instances de formation ont été vues par le modèle. Si tel est le cas, je ne vois pas l'avantage de l'itération sur un sous-ensemble presque insignifiant des instances de formation à la différence de l'application d'un "lot maximum" en exposant toutes les instances de formation disponibles à chaque tour au modèle (en supposant bien sûr qu'il la mémoire). Quel est l'avantage de cette approche?


1
Commander cette réponse.
Icyblade



Réponses:


46

Le principal avantage de l’utilisation du minibatch par rapport à l’ensemble de données remonte à l’idée fondamentale de la descente de gradient stochastique 1 .

Dans la descente en dégradé par lots, vous calculez le dégradé sur l'intégralité du jeu de données, en effectuant la moyenne sur une grande quantité d'informations. Il faut beaucoup de mémoire pour le faire. Mais le véritable handicap, c’est que la trajectoire du gradient de lots vous amène au mauvais endroit (point de selle).

En SGD pur, par contre, vous mettez à jour vos paramètres en ajoutant (signe moins) le dégradé calculé sur une seule instance du jeu de données. Comme il est basé sur un point de données aléatoire, il est très bruyant et peut partir dans une direction éloignée du gradient de lot. Cependant, le bruit est exactement ce que vous voulez dans l'optimisation non convexe, car il vous permet d'échapper aux points de selle ou aux minima locaux (théorème 6 dans [2]). L'inconvénient est que c'est terriblement inefficace et que vous devez parcourir plusieurs fois l'ensemble de données pour trouver la bonne solution.

La méthodologie de minibatch est un compromis qui injecte suffisamment de bruit pour chaque mise à jour de gradient, tout en obtenant une convergence relativement rapide.

1 Bottou, L. (2010). Apprentissage automatique à grande échelle avec descente de gradient stochastique. Dans Actes du COMPSTAT'2010 (p. 177-186). Physica-Verlag HD.

[2] Ge, R., Huang, F., Jin, C. et Yuan, Y. (juin 2015). S'échapper du gradient stochastique en ligne de points de selle pour la décomposition du tenseur. Dans COLT (pp. 797-842).

MODIFIER :

Je viens de voir ce commentaire sur le facebook de Yann LeCun, qui donne une nouvelle perspective à cette question (désolé, je ne sais pas comment faire un lien vers fb.)

S'entraîner avec des mini-lots volumineux est mauvais pour la santé. Plus important encore, c'est mauvais pour votre erreur de test. Les amis ne laissent pas leurs amis utiliser des minibattages plus grands que 32. Disons le: les seules personnes qui sont passées à des tailles de minibatch supérieures à un depuis 2012 sont parce que les GPU sont inefficaces pour des lots de taille inférieure à 32. C'est une raison terrible. Cela signifie simplement que notre matériel est nul.

Il a cité cet article qui vient d'être publié sur arXiv il y a quelques jours (avril 2018), qui mérite d'être lu,

Dominic Masters, Carlo Luschi, Revisiter la formation par petits lots pour les réseaux de neurones profonds , arXiv: 1804.07612v1

De l'abstrait,

Bien que l'utilisation de mini-lots volumineux augmente le parallélisme informatique disponible, il a été démontré que la formation par petits lots permettait d'améliorer les performances de généralisation ...

Les meilleures performances ont été systématiquement obtenues pour des tailles de mini-lots comprises entre m = 2 et m = 32, ce qui contraste avec les travaux récents préconisant l’utilisation de tailles de mini-lots par milliers.


2
Pourquoi une descente en gradient par mini-lots devrait-elle être plus susceptible d’éviter de mauvais minima locaux que par une descente en gradient? Avez-vous quelque chose à sauvegarder cette revendication?
Martin Thoma

@MartinThoma Voir le théorème 6 dans [2], un article récent sur la JMLR.
HoraceT

2
Cet article est également sur arXiv . En outre, je ne vois pas en quoi cela appuie votre demande. Ils n'ont même jamais mentionné la descente de gradient en mini-batch. Je ne comprends pas ce théorème (par exemple, qu'est-ce que "g (X)"? Où ont-ils introduit cette notation? Dans les classes de statistiques, g (X) = E (X) ... mais cela n'a pas beaucoup de sens ici) . Qu'est-ce que ? - L'énoncé de ce théorème semble suggérer qu'il n'y a pas de mauvais minima locaux. Mais cela serait vrai pour la descente en gradient SGD et batch ainsi que pour la descente en gradient mini-batch, non? ϕ(w,X)
Martin Thoma

2
@MartinThoma Etant donné qu'il existe un minimum global pour l'ensemble de données qui nous est donné, le chemin exact vers ce minimum global dépend de différentes choses pour chaque méthode GD. Pour batch, le seul aspect stochastique est le poids à l'initialisation. Le chemin du dégradé sera le même si vous entraînez à nouveau le NN avec les mêmes poids initiaux et le même jeu de données. Pour les mini-lots et SGD, le chemin comportera des aspects stochastiques entre chaque étape de l'échantillonnage stochastique des points de données pour la formation à chaque étape. Cela permet au mini-lot et à SGD d'échapper aux optima locaux s'ils sont en chemin.
Wesley

8

La mémoire n'est pas vraiment la raison de cela, car vous pouvez simplement accumuler vos gradients au fur et à mesure de votre itération dans l'ensemble de données et les appliquer à la fin, mais vous les appliquez toujours à SGD à chaque étape.

Les raisons pour lesquelles SGD est si largement utilisé sont les suivantes:

1) efficacité. En règle générale, en particulier au début de l’entraînement, les gradients de paramètres pour différents sous-ensembles de données tendent à aller dans la même direction. Ainsi, les gradients évalués sur 1 / 100ème des données vont approximativement dans la même direction générale que sur l'ensemble de données, mais ne nécessitent que 1/100 du calcul. Étant donné que la convergence sur un réseau profond hautement non linéaire nécessite généralement des milliers ou des millions d'itérations, quelle que soit la qualité de vos gradients, il est judicieux d'effectuer de nombreuses mises à jour à partir d'estimations économiques du gradient plutôt que de quelques-unes seulement.

2) Optimisation: les mises à jour bruyantes peuvent vous permettre de rebondir sur de mauvais optima locaux (bien que je n’aie pas de source qui montre que cela compte dans la pratique).

3) la généralisation. Il semble (voir Zhang et al: Théorie de l'apprentissage en profondeur III: Propriétés de généralisation de SGD ) que SGD aide réellement à la généralisation en trouvant des minima «plats» sur l'ensemble d'apprentissage, qui sont plus susceptibles d'être également des minima sur l'ensemble d'essai. Intuitivement, nous pouvons considérer SGD comme une sorte d' ensachage . En calculant nos paramètres en fonction de nombreux minicatchs de données, nous renforçons les règles généralisées entre les minibatchs, et annulons les règles qui ne le sont pas. ensemble de formation.


3

Sauf erreur de ma part, la taille du lot correspond au nombre d'instances de formation laissées par le modèle lors d'une itération de formation.

Correct (bien que je l'appelle "étape de mise à jour du poids")

et l'époque est un tour complet lorsque chacune des instances de formation ont été vues par le modèle

Correct

Si tel est le cas, je ne vois pas l'avantage de l'itération sur un sous-ensemble presque insignifiant des instances de formation à la différence de l'application d'un "lot maximum" en exposant toutes les instances de formation disponibles à chaque tour au modèle (en supposant bien sûr qu'il la mémoire). Quel est l'avantage de cette approche?

Eh bien, à peu près ça. Vous n'avez généralement pas assez de mémoire. Disons que nous parlons de classification d'images. ImageNet est un jeu de données extrêmement populaire. VGG-16D a longtemps été l'un des mod.els les plus populaires. Il faut calculer 15 245 800 flottants (dans les cartes de caractéristiques) pour une image 224x224. Cela signifie environ 61 Mo par image. Ceci est juste une limite inférieure approximative sur la quantité de mémoire dont vous avez besoin pendant la formation pour chaque image. ImageNet contient plusieurs milliers (environ 1,2 million?) D’images. Même si vous avez beaucoup de mémoire principale, vous n’avez certainement pas beaucoup de mémoire GPU. J'ai vu GPU accélérer les choses à environ 21x. Donc, vous voulez vraiment utiliser le GPU.

Aussi: le temps pour un mini-lot est beaucoup plus bas. La question est donc la suivante: préféreriez-vous faire n étapes de mise à jour avec un mini-lot par heure sur un processeur graphique ou m étapes de mise à jour avec un lot sans GPU, où n >> m.


Ce n'est vraiment pas une question de mémoire limitée. Il est toujours possible de calculer le gradient sur votre jeu de données en plusieurs lots avec des paramètres de modèle fixes (fonctionnellement équivalent au calcul du gradient en un seul lot géant). En pratique, il s’agit plus des propriétés de généralisation causées par la stochasticité / bruit de SGD / MBGD et du fait qu’il faut moins d’époques dans votre jeu de données pour atteindre la convergence. La mise à jour des paramètres de modèle au cours d'une même période permet d'obtenir de meilleurs paramètres intermédiaires, ce qui rend plus informatifs les calculs de gradient ultérieurs au cours de l'époque.
Madison Mai

1

Outre les autres réponses, je pense qu'il convient de souligner qu'il existe deux quantités distinctes mais souvent couplées:

  1. Le nombre d'entrées utilisées pour calculer le gradient des paramètres dans chaque étape.

Comme d'autres l'ont fait remarquer, le gradient par rapport à un minibatch est une approximation du vrai gradient. Plus le minibatch est grand, meilleure est l'approximation.

  1. Le nombre d'entrées collectées dans un tableau et calculées "en même temps"

Le compromis ici concerne uniquement les performances (mémoire / cycles).

Ces quantités sont généralement les mêmes, c’est-à-dire la taille du minibatch, mais elles peuvent en principe être découplées.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.