【时间序列】只用全连接,也能搭建SOTA时间序列预测模型?

时间序列预测的主流模型结构一直以来被RNN、CNN、Transformer三大模型主体主导。而Nbeats的出现,让纯全连接的模型结构在时间序列预测问题上也能取得非常好的效果。这篇文章梳理了Nbeats系列工作,从最基础的Nbeats版本,到可以引入外部变量的Nbeats版本,再到能够处理时空预测的Nbeats版本。

1

基础版本Nbeats

论文题目:N-BEATS: NEURAL BASIS EXPANSION ANALYSIS FOR INTERPRETABLE TIME SERIES FORECASTING

下载地址:https://arxiv.org/pdf/1905.10437.pdf

Nbeats是Element AI发表于ICLR 2020的一篇工作,目前引用量200多,在时间序列预测这个领域还是比较有影响力的。Nbeats开创了一个全新的时间序列预测backbone,仅通过全连接实现时间序列预测。Nbeats的核心思路是,通过多层全连接进行时间序列分解,每层拟合时间序列部分信息(之前层拟合的残差),有点类似于GBDT的啥思路。

Nbeats的具体模型结构如下图所示。整个模型包括多个stack,每个stack包括多个block,每个block是Nbeats的最基础结构模块,由多个全连接层组成。每个block包含两个主要部分,第一个部分将输入的时间序列映射成expansion coefficients,第二部分将expansion coefficients映射回时间序列。

bce53933fcb2efa49e63f6d2fa11ff1d.png

什么是expansion coefficients呢?expansion coefficients可以理解为存储了时间序列内在的信息形成的一个低维向量。在模型实现上,其实就是一个向量映射过程:将输入的时间序列(维度为length)映射成低维向量(维度为dim),第二部分再将其映射回时间序列(长度为length)。这个步骤也类似于AutoEncoder,将时间序列映射成一个低维向量保存核心信息,再还原回来。假设每个block模块的输入为outside_default.png,将其映射为expansion coefficients的过程可以表示为

8c7720cd50b352a4bc13a749329086b2.png

每个模块会生成两组expansion coefficients,一组用来预测未来(forecast),另一组用来预测过去(backcast)。这个过程可以表示为如下公式:

52ad7ce5b1c639329967b7dc540e09c0.png

最终,每个block对输入的序列进行处理后,输出一个预测未来的序列,以及一个预测过去的序列。每个block的输入,是上一层block的输入减去上一层block的输出。通过这种方式,模型每层需要处理的是之前层无法正确拟合的残差,也起到了一个将时间序列进行逐层分解,每层预测时间序列一部分的作用。最终的预测结果,是各个block预测结果的加和。

为了能让模型的分解具有可解释性,文中也提出了在各个层引入一些先验知识,强制让某些层学习某种类型的时间序列特性,实现可解释的时间序列分解。实现的方法是通过约束expansion coefficients到输出序列的函数形式来实现。例如想让某层block主要预测时间序列的季节性,就可以用下面的公式强制输出是季节性的:

1c0ac0b21959899ee43e690e231fc7d7.png

下图是作者用这种思路约束不同层学习不同信息的可视化结果,有的层学习了趋势性,有的层学习了周期性。

da913ee18967c68ce1abc65adf58f5b8.png

2

引入外部变量的Nbeats

论文题目:Neural basis expansion analysis with exogenous variables:Forecasting electricity prices with NBEATSx

下载地址:https://arxiv.org/pdf/1905.10437.pdf

第一版本的Nbeats,输入只能是单一的时间序列,无法输入额外的特征。而在时间序列预测问题中,诸如日期信息、节日信息、属性信息等外部特征也是非常重要的。因此基于初版Nbeats,该团队又提出了可以引入外部特征的Nbeatsx,和初版Nbeats的主要区别是引入了外部特征X。

259482e8f46996dcdf3354c09230e484.png

