Was ist die optimale Batch-Größe, um ein neuronales Netz zu trainieren?
Eine kurze Studie über die Auswirkungen von Batch-Größe auf Testgenauigkeit
Created on March 24|Last edited on February 2
Comment
Einleitung
Während wir realisieren, dass Fragen wie “Was ist die optimale Batch-Größe?” fast immer dieselbe Antwort haben (“Kommt darauf an”), ist unser heutiges Ziel zu betrachten, wie unterschiedliche Batch-Größen Genauigkeit, Trainingszeit und Rechner-Ressourcen beeinflussen. Dann werden wir uns einige Hypothesen ansehen, die diese Unterschiede erklären.
Lasst uns nachforschen!
Wir müssen zuerst den Effekt von Batch-Größe auf Testgenauigkeit und Trainingszeit festlegen.
Um das zu tun, lasst uns eine Ablations-Untersuchung machen. Wir werden eine Bildklassifizierungs-Aufgabe verwenden und prüfen, wie sich Genauigkeit mit unterschiedlicher Batch-Größe verändert. Wir werden uns für die Tests auf folgende Dinge fokussieren:
- Wir werden, wo immer möglich, SEED verwenden. Das eliminiert das Rauschen der zufälligen Initialisierung, was unser Modell robuster macht. Hier ist interessante Lektüre zu Bedeutung und Rauschen bei Hyperparameter-Suche.
- Wir wollen einen einfachen Aufbau verwenden, im Gegensatz zu Batch-Normalisierung. Informiere dich hier über den Effekt von Batch-Größe auf Modell-Performanz.
- Wir verwenden kein über-parametrisiertes Netz – dies hilft, Überanpassung zu vermeiden.
- Wir trainieren unser Modell mit unterschiedlichen Batch-Größen für 25 Epochen.
Wir verwenden den Weights and Biases sweep , um unsere Ablations-Untersuchung laufen zu lassen. Vertiefen wir uns in die Ergebnisse. 👇
Run set
9
- Zunächst zeigen die Validierungsmetriken, dass die mit kleinen Batch-Größen trainierten Modelle gut auf dem Validationsset generalisieren.
- Die Batch-Größe von 32 lieferte uns das beste Ergebnis. Die Batch-Größe von 2048 lieferte uns das schlechteste Ergebnis. Für unsere Untersuchung trainieren wir unser Modell mit der Batch-Größe rangierend von 8 bis 2048, mit jeder Batch-Größe doppelt so hoch wie die vorangegangene Batch-Größe.
- Unser parelleles Koordinatensystem macht auch einen Schlüssel-Nachteil sehr deutlich: größere Batch-Größen brauchen weniger Trainingszeit, sind aber auch ungenauer.
Run set
9
- Wenn wir uns stärker darin vertiefen, sehen wir deutlich eine exponentielle Abnahme in der Test-Fehlerrate, wenn wir uns von höherer Batch-Größe zu niedrigerer Batch-Größe bewegen. Das heißt, nehmt bitte zur Kenntnis, dass wir für die Batch-Größe 32 die geringste Fehlerrate haben.
- Wir sehen eine exponentielle Zunahme in der benötigten Trainingszeit, wenn wir uns von höherer Batch-Größe zu niedrigerer Batch-Größe bewegen. Und dies war zu erwarten! Da wir kein Early Stopping verwenden und das Modell beginnt mit einer Überanpassung, erlauben wir ihm lieber, für 25 Epochen zu trainieren und wir sind daran gebunden, diese Zunahme von Trainingszeit zu sehen.
Warum führen größere Batch-Größen zu schwächerer Generalisierung?
Was könnte der Grund (könnten die Gründe) sein, um dieses seltsame Verhalten zu erklären? Dieser Statistikaustausch-Thread hat ein paar ausgezeichnete Hypothesen. Einige meiner Favoriten:
- Dieses Paper behauptet, dass Methoden mit großen Batch-Größen dazu tendieren, zu spitzen Minimizern des Trainings und der Testfunktionen zu konvergieren – und dass spitze Minima zu schwächerer Generalisierung führen. Im Gegensatz dazu kovergieren Methoden mit geringen Batch-Größen zu flachen Minimizern.
- Gradientenabstiegsverfahren-basierte Optimierung macht lineare Annäherung zur Kostenfunktion. Aber wenn die Kostenfunktion stark nicht-linear ist (stark gekrümmt), dann wird die Annäherung nicht sehr gut sein, also sind kleine Batch-Größen sicher.
- Wenn du m Beispiele in ein Minibatch gibst, musst du 0(m) Rechnungen ausführen und O(m) Memory verwenden, aber du reduzierst die Unsicherheitsmenge im Gradienten um einen Faktor von nur 0(sqrt(m)). Mit anderen Worten, es gibt abnehmende marginale Ausgaben auf die Eingabe von mehr Beispielen in den Minibatch.
- Auch wenn du das ganze Trainingsset verwendest, erhältst du nicht den echten Gradienten. Das ganze Trainingsset zu verwenden, heißt nur, eine sehr große Minibatch-Größe zu verwenden.
- Ein Gradient mit kleiner Batch-Größe oszilliert viel mehr im Vergleich zu größerer Batch-Größe. Diese Oszillation kann als Rauschen betrachtet werden, obwohl für eine non-konvexe Loss Landscape (die oft der Fall ist) dieses Rauschen hilft, aus dem lokalen Minima herauszukommen. Daher machen größere Batches weniger und gröbere Suchschritte für die optimale Lösung und werden sich daher von Konstruktions wegen weniger wahrscheinlich der optimalen Lösung annähern.
Weights & Biases
Weights & Biases hilft dir, den Überblick über deine Experimente mit maschinellem Lernen zu behalten. Verwende dein Tool, um Hyperparameter und Ausgabe-Messwerte von deinen Testläufen festzuhalten, dann visualisiere und vergleiche die Ergebnisse und teile Entdeckungen mit deinen Kollegen.
Add a comment
Iterate on AI agents and models faster. Try Weights & Biases today.