Compromis taille du lot par rapport au nombre d'itérations pour former un réseau de neurones


222

Lors de la formation d'un réseau de neurones, quelle différence cela fait-il de définir:

  • taille du lot à et nombre d'itérations àab
  • en fonction de la taille du lot à et du nombre d'itérations àcd

où ?ab=cd

Autrement dit, en supposant que nous formions le réseau de neurones avec le même nombre d’exemples d’entraînement, comment définir la taille optimale du lot et le nombre d’itérations? (où taille du lot * nombre d'itérations = nombre d'exemples d'apprentissage montrés au réseau de neurones, le même exemple d'apprentissage étant potentiellement montré plusieurs fois)

Je suis conscient du fait que plus la taille du lot est importante, plus l’espace mémoire nécessaire est important et les calculs sont souvent plus rapides. Mais en termes de performances du réseau formé, quelle différence cela fait-il?


1
Découvrez ce blog qui explique comment choisir la bonne taille de lot tout en comparant les effets de différentes tailles de lot sur la précision du jeu de données Cifar-10.
Teja Sreenivas

Réponses:


208

De Nitish Shirish Keskar, Dheevatsa Mudigere, Jorge Nocedal, Mikhail Smelyanskiy, Ping Tak Peter Tang. Formation en grands lots pour l'apprentissage en profondeur: écart de généralisation et minima net. https://arxiv.org/abs/1609.04836 :

La méthode de descente de gradient stochastique et ses variantes sont des algorithmes de choix pour de nombreuses tâches d'apprentissage en profondeur. Ces méthodes fonctionnent dans un régime en petits lots dans lequel une fraction des données d'apprentissage, généralement entre 32 et 512 points de données, est échantillonnée pour calculer une approximation du gradient. Dans la pratique, il a été observé que, lorsqu’on utilise un lot plus important, la qualité du modèle se dégrade considérablement, comme le montre sa capacité à généraliser.Il y a eu quelques tentatives pour rechercher la cause de cette baisse de généralisation dans le régime des gros lots, mais la réponse précise à ce phénomène est, à ce jour, inconnue. Dans cet article, nous présentons de nombreuses preuves numériques à l’appui de l’opinion selon laquelle les méthodes de traitement par grands lots tendent à converger vers des minimiseurs nettes des fonctions d’apprentissage et de test, et que ces minima nets conduisent à une généralisation plus médiocre. En revanche, les méthodes en petits lots convergent systématiquement vers des minimiseurs plats et nos expériences confirment l'opinion généralement admise selon laquelle cela est dû au bruit inhérent à l'estimation du gradient. Nous discutons également de plusieurs stratégies empiriques qui aident les méthodes de grands lots à éliminer l’écart de généralisation et concluons par un ensemble d’idées de recherche futures et de questions ouvertes.

[…]

L'absence de capacité de généralisation est due au fait que les méthodes de traitement par lots volumineux ont tendance à converger vers des minimiseurs pointus de la fonction d'apprentissage . Ces minimiseurs sont caractérisés par de grandes valeurs propres positives dans et ont tendance à se généraliser moins bien. En revanche, les méthodes en petits lots convergent vers des minimiseurs plats caractérisés par de petites valeurs propres positives de . Nous avons observé que le paysage de la fonction de perte des réseaux de neurones profonds est tel que les méthodes par grands lots sont presque toujours attirées par les régions avec des minima nets et que, contrairement aux méthodes par petits lots, elles ne peuvent pas échapper aux bassins de ces minimiseurs.2f(x)2f(x)

[…]

entrez la description de l'image ici

En outre, Ian Goodfellow répond à la question de savoir pourquoi ne pas utiliser l'ensemble de la formation pour calculer le gradient. sur Quora:

La taille du taux d'apprentissage est principalement limitée par des facteurs tels que la courbe de la fonction de coût. Vous pouvez penser à la descente de gradient comme à une approximation linéaire de la fonction de coût, puis à une descente le long de ce coût approximatif. Si la fonction de coût est hautement non linéaire (très incurvée), alors l'approximation ne sera pas très bonne pour très loin, de sorte que seules les petites tailles de pas sont sûres. Vous pouvez en savoir plus à ce sujet au chapitre 4 du manuel d'apprentissage approfondi, sur le calcul numérique: http://www.deeplearningbook.org/contents/numerical.html