模型的主体结构和Nbeats基本一致,每个block除了输出序列外,还会输入外部特征,二者一起通过全连接层得到隐状态,再基于隐状态生成expansion coefficients。

27382ef55b73831b26dc0c9dffd6fb0b.png

此外,文中还提出了另一种引入time-dependent特征的方法:采用一个TCN(时间序列卷积模块)作为encodeer,对外部特征进行编码,将该编码作为生成预测结果的因素:

56dc1bbd6c80eb6d515d614f8f24a7a0.png

3

用于时空预测的Nbeats

论文题目:GAGA: Fully Connected Gated Graph Architecture for Spatio-Temporal Traffic Forecasting

下载地址:https://arxiv.org/pdf/2007.15531.pdf

该团队提出的第三个版本的Nbeats将Nbeats扩展到了时空预测领域,能够处理存在空间关系的多个时间序列的建模。模型总共分为Graph Edge Weight、Time Gate、Graph Gate,以及和Nbeats类似的多block、stack嵌套的主体全连接结构,模型整体结构如下图所示。

405ffd7a77c25dfdc076af68c19d5d3a.png

Graph Edge Weight:将每个节点都表示成一个embeddiing,对于两个节点的关系,使用这两个节点对应的embedding内积表示,最终可以用一个矩阵W表示整个空间上两两节点之间的关系:

d59757b6c87c8d966c6b70c80094422f.png

Time Gate Block(紫色部分):Time Gate模块主要用来对时间特征进行编码。这里会将时间特征和每个节点的embedding进行拼接后,通过全连接生成时间特征相关的表示。这个时间特征信息会通过乘法、除法的方式,实现将时间信息从原始序列中剥离(对应除法)再融合(对应乘法)的目的。Time Gate的输出对应两个Linear映射结果,一个用于从历史序列中剥离时间因素,一个用于最终的还原,因为历史序列和未来序列处于不同时间窗口,因此这里采用两套参数分别建模时间信息。Time Gate这种将时间因素从序列中剥离的方法,让模型能够更专注于非时间因素的纯序列建模,降低模型拟合难度。

Graph Gate Block(绿色部分):Graph Gate的目的是让每个节点都能融合整个空间中其他节点的信息。核心思路是,对于每一个节点,利用它和其他节点的Graph Edge Weight融合其他节点的时间序列信息。Graph Gate模块输出一个矩阵G,矩阵中每个元素的计算过程如下,相当于用节点i和节点j之间的距离对节点j的时间序列的每个时刻k加权:

5c9e423f50658353b36769b72278e901.png

由于使用了节点i的最大值进行减法和除法的处理后再过Relu激活函数,对于不相关的节点对,Relu激活函数可以起到过滤的作用,让这两个节点的输出结果为0。

上面生成的矩阵G、每个节点的embedding以及每个节点的序列,最终作为后续Nbeats模型的输入。Time Gate部分对输入进行信息分离,再在最终的产出结果上进行时间信息融合。

4

总结

本文介绍了Nbeats的序列模型,包括最基础的Nbeats模型,以及在此基础上衍生出来的引入外部特征的Nbeats(Nbeatsx)和用于时空预测的Nbeats(GAGA)。Nbeats相比其他时间序列预测模型,独创了一种全部为全连接的backbone,核心思路是通过序列信息分解、分而治之的方法,实现准确的时间序列预测。

推荐阅读:

我的2022届互联网校招分享

我的2021总结

浅谈算法岗和开发岗的区别

互联网校招研发薪资汇总

2022届互联网求职现状,金9银10快变成铜9铁10!!

公众号:AI蜗牛车

保持谦逊、保持自律、保持进步

e81062c90dea3837de8d6b179edfa935.png

发送【蜗牛】获取一份《手把手AI项目》(AI蜗牛车著)

发送【1222】获取一份不错的leetcode刷题笔记

发送【AI四大名著】获取四本经典AI电子书

猜你喜欢

转载自blog.csdn.net/qq_33431368/article/details/125307799