Skip to main content

Quelle est la Batch Size Optimale pour Entraîner un Neural Network ?

Une courte étude de l’effet de la batch size sur la test accuracy.
Created on April 2|Last edited on February 2
Ceci est une traduction d'un article en anglais qui peut être trouvé ici.



Introduction

Tout en sachant que la réponse à des questions comme « Quelle est la batch size optimale » est presque toujours la même (« ça dépend »), notre but aujourd’hui est de regarder comment les différentes batch sizes impactent l’accuracy, le training time, et les ressources de calcul. Puis, nous explorerons certaines hypothèses pour expliquer ces différences.

Menons l’enquête !

Tout d’abord, il nous faut établir l’effet de la batch size sur la test accuracy et sur le training time.
Pour ce faire, faisons une ablation study. Nous allons utiliser une tâche d’image classification et nous allons tester comment l’accuracy est modifiée avec différentes batch sizes. Parmi les éléments sur lesquels nous nous concentrerons pour ces tests :
  • Nous utiliserons SEED dès que possible. Cela élimine le bruit d’initialisation aléatoire, ce qui rend notre modèle plus robuste. Voici une lecture intéressante sur la Signification et le Bruit dans la Recherche d’Hyperparamètre.
  • Nous voulons utiliser une architecture simple, plutôt que de la Batch Normalization. Consultez l’effet de la batch size sur les performances de modèle ici.
  • Nous n’utiliserons pas de network sur-paramétré – cela permet d’éviter l’overfitting.
  • Nous entraînerons notre modèle avec différentes batch sizes pour 25 epochs.

Essayez l’ablation study sur Google colab \rightarrow

Nous utiliserons les Sweeps Weights and Biases pour exécuter notre ablation study. Regardons un peu les résultats. 👇

Run set
0

  • Tout d’abord, d’après les mesures de validation, les modèles entraînés avec de petites batch sizes généralisent bien sur le validation set.
  • La batch size de 32 nous donne le meilleur résultat. La batch size de 2 048 nous donne le pire résultat. Pour notre étude, nous entraînons notre modèle avec une batch size qui va de 8 à 2 048, et chaque batch size fait deux fois la taille de la batch size précédente.
  • O Notre graphique de coordonnées parallèles met aussi un compromis important en évidence : les batch sizes plus grandes prennent moins de temps à entraîner, mais sont moins précises.

Run set
0

  • En regardant de plus près, nous pouvons clairement voir une baisse exponentielle dans le test error rate(taux d’erreur test) lorsque nous passons d’une batch size haute à une batch size plus petite. Ceci étant, c’est pour la batch size 32 que nous avons le moins d’error rate.
  • Nous voyons une augmentation exponentielle du temps requis pour entraînement, lorsque nous passons d’une batch size haute à une batch size plus petite. Et c’était prévisible ! Puisque nous n’utilisons pas d’early stopping lorsque le modèle commence à faire de l’overfitting, nous le laissons s’entraîner pour 25 epochs, et nous voyons nécessairement cette augmentation du training time.

Pourquoi de plus grandes batch sizes produisent-elle une moins bonne généralisation ?

Quelles sont la ou les raisons derrière ce comportement étrange ? Ce fil de Stat Exchange a proposé plusieurs hypothèses intéressantes. Voici certaines de mes préférées :
  •  Ce papier affirme que les méthodes avec des batchs larges tendent à converger vers des sharp minimizers (pointus) des training functions et des testing functions – et qu’un sharp minima produit de mauvaises généralisations. Au contraire, les méthodes avec des batchs petits convergent vers des flat minimizers (plats).
  • L’optimisation basée sur gradient descent fait une approximation linéaire de la cost function. Cependant, si la cost function est hautement non-linéaire (hautement courbée), alors l’approximation ne sera pas très bonne, d’où le fait que les batch sizes petites soient plus sûres.
  • Lorsque vous mettez m exemples dans un minibatch, il vous faut faire 0(m) calculs et utiliser 0(m) mémoire, mais vous réduisez le total d’incertitude dans le gradient par un facteur de seulement 0(sqrt(m)). En d’autres mots, il y a des retours qui diminuent marginalement lorsqu’on met plus d’exemples dans le minibatch.
  • Même utiliser le training set entier ne vous donne pas vraiment le vrai gradient. Utiliser le training set entier revient en fait à utiliser une taille très grande de minibatch.
  • Un gradient avec une petite batch size oscille bien plus qu’un gradient avec une batch size plus grande. Cette oscillation peut être considéré comme du bruit ; cependant, pour un loss landscape non-convexe (ce qui est souvent le cas), ce bruit aide à sortir du minima local. Ainsi, de plus grands batchs font moins d’étapes de recherches, plus grossières, pour trouver une solution optimale, et ainsi par construction auront beaucoup moins de chances de converger vers la solution optimale.

Weights & Biases

Weights & Biases vous aide à avoir un suivi de vos expériences de machine learning. Utilisez notre outil pour enregistrer les hyperparamètres et les mesures d’output de vos runs, puis visualisez et comparez les résultats, et partagez rapidement vos découvertes avec vos collègues.
Commencez en 5 minutes.
Iterate on AI agents and models faster. Try Weights & Biases today.