Lorsque vous placez m exemples dans un minibatch, vous devez effectuer un calcul O (m) et utiliser une mémoire O (m), mais vous réduisez la quantité d'incertitude dans le gradient d'un facteur de seulement O (sqrt (m)). En d'autres termes, il y a des rendements marginaux décroissants à mettre plus d'exemples dans le minibatch. Vous pouvez en savoir plus à ce sujet au chapitre 8 du manuel d'apprentissage approfondi, sur les algorithmes d'optimisation pour l'apprentissage approfondi: http://www.deeplearningbook.org/contents/optimization.html

En outre, si vous y réfléchissez, même si vous utilisez tout le kit d’entraînement, vous n’aurez pas le vrai gradient. Le vrai gradient serait le gradient attendu, l'espérance étant prise en compte dans tous les exemples possibles, pondérée par la distribution générant les données. L'utilisation de l'ensemble complet de formations consiste simplement à utiliser une très grande taille de minibatch, la taille de votre minibatch étant limitée par le montant que vous dépensez en collecte de données, plutôt que par le montant que vous dépensez en calcul.

Connexes: Descente de gradient par lots et descente de gradient stochastique


Puisque batch_size ne divise que le jeu de données d'apprentissage en lots, serait-il judicieux de réorganiser le jeu de données (non temporel) pour obtenir une variance uniforme pour tous les lots? Cela pourrait réduire le besoin d'optimisation de la taille des lots, ce qui est bien pour trouver une convergence plus rapide. si oui, comment cela serait-il fait? Je pensais que cela pourrait ne pas fournir de minima plus plats. J'apprécierais des conseils détaillés.
user12348

@ user12348 Comment allez-vous réorganiser le jeu de données? Comment pouvez-vous estimer qu'une dimension de données produira un vecteur de caractéristiques spécifique après la formation?
Nuage Cho

46

Je suppose que vous parlez de réduire la taille du lot dans un algorithme de descente de gradient stochastique en mini-lot et de le comparer à des tailles de lot plus grandes nécessitant moins d'itérations.

Andrew Ng. fournit une bonne discussion de cela et de quelques visuels dans son cours en ligne sur le ML et les réseaux de neurones. Donc, le reste de ce post est principalement une régurgitation de ses enseignements de cette classe.

Prenons les deux extrêmes, d’un côté chaque étape de descente utilisant l’ensemble du jeu de données. Vous calculez les gradients pour chaque échantillon. Dans ce cas, vous connaissez exactement le meilleur directement vers un minimum local. Vous ne perdez pas de temps dans la mauvaise direction. Donc, en termes de nombre de pas de descente, vous y arriverez le moins possible.

Bien sûr, le calcul du gradient sur l'ensemble de données est coûteux. Alors maintenant, nous allons à l'autre extrême. Une taille de lot de seulement 1 échantillon. Dans ce cas, le gradient de cet échantillon peut vous amener complètement dans la mauvaise direction. Mais bon, le coût du calcul du seul gradient était assez trivial. Lorsque vous prenez des mesures concernant un seul échantillon, vous "vagabondez" un peu, mais vous vous dirigez en moyenne vers un minimum local tout aussi raisonnable que dans une descente en gradient par lots.

C’est peut-être un moment pour signaler que j’ai vu des ouvrages suggérant que le fait de rebondir autour de cette descente de gradient stochastique à un échantillon pourrait vous aider à sortir d’un minimum local que le mode batch ne permettrait pas d’éviter, mais c’est discutable. Certaines autres bonnes réponses ici abordent cette question plus directement que moi.

En termes de puissance de calcul, alors que le processus GD stochastique à échantillon unique prend beaucoup plus d'itérations, vous finissez par y arriver pour un coût inférieur à celui du mode batch complet, "généralement". C'est ce que dit Andrew Ng.

