Bei maschinellen Lernaufgaben ist es üblich, Daten zu mischen und zu normalisieren. Der Zweck der Normalisierung ist klar (für den gleichen Bereich von Merkmalswerten). Aber nachdem ich viel gekämpft hatte, fand ich keinen wertvollen Grund, Daten zu mischen.
Ich habe diesen Beitrag hier gelesen und erörtert, wann wir Daten mischen müssen, aber es ist nicht klar, warum wir die Daten mischen sollten. Darüber hinaus habe ich in Algorithmen wie Adam oder SGD häufig gesehen, dass wir eine Chargengradientenabnahme benötigen (Daten sollten in Mini-Chargen aufgeteilt werden und die Chargengröße muss angegeben werden). Gemäß diesem Beitrag ist es wichtig, Daten für jede Epoche zu mischen, um unterschiedliche Daten für jede Charge zu haben. Vielleicht werden die Daten also gemischt und, was noch wichtiger ist, geändert.
Warum machen wir das?
Antworten:
Basierend auf Was sollen wir tun, wenn eine auf DataScience gepostete Frage ein Duplikat einer auf CrossValidated geposteten Frage ist? Ich reposte meine Antwort auf dieselbe Frage, die bei CrossValidated gestellt wurde ( https://stats.stackexchange.com/a/311318/89653 ).
Hinweis: In dieser Antwort beziehe ich mich auf die Minimierung des Trainingsverlusts und gehe nicht auf das Beenden von Kriterien wie Validierungsverlust ein. 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 eine Matrix (oder mehrere Matrizen) von Gewichten zwischen Neuronen darstellt und den Trainingsdatensatz darstellt. Ich verwende einen Index für um anzuzeigen, dass unsere Minimierung von nur über den Gewichten auftritt (das heißt, wir suchen nach so dass minimiert ist), während festgelegt ist.L L L
Wenn wir nun annehmen, dass wir Elemente in (das heißt, es gibt Gewichte im Netzwerk), ist eine Oberfläche in einem dimensionalen Raum. Um ein visuelles Analogon zu erhalten, stellen Sie sich vor, dass wir nur zwei Neuronengewichte haben ( ). 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 die Verlustfunktion an ausgewertet werden kann und dieser Wert die Höhe der Oberfläche wird.L L
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 . 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 . Der Effekt ist, dass der Löser leicht aus einem lokalen Minimum heraus "springen" kann. Stellen Sie sich vor, dass der Solver bei Iteration mit dem Training von Mini-Batch in einem lokalen Minimum stecken bleibt . Dieses örtliche Minimum entspricht das bei einem bestimmten bewertet wird; wir nennen esL L . Bei der nächsten Iteration ändert sich die Form unserer Verlustfläche tatsächlich, weil wir , d. , kann einen ganz anderen Wert und es ist durchaus möglich, dass es nicht einem lokalen Minimum entspricht! Wir können jetzt ein Gradienten-Update berechnen und mit dem Training fortfahren. Um es klar : Die Form von sich im Allgemeinen von der von . Beachten Sie, dass ich mich hier auf die Verlustfunktion die an einem Trainingssatz ausgewertet wurde . es ist eine vollständige Oberfläche, die über alle möglichen Werte vonL L L L L , Anstatt die Bewertung dieser Verlust für einen bestimmten Wert von (die nur ein Skalar) . Beachten Sie auch, dass bei der Verwendung von Mini-Batches ohne Mischen die Verlustoberflächen immer noch zu einem gewissen Grad "diversifiziert" werden, der Solver jedoch nur eine begrenzte (und relativ kleine) Anzahl eindeutiger Fehleroberflächen erkennt (insbesondere, dass dies der Fall ist) 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 (eine stärkere 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 (und Summieren oder des Durchschnitts, dh eines kommutativen Operators) für einen gegebenen Satz von Gewichtsmatrizen ausgewertet wird , hat die Anordnung der Zeilen von keine Auswirkung, wenn Vollwert verwendet wird. Batch-Gradientenabstieg (dh, wenn jeder Batch das volle hat und Iterationen und Epochen dasselbe sind).L
quelle
Das Mischen von Daten dient dazu, die Varianz zu verringern und sicherzustellen, dass die Modelle allgemein bleiben und weniger überanpassungsfähig sind.
Der offensichtliche Fall, in dem Sie Ihre Daten mischen würden, ist, wenn Ihre Daten nach Klasse / Ziel sortiert sind. Hier möchten Sie mischen, um sicherzustellen, dass Ihre Trainings- / Test- / Validierungssätze für die Gesamtverteilung der Daten repräsentativ sind.
Für die Batch-Gradientenabsenkung gilt die gleiche Logik. Die Idee hinter der Batch-Gradientenabnahme ist, dass Sie durch Berechnung des Gradienten für einen einzelnen Batch in der Regel eine ziemlich gute Schätzung des "wahren" Gradienten erhalten. Auf diese Weise sparen Sie Rechenzeit, da Sie nicht jedes Mal den "wahren" Gradienten über den gesamten Datensatz berechnen müssen.
Sie möchten Ihre Daten nach jeder Epoche mischen, da Sie immer das Risiko haben, Stapel zu erstellen, die nicht für den Gesamtdatensatz repräsentativ sind. Daher ist Ihre Schätzung des Gradienten nicht korrekt. Durch das Mischen Ihrer Daten nach jeder Epoche wird sichergestellt, dass Sie nicht mit zu vielen fehlerhaften Stapeln "hängen bleiben".
Bei einem regulären stochastischen Gradientenabstieg möchten Sie, wenn jeder Stapel die Größe 1 hat, Ihre Daten nach jeder Epoche mischen, um Ihr Lernen allgemein zu halten. In der Tat wird, wenn der Datenpunkt 17 immer nach dem Datenpunkt 16 verwendet wird, sein eigener Gradient mit den Aktualisierungen des Datenpunkts 16 im Modell vorgespannt. Indem Sie Ihre Daten mischen, stellen Sie sicher, dass jeder Datenpunkt eine "unabhängige" Änderung im Modell hervorruft, ohne von denselben Punkten beeinflusst zu werden.
quelle
Angenommen, die Daten werden in einer bestimmten Reihenfolge sortiert. Zum Beispiel ein Datensatz, der anhand seiner Klasse sortiert ist. Wenn Sie also Daten für das Training, die Validierung und den Test auswählen, ohne dieses Thema zu berücksichtigen, wählen Sie jede Klasse für unterschiedliche Aufgaben aus, und der Vorgang schlägt fehl.
Um diese Art von Problemen zu verhindern, besteht eine einfache Lösung darin, die Daten zu mischen, um verschiedene Sätze von Trainings-, Validierungs- und Testdaten zu erhalten.
Antworten auf diesen Beitrag können eine Lösung für Ihre Frage sein.
quelle
Wir müssen nur für Minibatch / SGD mischen, nicht für Batch-Gradientenabstieg.
Wenn keine Daten gemischt werden, können die Daten sortiert werden, oder ähnliche Datenpunkte werden nebeneinander liegen, was zu einer langsamen Konvergenz führt:
Ich habe hier die Darstellung der L-2-Verlustfunktion für die lineare Regression
y=2x
gezeichnetquelle
Ergänzend zur Antwort von @ Josh möchte ich hinzufügen, dass aus dem gleichen Grund vor dem Stapeln gemischt werden muss. Ansonsten erhalten Sie die gleiche begrenzte Anzahl von Flächen.
quelle
Um die bestmögliche Genauigkeit des Modells zu erzielen, wird immer empfohlen, dass die Trainingsdaten alle Arten von Daten enthalten.
Das Mischen von Trainingsdaten hilft uns, dieses Ziel zu erreichen.
quelle
Durch Mischen der Zeilen und Trainieren nur einer Teilmenge von ihnen während einer gegebenen 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 derselben durchgeführt werden 𝑋
quelle