Mischen von Daten im Mini-Batch-Training des neuronalen Netzes


14

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,

Antworten:


8

Um zu versuchen, eine andere Erklärung zu geben:

Eines der mächtigsten Dinge bei neuronalen Netzen ist, dass es sich um sehr komplexe Funktionen handeln kann, mit denen Sie sehr komplexe Beziehungen zwischen Ihren Eingabe- und Ausgabedaten lernen können. Zu diesen Beziehungen können Dinge gehören, die Sie niemals erwarten würden, z. B. die Reihenfolge, in der Daten pro Epoche eingespeist werden. Wenn die Reihenfolge der Daten in jeder Epoche gleich ist, kann das Modell dies verwenden, um den Trainingsfehler zu reduzieren, der eine Art Überanpassung darstellt.

In Bezug auf die Geschwindigkeit: Mini-Batch-Methoden basieren auf dem stochastischen Gradientenabstieg (und dessen Verbesserungen), was bedeutet, dass sie auf der Zufälligkeit beruhen, um ein Minimum zu finden. Durch das Mischen von Mini-Batches werden die Farbverläufe variabler, was zur Konvergenz beitragen kann, da die Wahrscheinlichkeit steigt, dass eine gute Richtung eingeschlagen wird (oder zumindest verstehe ich das so).


1
Wie kann ein neuronales Netz die Reihenfolge erfahren, in der Daten in jeder Epoche eingespeist werden?
Code Papst

1
Mit einem Wort können sie nicht. Wenn Sie ein Mini-Batch-Training verwenden (dh mehr als ein Batch pro Epoche), kann eine bestimmte Reihenfolge der Daten das Training dahingehend beeinflussen, dass der Solver durch Training mit einem Mini-Batch zuerst in einen bestimmten Bereich eintreten kann (der u. U. ein enthält) lokales Minimum ...) eher als ein anderes. Zu sagen, dass ein Feedforward-NN etwas über die Reihenfolge von Daten "lernt", ist jedoch nicht wirklich korrekt, da jede Vorhersage unabhängig von jeder anderen Vorhersage erfolgt und die Reihenfolge innerhalb von Minibatches natürlich keinerlei Auswirkung hat.
Josh

6

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.


6

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 XX(W)WXXWWX 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.PWPP+1P=2WX

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 istXX . 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 ( WXXiXi . 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 vonX i + 1 unterscheidet sich im Allgemeinen von der vonX iXi(Wi)Xi+1Xi+1(Wi)Xi(Wi)Xi+1Xi. 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 WXWW . 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).XWX X


Vielen Dank für diese hilfreiche Erklärung. Nachdem ich Ihre Antwort gründlich gelesen habe, habe ich zwei Fragen: 1. Sie haben erwähnt, dass Mini-Batch eine begrenzte Diversifikation bietet. Ich verstehe nicht, warum dies nicht ausreicht, um das lokale Minimum nicht zu überschreiten. Befindet sich der Solver in lokalen Minima der Oberfläche eines Stapels, befindet er sich mit hoher Wahrscheinlichkeit nicht in lokalen Minima der Oberfläche des nächsten Stapels. 2. Wie konvergiert der Löser in der Oberfläche der Verlustfunktion, während sich die Oberfläche durch die Verwendung verschiedener Chargen immer ändert?
Code Papst

Der Diversifikationsvorteil ist immer noch vorhanden, ohne zu mischen, aber er ist nicht so bedeutend wie beim Mischen, da ständig die gleiche Abfolge von Verlustoberflächen angezeigt wird, wohingegen bei Verwendung von Mischen wahrscheinlich nie dieselbe exakte Verlustoberfläche mehr als einmal angezeigt wird. Was die Stoppkriterien angeht, habe ich meine im Allgemeinen so geschrieben, dass das Training beendet wird, wenn die durchschnittliche prozentuale Reduzierung des Verlusts über eine bestimmte Anzahl von Iterationen hinweg weniger als eine Toleranz beträgt.
Josh

2
Vielleicht habe ich Ihre Frage zu lokalen Minima nicht so gut beantwortet. Theoretisch sollten alle diese Verlustflächen ein gewisses Maß an Ähnlichkeit aufweisen, da angenommen wird, dass die Wahrscheinlichkeitsverteilung der Antwort (abhängig von den Prädiktoren des Modells) über den gesamten Trainingsdatensatz konstant ist. Wenn also ein Minimum tief genug ist, sollte es über eine große Anzahl von Mini-Batches hinweg angezeigt werden. Daher ist es unwahrscheinlich, dass der Solver davon abprallt. Wenn das Minimum jedoch im Grunde genommen nur "Lärm" ist, sollte diese Strategie ziemlich gut funktionieren und es dem Modell ermöglichen, das Training fortzusetzen.
Josh

Vielen Dank. Ihre zweite Antwort macht es klar verständlich, warum das NN trotz der unterschiedlichen Oberflächen konvergiert. Ist es in Bezug auf meine erste Frage richtig zu sagen, dass bei gleicher Sequenz die Wahrscheinlichkeit, dass sich ein "Rauschen" auf vielen Verlustflächen der Stapel wiederholt, nur höher ist als bei der Verwendung von Mischen? Dies ist die einzige Erklärung, die ich geben kann, warum es immer noch möglich ist, in lokalen Minima zu stecken, wenn Minibatches ohne Mischen verwendet werden.
Code Papst

@ CodePope Ich denke das ist richtig. Hat sich der Verlust seit Beginn des Trainings stark verringert, sind die Steigungen ziemlich gering, und es kann sogar vorkommen, dass der Solver im Grunde genommen in einer "Schleife" steckt, da er immer die gleiche Folge von Verlustoberflächen sieht. Bitte beachten Sie, dass dies eine spekulative Erklärung ist, die auf meiner eher begrenzten Erfahrung basiert. Wenn Sie also ein ernsthaftes theoretisches Interesse daran haben, sollten Sie sich an einen Experten wenden.
Josh

4

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.


1

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.


1

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.