La perdita di allenamento scende e sale di nuovo. Che cosa sta succedendo?


26

La mia perdita di allenamento diminuisce e poi aumenta di nuovo. È molto strano. La perdita di convalida incrociata tiene traccia della perdita di addestramento. Cosa sta succedendo?

Ho due LSTMS in pila come segue (su 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')

Lo alleno per 100 epoche:

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

Allenati su 127803 campioni, convalida su 31951 campioni

Ed è così che appare la perdita: Grafico della perdita


2
Il tuo apprendimento potrebbe essere troppo grande dopo la 25a epoca. Prova a configurarlo più piccolo e controlla di nuovo la tua perdita
itdxer

Ma come può l'allenamento extra aumentare la perdita dei dati di allenamento?
patapouf_ai,

3
Scusa, intendo tasso di apprendimento.
itdxer,

Grazie itdxer. Penso che quello che hai detto debba essere sulla strada giusta. Ho provato a usare "adam" invece di "adadelta" e questo ha risolto il problema, anche se immagino che probabilmente anche la riduzione del tasso di apprendimento di "adadelta" avrebbe funzionato. Se vuoi scrivere una risposta completa, la accetterò.
patapouf_ai

Risposte:


19

Il tuo tasso di apprendimento potrebbe essere troppo grande dopo la 25a epoca. Questo problema è facile da identificare. Devi solo impostare un valore inferiore per il tuo tasso di apprendimento. Se il problema relativo al tuo tasso di apprendimento rispetto a NN dovesse raggiungere un errore inferiore, nonostante ciò si ripresenterà dopo un po '. Il punto principale è che il tasso di errore sarà più basso in qualche momento.

Se osservassi questo comportamento, potresti usare due semplici soluzioni. Il primo è il più semplice. Prepara un piccolo passo e allenalo. Il secondo è quello di ridurre il tasso di apprendimento monotonicamente. Ecco una semplice formula:

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

un'tmtm


7
Dato che l'OP utilizzava Keras, un'altra opzione per effettuare aggiornamenti della velocità di apprendimento leggermente più sofisticati sarebbe quella di utilizzare un callback come ReduceLROnPlateau , che riduce la velocità di apprendimento una volta che la perdita di convalida non è migliorata per un determinato numero di epoche.
n1k31t4,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.