Mon réseau neuronal récurrent (LSTM, resp. GRU) se comporte d'une manière que je ne peux pas expliquer. L'entraînement commence et il s'entraîne bien (les résultats semblent assez bons) lorsque la précision diminue soudainement (et que la perte augmente rapidement) - à la fois les mesures d'entraînement et de test. Parfois, le net devient fou et renvoie des sorties aléatoires et parfois (comme dans le dernier des trois exemples donnés), il commence à renvoyer la même sortie à toutes les entrées .
Avez-vous une explication à ce comportement ? Toute opinion est la bienvenue. Veuillez consulter la description de la tâche et les figures ci-dessous.
La tâche: à partir d'un mot prédire son vecteur word2vec
L'entrée: Nous avons un propre modèle word2vec (normalisé) et nous alimentons le réseau avec un mot (lettre par lettre). Nous remplissons les mots (voir l'exemple ci-dessous).
Exemple: Nous avons un mot football et nous voulons prédire son vecteur word2vec qui fait 100 dimensions de large. Ensuite, l'entrée est $football$$$$$$$$$$
.
Trois exemples de comportement:
LSTM monocouche
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 monocouche
model = Sequential([
GRU(1024, input_shape=encoder.shape, return_sequences=False),
Dense(w2v_size, activation="linear")
])
model.compile(optimizer='adam', loss="mse", metrics=["accuracy"])
LSTM double couche
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"])
Nous avons également expérimenté ce type de comportement dans un autre projet auparavant qui utilisait une architecture similaire mais son objectif et ses données étaient différents. Ainsi, la raison ne doit pas être cachée dans les données ou dans l'objectif particulier mais plutôt dans l'architecture.
nan
.
nan
Le paramètre n'entraînerait pas de perte non nanométrique. Je suppose que vos gradients explosent, une chose similaire m'est arrivée dans des réseaux normalisés non batch.
nan
apparaissait dans l'un des calculs, puis elle était par défaut dans une autre valeur qui a rendu le réseau fou. Mais c'est juste une supposition folle. Merci pour votre avis.