La pérdida de entrenamiento baja y sube de nuevo. ¿Que esta pasando?

26

Mi pérdida de entrenamiento baja y luego vuelve a subir. Es muy raro La pérdida de validación cruzada rastrea la pérdida de entrenamiento. Que esta pasando?

Tengo dos LSTMS apilados de la siguiente manera (en 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 entreno por 100 Epochs:

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

Entrene en 127803 muestras, valide en 31951 muestras

Y así es como se ve la pérdida: Gráfico de pérdida

patapouf_ai
fuente
2
Su aprendizaje podría ser demasiado grande después de la 25ª época. Intente configurarlo más pequeño y verifique su pérdida nuevamente
itdxer
Pero, ¿cómo podría el entrenamiento adicional aumentar la pérdida de datos de entrenamiento?
patapouf_ai
3
Lo siento, me refiero a la tasa de aprendizaje.
itdxer
Gracias itdxer Creo que lo que dijiste debe estar en el camino correcto. Intenté usar "adam" en lugar de "adadelta" y esto resolvió el problema, aunque supongo que la reducción de la tasa de aprendizaje de "adadelta" probablemente también hubiera funcionado. Si quieres escribir una respuesta completa, la aceptaré.
patapouf_ai

Respuestas:

19

Su tasa de aprendizaje podría ser demasiado grande después de la 25ª época. Este problema es fácil de identificar. Solo necesita configurar un valor menor para su tasa de aprendizaje. Si el problema relacionado con su tasa de aprendizaje que NN debería alcanzar un error menor a pesar de eso, volverá a subir después de un tiempo. El punto principal es que la tasa de error será menor en algún momento.

Si observaste este comportamiento, podrías usar dos soluciones simples. El primero es el más simple. Establecer un paso muy pequeño y entrenarlo. El segundo es disminuir su tasa de aprendizaje de forma monotónica. Aquí hay una fórmula simple:

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

Donde es su tasa de aprendizaje, es su número de iteración es un coeficiente que identifica la velocidad decreciente de la tasa de aprendizaje. Significa que su paso se minimizará en un factor de dos cuando es igual a .t m t munatmetrotmetro

itdxer
fuente
77
Como el OP estaba usando Keras, otra opción para realizar actualizaciones de tasa de aprendizaje un poco más sofisticadas sería utilizar una devolución de llamada como ReduceLROnPlateau , que reduce la tasa de aprendizaje una vez que la pérdida de validación no ha mejorado en un número determinado de épocas.
n1k31t4