Ich bin ein bisschen beunruhigt und verwirrt über die Idee, wie die Technik des frühen Stoppens definiert wird. Wenn Sie sich Wikipedia ansehen , ist es wie folgt definiert:
- Teilen Sie die Trainingsdaten in einen Trainingssatz und einen Validierungssatz auf, z. B. im Verhältnis 2 zu 1.
- Trainieren Sie nur auf dem Trainingssatz und bewerten Sie ab und zu den Fehler pro Beispiel auf dem Validierungssatz, z. B. nach jeder fünften Epoche.
- Beenden Sie das Training, sobald der Fehler im Validierungssatz höher ist als beim letzten Überprüfen.
- Verwenden Sie die Gewichte, die das Netzwerk in diesem vorherigen Schritt als Ergebnis des Trainingslaufs hatte.
Ich habe die Methode selbst in meinen Experimenten verwendet (mit 10-facher Kreuzvalidierung). Ich überprüfe den Validierungsfehler in jeder Epoche (und berechne auch die Validierungsgenauigkeit) und setze einen Geduldsparameter von 2. Das heißt, wenn der Validierungsfehler für 2 Epochen hintereinander zunimmt -> Training beenden. Dann habe ich die Ergebnisse der letzten Epoche verwendet, als das Modell fertig war.
Ian Goodfellow verwendet eine andere Definition in seinem Deep Learning-Buch . Als vierten Schritt schlägt er vor, die Gewichte des besten Arbeitsmodells zu verwenden (dh das Modell jedes Mal zu speichern, wenn der Validierungsfehler überprüft wird).
Ich brauche das gespeicherte Modell nicht, ich brauche nur die Ergebnisse für meine Arbeit. Für mich würde der vorgeschlagene vorzeitige Stopp bei Goodfellow bedeuten, dass ich nur die höchste Validierungsgenauigkeit nehme, die ich für mein Endergebnis erreicht habe? Irgendwie scheint das nicht legitim zu sein. Ich habe diese Informationen nicht in einer realen Situation, in der es keinen Entwicklungssatz gibt. Aber was ist in diesem Fall der Grund, überhaupt früh zu stoppen? Bestimmen Sie die Anzahl der Epochen, indem Sie beispielsweise die Anzahl der Epochen für die Falten mitteln und später für den Testlauf verwenden?
Antworten:
Kürzeste Antwort: Ja! Aber lassen Sie mich einen Kontext hinzufügen ...
Ich glaube, Sie beziehen sich auf Abschnitt 7.8, Seite 246ff, über das frühe Stoppen im Deep Learning-Buch. Das dort beschriebene Verfahren unterscheidet sich jedoch erheblich von Ihrem. Goodfellow et al. Schlagen Sie vor, Ihre Daten zuerst in drei Sätze aufzuteilen : einen Trainings-, Entwickler- und Testsatz. Dann trainieren Sie (am Trainingssatz), bis der Fehler dieses Modells zunimmt (am Entwicklersatz). An diesem Punkt hören Sie auf. Schließlich verwenden Sie das trainierte Modell mit dem niedrigsten Entwicklungsfehler und bewerten es im Testsatz. Es ist überhaupt keine Kreuzvalidierung erforderlich.
Sie scheinen jedoch zu versuchen, sowohl das frühe Stoppen (ES) als auch die Kreuzvalidierung (CV) sowie die Modellbewertung alle auf demselben Satz durchzuführen. Das heißt, Sie scheinen alle Ihre Daten für den Lebenslauf zu verwenden, bei jedem Split mit ES zu trainieren und dann die durchschnittliche Leistung über diese CV-Splits als endgültige Bewertungsergebnisse zu verwenden. Wenn dies der Fall ist, ist dies in der Tat eine starke Überanpassung (und sicherlich nicht das, was von Goodfellow et al. Beschrieben wird), und Ihr Ansatz liefert Ihnen genau das gegenteilige Ergebnis dessen, wofür ES gedacht ist - als Regularisierungstechnik für um dies verhindernüberpassend. Wenn nicht klar ist, warum: Weil Sie bei Ihren endgültigen Bewertungsinstanzen während der Trainingszeit einen "Höhepunkt" erreicht haben, um herauszufinden, wann ("früh") das Training abgebrochen werden muss; Das heißt, optimieren Sie gegen die Bewertungsinstanzen während des Trainings, das ist (Über-) passend zu Ihrem Modell (auf diesen Auswertungsdaten), per Definition.
Ich hoffe, dass ich jetzt Ihre anderen [zwei] Fragen beantwortet habe.
Die Antwort des Higgs Broson (auf Ihre letzte Frage, wie oben zitiert) bietet bereits eine sinnvolle Möglichkeit, CV und ES zu kombinieren, um Ihnen Zeit für das Training zu sparen: Sie können Ihre vollständigen Daten nur in zwei Sätze aufteilen - einen Entwickler- und einen Testsatz - und verwenden Sie das Entwicklungsset, um einen Lebenslauf zu erstellen, während Sie ES auf jeden Split anwenden. Das heißt, Sie trainieren bei jeder Aufteilung Ihres Entwicklungssatzes und stoppen, sobald der niedrigste Fehler in den Trainingsinstanzen, die Sie für die Bewertung dieser Aufteilung reserviert haben, erreicht wurde [1]. Dann mitteln Sie die Anzahl der Epochen, die erforderlich sind, um den niedrigsten Fehler aus jeder Aufteilung zu erreichen, und trainieren mit dem vollständigen Entwicklungssatz für diese (gemittelte) Anzahl von Epochen. Schließlich validieren Sie das Ergebnis des Test-Sets, das Sie beiseite gelegt und noch nicht berührt haben.
[1] Im Gegensatz zum Higgs Broson würde ich empfehlen, nach jeder Epoche zu bewerten . Zwei Gründe dafür: (1) Im Vergleich zum Training wird die Evaluierungszeit vernachlässigbar sein. (2), stell dir deine min. Der Fehler liegt in Epoche 51, aber Sie bewerten in Epoche 50 und 60. Es ist nicht unwahrscheinlich, dass der Fehler in Epoche 60 geringer ist als in Epoche 50; Sie würden jedoch 60 als Epochenparameter wählen, was eindeutig nicht optimal ist und sogar ein wenig gegen den Zweck verstößt, ES überhaupt zu verwenden.
quelle
Die Art und Weise, wie Sie mithilfe der Kreuzvalidierung die optimale Anzahl von Epochen bestimmen können, um mit frühem Stopp zu trainieren, ist folgende: Angenommen, wir haben für 1 bis 100 Epochen trainiert. Trainieren Sie für jede Falte Ihr Modell und zeichnen Sie den Validierungsfehler beispielsweise alle 10 Epochen auf. Speichern Sie diese Trajektorien des Validierungsfehlers im Verhältnis zur Anzahl der trainierten Epochen und mitteln Sie sie über alle Falten zusammen. Dies ergibt eine Kurve "Durchschnittlicher Testfehler gegen Epoche". Der zu verwendende Haltepunkt ist die Anzahl der Epochen, die den durchschnittlichen Testfehler minimieren. Sie können dann Ihr Netzwerk auf dem vollständigen Trainingssatz (keine Kreuzvalidierung) für so viele Epochen trainieren.
Der Zweck des frühen Anhaltens besteht darin, eine Überanpassung zu vermeiden. Sie verwenden die N-fache Kreuzvalidierung, um den Generalisierungsfehler Ihres Modells abzuschätzen, indem Sie N synthetische Zug- / Testsätze erstellen und (normalerweise) die Ergebnisse zusammen mitteln. Hoffentlich wird der Testsatz (auch bekannt als neue reale Daten), den Sie später erhalten, den synethetischen Testsätzen, die Sie mit CV generiert haben, ähnlich genug sein, sodass der zuvor gefundene Haltepunkt angesichts dieses neuen Tests nahezu optimal ist Daten.
quelle