RNN lernt Sinuswellen mit unterschiedlichen Frequenzen


8

Zum Aufwärmen mit wiederkehrenden neuronalen Netzen versuche ich, eine Sinuswelle von einer anderen Sinuswelle einer anderen Frequenz vorherzusagen.

Mein Modell ist eine einfache RNN, deren Vorwärtsdurchlauf wie folgt ausgedrückt werden kann:

wobeiσdie Sigmoïd-Funktion ist.

rt=σ(Winxt+Wrecrt1))zt=Woutrt
σ

Wenn sowohl der Eingang als auch der erwartete Ausgang zwei Sinuswellen derselben Frequenz sind, jedoch mit (möglicherweise) einer Phasenverschiebung, kann das Modell ordnungsgemäß zu einer vernünftigen Näherung konvergieren .

Im folgenden Fall konvergiert das Modell jedoch zu einem lokalen Minimum und sagt die ganze Zeit Null voraus:

  • Eingabe: x=sin(t)
  • erwartete Ausgabe: y=sin(t2)

Das Netzwerk sagt Folgendes voraus, wenn nach 10 Trainingsepochen die vollständige Eingabesequenz mit Mini-Batches der Größe 16, einer Lernrate von 0,01, einer Sequenzlänge von 16 und versteckten Schichten der Größe 32 angegeben wird:

Netzwerkvorhersage nach 10 Epochen mit Mini-Batches der Größe 16

Was mich zu der Annahme führt, dass das Netzwerk nicht in der Lage ist, durch die Zeit zu lernen, und sich nur auf die aktuellen Eingaben stützt, um seine Vorhersage zu treffen.

Ich habe versucht, die Lernrate, die Sequenzlänge und die Größe der verborgenen Ebenen ohne großen Erfolg abzustimmen.

Ich habe genau das gleiche Problem mit einem LSTM. Ich möchte nicht glauben, dass diese Architekturen so fehlerhaft sind, irgendwelche Hinweise darauf, was ich falsch mache?

Ich verwende ein RNN- Paket für Torch, der Code befindet sich in einem Gist .

Antworten:


3

sin(t)2πsin(t)=sin(t+2π)

sin(t/2)4πsin(t/2)=sin(t+2π)

Daher haben Sie in Ihrem Datensatz Paare identischer Eingaben mit entgegengesetzten Ausgaben. In Bezug auf den mittleren quadratischen Fehler bedeutet dies, dass die optimale Lösung eine Nullfunktion ist.

Dies sind zwei Abschnitte Ihres Diagramms, in denen Sie identische Eingaben, aber entgegengesetzte Ziele sehen können Geben Sie hier die Bildbeschreibung ein


1
Um diese Antwort näher zu erläutern, bestand das Problem darin, dass dieselbe Feedback-Initialisierung für verschiedene Eingaben verwendet wurde. Ich habe dies gelöst, indem ich (zufällig) mehr vorwärts als rückwärts gemacht habe, um die vollständige Sequenz zu lernen.
Simon
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.