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?
Möglicherweise möchten Sie das folgende Papier von Forschern von Microsoft Research lesen:
Sie hatten ähnliche Probleme wie Sie:
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.
quelle