RNN apprenant les ondes sinusoïdales de différentes fréquences

8

Comme échauffement avec des réseaux de neurones récurrents, j'essaie de prédire une onde sinusoïdale à partir d'une autre onde sinusoïdale d'une autre fréquence.

Mon modèle est un simple RNN, sa passe avant peut s'exprimer comme suit:

rt=σ(WjenXt+Wrecrt-1))zt=Woutrt
où est la fonction sigmoïde.σ

Lorsque l'entrée et la sortie attendues sont deux ondes sinusoïdales de même fréquence mais avec (éventuellement) un déphasage, le modèle est capable de converger correctement vers une approximation raisonnable.

Cependant, dans le cas suivant, le modèle converge vers un minimum local et prédit zéro tout le temps:

  • entrée:X=sjen(t)
  • sortie attendue:y=sjen(t2)

Voici ce que le réseau prédit lorsqu'il reçoit la séquence d'entrée complète après 10 époques de formation, en utilisant des mini-lots de taille 16, un taux d'apprentissage de 0,01, une longueur de séquence de 16 et des couches cachées de taille 32:

Prédiction de réseau après 10 époques, en utilisant des mini-lots de taille 16

Ce qui m'amène à penser que le réseau n'est pas en mesure d'apprendre à travers le temps et ne dépend que de l'entrée actuelle pour faire sa prédiction.

J'ai essayé d'ajuster le taux d'apprentissage, la longueur des séquences et la taille des couches cachées sans grand succès.

J'ai exactement le même problème avec un LSTM. Je ne veux pas croire que ces architectures sont si imparfaites, des indices sur ce que je fais mal?

J'utilise un paquetage rnn pour Torch, le code est dans un Gist .

Simon
la source

Réponses:

3

Vos données ne peuvent fondamentalement pas être apprises avec un RNN formé de cette façon. Votre contribution estpéché(t) est 2π-périodique péché(t)=péché(t+2π)

mais votre cible péché(t/2) est 4π-périodique et péché(t/2)=-péché(t+2π)

Par conséquent, dans votre jeu de données, vous aurez des paires d'entrées identiques avec des sorties opposées. En termes d'erreur quadratique moyenne, cela signifie que la solution optimale est une fonction nulle.

Ce sont deux tranches de votre tracé où vous pouvez voir des entrées identiques mais des cibles opposées entrez la description de l'image ici

ChenM
la source
1
Pour développer cette réponse, le problème est venu d'utiliser la même initialisation de rétroaction pour différentes entrées. J'ai résolu cela en faisant (au hasard) plus en avant qu'en arrière afin d'apprendre la séquence complète.
Simon