RNN学习不同频率的正弦波

机器算法验证 回归 时间序列 神经网络 深度学习 循环神经网络
2022-03-28 04:55:29

作为循环神经网络的热身,我试图从另一个频率的另一个正弦波预测一个正弦波。

我的模型是一个简单的RNN,它的前向传递可以表示为:

rt=σ(Winxt+Wrecrt1))zt=Woutrt
在哪里σ是 sigmoïd 函数。

当输入输入和预期输出都是相同频率但具有(可能)相移的两个正弦波时,模型能够正确收敛到合理的近似值。

但是,在以下情况下,模型收敛到局部最小值并始终预测为零:

  • 输入:x=sin(t)
  • 预期输出:y=sin(t2)

以下是网络在 10 轮训练后给定完整输入序列时的预测结果,使用大小为 16 的小批量,学习率为 0.01,序列长度为 16,隐藏层大小为 32:

10 个 epoch 后的网络预测,使用大小为 16 的 mini-batch

这让我认为网络无法通过时间学习,只能依靠当前的输入来进行预测。

我尝试调整学习率、序列长度和隐藏层大小,但没有取得多大成功。

我对 LSTM 有完全相同的问题。我不想相信这些架构有那么大的缺陷,有什么暗示我做错了什么吗?

我正在为 Torch 使用rnn包,代码在 Gist中。

1个回答

您的数据基本上无法通过以这种方式训练的 RNN 来学习。你的输入是sin(t)2π-周期性的sin(t)=sin(t+2π)

但你的目标sin(t/2)4π-周期性和sin(t/2)=sin(t+2π)

因此,在您的数据集中,您将拥有一对具有相反输出的相同输入。就均方误差而言,这意味着最优解是一个空函数。

这些是您的绘图的两个切片,您可以在其中看到相同的输入但相反的目标 在此处输入图像描述