Was ist der Unterschied zwischen Gradientenabstieg und stochastischem Gradientenabstieg?
Ich bin mit diesen nicht sehr vertraut. Können Sie den Unterschied anhand eines kurzen Beispiels beschreiben?
Antwort
Für eine schnelle einfache Erklärung:
Sowohl beim Gradientenabstieg (GD) als auch beim stochastischen Gradientenabstieg (SGD) aktualisieren Sie eine Reihe von Parametern iterativ, um eine Fehlerfunktion zu minimieren.
Während Sie in GD sind, müssen Sie ALLE Beispiele in Ihrem Trainingssatz durchlaufen, um eine einzelne Aktualisierung für einen Parameter in einer bestimmten Iteration durchzuführen. In SGD verwenden Sie andererseits NUR EIN oder EINEN Teil des Trainingsmusters von Ihr Trainingsset, um die Aktualisierung für einen Parameter in einer bestimmten Iteration durchzuführen. Wenn Sie SUBSET verwenden, wird dies als stochastischer Minibatch-Gradientenabstieg bezeichnet.
Wenn also die Anzahl der Trainingsmuster groß und tatsächlich sehr groß ist, kann die Verwendung des Gradientenabstiegs zu lange dauern, da Sie bei jeder Iteration Wenn Sie die Werte der Parameter aktualisieren, durchlaufen Sie den gesamten Trainingssatz. Auf der anderen Seite ist die Verwendung von SGD schneller, da Sie nur ein Trainingsmuster verwenden und es sich sofort ab dem ersten Beispiel verbessert.
SGD konvergiert häufig viel schneller als GD, die Fehlerfunktion jedoch nicht ebenso minimiert wie im Fall von GD. In den meisten Fällen reicht häufig die enge Annäherung aus, die Sie in SGD für die Parameterwerte erhalten, da diese die optimalen Werte erreichen und dort weiter schwingen.
Wenn Sie ein Beispiel dafür mit einem praktischen Fall benötigen, überprüfen Sie dies Andrew NGs Notizen hier, in denen er Ihnen die Schritte in beiden Fällen klar zeigt. cs229-Notizen
Quelle: Quora-Thread
Kommentare
- Danke, kurz so? Es gibt drei Varianten des Gradientenabstieg: Batch, Stochastic und Minibatch: Batch aktualisiert die Gewichte, nachdem alle Trainingsmuster ausgewertet wurden. Stochastic, Gewichte werden nach jedem Trainingsmuster aktualisiert. Das Minibatch kombiniert das Beste aus beiden Welten. Wir verwenden nicht den vollständigen Datensatz, aber Wir verwenden nicht den einzelnen Datenpunkt. Wir verwenden einen zufällig ausgewählten Datensatz aus unserem Datensatz. Auf diese Weise reduzieren wir die Berechnungskosten und erzielen eine geringere Varianz als die stochastische Version.
- Beachten Sie, dass der obige Link zu cs229-notes nicht verfügbar ist. Wayback Machine, ausgerichtet auf das Datum der Veröffentlichung, liefert jedoch – yay! web.archive.org/web/20180618211933/http://cs229.stanford.edu/…
Antwort
Die Aufnahme des Wortes stochastisch bedeutet einfach, dass die zufälligen Stichproben aus den Trainingsdaten in jedem Lauf ausgewählt werden, um die Parameter während der Optimierung im Rahmen des Gradientenabstiegs .
Dabei werden nicht nur Fehler berechnet und Gewichte in schnelleren Iterationen aktualisiert (da wir nur eine kleine Auswahl von Samples auf einmal verarbeiten), sondern es hilft auch häufig, sich in Richtung eines zu bewegen schneller schneller. Schauen Sie sich die Antworten hier an, um weitere Informationen darüber zu erhalten, warum die Verwendung stochastischer Minibatches für das Training Vorteile bietet.
Ein Nachteil ist möglicherweise dass der Weg zum Optimum (vorausgesetzt, es wäre immer das gleiche Optimum) viel lauter sein kann. Anstelle einer schönen glatten Verlustkurve, die zeigt, wie der Fehler bei jeder Iteration des Gradientenabfalls abnimmt, wird möglicherweise Folgendes angezeigt:
Wir sehen deutlich, dass der Verlust mit der Zeit abnimmt, es gibt jedoch große Unterschiede von Epoche zu Epoche (Trainingscharge zu Trainingscharge) Die Kurve ist verrauscht.
Dies liegt einfach daran, dass wir den mittleren Fehler über unsere stochastisch / zufällig ausgewählte Teilmenge aus dem gesamten Datensatz in jeder Iteration berechnen. Einige Beispiele erzeugen einen hohen Fehler, andere einen niedrigen. Der Durchschnitt kann also variieren, je nachdem, welche Stichproben wir zufällig für eine Iteration des Gradientenabfalls verwendet haben.
Kommentare
- Danke, kurz so? Es gibt drei Varianten des Gradientenabstiegs: Batch, Stochastic und Minibatch: Batch aktualisiert die Gewichte, nachdem alle Trainingsmuster ausgewertet wurden. Stochastisch werden die Gewichte nach jedem Trainingsmuster aktualisiert. Der Minibatch vereint das Beste aus beiden Welten. Wir verwenden nicht den vollständigen Datensatz, aber nicht den einzelnen Datenpunkt. Wir verwenden einen zufällig ausgewählten Datensatz aus unserem Datensatz. Auf diese Weise reduzieren wir die Berechnungskosten und erzielen eine geringere Varianz als die stochastische Version.
- Ich ‚ würde sagen, dass es einen Stapel gibt, bei dem ein Stapel der gesamte Trainingssatz ist (also im Grunde eine Epoche), dann gibt es einen Mini-Stapel, bei dem a Teilmenge wird verwendet (also jede Zahl kleiner als die gesamte Menge $ N $) – diese Teilmenge wird zufällig ausgewählt, ist also stochastisch. Die Verwendung einer einzelnen Stichprobe wird als Online-Lernen bezeichnet und ist eine Teilmenge von Mini-Batch … oder einfach Mini-Batch mit
n=1
. - tks, das ist klar!
Antwort
Beim Gradientenabstieg oder Batch-Gradientenabstieg Wir verwenden die gesamten Trainingsdaten pro Epoche, während wir beim stochastischen Gradientenabstieg nur ein einziges Trainingsbeispiel pro Epoche verwenden und der Mini-Batch-Gradientenabstieg zwischen diesen beiden Extremen liegt, in denen wir einen Mini-Batch (kleiner Teil) verwenden können ) der Trainingsdaten pro Epoche beträgt die Daumenregel für die Auswahl der Größe des Mini-Batch 2 (32, 64, 128 usw.).
Weitere Informationen: cs231n Vorlesungsnotizen
Kommentare
- Danke, kurz so? Es gibt drei Varianten des Gradientenabstiegs: Batch, Stochastic und Minibatch: Batch aktualisiert die Gewichte, nachdem alle Trainingsmuster ausgewertet wurden. Stochastisch werden die Gewichte nach jedem Trainingsmuster aktualisiert. Der Minibatch vereint das Beste aus beiden Welten. Wir verwenden nicht den vollständigen Datensatz, aber nicht den einzelnen Datenpunkt. Wir verwenden einen zufällig ausgewählten Datensatz aus unserem Datensatz. Auf diese Weise reduzieren wir die Berechnungskosten und erzielen eine geringere Varianz als die stochastische Version.
Antwort
Gradientenabstieg ist ein Algorithmus zum Minimieren des $ J (\ Theta) $ !
Idee: Berechnen Sie für den aktuellen Wert von Theta die $ J (\ Theta) $ , dann einen kleinen Schritt in Richtung des negativen Gradienten machen. Wiederholen.
Algorithmus:
while True: theta_grad = evaluate_gradient(J,corpus,theta) theta = theta - alpha * theta_grad
Aber das Problem ist, dass $ J (\ Theta) $ die Funktion aller Korpus in Windows ist und daher sehr teuer zu berechnen ist.
Stochastischer Gradientenabstieg tastet das Fenster wiederholt ab und aktualisiert es nach jedem
Algorithmus für den stochastischen Gradientenabstieg:
while True: window = sample_window(corpus) theta_grad = evaluate_gradient(J,window,theta) theta = theta - alpha * theta_grad
Normalerweise ist die Größe des Beispielfensters die Potenz von 2, sagen wir 32, 64 als Minibatch.
Antwort
Beide Algorithmen sind ziemlich ähnlich. Der einzige Unterschied besteht beim Iterieren. Beim Gradientenabstieg berücksichtigen wir alle Punkte bei der Berechnung des Verlusts und der Ableitung, während beim stochastischen Gradientenabstieg ein einzelner Punkt in der Verlustfunktion und deren Ableitung zufällig verwendet werden. Schauen Sie sich diese beiden Artikel an, beide sind miteinander verbunden und gut erklärt. Ich hoffe, es hilft.