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
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!
[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:
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:
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?
Antworten:
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.
quelle
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
quelle