Ich trainiere ein neuronales Netzwerk und der Trainingsverlust nimmt ab, der Validierungsverlust jedoch nicht, oder er sinkt viel weniger als erwartet, basierend auf Referenzen oder Experimenten mit sehr ähnlichen Architekturen und Daten. Wie kann ich das beheben?
Was die Frage betrifft
Was soll ich tun, wenn mein neuronales Netzwerk nicht lernt?
Wofür diese Frage inspiriert ist, bleibt die Frage absichtlich allgemein, so dass andere Fragen, wie der Generalisierungsfehler eines neuronalen Netzes auf ein Niveau reduziert werden kann, das sich als erreichbar erwiesen hat, als Duplikate dieser Frage geschlossen werden können.
Siehe auch dedizierten Thread zu Meta:
neural-networks
deep-learning
DeltaIV
quelle
quelle
Antworten:
Lassen Sie uns zuallererst erwähnen, was "mein neuronales Netzwerk verallgemeinert sich nicht gut" bedeutet und was der Unterschied zu "mein neuronales Netzwerk funktioniert nicht gut" ist .
Wenn Sie ein neuronales Netzwerk trainieren, evaluieren Sie es ständig anhand eines Satzes von beschrifteten Daten, der als Trainingssatz bezeichnet wird . Wenn Ihr Modell nicht richtig funktioniert und nicht aus dem Trainingssatz zu lernen scheint, haben Sie noch kein Verallgemeinerungsproblem. Lesen Sie stattdessen diesen Beitrag . Allerdings, wenn Ihr Modell eine zufriedenstellende Leistung auf dem Trainingssatz zu erreichen, kann aber nicht gut auf bisher unbekannte Daten (zB Validierung / Test - Sets) ausführen, dann Sie tun eine Verallgemeinerung Problem haben.
Warum verallgemeinert Ihr Modell nicht richtig?
Der wichtigste Teil ist zu verstehen, warum sich Ihr Netzwerk nicht gut verallgemeinert. Hochleistungsmodelle für maschinelles Lernen können sich den Trainingssatz merken , was zu einer Überanpassung führen kann .
Überanpassung ist der Zustand, in dem ein Schätzer begonnen hat, das Trainingsset so gut zu lernen, dass er begonnen hat, das Rauschen in den Trainingsmustern (neben allen nützlichen Beziehungen) zu modellieren .
Zum Beispiel können wir im Bild unten sehen, wie die blaue Linie deutlich überzogen ist.
Aber warum ist das so schlimm?
Wenn Sie versuchen, unser Modell anhand neuer, zuvor nicht sichtbarer Daten (z. B. Validierungs- / Testsatz) zu bewerten , ist die Leistung des Modells viel schlechter als von uns erwartet.
Wie vermeide ich eine Überanpassung?
Am Anfang des Beitrags habe ich angedeutet, dass die Komplexität Ihres Modells die eigentliche Ursache für die Überanpassung ist, da das Modell dadurch unnötige Beziehungen aus dem Trainingssatz extrahieren kann, die sein inhärentes Rauschen abbilden. Der einfachste Weg, eine Überanpassung zu reduzieren, besteht darin , die Kapazität Ihres Modells wesentlich zu begrenzen . Diese Techniken werden Regularisierungstechniken genannt .
Parameter Norm Strafen . Diese fügen der Gewichtsaktualisierungsfunktion jedes Modells einen zusätzlichen Ausdruck hinzu, der von der Norm der Parameter abhängt. Dieser Zweck des Begriffs ist zu begegnen , die eigentliche Update (dh Grenze , wie viel jedes Gewicht kann aktualisiert werden). Dies macht die Modelle robuster gegen Ausreißer und Lärm. Beispiele für solche Regularisierungen sind L1- und L2- Regularisierungen, die auf den Regressoren Lasso , Ridge und Elastic Net zu finden sind .
Da jede (vollständig verbundene) Schicht in einem neuronalen Netzwerk ähnlich wie eine einfache lineare Regression funktioniert, werden diese in neuronalen Netzwerken verwendet. Am häufigsten wird jede Schicht einzeln reguliert.
Keras-Implementierung .
Frühes Anhalten . Diese Technik versucht, die Trainingsphase eines Schätzers vorzeitig zu beenden, und zwar an dem Punkt, an dem er gelernt hat, alle sinnvollen Beziehungen aus den Daten zu extrahieren, bevor er beginnt, sein Rauschen zu modellieren. Dies erfolgt durch Überwachen des Validierungsverlusts (oder einer Validierungsmetrik Ihrer Wahl) und Beenden der Trainingsphase, wenn sich diese Metrik nicht mehr verbessert . Auf diese Weise geben wir dem Schätzer genügend Zeit, um die nützlichen Informationen zu lernen, aber nicht genug, um aus dem Rauschen zu lernen.
Keras-Implementierung .
Keras-Implementierung
Eine andere Möglichkeit, eine Überanpassung zu verhindern, ist, neben der Einschränkung der Modellkapazität, die Qualität Ihrer Daten zu verbessern. Die naheliegendste Wahl wäre Ausreißer / Rauschunterdrückung , in der Praxis ist ihr Nutzen jedoch begrenzt. Ein häufigerer Weg (insbesondere bei bildbezogenen Aufgaben) ist die Datenerweiterung . Hier versuchen wir, die Trainingsbeispiele nach dem Zufallsprinzip zu transformieren, sodass sie zwar für das Modell unterschiedlich erscheinen, aber die gleiche semantische Information enthalten (z. B. Links-Rechts-Spiegeln von Bildern).
Übersicht über die Datenerweiterung
Praktische Vorschläge:
Keras-Implementierung
Eine andere Verwendung des ähnlichen Konzepts ist die folgende: Wenn Ihre Aufgabe nicht viele Daten enthält, Sie jedoch eine andere ähnliche Aufgabe finden, können Sie Transferlernen verwenden , um die Überanpassung zu reduzieren. Trainieren Sie zuerst Ihr Netzwerk für die Aufgabe mit dem größeren Datenbestand und versuchen Sie dann, eine Feinabstimmung durchzuführendas Modell, das Sie ursprünglich wollten. Das erste Training macht Ihr Modell in den meisten Fällen robuster gegen Überanpassung.
Kurz gesagt, achten Sie darauf, keine unrealistischen Bilder durch Datenerweiterung zu erzeugen . Darüber hinaus erfordert eine größere Datenmenge eine längere Einarbeitungszeit. Persönlich überlege ich, ob ich Daten erweitern soll, wenn ich feststelle, dass mein Modell in der Nähe ist
quelle
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:
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:
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.
quelle
Eine Liste häufig verwendeter Regularisierungstechniken, die ich in der Literatur gesehen habe, sind:
quelle
Ich fühle mich wie Djib2011, gebe großartige Punkte zu automatisierten Methoden, aber sie befassen sich nicht wirklich mit der zugrunde liegenden Frage, woher wir wissen, ob die zur Reduzierung der Überanpassung eingesetzte Methode ihre Aufgabe erfüllt hat. Als wichtige Fußnote zur DeltaIV-Antwort wollte ich dies auf der Grundlage der jüngsten Forschungsergebnisse der letzten zwei Jahre aufnehmen. Bei der Überanpassung für neuronale Netze geht es nicht nur um das Über-Auswendiglernen des Modells, sondern auch um die Unfähigkeit des Modells, neue Dinge zu lernen oder mit Anomalien umzugehen.
Erkennen einer Überanpassung im Black-Box-Modell: Die Interpretierbarkeit eines Modells hängt direkt davon ab, wie gut Sie die Verallgemeinerungsfähigkeit eines Modells beurteilen können. Daher sind viele interpretierbare Diagramme Methoden zum Erkennen von Überanpassungen und können Ihnen sagen, wie gut eine der oben vorgeschlagenen Methoden funktioniert. Interpretierbarkeitsdiagramme erkennen dies direkt, insbesondere wenn Sie die Validierungs- und Testergebnisdiagramme vergleichen. In den Kapiteln 5 und 6 dieses unveröffentlichten Buches werden die jüngsten Fortschritte bei der Erkennung von Überanpassungen beschrieben: Interpretable Modeling
Basierend auf diesem Buch möchte ich drei andere Methoden zum Erkennen und Entfernen von Überanpassungen erwähnen, die für manche offensichtlich sind, aber ich persönlich finde, dass die Leute diese zu oft vergessen. Deshalb möchte ich sie hervorheben, wenn nicht einer meint:
Feature Selection Detection : Je weniger Parameter und Features Ihr Modell hat, desto besser. Wenn Sie also nur das wichtigste der 100 Millionen einbeziehen (vielleicht 75 Millionen stattdessen), haben Sie ein besser verallgemeinerbares Modell. Das Problem ist, dass viele neuronale Netze bei der Merkmalsauswahl nicht perfekt sind, insbesondere wenn # 2 vorhanden ist. Bootstrap oder Boosting können grundsätzlich nicht beides beheben (nur eine Version namens Wild Bootstrap kann dies). Einfacher ausgedrückt: Wenn Sie Junk-Daten für neuronale Netzwerke bereitstellen, werden Sie Junk-Informationen erhalten. (Die oben erwähnte L2-Normalisierung kann dabei sehr gut helfen.)
Aufdeckung und Behandlung von Anomalien: Je weniger "Ausreißer", desto verallgemeinerbarer das Modell. Mit "Ausreißern" meinen wir nicht nur Ausreißer in den Daten. Ausreißer in den Daten (wie bei einem Box-Plot) sind eine zu enge Definition für neuronale Netze. Sie müssen auch Ausreißer im Fehler in einem Modell berücksichtigen, der als Einfluss bezeichnet wird, sowie andere Anomalien. Das Erkennen von Anomalien vor dem Ausführen Ihres Netzwerks ist daher wichtig. Ein neuronales Netz kann gegen eine Art von Anomalie robust sein, jedoch nicht gegen alle anderen Arten. Counter-Beispielmethoden, Criticism-Methoden und Adversarial-Beispielmethoden sowie Influence-Diagramme helfen Ihnen dabei, Ausreißer zu erkennen und diese dann zu berücksichtigen.
Stratified Sampling, Oversampling und Undersampling, basierend auf statistischen oder ethischen Überlegungen : Ich wünschte, ich wäre ein Experte für Unter- und Überstichproben, aber ich weiß nichts über Stratified Sampling. Das Clustering wichtiger Faktoren wie (Rasse, Geschlecht, Geschlecht) und das anschließende Stratified Sampling durch den Cluster ist von entscheidender Bedeutung, um eine Überanpassung bei der Berücksichtigung von Big Data zu vermeiden. Bei der Bilderkennung ist in einigen Bereichen eine geschichtete Abtastung in Kombination mit Clustering gesetzlich vorgeschrieben, um eine Diskriminierung aus Gründen der Rasse zu vermeiden. Das oben verlinkte Buch befasst sich kurz mit Methoden, um dies zu tun.
PS Soll ich mehr Links einbinden?
quelle