Frühes Stoppen gegen Kreuzvalidierung

8

Ich benutze derzeit ein frühes Anhalten in meiner Arbeit, um eine Überanpassung zu verhindern. Speziell diejenigen, die aus dem frühen Stoppen stammen, aber wann? .

Ich möchte jetzt mit anderen Klassifizierungsalgorithmen vergleichen, bei denen es den Anschein hat, dass eine 10-fache Kreuzvalidierung weit verbreitet ist.

Ich bin jedoch verwirrt darüber, ob die Kreuzvalidierung eine Methode ist, um eine Überanpassung zu verhindern oder gute Parameter auszuwählen. (oder vielleicht ist das ein und dasselbe?). Ich bin auch verwirrt, ob Early-Stop-Methoden und Kreuzvalidierung anstelle von einander oder in Kombination verwendet werden können.

Die Frage ist also: Welche Beziehung besteht zwischen frühem Stoppen und Kreuzvalidierung?

Andy T.
quelle

Antworten:

4

Die Kreuzvalidierung ist eine Methode zur Schätzung der Generalisierungsgenauigkeit eines überwachten Lernalgorithmus.

Frühes Anhalten ist eine Methode zur Vermeidung von Überanpassung und erfordert eine Methode zur Bewertung der Beziehung zwischen der Generalisierungsgenauigkeit des erlernten Modells und der Trainingsgenauigkeit.

Sie können also die Kreuzvalidierung verwenden, um den in dem von Ihnen zitierten Artikel erwähnten Validierungssatz innerhalb eines Rahmens für frühzeitiges Anhalten zu ersetzen. Eine zehnfache Kreuzvalidierung wäre beispielsweise genauer als die Verwendung eines einzelnen Validierungssatzes und wäre normalerweise eine bessere Schätzung des Generalisierungsfehlers.

Zusammenfassend ist die Kreuzvalidierung ein Maß für die Verallgemeinerungsgenauigkeit, das als Teil eines Frameworks für frühes Stoppen verwendet werden kann.

image_doctor
quelle
1
Das alles macht Sinn, Prost. Aber was ich sagen kann 10 gefundene Kreuzvalidierung scheint verwendet zu werden, um die Parameter für eine bestimmte Methode auszuwählen, und nicht vorzeitig anzuhalten, wenn diese Methode verwendet wird. Ich denke also, ich muss noch etwas vermissen.
Andy T
@AndyT Vielleicht sollten Sie sich hier auf die Generalisierungsschätzung konzentrieren. Sowohl die Parameterauswahl als auch das frühe Stoppen erfordern einen guten Schätzer für den Generalisierungsfehler. Die N-fache Kreuzvalidierung ist ein solcher Schätzer. Es gibt andere, z. B. wiederholtes Halten und Bootstrapping oder einen einfachen Validierungssatz. In beiden Fällen versuchen Sie, bei der Parameterauswahl und beim frühen Stoppen zu bewerten, wie sich das Modell auf unsichtbare Daten auswirkt, damit Sie ein gutes Modell auswählen können. Zu diesem Zweck verwenden Sie in beiden Fällen einen Generalisierungsschätzer. Hilft das ?
image_doctor
Ja das ist klar. Vielen Dank für Ihre Zeit! Es wird sehr geschätzt.
Andy T
@AndyT Kein Problem, ich hoffe dein Projekt läuft gut!
image_doctor
1

Zusätzlich zu den beiden von Ihnen erwähnten Generalisierungsansätzen gibt es viele andere.

  • Hinzufügen von Regularisierungstermen zu Ihrer Verlust- (Kosten-) Funktion, die die Anzahl und Größe Ihrer Modellparameter ungleich Null minimieren
  • mit jeder Trainingsepoche zufällig einen Teil der Gewichte / Parameter in Ihrem Modell fallen lassen (auf Null stellen)
  • Hinzufügen einer Schicht stochastischer Knoten in Ihrem Modell (z. B. Stichproben aus den "Wahrscheinlichkeiten", die durch die Ausgaben logistischer Funktionen gegeben sind)

