Beim Mini-Batch-Training eines neuronalen Netzwerks habe ich gehört, dass es eine wichtige Praxis ist, die Trainingsdaten vor jeder Epoche zu mischen. Kann jemand erklären, warum das Mischen in jeder Epoche hilft?
In der Google-Suche habe ich die folgenden Antworten gefunden:
- Es hilft dem Training, sich schnell anzunähern
- Es verhindert jegliche Verzerrung während des Trainings
- Es verhindert, dass das Modell die Reihenfolge des Trainings lernt
Ich habe jedoch die Schwierigkeit zu verstehen, warum einer dieser Effekte durch das zufällige Mischen verursacht wird. Kann jemand eine intuitive Erklärung liefern?
Vielen Dank,
quelle
Von einem sehr stark vereinfachten Sichtweise werden die Daten in der Reihe zugeführt, die , daß zumindest die sehr schon sagt, ist es möglich , für die Daten , um eine Wirkung auf den Ausgang zu haben. Wenn die Reihenfolge keine Rolle spielt, wird die Randomisierung sicherlich nicht schaden. Wenn die Reihenfolge eine Rolle spielt, hilft die Randomisierung dabei, diese zufälligen Effekte auszugleichen, damit sie nicht zu systematischen Verzerrungen werden. Kurz gesagt, Randomisierung ist billig und schadet nie und minimiert häufig die Auswirkungen auf die Datenreihenfolge.
quelle
Hinweis: In dieser Antwort beziehe ich mich auf die Minimierung des Trainingsverlusts und diskutiere nicht das Beenden von Kriterien wie Validierungsverlust. Die Auswahl der Stoppkriterien hat keinen Einfluss auf die nachfolgend beschriebenen Prozesse / Konzepte.
Der Prozess des Trainings eines neuronalen Netzwerks besteht darin, den Minimalwert einer Verlustfunktion , wobei W eine Matrix (oder mehrere Matrizen) von Gewichten zwischen Neuronen darstellt und X den Trainingsdatensatz darstellt. Ich verwende einen Index für X, um anzuzeigen, dass unsere Minimierung von ℒ nur über den Gewichten W auftritt (das heißt, wir suchen nach W, so dass ℒ minimiert ist), während XLX(W) W X X L W W L X festgelegt ist.
Wenn wir nun annehmen, dass wir Elemente in W haben (das heißt, es gibt P Gewichte im Netzwerk), ist ℒ eine Oberfläche in einem P + 1- dimensionalen Raum. Um ein visuelles Analogon zu erhalten, stellen Sie sich vor, dass wir nur zwei Neuronengewichte haben ( P = 2 ). Dann hat ℒ eine einfache geometrische Interpretation: Es ist eine Oberfläche in einem dreidimensionalen Raum. Dies ergibt sich aus der Tatsache, dass für jede gegebene Matrix von Gewichten W die Verlustfunktion auf X ausgewertet werden kann und dieser Wert die Höhe der Oberfläche wird.P W P L P+1 P=2 L W X
Aber es gibt das Problem der Nichtkonvexität; Die Oberfläche, die ich beschrieben habe, wird zahlreiche lokale Minima haben, und daher können Algorithmen zur Gradientenabsenkung in diesen Minima "hängen bleiben", während eine tiefere / tiefere / bessere Lösung in der Nähe liegen kann. Dies ist wahrscheinlich der Fall, wenn während aller Trainingsiterationen unverändert bleibt, da die Oberfläche für ein bestimmtes X festgelegt istX X . Alle Funktionen sind statisch, einschließlich der verschiedenen Minima.
Eine Lösung hierfür ist das Minibatch-Training in Kombination mit dem Mischen. Durch Mischen der Zeilen und Trainieren nur einer Teilmenge von ihnen während einer bestimmten Iteration ändert sich mit jeder Iteration, und es ist tatsächlich durchaus möglich, dass keine zwei Iterationen über die gesamte Sequenz von Trainingsiterationen und -epochen mit genau demselben X ausgeführt werden . Der Effekt ist, dass der Löser leicht von einem lokalen Minimum "abprallen" kann. Stellen Sie sich vor, dass der Löser bei Iteration i mit dem Training von Mini-Batch X i in einem lokalen Minimum stecken bleibt . Dieses örtliche Minimum entspricht ℒ, das bei einem bestimmten Gewichtswert bewertet wird; wir nennen es ℒ X i ( WX X i Xi L . Bei der nächsten Iteration ändert sich die Form unserer Verlustfläche tatsächlich, weil wir X i + 1 verwenden , d. H. ℒ X i + 1 ( W i ) kann einen ganz anderen Wert annehmen als ℒ X i ( W i ) und es Es ist durchaus möglich, dass es nicht einem lokalen Minimum entspricht! Wir können jetzt ein Gradientenupdate berechnen und mit dem Training fortfahren. Um es klar auszudrücken : Die Form von ℒ X i + 1 unterscheidet sich im Allgemeinen von der von ℒ X iLXi(Wi) Xi+1 LXi+1(Wi) LXi(Wi) LXi+1 LXi . Beachten Sie, dass ich mich hier auf die Verlustfunktion die an einem Trainingssatz X ausgewertet wurde . Es ist eine vollständige Oberfläche, die über alle möglichen Werte von W definiert ist , und nicht die Bewertung dieses Verlusts (der nur ein Skalar ist) für einen bestimmten Wert von WL X W W . Beachten Sie auch, dass es bei der Verwendung von Minibatches ohne Mischen immer noch einen Grad an "Diversifikation" der Verlustoberflächen gibt, der Löser jedoch nur eine begrenzte (und relativ kleine) Anzahl eindeutiger Fehleroberflächen erkennt derselbe exakte Satz von Minibatches - und damit Verlustoberflächen - während jeder Epoche).
Ich habe bewusst darauf verzichtet, Mini-Batch-Größen zu diskutieren, da es zu diesem Thema eine Million Meinungen gibt und es erhebliche praktische Auswirkungen hat (größere Parallelisierung kann mit größeren Batches erreicht werden). Ich halte jedoch Folgendes für erwähnenswert. Da durch Berechnen eines Wertes für jede Zeile von X (und Summieren oder Ermitteln des Durchschnitts, dh eines kommutativen Operators) für einen gegebenen Satz von Gewichtsmatrizen W ausgewertet wird , hat die Anordnung der Zeilen von X keine Auswirkung, wenn Vollwert verwendet wird. Batch-Gradientenabstieg (dh, wenn jeder Batch das volle X hat und Iterationen und Epochen dasselbe sind).L X W X X
quelle
Stellen Sie sich vor, Ihre letzten Minibatch-Etiketten haben tatsächlich mehr Rauschen. Dann ziehen diese Stapel die endgültig gelernten Gewichte in die falsche Richtung. Wenn Sie jedes Mal mischen, sinkt die Wahrscheinlichkeit, dass die letzten Stapel unverhältnismäßig laut sind.
quelle
Wenn Sie Ihr Netzwerk mit einem festen Datensatz trainieren, dh Daten, die Sie während des Trainings nie mischen. Es ist sehr wahrscheinlich, dass Sie sehr hohe und sehr niedrige Gewichte wie 40,70, -101.200 ... etc. Bekommen. Dies bedeutet einfach, dass Ihr Netzwerk die Trainingsdaten nicht gelernt hat, aber das Rauschen Ihrer Trainingsdaten. Klassischer Koffer eines Overfit-Modells. Mit einem solchen Netzwerk erhalten Sie präzise Vorhersagen für die Daten, die Sie für das Training verwendet haben. Wenn Sie andere Eingaben zum Testen verwenden, wird Ihr Modell auseinanderfallen. Wenn Sie nun nach jeder Epoche die Trainingsdaten mischen (Iteration des Gesamtsatzes), geben Sie in jeder Epoche einfach unterschiedliche Informationen an die Neuronen weiter. Dadurch werden die Gewichte einfach reguliert, was bedeutet, dass Sie mit größerer Wahrscheinlichkeit "niedrigere" Gewichte erhalten, die näher an Null liegen Dies bedeutet, dass Ihr Netzwerk bessere Verallgemeinerungen vornehmen kann.
Ich hoffe das war klar.
quelle
Hier ist eine intuitivere Erklärung:
Bei der Gradientenabsenkung soll der Verlust in einer Gradientenrichtung verringert werden. Der Gradient wird aus den Daten einer einzelnen Mini-Charge für jede Runde der Gewichtsaktualisierung berechnet. Das, was wir wollen, ist, dass dieser mini-batch-basierte Gradient in etwa dem Bevölkerungsgradienten entspricht, da hierdurch eine schnellere Konvergenz erwartet wird. (Stellen Sie sich vor, wenn Sie dem Netzwerk 100 Daten der Klasse 1 in einem Minibatch und 100 Daten der Klasse 2 in einem anderen Minibatch zuführen, bewegt sich das Netzwerk. Besser ist es, wenn Sie 50 Daten der Klasse 1 + 50 Daten der Klasse 2 in jedem Minibatch zuführen.)
Wie kann dies erreicht werden, da wir die Populationsdaten nicht in einem Minibatch verwenden können? Die Kunst der Statistik sagt uns: Mische die Population, und die ersten Daten in batch_size können die Population darstellen. Deshalb müssen wir die Bevölkerung mischen.
Ich muss sagen, dass das Mischen nicht erforderlich ist, wenn Sie eine andere Methode zum Abtasten von Daten aus der Grundgesamtheit haben und sicherstellen, dass die Proben einen angemessenen Gradienten erzeugen können.
Das ist mein verständnis Ich hoffe es hilft.
quelle