異なる周波数の正弦波を学習するRNN


8

再帰型ニューラルネットワークのウォームアップとして、別の周波数の別の正弦波から正弦波を予測しようとしています。

私のモデルは単純なRNNであり、そのフォワードパスは次のように表すことができます。

rt=σWバツt+Wrecrt1zt=Woあなたtrt
どこ σ sigmoïd関数です。

入力と期待される出力の両方が同じ周波数の2つの正弦波であるが(おそらく)位相シフトがある場合、モデルは適切な近似に適切に収束できます

ただし、次の場合、モデルは極小値に収束し、常にゼロを予測します。

  • 入力: バツ=st
  • 予想される出力: y=st2

サイズ16のミニバッチ、学習率0.01、シーケンス長16、サイズ32の非表示レイヤーを使用して、10エポックのトレーニング後に完全な入力シーケンスが与えられたときにネットワークが予測するのは、次のとおりです。

サイズ16のミニバッチを使用した、10エポック後のネットワーク予測

そのため、ネットワークは時間をかけて学習することができず、現在の入力にのみ依存して予測を行うと思います。

学習率、シーケンスの長さ、隠しレイヤーのサイズを調整しようとしましたが、あまりうまくいきませんでした。

LSTMでもまったく同じ問題が発生します。これらのアーキテクチャに欠陥があるとは思わないでください。何が間違っているのかについてのヒントはありますか?

Torchにはrnnパッケージを使用していますが、コードはGistにあります。

回答:


3

そのようにトレーニングされたRNNでは、基本的にデータを学習できません。あなたの入力はt です 2π-定期的 t=t+2π

しかしあなたの目標 t/2 です 4π-定期的および t/2=t+2π

したがって、データセットには、反対の出力を持つ同一の入力のペアがあります。平均二乗誤差の観点から、これは最適解がnull関数であることを意味します。

これらはプロットの2つのスライスであり、同じ入力が反対のターゲットを見ることができます ここに画像の説明を入力してください


1
この回答を詳しく説明するために、問題は、異なる入力に対して同じフィードバック初期化を使用することで発生しました。これを解決するには、シーケンス全体を学習するために、(ランダムに)逆方向よりも順方向に実行します。
Simon
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.