La perte d'entraînement diminue et augmente de nouveau. Qu'est-ce qui se passe?


26

Ma perte d'entraînement diminue puis augmente à nouveau. C'est très bizarre. La perte de validation croisée suit la perte d'entraînement. Que se passe-t-il?

J'ai deux LSTMS empilés comme suit (sur 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')

Je l'entraîne pour 100 époques:

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

Former sur 127803 échantillons, valider sur 31951 échantillons

Et voici à quoi ressemble la perte: Graphique de la perte


2
Votre apprentissage pourrait être trop grand après la 25e époque. Essayez de le configurer plus petit et vérifiez à nouveau votre perte
— itdxer

Mais comment une formation supplémentaire pourrait-elle augmenter la perte de données d'entraînement?
— patapouf_ai

3
Désolé, je veux dire le taux d'apprentissage.
— itdxer

Merci itdxer. Je pense que ce que vous avez dit doit être sur la bonne voie. J'ai essayé d'utiliser "adam" au lieu de "adadelta" et cela a résolu le problème, bien que je suppose que la réduction du taux d'apprentissage de "adadelta" aurait probablement aussi fonctionné. Si vous souhaitez rédiger une réponse complète, je l'accepterai.
— patapouf_ai

Réponses:


19

Votre taux d'apprentissage pourrait être trop élevé après la 25e époque. Ce problème est facile à identifier. Il vous suffit de définir une valeur plus petite pour votre taux d'apprentissage. Si le problème lié à votre taux d'apprentissage que NN devrait atteindre une erreur plus faible, il remontera après un certain temps. Le point principal est que le taux d'erreur sera plus bas à un moment donné.

Si vous avez observé ce comportement, vous pouvez utiliser deux solutions simples. Le premier est le plus simple. Montez une toute petite marche et entraînez-la. La seconde consiste à diminuer mon taux d'apprentissage de façon monotone. Voici une formule simple:

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

unetmtm


7
Comme l'OP utilisait Keras, une autre option pour effectuer des mises à jour du taux d'apprentissage légèrement plus sophistiquées serait d'utiliser un rappel comme ReduceLROnPlateau , qui réduit le taux d'apprentissage une fois que la perte de validation ne s'est pas améliorée pour un nombre donné d'époques.
— n1k31t4
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.