Es gibt viele empirische Belege dafür, dass tief genug liegende neuronale Netze zufällige Bezeichnungen in riesigen Datensätzen speichern können (Chiyuan Zhang, Samy Bengio, Moritz Hardt, Benjamin Recht, Oriol Vinyals, "Um tiefes Lernen zu verstehen, muss man die Verallgemeinerung überdenken"). Im Prinzip können wir also durch Erzielen einer ausreichenden NN die NN immer verringern Trainingsfehler auf extrem kleine Werte in der Praxis durch die numerische Genauigkeit begrenzt sind, egal wie bedeutungslos die Aufgabe ist.
Ganz anders sieht es beim Generalisierungsfehler aus . Wir können nicht sicher sein, dass es für jedes Lernproblem ein lernfähiges NN-Modell gibt, das einen so geringen Generalisierungsfehler wie gewünscht erzeugen kann. Aus diesem Grund ist der erste Schritt zu
1. Stellen Sie Ihre Erwartungen richtig ein
Suchen Sie eine seriöse Referenz, die Ihnen mitteilt, dass es eine Architektur gibt, die den gesuchten Generalisierungsfehler erreichen kann, und zwar in Ihrem Datensatz oder in der ähnlichsten, für die Sie Referenzen finden. Schauen Sie zum Beispiel hier
Was sind die aktuellen neuronalen Faltungsnetze auf dem neuesten Stand der Technik?
Aktuelle (zum Zeitpunkt der Antworten) SOTA-Leistung (State of the Art) für CNNs für verschiedene Aufgaben zu finden. Es ist eine gute Idee, solche Ergebnisse in diesen Referenzdatensätzen zu reproduzieren, bevor Sie mit Ihrem eigenen Datensatz trainieren, um zu testen, ob Ihre gesamte Infrastruktur ordnungsgemäß eingerichtet ist.
2. Stellen Sie sicher, dass Ihr Trainingsablauf fehlerfrei ist
Alle Prüfungen in den Antworten auf die Frage beschrieben
Was soll ich tun, wenn mein neuronales Netzwerk nicht lernt?
Voraussetzung für eine erfolgreiche Reduzierung des Generalisierungsfehlers ist, dass Ihr Trainingsverfahren in Ordnung ist (wenn Ihr NN nicht lernt, kann es nicht lernen, zu generalisieren). Diese Prüfungen umfassen unter anderem:
- Unit-Tests
- Datensatzprüfungen (sehen Sie sich einige zufällige Eingabe- / Etikettenmuster sowohl für den Trainingssatz als auch für den Testsatz an und prüfen Sie, ob die Etiketten korrekt sind. Prüfen Sie die Breite und Größe der Eingabebilder Ergebnisse; etc.)
- Randomisierungstests
- Standardisieren Sie Ihre Vorverarbeitungs- und Paketversionen
- Führen Sie ein Logbuch mit numerischen Experimenten
3. Versuchen Sie Superkonvergenz zu erreichen
„Superkonvergenz: Sehr schnelles Training neuronaler Netze mit hohen Lernraten“ hohen Lernraten von Leslie N. Smith und Nicholay Topin zeigt, dass in einigen Fällen die Kombination hoher Lernraten mit der zyklischen Lernratenmethode von Leslie N. Smith als Regularisierer fungiert Dies beschleunigt die Konvergenz um eine Größenordnung und verringert die Notwendigkeit einer umfassenden Regularisierung. Daher ist es gut, dies vorher zu versuchen
4. Stellen Sie Ihre Regularisierung auf den MAXXX ein
Regularisierung erhöht häufig die Trainingszeit (schlecht), erhöht den Trainingsfehler und verringert den Generalisierungsfehler (gut), aber zu viel Regularisierung kann tatsächlich beide Fehler erhöhen (Unteranpassung). Aus diesem Grund und aufgrund der längeren Trainingszeit ist es oft besser, die verschiedenen Regularisierungstechniken nacheinander einzuführen, nachdem Sie das Trainingsset erfolgreich überarbeitet haben. Beachten Sie, dass die Regularisierung für sich genommen nicht unbedingt bedeutet, dass Ihr Generalisierungsfehler kleiner wird: Das Modell muss über eine ausreichende Kapazität verfügen, um gute Generalisierungseigenschaften zu erzielen. Dies bedeutet häufig, dass Sie ein ausreichend tiefes Netzwerk benötigen, bevor Sie die Vorteile der Regularisierung erkennen können.
Die ältesten Regularisierungsmethoden sind wahrscheinlich frühes Anhalten und Gewichtsabnahme. Einige der anderen:
- Batch-Größe reduzieren: Kleinere Batch-Größen sind normalerweise mit kleineren Generalisierungsfehlern verbunden, daher sollten Sie dies versuchen. Beachten Sie jedoch, dass einige die Nützlichkeit von Minibatches bestreiten: Meiner Erfahrung nach helfen sie (solange Sie keine verrückten kleinen Größen verwenden müssen, wie zm = 16), Aber Elad Hoffer, Itay Hubara, Daniel Soudry Zug mehr, verallgemeinern besser: die Verallgemeinerung Lücke in großen Stück Ausbildung von neuronalen Netzwerken schließen nicht einverstanden sind . Beachten Sie, dass zu kleine Minibatches bei Verwendung der Chargennorm (siehe unten) sehr schädlich sind.
- Verwenden Sie SGD anstelle von adaptiven Optimierern: Dies wurde bereits von @shimao behandelt, daher erwähne ich es nur der Vollständigkeit halber
- Dropout verwenden: Wenn Sie LSTMs verwenden, verwenden Sie Standard-Dropout nur für Eingabe- und Ausgabeeinheiten einer LSTM-Ebene. Verwenden Sie für die wiederkehrenden Einheiten (die Tore) wiederkehrende Ausfälle, wie Yarin Gal in seiner Doktorarbeit gezeigt hat. These . Wenn Sie jedoch CNNs verwenden, wird Dropout jetzt weniger häufig verwendet. Stattdessen tendierst du dazu…
- ... verwenden die Batch-Normalisierung: Die neuesten CNN-Architekturen verzichten zugunsten der Batch-Normalisierung auf Ausfälle. Dies könnte nur eine Modeerscheinung sein, oder es könnte an der Tatsache liegen, dass anscheinend Aussetzer und Batch-Normalisierung nicht gut zusammenspielen (Xiang Li, Shuo Chen, Xiaolin Hu, Jian Yang, Verständnis der Disharmonie zwischen Aussetzer und Batch-Normalisierung durch Varianz) Shift ). Da die Batch-Norm bei großen Datenmengen effektiver ist als Dropout, könnte dies ein Grund dafür sein, dass Dropout für CNN-Architekturen in Ungnade gefallen ist. Wenn Sie die Stapelnormalisierung verwenden, stellen Sie sicher, dass die Verteilung der Gewichte und Vorspannungen für jede Schicht ungefähr normal aussieht. Für RNNs ist die Implementierung der Chargennorm kompliziert: Gewichtsnormalisierung (Tim Salimans, Diederik P. Kingma,Weight Normalization: Eine einfache Neuparametrisierung zur Beschleunigung des Trainings von tiefen neuronalen Netzen ist eine praktikable Alternative.
- Verwenden Sie die Datenerweiterung: Sie wirkt auch regulierend.
5. Hyperparameter / Architektur-Suche
Wenn nichts anderes hilft, müssen Sie mehrere verschiedene Hyperparametereinstellungen (Bayesian Optimization kann hier hilfreich sein) oder mehrere verschiedene Architekturänderungen (z. B. in Ihrer GAN-Architektur und für den Datensatz, an dem Sie arbeiten, funktioniert die Batch-Norm nur in der Generator, aber wenn es auch zum Diskriminator hinzugefügt wird, wird es noch schlimmer. Stellen Sie sicher, dass Sie die Ergebnisse dieser langen und langweiligen Experimente in einem geordneten Logbuch festhalten.
PS Für eine GAN macht es wenig Sinn, über einen Generalisierungsfehler zu sprechen: Das obige Beispiel war nur als Hinweis darauf gedacht, dass Deep Learning immer noch viel Alchemie beinhaltet und Dinge, von denen man erwartet, dass sie gut funktionieren, manchmal auch nicht oder umgekehrt, etwas, das viele Male in Ordnung war, scheißt plötzlich nach einem neuen Datensatz auf dich.