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
machine-learning
neural-networks
loss-functions
lstm
patapouf_ai
źródło
źródło
Odpowiedzi:
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:
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 mza t m t m
źródło