Ich habe oft gelesen, dass bei Deep-Learning-Modellen die übliche Praxis darin besteht, Mini-Batches (im Allgemeinen kleine, 32/64) über mehrere Trainingsepochen anzuwenden. Ich kann den Grund dafür nicht wirklich ergründen.
Wenn ich mich nicht irre, gibt die Stapelgröße die Anzahl der Trainingsinstanzen an, die das Modell während einer Trainingsiteration gesehen hat. und die Epoche ist eine vollständige Wende, wenn das Modell jede der Trainingsinstanzen gesehen hat. In diesem Fall kann ich den Vorteil nicht erkennen, dass ich die Trainingsinstanzen gegenüber einer fast unbedeutenden Teilmenge mehrmals iteriere, im Gegensatz zum Anwenden eines "maximalen Stapels", indem ich alle verfügbaren Trainingsinstanzen in jeder Runde auf das Modell lege (vorausgesetzt natürlich, dass dies ausreicht) die Erinnerung). Was ist der Vorteil dieses Ansatzes?
quelle
Antworten:
Der Hauptvorteil der Verwendung von Minibatch gegenüber dem vollständigen Datensatz beruht auf der Grundidee des stochastischen Gradientenabfalls 1 .
Beim Batch-Gefälle berechnen Sie das Gefälle über das gesamte Dataset und bilden einen Durchschnitt über möglicherweise eine große Menge an Informationen. Es braucht viel Gedächtnis, um das zu tun. Das eigentliche Handicap ist jedoch die Batch-Steigung, mit der Sie an einem schlechten Punkt (Sattelpunkt) landen.
In reinem SGD hingegen aktualisieren Sie Ihre Parameter, indem Sie den für eine einzelne Instanz des Datasets berechneten Gradienten (Minuszeichen) hinzufügen . Da es auf einem zufälligen Datenpunkt basiert, ist es sehr verrauscht und kann in eine Richtung weit vom Stapelgradienten abweichen. Das Rauschen ist jedoch genau das, was Sie bei der nicht-konvexen Optimierung wünschen, da es Ihnen hilft, Sattelpunkten oder lokalen Minima zu entkommen (Satz 6 in [2]). Der Nachteil ist, dass es schrecklich ineffizient ist und Sie den gesamten Datensatz viele Male durchlaufen müssen, um eine gute Lösung zu finden.
Die Minibatch-Methode ist ein Kompromiss, der bei jeder Gradientenaktualisierung genügend Rauschen erzeugt und gleichzeitig eine relativ schnelle Konvergenz erzielt.
1 Bottou, L. (2010). Maschinelles Lernen in großem Maßstab mit stochastischem Gefälle. In Proceedings of COMPSTAT'2010 (S. 177-186). Physica-Verlag HD.
[2] Ge, R., Huang, F., Jin, C. & Yuan, Y. (2015, Juni). Flucht aus dem Sattelpunkte-Online-Stochastikgradienten für die Tensor-Zersetzung. In COLT (S. 797-842).
EDIT:
Ich habe gerade diesen Kommentar auf Yann LeCuns Facebook gesehen, der eine neue Perspektive auf diese Frage bietet (ich weiß leider nicht, wie ich auf fb verlinken soll).
Er zitierte diesen Artikel, der vor einigen Tagen (April 2018) auf arXiv veröffentlicht wurde und der es wert ist, gelesen zu werden.
Dominic Masters, Carlo Luschi, Überarbeitung des Small Batch-Trainings für tiefe neuronale Netze , arXiv: 1804.07612v1
Aus dem Abstrakten,
quelle
Der Speicher ist nicht wirklich der Grund, dies zu tun, weil Sie könnten nur Ihre Steigungen , wie Sie durchlaufen den Datensatz akkumulieren, und wenden sie am Ende, aber immer noch in SGD Sie gelten sie bei jedem Schritt.
Gründe, warum SGD so weit verbreitet ist, sind:
1) Effizienz. Insbesondere zu Beginn des Trainings tendieren die Parametergradienten für verschiedene Teilmengen der Daten in der Regel dazu, in die gleiche Richtung zu weisen. Gradienten, die mit einem Hundertstel der Daten bewertet werden, weisen also in etwa in die gleiche allgemeine Richtung wie der gesamte Datensatz, erfordern jedoch nur ein Hundertstel der Berechnung. Da die Konvergenz in einem hochgradig nichtlinearen, tiefen Netzwerk normalerweise Tausende oder Millionen von Iterationen erfordert, unabhängig davon, wie gut Ihre Verläufe sind, ist es sinnvoll, viele Aktualisierungen auf der Grundlage billiger Schätzungen des Verlaufs vorzunehmen, anstatt nur wenige Aktualisierungen auf der Grundlage guter.
2) Optimierung: Durch laute Updates können Sie möglicherweise aus schlechten lokalen Optima herausspringen (obwohl ich keine Quelle habe, aus der hervorgeht, dass dies in der Praxis von Bedeutung ist).
3) Verallgemeinerung. Es scheint (siehe Zhang et al.: Theorie des tiefen Lernens III: Generalisierungseigenschaften von SGD ), dass SGD die Generalisierung tatsächlich unterstützt, indem "flache" Minima auf dem Trainingssatz gefunden werden, die wahrscheinlicher auch Minima auf dem Testsatz sind. Intuitiv können wir denken von SGD als eine Art Absackung - durch Berechnung unserer Parameter basierend auf vielen minibatches der Daten, reenforce wir Regeln verallgemeinern über minibatches und Regeln aufheben , die dies nicht tun, wodurch uns weniger anfällig für Überanpassung an die Trainingsset.
quelle
Richtig (obwohl ich es "Gewichtsaktualisierungsschritt" nennen würde)
Richtig
Nun, so ziemlich das. Normalerweise haben Sie nicht genug Speicher. Nehmen wir an, wir sprechen über die Klassifizierung von Bildern. ImageNet ist ein äußerst beliebter Datensatz. VGG-16D war lange Zeit eines der beliebtesten Modelle. Es werden 15 245 800 Floats (in den Feature-Maps) für ein 224 x 224-Bild benötigt. Dies bedeutet ungefähr 61 MB pro Bild. Dies ist nur eine grobe Untergrenze dafür, wie viel Speicher Sie während des Trainings für jedes Bild benötigen. ImageNet enthält mehrere tausend (ich denke etwa 1,2 Millionen?) Bilder. Während Sie vielleicht so viel Hauptspeicher haben, haben Sie sicherlich nicht so viel GPU-Speicher. Ich habe gesehen, wie die GPU die Dinge auf das 21-fache beschleunigte. Sie möchten also unbedingt die GPU verwenden.
Außerdem: Die Zeit für eine Mini-Charge ist viel kürzer. Die Frage ist also: Würden Sie lieber n Aktualisierungsschritte mit Mini-Batch pro Stunde auf einer GPU ausführen oder m Aktualisierungsschritte mit Batch ohne GPU, wobei n >> m.
quelle
Abgesehen von den anderen Antworten sollte ich darauf hinweisen, dass es zwei Größen gibt, die sich unterscheiden, aber oft miteinander verbunden sind:
Wie bereits erwähnt, ist der Gradient in Bezug auf ein Minibatch eine Annäherung an den tatsächlichen Gradienten. Je größer das Minibatch ist, desto besser ist die Approximation.
Hier geht es nur um Leistung (Speicher / Zyklen).
Diese Mengen sind in der Regel gleich, dh die Minibatchgröße, können aber grundsätzlich entkoppelt werden.
quelle