Maintenant, trouvons le juste milieu dont vous avez parlé. Nous pouvons nous rendre compte que les bibliothèques BLAS modernes rendent le calcul vectoriel très efficace. Composer 10 ou 100 échantillons à la fois, en supposant que le code soit vectorisé correctement, ne demandera guère plus de travail que le calcul d’un échantillon (vous gagnerez en efficacité astuces de calcul intégrées dans les bibliothèques de mathématiques les plus efficaces). Et la moyenne sur un lot de 10, 100, 1000 échantillons va produire un gradient qui est une approximation plus raisonnable du vrai gradient en mode batch complet. Ainsi, nos étapes sont maintenant plus précises, ce qui signifie que nous avons besoin d’un plus petit nombre d’entre elles pour converger, et à un coût qui n’est que marginalement supérieur à celui de la DG à un seul échantillon.

Optimiser la taille exacte du mini-lot que vous devriez utiliser est généralement laissé à l’essai. Exécutez des tests sur un échantillon du jeu de données avec des nombres allant de quelques dizaines à quelques milliers et voyez lequel converge le plus rapidement, puis continuez avec cela. La taille des lots dans ces gammes semble assez commune dans la littérature. Et si vos données sont vraiment IID, alors le théorème central limite sur la variation de processus aléatoires suggérerait également que ces plages constituent une approximation raisonnable du gradient complet.

Pour décider exactement quand arrêter d'itérer, vous devez généralement contrôler votre erreur de généralisation par rapport à un ensemble de validation non formé et choisir le point où l'erreur de validation est à son point le plus bas. Entraîner pendant trop d'itérations finira par entraîner une suréquipement, et votre erreur sur votre jeu de validation commencera à grimper. Lorsque vous voyez cela se produire, arrêtez-vous au point optimal.


22

TL; DR: Une taille de mini-lot trop grande entraîne généralement une précision inférieure !

Pour ceux que ça intéresse, voici une explication.

Il y a deux notions de vitesse:

  • Vitesse de calcul
  • Vitesse de convergence d'un algorithme

La vitesse de calcul est simplement la vitesse d'exécution des calculs numériques dans le matériel. Comme vous l'avez dit, il est généralement plus élevé avec une taille de mini-lot plus grande. En effet, les bibliothèques d’algèbre linéaire utilisent la vectorisation pour les opérations vectorielles et matricielles afin de les accélérer, au détriment de l’utilisation de plus de mémoire. Les gains peuvent être importants jusqu'à un certain point. D'après mon expérience, il y a un point après lequel il n'y a que des gains de vitesse marginaux, le cas échéant. Le point dépend de l'ensemble de données, du matériel et d'une bibliothèque utilisée pour les calculs numériques (sous le capot).

Mais n'oublions pas qu'il existe également une autre notion de vitesse, qui nous dit à quelle vitesse notre algorithme converge.

