Der Trainingsverlust steigt und fällt. Was ist los?


26

Mein Trainingsverlust geht runter und dann wieder rauf. Es ist sehr komisch. Der Kreuzvalidierungsverlust verfolgt den Trainingsverlust. Was ist los?

Ich habe zwei gestapelte LSTMS wie folgt (auf Keras):

model = Sequential()
model.add(LSTM(512, return_sequences=True, input_shape=(len(X[0]), len(nd.char_indices))))
model.add(Dropout(0.2))
model.add(LSTM(512, return_sequences=False))
model.add(Dropout(0.2))
model.add(Dense(len(nd.categories)))
model.add(Activation('sigmoid'))

model.compile(loss='binary_crossentropy', optimizer='adadelta')

Ich trainiere es für 100 Epochen:

model.fit(X_train, np.array(y_train), batch_size=1024, nb_epoch=100, validation_split=0.2)

Trainieren Sie mit 127803 Stichproben und validieren Sie mit 31951 Stichproben

Und so sieht der Verlust aus: Diagramm des Verlustes


2
Ihr Lernen könnte nach der 25. Epoche zu groß sein. Versuchen Sie es kleiner einzurichten und überprüfen Sie Ihren Verlust erneut
itdxer

Aber wie kann zusätzliches Training den Verlust von Trainingsdaten erhöhen?
patapouf_ai

3
Entschuldigung, ich meine Lernrate.
Itdxer

Vielen Dank, dass Sie itdxer. Ich denke, was Sie gesagt haben, muss auf dem richtigen Weg sein. Ich habe versucht, "adam" anstelle von "adadelta" zu verwenden, und dies hat das Problem gelöst, obwohl ich vermute, dass die Verringerung der Lernrate von "adadelta" wahrscheinlich auch funktioniert hätte. Wenn Sie eine vollständige Antwort schreiben möchten, nehme ich sie an.
patapouf_ai

Antworten:


19

Ihre Lernrate könnte nach der 25. Epoche zu hoch sein. Dieses Problem ist leicht zu erkennen. Sie müssen lediglich einen kleineren Wert für Ihre Lernrate festlegen. Wenn das Problem in Bezug auf Ihre Lernrate als NN einen niedrigeren Fehler erreichen sollte, wird es nach einer Weile wieder steigen. Der wichtigste Punkt ist, dass die Fehlerrate zu einem bestimmten Zeitpunkt niedriger sein wird.

Wenn Sie dieses Verhalten beobachten, können Sie zwei einfache Lösungen verwenden. Der erste ist der einfachste. Stelle einen sehr kleinen Schritt auf und trainiere ihn. Die zweite besteht darin, Ihre Lernrate monoton zu senken. Hier ist eine einfache Formel:

α(t+1)=α(0)1+tm

atmtm


7
Da das OP Keras verwendete, besteht eine weitere Option für etwas komplexere Aktualisierungen der Lernrate in der Verwendung eines Rückrufs wie ReduceLROnPlateau , der die Lernrate reduziert, sobald sich der Validierungsverlust für eine bestimmte Anzahl von Epochen nicht verbessert hat.
n1k31t4
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.