社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

12篇顶会论文,深度学习时间序列预测经典方案汇总

AI科技评论 • 3 年前 • 415 次点击  

早期的时间序列预测主要模型是诸如ARIMA这样的单序列线性模型。这种模型对每个序列分别进行拟合。在ARIMA的基础上,又提出了引入非线性、引入外部特征等的优化。然而,ARIMA类模型在处理大规模时间序列时效率较低,并且由于每个序列分别独立拟合,无法共享不同序列存在的相似规律。深度学习模型在NLP、CV等领域取得了成功应用后,也被逐渐引入到解决时间序列预测问题中。通过不同序列共享一个深度学习模型,让模型能从多个序列中学到知识,并且提升了在大规模数据上的求解效率。

本文介绍了深度学习模型在时间序列预测问题中的应用,主要包括RNN、CNN、Transformer、Nbeats等4种类型模型,以及12篇相关顶会论文,全面掌握深度学习时间序列预测方法。

RNN时序预测模型

DeepAR: Probabilistic Forecasting with Autoregressive Recurrent Networks(2017)首先采用深度学习模型解决时间序列预测问题。该方法采用经典的RNN模型进行时间序列预测,在训练阶段,每个时刻传入上一时刻的真实值、外部特征,经过RNN单元后,预测下一个时刻的值。在预测阶段,将模型在上一个时刻的预测值作为输入,替代训练过程中上一个时刻真实值的输入。模型结构如下图。
由于预测阶段和训练阶段,模型在下一个时刻输入的值一个是预测采样的,一个是真实的,会导致训练和预测阶段不一致的问题,NLP中有一些方法缓解该问题,但是不能从根本解决这个问题。
Deep State Space Models for Time Series Forecasting(NIPS 2018)提出了以RNN为基础的Deep State Space模型。该模型建立在state space思路基础上,认为当前时刻的观测值只和当前状态有关,而当前状态只和上一个时刻的状态有关。因此整个预估模型分为两个部分:连续两个隐状态的关系,以及从当前时刻隐状态到当前时刻预估结果的关系。在模型实现上,相比DeepAR,模型在训练或预测阶段,每个时刻都不需要输入上一个时刻的真实值或预测值了,完全由隐状态建立连续两个时刻的联系。这样解决了DeepAR中训练和预测不一致的问题。
DeepAR和Deep State Space Model都是one-horizon forecast model,即每次只能预测未来一个时刻的值。
A Multi-Horizon Quantile Recurrent Forecaster(NIPS 2017)提出一种multi-horizon forecast model MQRNN,同时预测未来多个时间步的值。MQRNN采用的是Encoder-Decoder结构,在NLP中经典的Encoder-Deocder结构基础上进行了优化。下图左侧为基础的Encoder-Decoder结构,右侧为MQRNN结构。MQRNN将Decoder部分由RNN改成多个全连接。MQRNN直接将Encoder最后一个时刻的context,以及未来的所有feature拼接到一起,通过一个全连接,生成每个时刻的context和一个全局整体的context。即该全连接输出为T个时刻每个时刻的context向量,以及一个额外的全局向量。
除了上述的模型结构外,一些在NLP中常用的如LSTM+Attention的模型结构也可以用于时间序列预测任务中,由于NLP和时间序列都是序列类型的数据,很多经典模型结构可以复用,这里不再赘述NLP中的经典RNN模型。

CNN时序预测模型

CNN被广泛用于CV和NLP领域,在时间序列预测领域,An Empirical Evaluation of Generic Convolutional and Recurrent Networks for Sequence Modeling(2019)采用空洞卷积结合因果卷积的网络结构,该结构也称为基于CNN的时间序列预估模型的基础结构。因果卷积表示在t时刻的输出,是由t时刻及t时刻之前的输入进行卷积得到的(而一般的卷积是t时刻前后一个窗口内的输入进行卷积)。这样,t时刻的输出避免了对t时刻之后信息的依赖而导致的数据泄漏问题。
空洞卷积解决了原来CNN只能看到历史线性大小窗口内数据的问题,当历史序列较长时,普通的卷积需要增大卷积尺寸才能看到更久远的历史信息,导致训练效率较低。空洞卷积跳跃对历史序列进行卷积,例如当空洞卷积尺寸为2时,t时刻会根据t、t-2、t-4等时刻的输入进行卷积。通过多层卷积的堆叠,层数越多对应的空洞尺寸也越大,这样实现了在时间复杂度不变的情况下引入更长历史信息,提升预测效果。

Transformer时序预测模型

