Strata treningowa spada i rośnie. Co się dzieje?

26

Moja strata treningowa spada, a potem znowu rośnie. To jest bardzo dziwne. Strata weryfikacji krzyżowej śledzi utratę treningu. Co się dzieje?

Mam dwa skumulowane LSTMS w następujący sposób (na 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')

Trenuję to przez 100 epok:

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

Trenuj na 127803 próbkach, zatwierdź na 31951 próbkach

I tak wygląda strata: Wykres strat

patapouf_ai
źródło
2
Twoja nauka może być za duża po 25 epoce. Spróbuj ustawić go na mniejszy i sprawdź ponownie swoją stratę
itd.
Ale w jaki sposób dodatkowe szkolenie może zwiększyć utratę danych treningowych?
patapouf_ai,
3
Przepraszam, mam na myśli tempo uczenia się.
itdxer
Dziękuję itdxer. Myślę, że to, co powiedziałeś, musi być na dobrej drodze. Próbowałem użyć „adam” zamiast „adadelta” i to rozwiązało problem, choć domyślam się, że zmniejszenie szybkości uczenia się „adadelta” prawdopodobnie również by zadziałało. Jeśli chcesz napisać pełną odpowiedź, zaakceptuję ją.
patapouf_ai,

Odpowiedzi:

19

Twój wskaźnik uczenia się może być duży po 25 epoce. Ten problem jest łatwy do zidentyfikowania. Musisz tylko ustawić mniejszą wartość swojego współczynnika uczenia się. Jeśli problem związany z twoim współczynnikiem uczenia się niż NN powinien osiągnąć niższy błąd, mimo to po pewnym czasie znów wzrośnie. Najważniejsze jest to, że poziom błędu będzie w pewnym momencie niższy.

Jeśli zaobserwujesz to zachowanie, możesz użyć dwóch prostych rozwiązań. Pierwszy jest najprostszy. Ustaw bardzo mały krok i wytrenuj go. Drugim jest monotoniczne obniżenie wskaźnika uczenia się. Oto prosta formuła:

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

Gdzie jest wskaźnikiem uczenia się, jest liczbą iteracji, a jest współczynnikiem, który określa prędkość zmniejszania współczynnika uczenia się. Oznacza to, że twój krok zminimalizuje się dwa razy, gdy jest równe .t m t mzatmtm

itdxer
źródło
7
Ponieważ OP używał Keras, inną opcją wprowadzenia nieco bardziej wyrafinowanych aktualizacji szybkości uczenia się byłoby użycie funkcji zwrotnej, takiej jak ReduceLROnPlateau , która zmniejsza szybkość uczenia się, gdy utrata walidacji nie poprawi się w danej liczbie epok.
n1k31t4