Quelle est la taille du lot dans le réseau de neurones?


176

J'utilise Python Keras packagepour réseau de neurones. Ceci est le lien . Est batch_sizeégal au nombre d'échantillons de test? De Wikipedia nous avons cette information:

Cependant, dans d'autres cas, l'évaluation du gradient de somme peut nécessiter des évaluations coûteuses des gradients de toutes les fonctions de sommation. Lorsque l'ensemble d'apprentissage est énorme et qu'il n'existe pas de formules simples, évaluer les sommes des gradients devient très coûteux, car évaluer le gradient nécessite d'évaluer tous les gradients des fonctions de sommation. Pour réduire les coûts de calcul à chaque itération, la descente à gradient stochastique échantillonne un sous-ensemble de fonctions de sommande à chaque étape. Ceci est très efficace dans le cas de problèmes d’apprentissage automatique à grande échelle.

Les informations ci-dessus décrivent les données de test? Est-ce la même chose que batch_sizedans keras (nombre d'échantillons par mise à jour de gradient)?


3
Il est bon de voir class.coursera.org/ml-005/lecture/preview , en particulier pour les semaines 4 à 6 + 10. Wikipédia n'est peut-être pas une ressource aussi précieuse pour l'apprentissage des réseaux de neurones.
404pio

Réponses:


230

La taille du lot définit le nombre d'échantillons qui seront propagés sur le réseau.

Par exemple, supposons que vous avez 1050 échantillons d'apprentissage et que vous souhaitez définir un nombre batch_sizeégal à 100. L'algorithme extrait les 100 premiers échantillons (du 1er au 100e) de l'ensemble de données d'apprentissage et forme le réseau. Ensuite, il prélève les 100 derniers échantillons (du 101 au 200) et entraîne à nouveau le réseau. Nous pouvons continuer à suivre cette procédure jusqu'à ce que tous les échantillons soient propagés sur le réseau. Un problème peut survenir avec le dernier ensemble d'échantillons. Dans notre exemple, nous avons utilisé 1050 qui n'est pas divisible par 100 sans reste. La solution la plus simple consiste simplement à obtenir les 50 derniers échantillons et à former le réseau.

Avantages de l’utilisation d’une taille de lot <nombre de tous les échantillons:

  • Cela nécessite moins de mémoire. Etant donné que vous entraînez le réseau en utilisant moins d'échantillons, la procédure de formation globale nécessite moins de mémoire. Cela est particulièrement important si vous ne pouvez pas insérer l'intégralité du jeu de données dans la mémoire de votre ordinateur.

  • Généralement, les réseaux s’entraînent plus rapidement avec des mini-lots. C'est parce que nous mettons à jour les poids après chaque propagation. Dans notre exemple, nous avons propagé 11 lots (10 d'entre eux avaient 100 échantillons et 1, 50 échantillons) et après chacun d'entre eux, nous avons mis à jour les paramètres de notre réseau. Si nous utilisions tous les échantillons lors de la propagation, nous ne ferions qu'une mise à jour pour le paramètre du réseau.

Inconvénients de l’utilisation d’une taille de lot <nombre de tous les échantillons:

  • Plus le lot est petit, moins l'estimation du gradient sera précise. Dans la figure ci-dessous, vous pouvez voir que la direction du dégradé de mini-lot (couleur verte) fluctue beaucoup plus par rapport à la direction du dégradé de lot complet (couleur bleue).

Directions de dégradé pour différentes configurations de lot

Stochastic est juste un mini-lot batch_sizeégal à 1. Dans ce cas, le gradient change de direction encore plus souvent qu'un gradient de mini-lot.


3
Non, je n'ai pas. C'est une technique populaire dans les réseaux de neurones et cette terminologie se retrouve dans différentes bibliothèques, livres et articles. Voulez-vous vérifier les erreurs de données de test à chaque époque ou simplement vérifier le modèle après l'entraînement?
Itdxer

1
De plus, le réseau converge plus rapidement car le nombre de mises à jour est considérablement plus élevé. Configurer la taille d'un mini lot est un art, trop petit et vous risqueriez de rendre votre apprentissage trop stochastique, plus rapide, mais convergera vers des modèles peu fiables, trop volumineux, qui ne tiendront pas dans la mémoire et prendront des siècles.
Ramalho

2
Généralement, lorsque les gens disent que l'apprentissage en ligne, ils veulent dire batch_size=1. L'idée derrière l'apprentissage en ligne est que vous mettez à jour votre modèle dès que vous voyez l'exemple. Avec une taille de lot plus grande, cela signifie que vous devez d'abord parcourir plusieurs échantillons avant de procéder à la mise à jour. Dans RNN, la taille du lot peut avoir différentes significations. En général, il est courant de scinder une séquence d’entraînement en une fenêtre de taille fixe (10 mots, par exemple). Dans ce cas, inclure 100 de ces fenêtres pendant la formation signifiera que vous avez batch_size=100.
Itdxer

