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.