Warum zerstört eine Überanpassung nicht die neuronalen Netze für die MNIST-Klassifizierung?


8

Ich habe ein einfaches neuronales Netzwerk (NN) für die MNIST-Klassifizierung. Es enthält 2 versteckte Schichten mit jeweils 500 Neuronen. Daher sind die Abmessungen des NN: 784-500-500-10. ReLU wird in allen Neuronen verwendet, Softmax wird am Ausgang verwendet und Kreuzentropie ist die Verlustfunktion.

Was mich verwundert ist, warum Überanpassung den NN nicht zu zerstören scheint?

Berücksichtigen Sie die Anzahl der Parameter (Gewichte) des NN. Es ist ungefähr In meinem Experiment habe ich jedoch nur Beispiele (ein Zehntel des MNIST-Trainingssatzes) verwendet, um das NN zu trainieren. (Dies dient nur dazu, die Laufzeit kurz zu halten. Der Trainings- und Testfehler würde sich beide erheblich verringern, wenn ich mehr Trainingsbeispiele verwenden würde.) Ich habe das Experiment 10 Mal wiederholt. Es wird ein einfacher stochastischer Gradientenabstieg verwendet (keine RMS-Stütze oder kein Impuls). Es wurde keine Regularisierung / Abbruch / vorzeitiges Stoppen verwendet. Der gemeldete Trainingsfehler und Testfehler waren:6000

784×500+500×500+500×10=647000.
6000

Nein.12345678910E.treinichn(%.)7.810.39.111.08.79.29.38.310.38.6E.test(%.)11.713.913.214.112.113.213.311.913.412.7

Beachten Sie, dass sich in allen 10 Experimenten (jeweils mit unabhängiger Initialisierung zufälliger Parameter) der Testfehler nur um ca. 5% vom Trainingsfehler unterschied. 4%, obwohl ich 6K-Beispiele zum Trainieren von 647K-Parametern verwendet habe. Die VC-Dimension des neuronalen Netzwerks liegt mindestens in der Größenordnung von , wobeiist die Anzahl der Kanten (Gewichte). Warum war der Testfehler nicht kläglich höher (z. B. 30% oder 50%) als der Trainingsfehler? Ich würde es sehr schätzen, wenn jemand darauf hinweisen kann, wo ich vermisst habe. Vielen Dank!Ö(|E.|lÖG(|E.|))|E.|

[EDITS 30.06.2017]

Um die Auswirkungen eines frühen Stopps zu klären, habe ich die 10 Experimente erneut durchgeführt, jeweils mit 20 Trainingsepochen. Die Fehlerraten sind in der folgenden Abbildung dargestellt:

Geben Sie hier die Bildbeschreibung ein

Die Lücke zwischen Test- und Trainingsfehlern hat sich vergrößert, da mehr Epochen im Training verwendet werden. Das Ende des Testfehlers blieb jedoch nahezu flach, nachdem der Trainingsfehler auf Null gefahren wurde. Darüber hinaus sah ich ähnliche Trends für andere Größen des Trainingssatzes. Die durchschnittliche Fehlerrate am Ende von 20 Trainingsepochen ist gegen die Größe des folgenden Trainingssatzes aufgetragen:

Geben Sie hier die Bildbeschreibung ein

Es kommt also zu einer Überanpassung, die den NN jedoch nicht zu zerstören scheint. Angesichts der Anzahl der Parameter (647 KB), die wir für den Zug benötigen, und der Anzahl der Trainingsbeispiele (<60 KB) bleibt die Frage: Warum macht eine Überanpassung das NN nicht einfach unbrauchbar? Gilt dies außerdem für die ReLU NN für alle Klassifizierungsaufgaben mit Softmax-Ausgabe und Cross-Entropy-Zielfunktion? Hat jemand ein Gegenbeispiel gesehen?


Ich kann keinen Kommentar zur Anzahl der verwendeten Epochen sehen. Haben Sie versucht, mehr oder weniger Epochen zu laufen, um den Effekt zu sehen? Sie erwähnen, dass Sie kein vorzeitiges Anhalten verwenden, aber vermutlich entscheiden Sie sich, irgendwie anzuhalten? Laufen Sie für eine große Anzahl von Epochen, so dass das Netzwerk konvergiert zu sein scheint?
Neil Slater

@NeilSlater Ich habe nur 1 Epoche im Experiment verwendet und die SGD danach beendet. (Dies dient dazu, die Laufzeit kurz zu halten, da ich dies auf Matlab mache, um die Steuerbarkeit und Sichtbarkeit zu verbessern.) Betrachtet man den Wert der Verlustfunktion in SGD (Mini-Batch-Größe = 1), so schien er jedoch konvergierend zu sein, dh die maximale Softmax-Ausgabe schwebte nahe 1. Ich habe auch 60K-Beispiele (1 Epoche) ausprobiert und einen ähnlichen Trend festgestellt. dh Trainingsfehler ~ 3% und Testfehler ~ 4%.
Syeh_106

