Wie bekämpfe ich Underfitting in einem tiefen neuronalen Netz?


50

Als ich mit künstlichen neuronalen Netzen (NN) anfing, dachte ich, ich müsste die Überanpassung als Hauptproblem bekämpfen. In der Praxis kann ich nicht einmal meinen NN dazu bringen, die 20% Fehlerrate zu überschreiten. Ich kann nicht einmal meine Punktzahl auf zufälligen Wald schlagen!

Ich suche einige sehr allgemeine oder nicht so allgemeine Ratschläge, was zu tun ist, damit ein NN mit der Erfassung von Datentrends beginnt.

Für die Implementierung von NN verwende ich Theano Stacked Auto Encoder mit dem Code aus dem Tutorial , der sich hervorragend zur Klassifizierung des MNIST-Datensatzes eignet (weniger als 5% Fehlerrate). Es handelt sich um ein mehrschichtiges Perzeptron mit einer Softmax-Schicht darüber, wobei jedes später ausgeblendete Perzeptron als Autoencoder vorab trainiert wird (ausführliche Beschreibung im Tutorial , Kapitel 8). Es gibt ~ 50 Eingangsfunktionen und ~ 10 Ausgangsklassen. Das NN hat Sigmoidneuronen und alle Daten sind auf [0,1] normalisiert. Ich habe viele verschiedene Konfigurationen ausprobiert: Anzahl der verborgenen Schichten und Neuronen in ihnen (100-> 100-> 100, 60-> 60, 60-> 30-> 15 usw.), unterschiedliches Lernen und Vortraining Preise usw.

Und das Beste, was ich bekommen kann, ist eine Fehlerrate von 20% für den Validierungssatz und eine Fehlerrate von 40% für den Testsatz.

Wenn ich hingegen versuche, Random Forest (von scikit-learn) zu verwenden, erhalte ich leicht eine Fehlerrate von 12% für den Validierungssatz und 25% (!) Für den Testsatz.

Wie kann es sein, dass sich meine tiefe NN mit Vortraining so schlecht verhält? Was soll ich probieren?

Antworten:


34

Das Problem bei tiefen Netzwerken besteht darin, dass viele Hyperparameter eingestellt werden müssen und der Lösungsraum sehr klein ist. Gute zu finden ist also eher eine Kunst als eine technische Aufgabe. Ich beginne mit einem Arbeitsbeispiel aus dem Tutorial und spiele mit den Parametern, um zu sehen, wie sich die Ergebnisse ändern. Dies gibt eine gute Vorstellung (wenn auch keine formale Erklärung) von den Abhängigkeiten zwischen Parametern und Ergebnissen (sowohl endgültig als auch mittelschwer).

Ich fand auch folgende Papiere sehr nützlich:

Beide beschreiben RBMs, enthalten jedoch einige Einblicke in tiefe Netzwerke im Allgemeinen. Einer der wichtigsten Punkte ist beispielsweise, dass Netzwerke schichtweise debuggt werden müssen. Wenn die vorherige Schicht keine gute Darstellung von Features bietet, haben weitere Schichten fast keine Chance, dies zu beheben.


14

Während die Antwort von ffriend einige hervorragende Hinweise gibt, um mehr darüber zu erfahren, wie (extrem) schwierig es ist, neuronale Netzwerke richtig abzustimmen, hielt ich es für hilfreich, einige spezifische Techniken aufzulisten, die derzeit in Klassifizierungsarchitekturen mit der besten Leistung im neuronalen Netzwerk verwendet werden Literatur.

Gleichgerichtete lineare Aktivierungen

Das erste, was in Ihrem Fall hilfreich sein könnte, ist die Umstellung der Aktivierungsfunktion Ihres Modells vom logistischen Sigmoid - - auf a gleichgerichtet linear (aka relu) - .f(z)=(1+ez)1f(z)=max(0,z)

Die Relu-Aktivierung hat zwei große Vorteile:

  • seine Ausgabe ist eine echte Null (nicht nur ein kleiner Wert nahe Null) für undz0
  • Ihre Ableitung ist konstant, entweder 0 für oder 1 für .z0z>0

Ein Netzwerk von Relu-Einheiten verhält sich im Grunde genommen wie ein Ensemble aus exponentiell vielen linearen Netzwerken, da Einheiten, die den Eingang empfangen, im wesentlichen "aus" sind (ihr Ausgang ist 0), während Einheiten, die den Eingang empfangen, zu einer einzigen linearen Einheit zusammenbrechen Modell für diesen Eingang. Auch die konstanten Ableitungen sind wichtig, da ein tiefes Netzwerk mit relu-Aktivierungen das Problem des verschwindenden Gradienten vermeidet und ohne schichtweises Vortraining trainiert werden kann.z0z>0

Siehe "Deep Sparse Rectifier Neural Networks" von Glorot, Bordes & Bengio ( http://jmlr.csail.mit.edu/proceedings/papers/v15/glorot11a/glorot11a.pdf ) für ein gutes Papier zu diesen Themen.

Aussteigen

Viele Forschungsgruppen haben sich in den letzten Jahren für die Verwendung von "Dropout" in Klassifizierungsnetzwerken ausgesprochen, um Übertraining zu vermeiden. (Siehe zum Beispiel "Dropout: Eine einfache Möglichkeit, die Überanpassung neuronaler Netze zu verhindern" von Srivastava, Hinton, Krizhevsky, Sutskever & Salakhutdinov http://www.cs.toronto.edu/~hinton/absps/JMLRdropout.pdf ) Während des Trainings wird ein konstanter Anteil der Einheiten in einer bestimmten Ebene für jede vom Netzwerk verarbeitete Eingabe zufällig auf 0 gesetzt. Dadurch werden die Einheiten, die nicht auf 0 gesetzt sind, gezwungen, die "fehlenden" Einheiten "auszugleichen". Dropout scheint ein äußerst effektiver Regularisierer für neuronale Netzwerkmodelle bei Klassifizierungsaufgaben zu sein. Einen Blog-Artikel dazu finden Sie unter http: // fastml.


7
Aber es geht um Unteranpassung, nicht um Überanpassung.
Valentas

8

Möglicherweise möchten Sie das folgende Papier von Forschern von Microsoft Research lesen:

Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun: Tiefes Restlernen für die Bilderkennung auf arxiv, 2015.

Sie hatten ähnliche Probleme wie Sie:

Wenn tiefere Netzwerke konvergieren können, ist ein Verschlechterungsproblem aufgetreten: Mit zunehmender Netzwerktiefe wird die Genauigkeit gesättigt (was nicht überraschend sein kann) und nimmt dann schnell ab. Unerwarteterweise wird eine solche Verschlechterung nicht durch Überanpassung verursacht, und das Hinzufügen von mehr Schichten zu einem angemessen tiefen Modell führt zu einem höheren Trainingsfehler , wie in [11, 42] berichtet und durch unsere Experimente gründlich verifiziert.

Um das Problem zu lösen, haben sie eine Sprungarchitektur verwendet. Damit trainierten sie sehr tiefe Netzwerke (1202 Schichten) und erreichten das beste Ergebnis bei der ILSVRC 2015 Challenge.


Vielen Dank für Ihre Antwort, Sie nehmen das Problem des verschwindenden Gefälles in Kauf. Wenn die Validierungsrate höher als die Trainingsrate ist, was tun Sie dann? Es kann für eine kleine Anzahl von Daten in der Wertemenge geschehen, aber manchmal hängt es nicht von der Wertemenge ab. Ich frage, dass es einen anderen Grund gibt, wo das val acc höher ist als das training acc?
Sudip Das
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.