Wie wirkt sich die Chargengröße auf die Konvergenz von SGD aus und warum?

18

Aus vielen Diskussionen habe ich ähnliche Schlussfolgerungen gezogen, dass die Konvergenz von SGD mit zunehmender Minibatch-Größe tatsächlich schwieriger / schlechter wird, zum Beispiel in diesem Artikel und in dieser Antwort . Ich habe auch von Leuten gehört, die im frühen Stadium Tricks wie kleine Lernraten oder Losgrößen einsetzten, um diese Schwierigkeit bei großen Losgrößen anzugehen.

Dies erscheint jedoch kontraintuitiv, da der durchschnittliche Verlust eines Minibatches als Annäherung an den erwarteten Verlust über die Datenverteilung betrachtet werden kann: Je größer die Losgröße, desto genauer soll sie sein. Warum ist das in der Praxis nicht der Fall?

1|X|xXl(x,w)Expdeintein[l(x,w)]


Hier sind einige meiner (wahrscheinlich falschen) Gedanken, die zu erklären versuchen.

Die Parameter des Modells hängen stark voneinander ab. Wenn der Stapel zu groß wird, wirkt sich dies auf zu viele Parameter auf einmal aus, sodass es für die Parameter schwierig ist, eine stabile inhärente Abhängigkeit zu erreichen. (wie das interne Kovariatenverschiebungsproblem, das im Batch-Normalisierungspapier erwähnt wird )

Oder wenn fast alle Parameter in jeder Iteration verantwortlich sind, tendieren sie dazu, redundante implizite Muster zu lernen, wodurch die Kapazität des Modells verringert wird? (Ich meine, bei Problemen mit der Ziffernklassifizierung sollten einige Muster für Punkte verantwortlich sein, andere für Kanten, aber wenn dies passiert, versucht jedes Muster, für alle Formen verantwortlich zu sein).

Oder liegt es daran, dass die Minibatches, wenn sich die Stapelgröße dem Maßstab des Trainingssatzes annähert, nicht mehr als aus der Datenverteilung ersichtlich sind, da eine große Wahrscheinlichkeit für korrelierte Minibatches besteht?


Update
Wie in der Antwort von Benoit Sanchez hervorgehoben, ist ein wichtiger Grund, dass große Minibatches mehr Berechnungen erfordern, um ein Update abzuschließen, und die meisten Analysen verwenden zum Vergleich eine feste Anzahl von Trainingsepochen.

Diese Arbeit (Wilson und Martinez, 2003) zeigt jedoch, dass eine größere Stückzahl trotz einer ausreichenden Anzahl von Trainingsepochen immer noch leicht nachteilig ist. Ist das generell der Fall? Bildbeschreibung hier eingeben

dontloo
quelle

Antworten:

12

N

  • 27N
  • 8343×N200000,47N

Sie sehen, dass Sie bei größeren Stapeln viel weniger Aktualisierungen für die gleiche Genauigkeit benötigen.

Es ist jedoch nicht vergleichbar, da es nicht die gleiche Datenmenge verarbeitet. Ich zitiere den ersten Artikel:

kBj1jkBj

Hier geht es darum , die gleiche Datenmenge zu verarbeiten, und obwohl für mehrere Mini-Batches ein geringer Overhead anfällt, erfordert dies vergleichbare Verarbeitungsressourcen.

Es gibt verschiedene Möglichkeiten, um zu verstehen, warum mehrere Aktualisierungen besser sind (für die gleiche Datenmenge, die gelesen wird). Es ist die Schlüsselidee des stochastischen Gefälleabstiegs gegenüber dem Gefälleabstieg. Anstatt alles zu lesen und sich am Ende selbst zu korrigieren, korrigieren Sie sich auf dem Weg und machen die nächsten Lesevorgänge nützlicher, da Sie sich anhand einer besseren Vermutung korrigieren. Geometrisch gesehen sind mehrere Aktualisierungen besser, da Sie mehrere Segmente zeichnen, jeweils in Richtung des (angenäherten) Verlaufs am Anfang jedes Segments. während ein einzelnes großes Update von Anfang an ein einzelnes Segment in Richtung des (exakten) Gradienten ist. Es ist besser, die Richtung mehrmals zu ändern, auch wenn die Richtung weniger genau ist.

Die Größe der Minibatches hängt im Wesentlichen von der Häufigkeit der Aktualisierungen ab: Je kleiner die Minibatches sind, desto mehr Aktualisierungen werden durchgeführt. Bei einem Extrem (Minibatch = Datensatz) haben Sie einen Gefälleverlauf. Im anderen Extremfall (Minibatch = eine Zeile) ist der SGD pro Zeile voll. Pro Zeile ist SGD ohnehin besser, aber größere Minibatches eignen sich für eine effizientere Parallelisierung.

