Mi red neuronal recurrente (LSTM, resp. GRU) se comporta de una manera que no puedo explicar. El entrenamiento comienza y se entrena bien (los resultados se ven bastante bien) cuando de repente cae la precisión (y la pérdida aumenta rápidamente) , tanto las métricas de entrenamiento como de prueba. A veces, la red simplemente se vuelve loca y devuelve salidas aleatorias y, a veces (como en el último de los tres ejemplos dados) comienza a devolver la misma salida a todas las entradas .
¿Tienes alguna explicación para este comportamiento ? Cualquier opinión es bienvenida. Por favor, vea la descripción de la tarea y las figuras a continuación.
La tarea: a partir de una palabra predecir su vector word2vec
La entrada: Tenemos un modelo propio de word2vec (normalizado) y alimentamos la red con una palabra (letra por letra). Rellenamos las palabras (ver el ejemplo a continuación).
Ejemplo: tenemos una palabra fútbol y queremos predecir su vector word2vec que tiene 100 dimensiones de ancho. Entonces la entrada es $football$$$$$$$$$$
.
Tres ejemplos del comportamiento:
Capa simple LSTM
model = Sequential([
LSTM(1024, input_shape=encoder.shape, return_sequences=False),
Dense(w2v_size, activation="linear")
])
model.compile(optimizer='adam', loss="mse", metrics=["accuracy"])
GRU de una sola capa
model = Sequential([
GRU(1024, input_shape=encoder.shape, return_sequences=False),
Dense(w2v_size, activation="linear")
])
model.compile(optimizer='adam', loss="mse", metrics=["accuracy"])
Doble capa LSTM
model = Sequential([
LSTM(512, input_shape=encoder.shape, return_sequences=True),
TimeDistributed(Dense(512, activation="sigmoid")),
LSTM(512, return_sequences=False),
Dense(256, activation="tanh"),
Dense(w2v_size, activation="linear")
])
model.compile(optimizer='adam', loss="mse", metrics=["accuracy"])
También hemos experimentado este tipo de comportamiento en otro proyecto antes que utilizaba una arquitectura similar pero su objetivo y datos eran diferentes. Por lo tanto, la razón no debe ocultarse en los datos o en el objetivo particular, sino más bien en la arquitectura.
nan
.
nan
parámetro no resultaría en una pérdida no nan. Supongo que sus gradientes explotan, me sucedió algo similar en redes normalizadas sin lotes.
nan
apareció en uno de los cálculos y luego se convirtió en otro valor que causó que la red se volviera loca. Pero es solo una suposición salvaje. Gracias por su opinión.