Validierung mit großen Schwankungen. Was könnte die Ursache sein?


8

Ich trainiere ein CNN für ein 3-Klassen-Bildklassifizierungsproblem. Mein Trainingsverlust nahm reibungslos ab, was das erwartete Verhalten ist. Mein Validierungsverlust zeigt jedoch große Schwankungen.

Geben Sie hier die Bildbeschreibung ein

Ist dies etwas, worüber ich mir Sorgen machen sollte, oder sollte ich einfach das Modell auswählen, das bei meinem Leistungsmaß (Genauigkeit) am besten abschneidet?

Zusätzliche Informationen: Ich optimiere die letzte Schicht eines Resnet-18, die für ImageNet-Daten in PyTorch vorab trainiert wurde. Ich muss beachten, dass ich für die Trainingsphase eine gewichtete Verlustfunktion verwende, da meine Daten stark unausgeglichen sind. Um die Verluste darzustellen, verwende ich jedoch den ungewichteten Verlust, um den Validierungs- und Trainingsverlust vergleichen zu können. Ich würde den ungewichteten Verlust verwenden, wenn nicht die Verteilungen des Trainingsdatensatzes und des Validierungsdatensatzes etwas unterschiedlich wären (beide sind jedoch stark unausgeglichen).


Schauen Sie sich diese Frage bei crossvalidated an. Der Autor dort hat ein ähnliches Problem wie Sie. stats.stackexchange.com/questions/255105/…
Nord112

Antworten:


3

Aus einer einfachen Überprüfung Ihres Grundstücks könnte ich einige Schlussfolgerungen ziehen und Dinge auflisten, die Sie ausprobieren sollten. (Dies ohne mehr über Ihr Setup zu wissen: Trainingsparameter und Modellhyperparameter).

Es sieht so aus, als würde der Verlust abnehmen (setzen Sie eine Linie der besten Anpassung durch den Validierungsverlust). Es sieht auch so aus, als könnten Sie möglicherweise länger trainieren, um die Ergebnisse zu verbessern, da die Kurve immer noch nach unten zeigt.

Zuerst werde ich versuchen, Ihre Titelfrage zu beantworten:

Was ist die Ursache für die Fluktuation im Validierungsverlust?

Ich kann mir drei Möglichkeiten vorstellen:

  1. Regularisierung - um den Lernprozess zu glätten und die Modellgewichte robuster zu machen. Durch Hinzufügen / Erhöhen Ihrer Regularisierung wird verhindert, dass große Aktualisierungen der Gewichte eingeführt werden.
  2. Chargengröße - ist sie relativ klein (z. B. <20?). Dies würde bedeuten, dass der gemessene mittlere Fehler am Ende des Netzwerks mit nur wenigen Stichproben berechnet wird. Bei einer Chargengröße von beispielsweise hat 8die 4/8Richtigkeit und der Vergleich mit der 6/8Richtigkeit einen großen relativen Unterschied, wenn man den Verlust betrachtet. Wenn man den Mittelwert der Fehler mit solch kleinen Chargen nimmt, führt dies zu einer nicht so glatten Verlustkurve. Wenn Sie über genügend GPU-Speicher / RAM verfügen, erhöhen Sie die Stapelgröße.
  3. Lernrate - ist möglicherweise zu groß. Dies ähnelt dem ersten Punkt in Bezug auf die Regularisierung. Um reibungslosere Verbesserungen zu erzielen, müssen Sie möglicherweise das Lerntempo verlangsamen, wenn Sie sich einem Verlustminimum nähern. Sie können dies möglicherweise nach einem Zeitplan ausführen, wobei es jedes Mal um einen Faktor reduziert wird (z. B. mit 0,5 multipliziert wird), wenn sich der Validierungsverlust beispielsweise nach 6Epochen nicht verbessert hat . Dies verhindert, dass Sie große Schritte unternehmen und dann möglicherweise ein Minimum überschreiten und einfach nur herumhüpfen.

Speziell für Ihre Aufgabe würde ich auch vorschlagen, dass Sie versuchen, eine weitere Ebene freizugeben , um den Umfang Ihrer Feinabstimmung zu erhöhen. Dies gibt dem Resnet-18 ein wenig mehr Lernfreiheit, basierend auf Ihren Daten.

Zu Ihrer letzten Frage:

Ist dies etwas, worüber ich mir Sorgen machen sollte, oder sollte ich einfach das Modell auswählen, das bei meinem Leistungsmaß (Genauigkeit) am besten abschneidet?

Solltest du dir Sorgen machen? Kurz gesagt, nein. Eine Validierungsverlustkurve wie Ihre kann vollkommen in Ordnung sein und vernünftige Ergebnisse liefern. Ich würde jedoch einige der oben genannten Schritte ausprobieren, bevor ich mich damit begnüge.

Sollten Sie nur das leistungsstärkste Modell auswählen? Wenn Sie damit meinen, das Modell an seinem Punkt mit dem besten Validierungsverlust (Validierungsgenauigkeit) zu nehmen, würde ich sagen, dass Sie vorsichtiger sein sollten. In Ihrer obigen Darstellung könnte dies ungefähr der 30. Epoche entsprechen, aber ich persönlich würde einen Punkt annehmen, der etwas mehr trainiert hat, wo die Kurve etwas weniger volatil wird. Nachdem Sie einige der oben beschriebenen Schritte ausgeführt haben.


Danke für deine Antwort Dexter! Ich habe in der Tat bemerkt, dass eine Abnahme der Lernrate im Laufe der Zeit die Validierungsverlustkurve in späteren Epochen viel weniger volatil macht. Jetzt habe ich eine Folgefrage zum Auftauen einer anderen Schicht. Ich habe bereits darüber nachgedacht, weiß aber nicht wirklich, wie ich das anstellen soll. Sollte ich zuerst den Klassifikator für eine Reihe von Epochen und dann sowohl den Klassifikator als auch die Faltungsschicht trainieren, oder könnte ich sofort mit dem Training beider beginnen (möglicherweise mit unterschiedlichen Lernraten)? Ich möchte nicht die geringe Menge an Rechenressourcen verschwenden, die ich habe.
Tim

@Tim - Wenn möglich, ist es normalerweise vorzuziehen, Ende-zu-Ende zu trainieren, dh beide gleichzeitig. Also würde ich eine weitere Ebene auftauen (diejenige, die der noch eingefrorenen Ausgabe am nächsten kommt) und dann alles trainieren. Wenn dies Ihnen nicht den Schub gibt, den Sie suchen, könnten Sie möglicherweise die Gewichte der nicht gefrorenen Schichten (nicht alle Schichten!) Neu initialisieren und länger trainieren, aber dies hätte andere Risiken und könnte die Situation möglicherweise verschlimmern. Betrachten Sie es als letzten Ausweg.
n1k31t4

4

Ich würde auch empfehlen, dass Sie Methoden zur Datenerweiterung und Überabtastung verwenden, um das Ungleichgewicht der Klassen auszugleichen. In diesem Standford-Artikel werden einige der Ideen erläutert, mit denen Sie die Effektivität der Datenerweiterung bei der Bildklassifizierung mithilfe von Deep Learning implementieren können .

Ich hoffe das hilft!

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.