Viele dieser Ansätze (einschließlich Ihrer Kreuzvalidierungs- und Early-Stop-Ansätze) können miteinander kombiniert werden, um die Modellleistung für unsichtbare Daten zu maximieren (Generalisierungsleistung).

Ein Hinweis zum Early-Stop-Ansatz. Für neuronale Netze empfiehlt Geoffrey Hinton , das Training abzubrechen , wenn die Genauigkeit des Testsatzes sein Maximum erreicht (der Verlust des Testsatzes ohne Regularisierungsterme ist minimal). Eine zusätzliche "Optimierung" von Hintons Ansatz besteht darin, nicht aufzuhören, wenn die Genauigkeit von test_set besser ist (der Verlust ist geringer) als bei Ihrem Trainingssatz, selbst wenn sich die Genauigkeit des Testsatzes nicht mehr verbessert (der Verlust des Testsatzes hat aufgehört zu sinken). Es ist unwahrscheinlich, dass Sie mehr als eine Trainingsepoche erhalten, aber manchmal kann dies ein wenig helfen, insbesondere bei kleinen test_sets. Tun Sie dies nicht für extrem kleine Testsätze (kleiner als ein repräsentativer Probensatz, wie er manchmal beim K-Fold-Training und bei der Kreuzvalidierung verwendet wird).

Kochfelder
quelle
0

Sie können Frühstopp und K-fache Kreuzvalidierung nicht in Kombination verwenden. Da beim frühen Stoppen das beste Modell aus dem Validierungssatz ausgewählt wird, muss die Leistung durch den Testsatz überprüft werden. Bei der K-fachen Kreuzvalidierung gibt es jedoch keinen Testsatz, wenn Sie vorzeitig anhalten, um das beste Modell aus dem Validierungssatz auszuwählen, und dieser wird im Validierungssatz erneut überprüft. Die K-fache Kreuzvalidierung liefert die durchschnittliche Leistung (gemessen an der Genauigkeit) des besten Modells und ist bedeutungslos.

Tianyu Zhou
quelle
Die Anzahl der Trainingsiterationen kann wie jeder andere Hyperparameter als Hyperparameter behandelt und mithilfe der Kreuzvalidierung ausgewählt werden. Man könnte dies vernünftigerweise als "frühes Anhalten" bezeichnen.
user20160
Bei Verwendung eines frühen Stopps bei der K-fachen Kreuzvalidierung wird die Anzahl der Epochen durch den Validierungssatz festgelegt und ist für jede Teilung unterschiedlich. Dadurch wählt das Netzwerk in jedem Split das beste Modell aus, was nicht für die durchschnittliche Leistung steht.
Tianyu Zhou
2
Der Weg dazu wäre 1) Trainiere für eine bestimmte Anzahl von Iterationen auf jeder Falte (z. B. bis zu einem bestimmten Maximum). 2) Berechnen Sie den durchschnittlichen Validierungssatzfehler (über Falten hinweg) als Funktion der Anzahl der Iterationen. 3) Wählen Sie die Anzahl der Iterationen aus, die den durchschnittlichen Fehler des Validierungssatzes minimieren.
user20160
Hier ist meine Lösung: 1. mische alle Daten, 2. mache 10-fach mit sklearn, kfold = StratifiedKFold (n_splits = 10, shuffle = False) 3, setze Rückruf: callbacks_list = [EarlyStopping (monitor = 'val_loss', Geduld = 50, verbose = 0, mode = 'min')] 4. Wählen Sie das beste Modell durch frühzeitiges Anhalten. history = model.fit (X [Zug], Y [Zug], Epochen = 250, Batchgröße = 512, ausführlich = 1, Rückrufe = Rückrufliste, Validierungsaufteilung = 0,1, Zufallswiedergabe = Falsch) Setzen Sie einen weiteren automatischen Split-Validierungssatz von X [Zug ], Y [Zug]. 5. Testen Sie die Leistung mit X [Test] und Y [Test]: Scores = model.evaluate (X [Test], Y [Test], ausführlich = 0)
Tianyu Zhou