1
@Oleg Melnikov, si votre dernier lot a une taille beaucoup plus petite (disons qu'il serait 1 au lieu de 50), alors l'estimation pour le gradient serait moins précise et cela risquerait de gâcher un peu votre poids. Dans l'image ci-dessus, imaginez que vous effectuez 10 mises à jour avec un mini-lot 100 (lignes vertes) et une avec le mini-lot 1 (ligne rouge). Ce qui signifie qu'à la prochaine époque, quelques premières itérations peuvent commencer à résoudre le problème avec la dernière mise à jour du dernier lot 1 de la période précédente.
Itdxer

1
@OlegMelnikov MIT Deep Learning livre a une bonne explication liée à ce problème (chapitre 8.1.3): deeplearningbook.org/contents/optimization.html
itdxer

153

Dans la terminologie du réseau de neurones:

  • une époque = une passe avant et une passe arrière de tous les exemples d'entraînement
  • taille du lot = nombre d'exemples d'apprentissage dans une passe en avant / en arrière. Plus la taille du lot est élevée, plus vous aurez besoin d'espace mémoire.
  • nombre d' itérations = nombre de passages, chaque passage utilisant [taille du lot] nombre d'exemples. Pour être clair, une passe = une passe en avant + une passe en arrière (nous ne comptons pas la passe en avant et la passe en arrière comme deux passes différentes).

Exemple: si vous avez 1000 exemples de formation et que la taille de votre lot est de 500, il vous faudra 2 itérations pour terminer une époque.

Pour votre information: taille du lot de compromis par rapport au nombre d'itérations pour former un réseau de neurones


Mais quelle est la différence entre utiliser des exemples de [taille de lot] et former le réseau sur chaque exemple et passer aux exemples de nombres de [taille de lot] suivants. Puisque vous transmettez un exemple via le réseau et que vous appliquez SGD et prenez l'exemple suivant, cela n'aura aucune incidence si la taille du lot est 10, 1000 ou 100000. Après [taille du lot], le nombre d'exemples suivant est effectué, le prochain lot suivra. Cela ne fait une différence que si [taille du lot] exemple donne le nombre [itérations] multiplié par le réseau, puis passe aux exemples suivants [taille du lot].
Erhard Dinhobl

Une distinction importante est que l'étape d'apprentissage (une étape) est appliquée une fois pour chaque lot, tandis que vous devez parcourir tous les lots pour créer une époque. La différence est donc également algorithmique non seulement en mémoire: des lots plus importants signifient que vous faites la moyenne du gradient sur plusieurs échantillons.
meduz

Quelle est la différence entre l'époque et les itérations?
Goldname

2
@Goldname Une époque comprend tous les exemples d'apprentissage, tandis qu'une itération ne comprend que [taille du lot] nombre d'exemples d'apprentissage.
Franck Dernoncourt le

3

Lorsque vous résolvez avec un processeur un problème d'optimisation, vous appliquez itérativement un algorithme sur certaines données d'entrée. Dans chacune de ces itérations, vous mettez généralement à jour une métrique de votre problème en effectuant des calculs sur les données. Désormais, lorsque la taille de vos données est importante, il peut s’avérer nécessaire de consacrer beaucoup de temps à chaque itération et de consommer beaucoup de ressources. Donc, parfois, vous choisissez d'appliquer ces calculs itératifs sur une partie des données pour gagner du temps et économiser des ressources de calcul. Cette partie correspond à batch_size et le processus est appelé traitement par lots (dans Neural Network Lingo). Lorsque vous appliquez vos calculs à toutes vos données, vous effectuez un traitement de données en ligne. Je suppose que la terminologie vient des années 60 et même avant. Est-ce que quelqu'un se souvient de la. batte des fichiers DOS? Mais bien sûr, le concept incarné pour désigner un fil ou une partie des données à utiliser.


2

La documentation Kerassur la taille du lot se trouve sous la fitfonction dans la page Modèles (API fonctionnelle) .

batch_size: Entier ou aucun. Nombre d'échantillons par mise à jour de gradient. Si non spécifié, batch_size sera 32 par défaut.

Si vous avez un petit jeu de données, il est préférable d’adapter la taille du lot à la taille des données de formation. Commencez par essayer avec un petit lot puis augmentez pour gagner du temps. Comme mentionné par itdxer , il existe un compromis entre précision et rapidité.

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.