Sollte ich die Gewichte / Vorspannungen für jede einzelne Probe ändern, bevor ich zur nächsten Probe übergehe,
Sie können dies tun. Dies wird als stochastischer Gradientenabstieg (SGD) bezeichnet. In der Regel mischen Sie den Datensatz, bevor Sie ihn jedes Mal durcharbeiten.
oder sollte ich zuerst die gewünschten Änderungen für das gesamte Los von 1.000 Proben berechnen und erst dann damit beginnen, sie auf das Netzwerk anzuwenden?
Sie können dies tun, es wird als Batch- Gradientenabstieg bezeichnet oder in einigen Fällen (insbesondere bei älteren Ressourcen) nur als normaler Ansatz angenommen und als Gradientenabstieg bezeichnet.
Jeder Ansatz bietet Vor- und Nachteile. Allgemein:
SGD nimmt jedes Update in Bezug auf die verarbeitete Datenmenge früher vor. Daher benötigen Sie möglicherweise weniger Epochen, bevor Sie auf vernünftige Werte konvergieren können.
SGD verarbeitet mehr pro Probe (weil es häufiger aktualisiert wird), ist also auch langsamer in dem Sinne, dass die Verarbeitung jeder Probe länger dauert.
SGD kann die Parallelisierung weniger nutzen, da Sie aufgrund der Aktualisierungsschritte jedes Datenelement seriell ausführen müssen (da sich die Gewichte geändert haben und Fehler- / Gradientenergebnisse für einen bestimmten Satz von Gewichten berechnet werden).
SGD-Einzelschritte machen normalerweise nur sehr grobe Vermutungen über die richtigen Steigungen, um die Gewichte zu ändern. Dies ist sowohl ein Nachteil (die Leistung des NN gegenüber dem Ziel auf dem Trainingssatz kann sowohl abnehmen als auch zunehmen) als auch ein Vorteil (es besteht eine geringere Wahrscheinlichkeit) aufgrund des "Jitters", den diese zufälligen Unterschiede verursachen, an einem lokalen stationären Punkt hängen zu bleiben.
In der Praxis können Sie mit der meisten Software Kompromisse zwischen Stapelverarbeitung und Einzelprobenverarbeitung eingehen, um die beste Leistung und Aktualisierungseigenschaften zu erzielen. Dies wird als Mini-Batch-Verarbeitung bezeichnet. Dazu gehören:
Mischen des Datensatzes zu Beginn jeder Epoche.
Beim Durcharbeiten der gemischten Daten können N Elemente pro Zeit, wobei N je nach Problem und Einschränkungen der Hardware zwischen 10 und 1000 variieren kann. Eine häufige Entscheidung besteht darin, die größte Stapelgröße zu verarbeiten, die die GPU-Beschleunigung parallel ausführen kann.
Berechnen Sie das für jede kleine Charge erforderliche Update und wenden Sie es dann an.
Dies ist heutzutage die häufigste Aktualisierungsmethode, die die meisten Bibliotheken für neuronale Netze annehmen, und sie akzeptieren fast überall einen Parameter für die Stapelgröße in der Trainings-API. Die meisten Bibliotheken nennen immer noch einfache Optimierer, die diese SGD ausführen. Technisch gesehen sind die berechneten Gradienten immer noch etwas zufällig, da nicht die gesamte Charge verwendet wird. In einigen älteren Veröffentlichungen wird dies jedoch möglicherweise als Mini-Batch-Gradientenabstieg bezeichnet.
Im Idealfall müssen Sie die Gewichte aktualisieren, indem Sie alle Stichproben im Datensatz durchgehen. Dies wird als bezeichnet Batch Gradient Descent bezeichnet . Aber als die Nr. Die Anzahl der Trainingsbeispiele nimmt zu, die Berechnung wird riesig und das Training wird sehr langsam sein. Mit dem Aufkommen des tiefen Lernens liegt die Trainingsgröße in Millionen und die Berechnung unter Verwendung aller Trainingsbeispiele ist sehr unpraktisch und sehr langsam.
Hier wurden zwei Optimierungstechniken bekannt.
Beim Mini-Batch-Gradientenabstieg verwenden Sie eine Batch-Größe, die erheblich unter der Gesamtzahl liegt. von Trainingsbeispielen und aktualisieren Sie Ihre Gewichte, nachdem Sie diese Beispiele durchlaufen haben.
Beim stochastischen Gradientenabstieg aktualisieren Sie die Gewichte, nachdem Sie jedes Trainingsbeispiel durchlaufen haben.
Vor- und Nachteile der drei von uns diskutierten Methoden.
Der Batch-Gradientenabstieg konvergiert allmählich zum globalen Minimum, ist jedoch langsam und erfordert eine enorme Rechenleistung.
Der stochastische Gradientenabstieg konvergiert schnell, aber nicht gegen das globale Minimum. Er konvergiert irgendwo in der Nähe des globalen Minimums und schwebt um diesen Punkt herum, konvergiert jedoch nie gegen das globale Minimum. Der konvergierte Punkt beim stochastischen Gradientenabstieg ist jedoch für alle praktischen Zwecke gut genug.
Der Mini-Batch-Gradient ist ein Kompromiss zwischen den beiden oben genannten Methoden. Wenn Sie jedoch eine vektorisierte Implementierung der Gewichtsaktualisierung haben und
mit einem Multi-Core-Setup trainieren oder das Training an
mehrere Maschinen senden , ist dies die beste Methode sowohl hinsichtlich der Zeit für das Training als auch hinsichtlich der Konvergenz zum globalen Minimum.
Sie können die Kostenfunktion mit der Nr. von Iterationen, um den Unterschied zwischen Konvergenz in allen 3 Arten des Gradientenabstiegs zu verstehen.
Das Diagramm für den Batch-Gradientenabstieg fällt gleichmäßig und langsam ab, stabilisiert sich und erreicht das globale Minimum.
Das stochastische Gradientenabstiegsdiagramm weist Schwingungen auf, fällt schnell ab, bewegt sich jedoch um das globale Minimum.
In einigen Blogs werden die Vor- und Nachteile der einzelnen Methoden ausführlich erläutert sowie grafisch dargestellt, wie sich die Kostenfunktion für alle drei Methoden mit Iterationen ändert.
https://adventuresinmachinelearning.com/stochastic-gradient-descent/
https://machinelearningmastery.com/gentle-introduction-mini-batch-gradient-descent-configure-batch-size/
quelle