21

几天来,我正在尝试使用 LSTM 构建一个简单的正弦波序列生成,但到目前为止还没有看到任何成功。

我从时序预测例子开始

我想做的所有不同的是:

  • 使用与 LBFGS 不同的优化器(例如 RMSprob)
  • 尝试不同的信号(更多的正弦波分量)

这是我的代码的链接。“experiment.py”是主文件

我要做的是:

  • 我生成人工时间序列数据(正弦波)
  • 我将那些时间序列数据切割成小序列
  • 我的模型的输入是时间序列 0...T,输出是时间序列 1...T+1

会发生什么:

  • 训练和验证损失平稳下降
  • 测试损耗非常低
  • 但是,当我尝试从种子(来自测试数据的随机序列)开始生成任意长度的序列时,一切都出错了。输出总是平坦的

生成信号的形状

我根本不明白问题是什么。我现在正在玩这个一周,看不到任何进展。如果有任何帮助,我将不胜感激。

谢谢

4

1 回答 1

8

这是正常的行为,因为您的网络对输入的质量过于自信,并且没有学会充分依赖过去(依赖于它的内部状态),而仅仅依赖于输入。当您在生成设置中将网络应用于其自己的输出时,网络的输入并不像在获得真实输入的训练或验证案例中那样可靠。

我有两个可能的解决方案给你:

  • 第一个是最简单但不太直观的一个:在输入中添加一点高斯噪声。这将迫使网络更多地依赖其隐藏状态。

  • 第二种,是最明显的解决方案:在训练期间,以一定的概率 p 提供给它的不是真正的输入,而是它生成的输出。从 p=0 开始训练并逐渐增加它,以便它独立地学习一般越来越长的序列。这称为计划抽样,您可以在此处阅读更多信息:https ://arxiv.org/abs/1506.03099 。

于 2017-10-30T09:24:15.610 回答