前言

最近很多订阅了《深度学习时间序列预测案例》的用户私信我,向我咨询为什么我的模型预测出来是一条直线或者是一条波浪线,几乎没有任何趋势,为了统一进行解答,特写本篇文章进行说明。

对于时间序列数据预测结果为一条直线这在时序任务中是很常见的,对于出现这种问题的原因有很多,本篇举例一些常见的影响因素。

  • 有些伙伴私信我,说这有可能是模型过大,内部一些参数过多,这种可以尝试简单一点的模型试一下
  • 模型训练过程中一些神经元死掉了,或者是梯度爆炸或者消失的问题,这种情况尝试一下使用不同的激活函数,建议使用各种的 RELU 变体函数
  • 学习率过大或者过小,可以尝试调整不同的学习率,或者使用学习率自定义衰减,模型训练不同阶段使用不同的学习率,靠近鞍点调小学习率
  • 适当增加 dropout ,减少模型过拟合
  • 时间片 timestep 设置的过大,容易导致模型预测结果波动不大
  • 数据集过小,这会导致模型学习不出时间序列的变化趋势
  • 适当减小一下 batch_size
  • 可以在不同的模块(层)之间添加 normalization 归一化
  • 模型过小,拟合时序的变化趋势能力较差,尝试大模型
  • 还有一些就是你模型内部模块的一些参数问题,例如你的模型中使用了LSTM,可能LSTM的层数和隐层维度都会有影响,这些参数问题是不太容易发现的
  • 使用的数据集的问题,可能数据中的时序信息不明显,使用模型很难拟合捕捉,尝试换一个时序效果好的数据集,因为不是任何数据集都会训练好的

以上是一些新手遇到较为常见的原因,如果遇到该问题可以尝试找找以上的原因调整一下自己的项目,这里说明一下你的预测结果为一条直线的原因可能不是由上述原因导致的,所以上面原因仅供参考调试,这个问题不太好定位分析,因为导致原因太多,需要小伙伴多尝试多分析。

上述原因可能是一些较为经典的原因,其实原因还有很多(类似于最后一个原因,与你使用的模块的内部参数有关,这类原因就太多了,需要经验来定位),对于新手小白来说了解上述几点原因即可。