Was ist die Stapelgröße im neuronalen Netzwerk?

Ich verwende Python Keras package für ein neuronales Netzwerk. Dies ist die link . Entspricht batch_size der Anzahl der Testproben? Aus Wikipedia haben wir dies Informationen:

In anderen Fällen kann die Auswertung des Summengradienten jedoch teure Auswertungen der Gradienten aller Summandenfunktionen erfordern. Wenn der Trainingssatz enorm ist und es gibt keine einfachen Formeln, die Bewertung der Gradientensummen wird sehr teuer, da die Bewertung des Gradienten die Bewertung aller Gradienten der Summandenfunktionen erfordert. Um die Rechenkosten bei jeder Iteration zu sparen, tastet der stochastische Gradientenabstieg bei jedem Schritt eine Teilmenge der Summandenfunktionen ab. Dies ist sehr effektiv bei großen Problemen des maschinellen Lernens.

Die obigen Informationen beschreiben Testdaten? Entspricht dies batch_size in Keras (Anzahl der Abtastwerte pro Gradientenaktualisierung)?

Kommentare

Antwort

Die Stapelgröße definiert die Anzahl der Proben, die über das Netzwerk weitergegeben werden.

Zum Beispiel Angenommen, Sie haben 1050 Trainingsmuster und möchten ein batch_size gleich 100 einrichten. Der Algorithmus entnimmt die ersten 100 Proben (vom 1. bis zum 100.) aus dem Trainingsdatensatz und trainiert das Netzwerk. Als nächstes werden die zweiten 100 Abtastwerte (vom 101. bis zum 200.) genommen und das Netzwerk erneut trainiert. Wir können diesen Vorgang fortsetzen, bis wir alle Abtastwerte durch das Netzwerk verbreitet haben Bei den letzten Proben kann ein Problem auftreten. In unserem Beispiel haben wir 1050 verwendet, das ohne Rest nicht durch 100 teilbar ist. Die einfachste Lösung besteht darin, nur die letzten 50 Proben abzurufen und das Netzwerk zu trainieren.

Vorteile der Verwendung einer Stapelgröße < Anzahl aller Samples:

  • Es wird weniger Speicher benötigt. Da Sie das Netzwerk mit weniger Samples trainieren, erfordert der gesamte Trainingsvorgang weniger Speicher Dies ist besonders wichtig, wenn Sie nicht in der Lage sind, den gesamten Datensatz in den Arbeitsspeicher Ihres Computers zu integrieren.

  • In der Regel trainieren Netzwerke mit Mini-Batches schneller. Das liegt daran, dass wir aktualisieren die Gewichte nach jeder Vermehrung. In unserem Beispiel haben wir 11 Chargen propagiert (10 davon hatten 100 Proben und 1 hatte 50 Proben) und nach jeder von ihnen haben wir die Parameter unseres Netzwerks aktualisiert. Wenn wir alle Proben während der Propagierung verwenden würden, würden wir nur 1 Aktualisierung durchführen für den Netzwerkparameter.

Nachteile der Verwendung einer Stapelgröße < Anzahl aller Proben:

  • Je kleiner die Charge ist, desto ungenauer ist die Schätzung des Gradienten. In der folgenden Abbildung sehen Sie, dass die Richtung des Mini-Batch-Gradienten (grüne Farbe) im Vergleich zur Richtung des vollständigen Batch-Gradienten (blaue Farbe) viel stärker schwankt.

Verlaufsrichtungen für verschiedene Batch-Setups

Stochastic ist nur ein Mini-Batch mit batch_size gleich 1. In diesem Fall ändert der Gradient seine Richtung noch häufiger als ein Mini-Batch-Gradient.

Kommentare

  • Nein, ich habe nicht ‚ t. Dies ist eine beliebte Technik in neuronalen Netzen und diese Terminologie können Sie in verschiedenen Bibliotheken, Büchern und Artikeln sehen. Möchten Sie Testdatenfehler in jeder Epoche überprüfen oder nur das Modell nach dem Training überprüfen?
  • Das Netzwerk konvergiert auch schneller, da die Anzahl der Aktualisierungen erheblich höher ist. Das Einrichten der Mini-Stapelgröße ist eine Art Kunst, zu klein, und Sie riskieren, dass Ihr Lernen zu stochastisch und schneller wird, aber zu unzuverlässigen Modellen konvergiert, zu groß und es passt nicht in den Speicher und dauert immer noch ewig > Bedeutet dies, dass batch_size=<size of dataset> als Online-Lernen betrachtet wird, oder vielmehr batch_size=1? Und gilt das alles auch für RNNs? Bei Verwendung von batch_size in RNNs wird der Stapel als eine Art virtueller Zeitschritt betrachtet, da alle Instanzen in diesem Stapel so berechnet werden, als ob sie gleichzeitig aufgetreten wären ?
  • Wenn Leute Online-Lernen sagen, meinen sie normalerweise batch_size=1. Die Idee hinter dem Online-Lernen ist, dass Sie Ihr Modell aktualisieren, sobald Sie das Beispiel sehen. Bei größeren Stapeln bedeutet dies, dass Sie zuerst die verschiedenen Beispiele durchsehen, bevor Sie die Aktualisierung durchführen. In RNN kann die Größe der Charge unterschiedliche Bedeutungen haben.Normalerweise ist es üblich, ‚ die Trainingssequenz in ein Fenster fester Größe (wie 10 Wörter) aufzuteilen. In diesem Fall bedeutet das Einschließen von 100 dieser Fenster während des Trainings, dass Sie batch_size=100 haben.
  • @Oleg Melnikov, wenn Ihre letzte Charge eine erheblich kleinere Größe hat (let ‚ s sagen, es wäre 1 statt 50), dann wäre die Schätzung für den Gradienten weniger genau und es könnte ein bisschen Ihre Gewichte vermasseln. Stellen Sie sich im obigen Bild vor, Sie führen 10 Aktualisierungen mit einem Mini-Stapel 100 (grüne Linien) und einem mit Mini-Stapel 1 (rote Linie) durch. Dies bedeutet, dass in der nächsten Epoche einige erste Iterationen das Problem mit dem letzten Mini-Batch-1-Update aus der vorherigen Epoche lösen können.