Tout d’abord, que signifie la convergence de notre algorithme? Eh bien, c’est à nous de définir et de décider quand nous sommes satisfaits d’une précision, ou d’une erreur, que nous obtenons, calculée sur le jeu de validation. Nous pouvons soit le définir à l'avance et attendre que l'algorithme arrive à ce point, soit surveiller le processus de formation et décider de l'arrêter lorsque l'erreur de validation commence à augmenter de manière significative (le modèle commence à sur-adapter l'ensemble de données). Nous ne devrions vraiment pas l’arrêter immédiatement, au premier moment où l’erreur commence à monter, si nous travaillons avec des mini-lots, car nous utilisons une descente de gradient stochastique, SGD. En cas de descente de gradient (par lot complet), après chaque époque, l'algorithme s'installera au minimum, qu'il soit local ou global. SGD ne s'installe jamais vraiment dans un minimum. Il continue à osciller autour de lui. Cela pourrait durer indéfiniment,

Maintenant, après toute cette théorie, il y a une "prise" sur laquelle nous devons faire attention. Lorsque vous utilisez une taille de lot plus petite, le calcul de l'erreur génère plus de bruit que lorsque vous utilisez une taille de lot plus grande. On dirait, bon, c'est mauvais, n'est-ce pas? Le fait est que ce bruit peut aider l’algorithme à sortir d’un mauvais minimum local et à avoir plus de chances de trouver un meilleur minimum local ou, espérons-le, le minimum global.

Ainsi, si nous pouvons trouver une meilleure solution plus rapidement en utilisant une taille de lot plus petite au lieu d'un plus grand, simplement à l'aide du bruit "indésirable", nous pouvons régler le temps total nécessaire à notre algorithme pour trouver une solution satisfaisante. solution et une plus grande précision.

Ce que je veux dire, c’est que, pour une précision (ou une erreur) donnée, une taille de lot plus petite peut entraîner une durée totale de formation plus courte, et non plus, comme beaucoup le pensent.

Ou, si nous décidons de conserver le même temps de formation qu'auparavant, nous pourrions obtenir une précision légèrement supérieure avec une taille de lot plus petite, ce qui sera probablement le cas, en particulier si nous avons choisi notre vitesse d'apprentissage de manière appropriée.

Si vous avez le temps, consultez ce document: Évaluation systématique des avancées de CNN sur ImageNet En particulier, consultez "3.7. Taille des lots et vitesse d’apprentissage", et Figure 8. Vous constaterez que des tailles de mini-lots importantes entraînent une plus faible précision. , même si l’ajustement du taux d’apprentissage à une heuristique.

En général, la taille de lot de 32 est un bon point de départ et vous devriez également essayer avec 64, 128 et 256. D'autres valeurs (inférieures ou supérieures) peuvent convenir pour certains ensembles de données, mais la plage donnée est généralement la meilleure pour commencer à expérimenter avec. Cependant, moins de 32 ans, cela pourrait devenir trop lent en raison d'une vitesse de calcul nettement inférieure, en raison de la non-exploitation maximale de la vectorisation. Si vous obtenez une erreur «mémoire insuffisante», vous devriez quand même essayer de réduire la taille du mini-lot.

Il ne s’agit donc pas simplement d’utiliser la taille de mini-lot la plus grande possible qui tienne dans la mémoire.

Pour conclure et répondre à votre question, une taille de mini-lot plus petite (pas trop petite) entraîne généralement non seulement un plus petit nombre d'itérations d'un algorithme d'apprentissage, qu'une taille de lot importante, mais également une précision globale plus grande, à savoir: un réseau de neurones plus performant, dans le même temps d’entraînement ou moins.

N'oubliez pas que le niveau de bruit le plus élevé peut l'aider à sortir d'un minimum local médiocre, au lieu de le laisser coincé.


14

J'ajoute une autre réponse à cette question pour faire référence à un nouveau (2018) document de conférence ICLR de Google qui aborde presque directement cette question.

Titre: Ne baissez pas le rythme d'apprentissage, augmentez la taille du lot

https://arxiv.org/abs/1711.00489

Le résumé de l'article ci-dessus est copié ici:

Il est de pratique courante de réduire le taux d’apprentissage. Nous montrons ici que l’on peut généralement obtenir la même courbe d’apprentissage sur les ensembles d’entraînement et de test en augmentant la taille du lot pendant l’entraînement. Cette procédure est réussie pour la descente de gradient stochastique (SGD), SGD avec élan, impulsion de Nesterov et Adam. Il atteint des précisions de test équivalentes après le même nombre d’époques d’entraînement, mais avec moins de mises à jour de paramètres, ce qui entraîne un plus grand parallélisme et des temps d’entraînement plus courts. Nous pouvons réduire davantage le nombre de mises à jour de paramètres en augmentant le taux d'apprentissage et en mettant à l'échelle la taille du lot B∝ϵ. Enfin, on peut augmenter le coefficient de moment m et l’échelle B∝1 / (1 − m), bien que cela ait tendance à réduire légèrement la précision du test. Cruciale, Nos techniques nous permettent de réorienter les programmes de formation existants pour la formation par lots volumineux sans réglage hyper-paramètre. Nous formons ResNet-50 sur ImageNet à une précision de validation de 76,1% en moins de 30 minutes.


1
Une exigence de mémoire plus importante semble être un mauvais compromis pour simplement éviter de diminuer une valeur. De plus, IMHO ayant un encombrement mémoire croissant au cours de la formation, il en résulte un algorithme moins évolutif et non plus évolutif.
P-Gn

3

Je montre une expérience empirique ici . J'ai fait une expérience avec la taille de lot 4 et la taille de lot 4096. La taille 4096 génère 1024 fois moins de rétropropations. Donc, mon intuition est que les lots plus importants effectuent des étapes de recherche moins nombreuses et plus grossières pour la solution optimale. Par conséquent, la construction sera moins susceptible de converger vers la solution optimale.

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.