Ich denke, die Antwort nach Ihren erweiterten Experimenten ist eine Kombination zwischen meiner und Bashars Antwort. Es kann hilfreich sein, wenn Sie in Bezug auf Fehlerquotiententest denken: trainieren - ein 0% iger Trainingsfehler mit einem 7% igen Testfehler ist keine gute Leistung - dies ist eine erhebliche Überanpassung. Selbst Ihre Fehlerquote von 2,5% bei 60.000 Trainingsbeispielen ist zehnmal schlechter als die Fehlerquote nach dem neuesten Stand der Technik bei diesem Problem. Ich denke jedoch, Ihre Frage lautet: "Warum ist das Netzwerk nicht auf 50% oder sogar 90% Fehlerrate zurückgegangen?" Was Bashars Antwort behandelt, obwohl ich mich immer noch frage, ob Testfehler mit noch mehr Epochen auftreten würden
Neil Slater

1
@NeilSlater Sicher, SGD-Schrittgröße = 0,001. Die Gewichte werden zufällig und gleichmäßig auf [-0,2, +0,2] in den ersten beiden Schichten und [-1, + 1] auf der Ausgabeschicht initialisiert.
Syeh_106

1
Ich habe meine Antwort mit zusätzlichen Nachforschungen aktualisiert. Es stimmt im Grunde mit Ihren Ergebnissen überein und bietet einige Kontext- und Handbewegungen
Neil Slater

Antworten:


7

Ich habe Ihre Ergebnisse mit Keras repliziert und sehr ähnliche Zahlen erhalten, sodass ich nicht glaube, dass Sie etwas falsch machen.

Aus Interesse lief ich für viele weitere Epochen, um zu sehen, was passieren würde. Die Genauigkeit der Test- und Zugergebnisse blieb ziemlich stabil. Die Verlustwerte gingen jedoch mit der Zeit weiter auseinander. Nach ungefähr 10 Epochen erhielt ich 100% Zuggenauigkeit, 94,3% Testgenauigkeit - mit Verlustwerten um 0,01 bzw. 0,22. Nach 20.000 Epochen hatten sich die Genauigkeiten kaum geändert, aber ich hatte einen Trainingsverlust von 0,000005 und einen Testverlust von 0,36. Die Verluste gingen ebenfalls weiter auseinander, wenn auch sehr langsam. Meiner Meinung nach ist das Netzwerk eindeutig überpassend.

Die Frage könnte also umformuliert werden: Warum verallgemeinert sich ein auf den MNIST-Datensatz trainiertes neuronales Netzwerk trotz Überanpassung immer noch relativ gut in Bezug auf die Genauigkeit?

Es lohnt sich, diese Genauigkeit von 94,3% mit dem zu vergleichen, was mit naiveren Ansätzen möglich ist.

Zum Beispiel ergibt eine einfache lineare Softmax-Regression (im Wesentlichen dasselbe neuronale Netzwerk ohne die verborgenen Schichten) eine schnelle stabile Genauigkeit von 95,1% Zug und 90,7% Test. Dies zeigt, dass viele Daten linear getrennt werden. Sie können Hyperebenen in den 784-Dimensionen zeichnen, und 90% der Ziffernbilder befinden sich in der richtigen "Box", ohne dass eine weitere Verfeinerung erforderlich ist. Daraus könnte man erwarten, dass eine nichtlineare Überanpassungslösung ein schlechteres Ergebnis als 90% erzielt, aber möglicherweise nicht schlechter als 80%, da intuitiv eine überkomplexe Grenze um z. B. eine "5" in der Box für "3" gebildet wird. wird nur fälschlicherweise eine kleine Menge dieser naiven 3 Mannigfaltigkeit zuweisen. Aber wir sind besser als diese 80% untere Schätzung des linearen Modells.

Ein anderes mögliches naives Modell ist der Vorlagenabgleich oder der nächste Nachbar. Dies ist eine vernünftige Analogie zu dem, was die Überanpassung bewirkt - es wird ein lokaler Bereich in der Nähe jedes Trainingsbeispiels erstellt, in dem dieselbe Klasse vorhergesagt wird. Probleme mit der Überanpassung treten in dem Zwischenraum auf, in dem die Aktivierungswerte dem folgen, was das Netzwerk "natürlich" tut. Beachten Sie, dass der schlimmste Fall und das, was Sie häufig in erklärenden Diagrammen sehen, eine stark gekrümmte, fast chaotische Oberfläche ist, die sich durch andere Klassifikationen bewegt. Tatsächlich kann es jedoch natürlicher sein, dass das neuronale Netzwerk reibungsloser zwischen Punkten interpoliert - was es tatsächlich tut, hängt von der Art der Kurven höherer Ordnung ab, die das Netzwerk zu Approximationen kombiniert, und davon, wie gut diese bereits zu den Daten passen.

Ich habe den Code für eine KNN-Lösung aus diesem Blog auf MNIST mit K Nearest Neighbors ausgeliehen . Die Verwendung von k = 1 - dh die Auswahl des Etiketts des nächsten aus den 6000 Trainingsbeispielen durch einfaches Anpassen der Pixelwerte ergibt eine Genauigkeit von 91%. Die zusätzlichen 3%, die das übertrainierte neuronale Netzwerk erzielt, scheinen angesichts der Einfachheit der Pixelübereinstimmungszählung, die KNN mit k = 1 leistet, nicht ganz so beeindruckend zu sein.