Antwort

In der Terminologie des neuronalen Netzwerks:

  • eine Epoche = ein Vorwärtsdurchlauf und ein Rückwärtsdurchlauf von allen Trainingsbeispielen
  • Stapelgröße = Anzahl der Trainingsbeispiele in einem Vorwärts- / Rückwärtsdurchlauf. Je höher die Stapelgröße, desto mehr Speicherplatz wird benötigt.
  • Anzahl der -Iterationen = Anzahl der Durchgänge, jeder Durchgang anhand der Anzahl der Beispiele [Stapelgröße]. Um klar zu sein, ein Durchgang = ein Vorwärtsdurchlauf + ein Rückwärtsdurchlauf (wir zählen den Vorwärtsdurchlauf und den Rückwärtsdurchlauf nicht als zwei verschiedene Durchgänge).

Beispiel: Wenn Sie 1000 Trainingsbeispiele haben und Ihre Stapelgröße 500 beträgt, sind 2 Iterationen erforderlich, um 1 Epoche abzuschließen.

FYI: Kompromiss zwischen Stapelgröße und Anzahl der Iterationen zum Trainieren eines neuronalen Netzwerks

Kommentare

  • Aber was ist der Unterschied zwischen Verwenden Sie Beispiele für [Stapelgröße] und trainieren Sie das Netzwerk für jedes Beispiel. Fahren Sie mit den nächsten Beispielen für [Stapelgröße] fort. Da Sie ein Beispiel durch das Netzwerk führen und SGD anwenden und das nächste Beispiel usw. verwenden, wird Nr Unterschied, wenn die Chargengröße 10 oder 1000 oder 100000 beträgt. Nach [batc h Größe] Anzahl der Beispiele ist fertig. Das nächste Beispiel für die nächste Charge wird folgen. Es macht nur einen Unterschied, ob die [Stapelgröße] -Nummern des Beispiels die [Anzahl der Iterationen] mal im Netzwerk durchlaufen und dann mit den nächsten [Stapelgrößen] -Beispielen fortfahren.
  • Ein wichtiger Unterschied ist, dass der Lernschritt (ein Schritt) wird einmal für jede Charge angewendet, während Sie alle Chargen durchlaufen müssen, um eine Epoche zu erstellen. Der Unterschied ist also nicht nur im Speicher algorithmisch: Größere Stapel bedeuten, dass Sie den Gradienten über mehr Samples mitteln.
  • Was ‚ ist der Unterschied zwischen Epoche und Iterationen ?
  • @Goldname 1 Epoche enthält alle Trainingsbeispiele, während 1 Iteration nur die [Stapelgröße] Anzahl der Trainingsbeispiele enthält.
  • Also: Wenn die Anzahl der Epochen konstant ist, und wir ‚ Wenn Sie das Konvergenzdiagramm mit jedem Punkt darstellen, der das Ergebnis nach jeder Epoche darstellt, können Sie erwarten, dass das resultierende Diagramm ‚ glatter ‚ (und das Training wird langsamer), wenn wir batch_size?

Antwort verringern

Wenn Sie ein Optimierungsproblem mit einer CPU oder einer GPU lösen, wenden Sie iterativ einen Algorithmus auf einige Eingabedaten an. In jeder dieser Iterationen aktualisieren Sie normalerweise eine Metrik Ihres Problems, indem Sie einige Berechnungen für die Daten durchführen. Wenn Ihre Daten jetzt groß sind, kann es eine beträchtliche Zeit dauern, bis jede Iteration abgeschlossen ist, und es kann eine Menge Ressourcen verbrauchen. Manchmal wenden Sie diese iterativen Berechnungen auf einen Teil der Daten an, um Zeit und Rechenressourcen zu sparen. Dieser Teil ist die Batch-Größe, und der Prozess wird (im Neural Network Lingo) als Batch-Datenverarbeitung bezeichnet. Wenn Sie Ihre Berechnungen auf alle Ihre Daten anwenden, führen Sie die Online-Datenverarbeitung durch. Ich denke, die Terminologie stammt aus den 60ern und sogar schon vorher. Erinnert sich jemand an die .bat DOS-Dateien? Aber natürlich bedeutet das Konzept einen Thread oder einen Teil der zu verwendenden Daten.

Antwort

Die Dokumentation zu Keras zur Stapelgröße finden Sie unter fit -Funktion auf der Seite Modelle (funktionale API)

batch_size: Ganzzahl oder keine. Anzahl der Proben pro Gradientenaktualisierung. Wenn nicht angegeben, ist batch_size standardmäßig 32.

Wenn Sie einen kleinen Datensatz haben, ist es am besten, die Stapelgröße gleich der Größe des zu machen Trainingsdaten. Versuchen Sie es zuerst mit einer kleinen Charge und erhöhen Sie sie dann, um Zeit zu sparen. Wie itdxer erwähnt, gibt es einen Kompromiss zwischen Genauigkeit und Geschwindigkeit.

Antwort

Die Stapelgröße ist ein Hyperparameter, der die Anzahl der zu bearbeitenden Stichproben definiert, bevor interne Modellparameter aktualisiert werden.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.