Die Anwendbarkeit des Batch- oder des stochastischen Gradientenabfalls hängt wirklich von der erwarteten Fehlervielfalt ab.
Bei Batch-Gefälle wird das Gefälle anhand des gesamten Datensatzes berechnet. Dies ist ideal für konvexe oder relativ glatte Fehlerverteiler. In diesem Fall bewegen wir uns etwas direkt in Richtung einer optimalen Lösung, entweder lokal oder global. Darüber hinaus wird der Batch-Gradientenabstieg bei einer annealten Lernrate schließlich das Minimum finden, das sich in seinem Anziehungsbecken befindet.
Der stochastische Gradientenabstieg (SGD) berechnet den Gradienten anhand einer einzelnen Stichprobe. Die meisten Anwendungen von SGD verwenden aus Gründen, die später noch erläutert werden, ein Minibatch aus mehreren Proben. SGD funktioniert für Fehlerverteiler mit vielen lokalen Maxima / Minima gut (vermutlich nicht gut, aber besser als Batch-Gradientenabnahme). In diesem Fall tendiert der etwas verrauschtere Gradient, der unter Verwendung der reduzierten Anzahl von Abtastwerten berechnet wird, dazu, das Modell aus den lokalen Minima in einen Bereich zu bewegen, der hoffentlich optimaler ist. Einzelne Samples sind sehr laut, während Minibatches dazu neigen, das Rauschen etwas zu reduzieren. Dadurch wird der Ruck bei Verwendung von Minibatches reduziert. Ein gutes Gleichgewicht ist erreicht, wenn die Minibatch-Größe klein genug ist, um einige der schlechten lokalen Minima zu vermeiden, aber groß genug, dass dies nicht der Fall ist. ' t Vermeiden Sie die globalen oder leistungsstärkeren lokalen Minima. (Dies setzt übrigens voraus, dass die besten Minima ein größeres und tieferes Anziehungsbecken haben und daher leichter zu fassen sind.)
Ein Vorteil von SGD ist, dass es viel schneller rechnet. Große Datenmengen können häufig nicht im RAM gespeichert werden, was die Vektorisierung erheblich beeinträchtigt. Vielmehr muss jede Probe oder Charge von Proben geladen, bearbeitet, die Ergebnisse gespeichert usw. werden. Minibatch-SGD wird andererseits normalerweise absichtlich klein genug gemacht, um rechnerisch nachvollziehbar zu sein.
In der Regel wird dieser Rechenvorteil genutzt, indem viel mehr SGD-Iterationen durchgeführt werden, was viel mehr Schritte als bei der herkömmlichen Batch-Gradientenabsenkung bedeutet. Dies führt in der Regel zu einem Modell, das dem sehr nahe kommt, das über den Batch-Gradientenabstieg oder besser gefunden werden würde.
Die Art und Weise, wie ich über SGD nachdenke, besteht darin, mir vorzustellen, dass ich einen Punkt habe, der meine Eingabeverteilung darstellt. Mein Modell versucht, diese Eingabeverteilung zu lernen. Um die Eingabeverteilung herum befindet sich ein schattierter Bereich, der die Eingabeverteilungen aller möglichen Minibatches darstellt, die ich abtasten könnte. Es ist normalerweise eine faire Annahme, dass die Minibatch-Eingabeverteilungen in der Nähe der tatsächlichen Eingabeverteilung liegen. Bei allen Schritten nimmt der Batch-Gradientenabstieg den steilsten Weg, um die tatsächliche Eingangsverteilung zu erreichen. SGD wählt dagegen einen zufälligen Punkt innerhalb des schattierten Bereichs und nimmt die steilste Route in Richtung dieses Punkts. Bei jeder Iteration wird jedoch ein neuer Punkt ausgewählt. Der Durchschnitt aller dieser Schritte entspricht in der Regel der tatsächlichen Eingabeverteilung.
Wie aus einer anderen Antwort hervorgeht, besteht der Hauptgrund für die Verwendung von SGD darin, die Berechnungskosten des Gradienten zu senken und gleichzeitig die Gradientenrichtung im Durchschnitt über viele Minibatches oder Proben weitgehend beizubehalten - dies hilft Ihnen sicherlich, die lokalen Minima zu erreichen.
Erstens macht Minibatch einige Lernprobleme von technisch nicht zu bewältigenden Problemen zu bewältigenden Problemen, da der Rechenaufwand bei kleineren Chargen geringer ist.
Zweitens bedeutet eine verringerte Chargengröße nicht unbedingt eine verringerte Gradientengenauigkeit. Die Trainingsbeispiele enthalten viele Geräusche, Ausreißer oder Vorurteile. Ein zufällig ausgewähltes Minibatch kann die tatsächliche Verteilung der Daten besser (oder nicht schlechter) widerspiegeln als das ursprüngliche vollständige Batch. Wenn einige Iterationen der Minibatch-Gradientenaktualisierungen eine bessere Schätzung ergeben, kann das gemittelte Ergebnis einer Epoche insgesamt besser sein als der aus einem vollständigen Batch berechnete Gradient.
Drittens hilft Minibatch nicht nur beim Umgang mit unangenehmen Datenmustern, sondern auch beim Umgang mit unangenehmen Kostenfunktionen mit vielen lokalen Minima. Wie Jason_L_Bens erwähnt, ist es unter Umständen einfacher, einen regulären Gradienten in ein lokales Minimum einzufangen, während es schwieriger ist, den mit Minibatch berechneten vorübergehend zufälligen Gradienten einzufangen.
Schließlich erreichen Sie beim Gefälle nicht in einem Schritt die globalen Minima, sondern iterieren auf dem Erro-Manifold. Gradient gibt Ihnen weitgehend nur die Richtung zum Iterieren. Mit Minibatch können Sie viel schneller iterieren. In vielen Fällen ist der Punkt, den Sie erreichen können, umso besser, je mehr Iterationen Sie ausführen. Es ist Ihnen egal, bei welchem Wetter der Punkt global oder sogar lokal optimal ist. Sie möchten nur ein vernünftiges Modell erreichen, das akzeptable Verallgemeinerungsfehler liefert. Minibatch macht das einfacher.
Das Buch "Deep learning" von Ian Goodfellow ua enthält unter Umständen ziemlich gute Diskussionen zu diesem Thema, wenn Sie es sorgfältig durchlesen.
quelle
quelle