Ich habe einige Variationen der Netzwerkarchitektur, verschiedene Aktivierungsfunktionen, verschiedene Anzahl und Größen von Schichten ausprobiert - keine mit Regularisierung. Mit 6000 Trainingsbeispielen konnte ich jedoch keines davon so überanpassen, dass die Testgenauigkeit dramatisch abnahm. Selbst die Reduzierung auf nur 600 Trainingsbeispiele hat das Plateau mit einer Genauigkeit von ~ 86% gesenkt.

Meine grundlegende Schlussfolgerung ist, dass MNIST-Beispiele relativ glatte Übergänge zwischen Klassen im Merkmalsraum aufweisen und dass neuronale Netze zu diesen passen und zwischen den Klassen auf "natürliche" Weise interpolieren können, wenn NN-Bausteine ​​für die Funktionsnäherung verwendet werden - ohne dass Hochfrequenzkomponenten hinzugefügt werden die Annäherung, die Probleme in einem Überanpassungsszenario verursachen könnte.

Es könnte ein interessantes Experiment sein, es mit einem "verrauschten MNIST" -Set zu versuchen, bei dem sowohl Trainings- als auch Testbeispielen eine Menge zufälliges Rauschen oder Verzerrungen hinzugefügt werden. Es wird erwartet, dass regulierte Modelle für diesen Datensatz eine gute Leistung erbringen, aber möglicherweise würde in diesem Szenario die Überanpassung offensichtlichere Probleme mit der Genauigkeit verursachen.


Dies ist vor dem Update mit weiteren Tests durch OP.

Aus Ihren Kommentaren geht hervor, dass Ihre Testergebnisse alle nach einer einzelnen Epoche erstellt wurden. Sie haben im Wesentlichen das vorzeitige Anhalten verwendet, obwohl Sie dies nicht geschrieben haben, da Sie das Training aufgrund Ihrer Trainingsdaten zum frühestmöglichen Zeitpunkt abgebrochen haben.

Ich würde vorschlagen, für viele weitere Epochen zu laufen, wenn Sie sehen möchten, wie das Netzwerk wirklich konvergiert. Beginnen Sie mit 10 Epochen und ziehen Sie in Betracht, bis zu 100 zu erreichen. Eine Epoche ist für dieses Problem nicht ausreichend, insbesondere bei 6000 Proben.

Obwohl nicht garantiert werden kann, dass eine zunehmende Anzahl von Iterationen die Überanpassung Ihres Netzwerks verschlechtert, als dies bereits der Fall war, haben Sie ihm keine große Chance gegeben, und Ihre experimentellen Ergebnisse sind bisher nicht schlüssig.

Tatsächlich würde ich zur Hälfte erwarten, dass sich Ihre Testergebnisse nach einer 2. und 3. Epoche verbessern , bevor sie mit zunehmender Epochenzahl von den Trainingsmetriken abweichen. Ich würde auch erwarten, dass sich Ihr Trainingsfehler 0% nähert, wenn sich das Netzwerk der Konvergenz nähert.


Du hast recht. Indem ich nur eine Epoche ausgeführt habe, habe ich versehentlich ein vorzeitiges Anhalten implementiert. Ich werde Ihren Vorschlag versuchen und möglicherweise meine Frage bei Bedarf aktualisieren.
Syeh_106

Ihre aktualisierten Antwort- und Untersuchungsergebnisse sind sehr hilfreich und werfen mehr Licht auf diese Frage. Ich schätze es sehr. Künstliche neuronale Netze erscheinen mir schön und faszinierend. Es ist nur so, dass, als ich versuchte herauszufinden, warum / wie / wann es funktionierte, die quantitative und strenge Analyse / Theorie nicht im Überfluss vorhanden zu sein schien.
Syeh_106

3

Im Allgemeinen denken die Leute über eine Überanpassung als Funktion der Modellkomplexität nach. Das ist großartig, denn die Komplexität des Modells ist eines der Dinge, die Sie steuern können. In der Realität gibt es viele andere Faktoren, die mit dem Problem der Überanpassung zusammenhängen: - Anzahl der Trainingsmuster - Anzahl der Iterationen - Dimension der Eingabe (in Ihrem Fall glaube ich, dass dies der Grund ist, warum Sie nicht überanpassen) - die Schwierigkeit des Problems: Wenn Sie ein einfaches Problem haben, das linear trennbar ist, müssen Sie sich nicht viel Gedanken über eine Überanpassung machen.

Es gibt eine visuelle Demo von Google Tensorflow, mit der Sie alle diese Parameter ändern können. http://playground.tensorflow.org Sie können Ihr Eingabeproblem, die Anzahl der Beispiele, die Dimension Ihrer Eingabe, das Netzwerk und die Anzahl der Iterationen ändern.

Ich denke gerne über Überanpassung als Überanpassung = große Modelle + nicht verwandte Funktionen nach

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.