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?
la source
Réponses:
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.)
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,
la source
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.
la source
Correct (bien que je l'appelle "étape de mise à jour du poids")
Correct
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.
la source
Outre les autres réponses, je pense qu'il convient de souligner qu'il existe deux quantités distinctes mais souvent couplées:
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.
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.
la source