Am Ende des Konvergenzprozesses wird SGD ungenauer als (Batch-) GD. Aber an diesem Punkt werden die Dinge (normalerweise) zu einer Art unnütz präziser Anpassung. Während Sie eine etwas geringere Verlustfunktion für das Trainingsset erhalten, erhalten Sie keine echte Vorhersagekraft. Sie suchen nur das sehr genaue Optimum, aber es hilft nicht. Wenn die Verlustfunktion korrekt reguliert ist (was eine Überanpassung verhindert), passen Sie nicht genau "über", sondern nur "über" an. Dies zeigt sich als nicht signifikante Änderung der Genauigkeit des Testsatzes.

Benoit Sanchez
quelle
1
Danke, es macht großen Sinn. Wenn Sie also die gleiche Anzahl von Aktualisierungen durchführen, ist eine größere Stapelgröße mindestens genauso gut, oder?
Dontloo
Kennen Sie irgendwelche veröffentlichten Experimente dazu (Vergleichen verschiedener Chargengrößen mit einer festgelegten Anzahl von Aktualisierungen)?
Dontloo
Ja, bei der gleichen Anzahl von Aktualisierungen sind größere Stapel immer besser. Ich kenne keine Veröffentlichung. Wenn ich jemals eine finde, werde ich sie veröffentlichen.
Benoit Sanchez
Ich habe den Rest Ihrer Frage (die Tabelle) gelesen. Interessanterweise zeigt es Ergebnisse auf einem Test-Set, während das Ziel des anständigen Gradienten darin besteht, das Training zu optimieren. Es ist möglich, dass kleine Chargen eine gewisse geringfügige Überanpassung vermeiden, indem das Optimum zufällig ausgewählt wird. Es ist eine subtile Sache, über die ich keinen intuitiven Verstand habe.
Benoit Sanchez
Laut Artikel ist der Unterschied in der Genauigkeit nicht signifikant. Sie möchten nur darauf hinweisen, dass die Genauigkeit im Wesentlichen gleich ist. Sie möchten vor allem darauf hinweisen, dass SGD mit kleinen Chargen viel schneller ist.
Benoit Sanchez
4

Zur Antwort von Curtis White hinzufügen (und weitere Referenzen hinzufügen):

Ja, SGD arbeitet als eine Art Regularisierung. Dies ist wichtig, da es ansonsten schwer zu erklären ist, warum DNNs nicht immer übermäßig passen, weil sie es können .

Der Grund, wie ich verstehe, ist, dass SGD im Parameterraum ein "Herumhüpfen" verursacht, so dass die Parameter während des Trainings nicht in einem engen Minimum bleiben können, nur in (oder in der Nähe von) breiteren. Und diese breiteren verallgemeinern anscheinend [1] besser (auch bekannt als weniger Überanpassung).

Weitere Referenzen:

  • Hier ist [2] ein weiteres Papier, das dies formalisiert (oder versucht, ich habe nicht alles durchgegangen, überzeugen Sie sich selbst!)
  • Diese Arbeit [3] behauptet, dass es eine Phase gibt, in der "stochastic relaxation, or random diffusion"die Stochastizität, die SGD innewohnt, dazu führt "maximiz[ation of] the conditional entropy of the layer".

Beide sagen, dass SGD einem Entropie-Regularisierungsterm entspricht.

Es könnte durchaus auch andere Möglichkeiten geben, wie die Chargengröße die Konvergenz beeinflusst. das ist das, von dem ich weiß.


[1] Beispiel: "Eine Bayes'sche Perspektive auf Generalisierung und stochastische Gradientenabnahme", Smith, Le, 2018. Aus der Zusammenfassung: "We propose that the noise introduced by small mini-batches drives the parameters towards minima whose evidence is large."

[2] "Der stochastische Gradientenabstieg führt eine Variationsinferenz durch und konvergiert, um die Zyklen für tiefe Netzwerke zu begrenzen", Chaudhari, Soatto 2017

[3] "Öffnen der Black Box von Deep Neural Networks über Information" Schwartz-Ziv, Tishby, 2017

[4] "Um tiefes Lernen zu verstehen, muss man die Verallgemeinerung überdenken", C. Zhang usw. 2016

dasWesen
quelle
(+1) Gute Referenzen. Übrigens, der erste Autor auf [4] ist C. Zhang
user20160
Oh, du hast Recht! Bearbeitet, danke für die Korrektur.
dasWesen
0

Eine zu große Stapelgröße kann Konvergenz verhindern, zumindest wenn SGD verwendet wird und MLP mit Keras trainiert wird. Was den Grund angeht, bin ich mir nicht hundertprozentig sicher, ob es sich um eine Mittelung der Gradienten handelt oder ob kleinere Aktualisierungen eine größere Wahrscheinlichkeit bieten, den lokalen Minima zu entkommen.

Sehen Sie hier .

Curtis White
quelle