在上文介绍的基于对抗学习DA方法的基础上,学术界针对该方法的不同问题提出了不同的优化方法,主要包括生成任务相关的一致性表示、学习Domain-specific表示辅助Domain-invariant表示两个方面。
Transformer模型首先在NLP领域中取得显著效果,由于NLP和时间序列都为序列数据,因此Transformer也被逐渐应用到时间序列预测任务中。Deep Transformer Models for Time Series Forecasting: The Influenza Prevalence Case(2020)采用了和GPT相似的Transformer结构尝试了时间序列预测任务,取得较好效果。
然而,在时间序列预测任务中,样本点的序列位置关系非常重要,Transformer虽然通过Attention机制实现了超长周期的特征对齐,位置信息只能依赖于position emedding,影响了Transformer在时间序列预测中的应用。针对这个问题,业内主要采用CNN+Transformer或LSTM+Transformer相结合的方式,使序列模型的序列建模能力和Attention模型的超长周期信息提取能力互补。
Enhancing the Locality and Breaking the Memory Bottleneck of Transformer on Time Series Forecasting(NIPS 2019)提出使用CNN和Transformer结合的方法。模型结构如下图所示,CNN模型增强了上下文信息的提取能力,左图中CNN尺寸为1,即无卷积的情况下,每个时刻的特征单独进入Transformer,当两个时刻的特征相似时,由于上下文环境(即前后时刻的值)不同,因此这两个时刻表达的信息不同,而左侧模型无法提取这个信息。右侧模型使用了尺寸为3的卷积,刻画了上下文信息不同的时刻不同的信息,能够更好发掘具有相似规律的序列片段。
Temporal Fusion Transformers for Interpretable Multi-horizon Time Series Forecasting(2019)提出了LSTM和Transformer结合的方法。模型体层采用LSTM结构,利用LSTM的序列建模能力,先对输入序列进行预处理,这样不同时刻生成了考虑上下文和时序信息的表示。接下来底层表示输入到上层Transformer中,利用Attention的超长周期信息提取能力弥补序列模型信息遗忘的问题,模型结构如下图:
Informer: Beyond Efficient Transformer for Long Sequence Time-Series Forecasting(AAAI 2020)提出了一种针对长周期预估的Transformer的升级版。为了让Transformer在长周期预估中提升运行效率,提出了ProbSparse self-attention,通过让key只和关键query形成稀疏的attention减少大量运算量。

Nbeats

N-BEATS: NEURAL BASIS EXPANSION ANALYSIS FOR INTERPRETABLE TIME SERIES FORECASTING(ICLR 2020)提出Nbeats模型,该模型内部结构中没有RNN、CNN或Attention,网络全部为全连接组成,在一些开源数据集上取得较好效果。
Nbeats的核心思路是,多个Block串联,每个Block学习序列的一部分信息,在下一个Block的输入会去掉之前Block已经学到的信息,只拟合之前Block未学到的信息,类似于GBDT的思路。最后再把各个Block的预估结果加和得到最终预估结果。
模型整体结构如下图,主要包含两个模块。第一个模块用于输入输入,通过多层全连接+Relu生成Forecast和Backcast的basis,公式形式可以表示为:
模型的第二个模块用于将Forecast和Backcast的basis转换成前向和过去的预测结果:
其中,Forecast的basis用于进行未来的预测,Backcast的Basis用于进行过去的预测。Backcast部分相当于当前Block对输入序列的分析,下一层的输入会减去当前Block中Backcast的输出,相当于从输入中去掉当前Block已经能较好预测的部分,让后续Block只关注那些前面层无法预测的部分。
整个Nbeats模型都是全连接这种简单结构,通过多层Block串联的形式构造而成,类似于GBDT中多个弱分类器集成的思路。Meta-learning framework with applications to zero-shot time-series forecasting(AAAI 2020)从meta-learning的视角揭示了Nbeats为什么有效。
最初版本的Nbeats无法输入外部特征,后续的论文Neural basis expansion analysis with exogenous variables: Forecasting electricity prices with NBEATSx(2022)在初版Nbeats基础上增加了引入外部特征的能力。在FC-GAGA: Fully Connected Gated Graph Architecture for Spatio-Temporal Traffic Forecasting(AAAI 2021)中,又提出了Nbeats结合图学习的模型,让Nbeats能够应用于交通预测等这种存在Spatial-Temporal关系的任务。感兴趣的同学可以进一步深入阅读。

总结

本文介绍了4大类时间序列预测任务的模型结构,包括RNN、CNN、Transformer和Nbeats,简要介绍了4大类时间序列预测深度学习模型的近年来代表工作。
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/131143
 
415 次点击