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 à
- en fonction de la taille du lot à et du nombre d'itérations à
où ?
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?
neural-networks
train
Franck Dernoncourt
la source
la source
Réponses:
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 :
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:
Connexes: Descente de gradient par lots et descente de gradient stochastique
la source
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.
la source
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:
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é.
la source
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:
la source
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.
la source