在以往的时序预测中,大部分使用的是基于统计和机器学习的一些方法。然而,由于深度学习在时间序列的预测中表现并不是很好,且部分论文表述,在训练时间方面,用 Transformer、Informer 、Logtrace 等模型来做时间序列预测的效果甚至不如通过多层感知机与线性回归做加权。
基于以上背景,近年来,学术界针对时间序列的特点,设计了一系列的深度学习架构模型。本篇文章将介绍 N-BEATS、N-BEATSx、N-HiTS、FEDformer 以及 DeepTiMe 五个最新深度学习架构模型。
N-BEATS 与 N-BEATSx 是加拿大一家公司最先提出。N-HiTS 是在 N-BEATS 的基础上做了一些改进。FEDformer 是由阿里达摩院发表一个基于傅立叶变换和小波变换用于深度模型做提取特征工作的模型。DeepTiMe 是利用元学习的思想,在非常简单的神经网络上结合随机傅立叶特征即可取得很好的预测效果。
在时间序列预测当中,算法大致分为基于回归与基于分解两大类。N-BEATS 则是一种基于时间序列分解的算法。
基于学界以及工业界的应用经验,在时间序列预测中,分解算法会更加鲁棒。因此,如何将上述分解思想应用与深度学习之中,是这篇文章的一个重要出发点,另一个出发点则是解决针对深度学习在做时间序列预测时所面临的可解释性不强等问题。
下图为 N-BEATS 模型的整体网络架构。可以明显看出 N-BEATS 属于分类模型,即该模型是将神经网分成单个 Stack。如图所示, N-BEATS 模型的神经网络被分成了 M 个 Stack,每一个 Stack 两个输出值,一个向右传递值和一个向下传递值。最终,汇总每一个 Stack 向右传递的值便作为该模型的综合输出。此时,每一个 Stack 输出结果便可以看成每一个 Stack 上时间序列预测的结果。此外,每一个 Stack 由很多个 Block 组成,Block 与 Block 之间连接方式为残差连接,每个 Block 使用的是全连接神经网络。
为解决深度学习在做时间序列预测时可解释性不强的问题,该模型作者采用了两种方法。如下图所示,假设该模型只设计两个 Stack,一个 Stack 用于输出该模型的趋势,另一个 Stack 用于输出该模型的周期。在 Stack 用于输出趋势时,该 Stack 输出的值作为多样式的系数,随后用该多样式函数来拟合它的趋势。相对来说,这种方法是较为原始的。
在Stack 用于输出周期时,该 Stack 输出的值作为傅立叶级数的系数。
最后,将上述两个值加起来,即可得到整个网络的输出。反之,如果预测趋势出现问题,则有可能为第一个 Stack 出问题,如果预测周期出现问题,则有可能是第二个 Stack 出问题。
下图为 N-BEATS 模型在 M4、M3 以及其他数据集上的一些表现。可以看出, 相比与深度学习、时间序列等其他模型,N-BEATS 模型在部分指标下的结果是较为显著的。
由于 N-BEATS 只能进行单指标时间序列预测的问题,因此,N-BEATSx 在 N-BEATS 的基础上对神经网络做了部分改动以实现多指标时间序列预测。即在预测过程中,输入的值不局限于时间序列,也可以是外部变量,以此实现多对一的预测。如下图所示,N-BEATSx 模型的网络架构与 N-BEATS 基本一致,没有出现额外的变化。即 N-BEATSx 可以理解为加了外部变量的 N-BEATS。
如下图所示,左侧是未输入外部变量的 N-BEATS,残差较大。右侧是加了外部变量的 N-BEATSx,预测结果更准确。
N-HiTS 与前两个模型的网络结构一致,不同点在于在 Stack 方面,N-HiTS 是通过多重采样的方式将时间序列分成高频和低频。若时间序列如下图左上角所示,例如,可以通过每隔100个点采样一次的方式得到低频采样信息。为实现与其他时间序列对齐并各个预测结果相加,随后做插值。此外,如需获取高频采样信息,只需将采集频次提高即可。
信息采集完成后,传递至每个 Stack 中,随后进行预测。如果发现预测趋势出现问题,则可通过分析低频、高频信息的方式定位问题根源。
下图为 N-HiTS 模型预测结果对比图,可明显看出好于 Informer、Autoformer 以及 ARIMA 等模型。
下图为 N-HiTS 模型的计算复杂度与空间复杂度。可看出基于 N-HiTS、N-BEATS 以及 N-BEATSx 的时间复杂度要远远低于 Transformer 等模型的复杂度。且在空间复杂度上面, N-HiTS 模型甚至比N-BEATS 模型还要低一些。
FEDformer 模型主要采用了 Transformer 模型的结构,在此基础上提出了两个创新点。第一个创新点是频率增强捕捉机制,第二个创新点是基于频率增强的注意力机制。频率增强捕捉机制与频率增强的注意力机制有傅立叶变换和小波变换两个版本。
下图为傅立叶变换实现的版本。首先将原始时域上的输入序列投影到频域;随后再在频域上进行随机采样;其次进行频域补全,频域补全过程与频域采样相对,为了使得信号能够还原回原始的长度,需要对频域采样未被采到的频率点补零;最后进行投影回时域,因为上述补全操作,投影回频域的信号和之前的输入信号维度完全一致。
DeepTiMe 模型利用了元学习模型的思想,是一个基于 Time-Index 的模型。下图为 DeepTiMe 模型网络架构,DeepTiMe 也利用了随机傅立叶特征。首先传递一个 Time-Index 告知今天是几号,随后预测出yt。上述便是 DeepTiMe 模型网络整体输入输出流程。
下图为未使用语言模型和使用语言学习(DeepTiMe)的对比图,可看出,使用 DeepTiMe 模型的预测效果明显高于未使用 DeepTiMe 模型的预测效果。
下图为使用 DeepTiMe 模型预测线性、三次多项式等模型的预测结果,可以看出 DeepTiMe 模型在该方面的预测结果也较为精准。
下图为 DeepTiMe 模型与其他模型预测结果对比。在多指标预测当面,DeepTiMe 模型好于 N-HiTS 模型与 FEDformer 模型以及其他 Former 类模型。在单指标预测中,N-HiTS 模型则好于 DeepTiMe 模型。
云智慧已开源数据可视化编排平台 FlyFish 。通过配置数据模型为用户提供上百种可视化图形组件,零编码即可实现符合自己业务需求的炫酷可视化大屏。 同时,飞鱼也提供了灵活的拓展能力,支持组件开发、自定义函数与全局事件等配置, 面向复杂需求场景能够保证高效开发与交付。
如果喜欢我们的项目,请不要忘记点击下方代码仓库地址,在 GitHub / Gitee 仓库上点个 Star,我们需要您的鼓励与支持。此外,即刻参与 FlyFish 项目贡献成为 FlyFish Contributor 的同时更有万元现金等你来拿。
GitHub 地址: https://github.com/CloudWise-OpenSource/FlyFish
Gitee 地址: https://gitee.com/CloudWise/fly-fish