时序预测:从两篇高影响力的论文谈起

2021-07-28 17:47:33 浏览数 (1)

未来可以预测吗?

本文从两篇高影响力的时序预测文章谈起,其中一篇是18年放在arXiv上的文章,文中总结性地提出了时序卷积网络(TCN: Temporal Convolutional Network),短短两三年引用数已经破千,TCN作为一种基准方法被广泛应用于各种时序预测问题。

另外一篇发表在今年人工智能领域的顶会AAAI上,在9000多篇投稿中脱颖而出获得最佳论文奖(三篇之一),GitHub上线短短几个月星标就已经破千。

这两篇文章都聚焦在时间序列预测这个非常有意义的“水晶球”问题:给定过去一段时间对某些变量的观测值,提取数据特征用以预测未来事件。该问题的应用不胜枚举,比如说对天气、自然灾害、能源消耗、交通流量的预测;股票、期货市场、比特币的涨跌等等。对未来的预测直接影响到我们现在所能采取的行动决策,预测的准确程度也因此决定了我们当前决策的得失,意义重大!拿最近席卷全球的Covid-19疫情来说,如果能对疫情传播进行准确的时序建模与预测,应对措施就能做的更合理,减少人员的伤亡,降低对经济的影响。

然而,问题意义重大并不代表在科研上还有得做,意义大的问题做的人也多,很可能已经做到头,也因此就没什么科研价值了。咱们之前提到过,在决定动手之前要先考虑问题的基线和极限,想要知道基线在哪儿就需要调研literature,搞清楚state-of-the-art做到什么程度了,想要知道极限就要考虑可能达到的最好结果是什么,如果两者之间有足够的差距,那这个问题就还值得去做,下面咱们就来检验一下。

时序预测问题的基线和极限

时序预测这个领域的工作与很多其他领域类似,我们可以按“深度学习”方法的引入作为分界线。在此之前的方法是传统的时序建模方法,比如移动平均、自回归、以及结合差分的ARIMA模型等,有着悠久的历史以及基于理论基础的可解释性。但是,这类方法一般要求时间序列是平稳的,而且对于多变量协同预测要做很多人工处理,因此主要适用于小规模单变量的时序预测问题。在当前的大数据应用场景下,用深度神经网络粗暴的自动提取特征,虽然丢失了可解释性,但性能远超传统方法。

使用神经网络对于序列信息进行建模的经典方法是循环神经网络(RNN: Recurrent Neural Network)及其各种变种(LSTM: Long Short-Term Memory、GRU: Gated Recurrent Unit)。然而,RNN的训练难以并行化,而且对于长序列建模面临梯度消失和梯度爆炸等问题。2017年基于自注意力机制的Transformer架构横空出世,Google展示了它在机器翻译领域的绝佳性能。自此以后,无数文章前仆后继把Transformer用于各种序列信息建模,把所有之前用到RNN的问题都洗了几遍,把SOTA性能刷的也是死去活来。这一两年来,Transformer也开始对CNN相关问题下手,刷榜还在如火如荼地进行中,这是题外话,这里就不展开说了。

Tranformer确实在序列建模方面性能出色,但也有个重大弱点,那就是复杂度非常高,对计算和存储资源的消耗极大,速度也比较慢。因此近年来有很多工作尝试在对性能影响不大的前提下降低复杂度,本文提到的Informer就是这样一个工作。具体而言,Informer提出一种新的自注意力机制ProbSparse以及自注意力蒸馏模块,将计算复杂度和存储需求从O(L2)降到O(LlogL),并将其应用于长时序列的预测,这里L是预测时考虑的历史信息长度。

由于这篇文章report的结果是state-of-the-art,而且在AAAI上斩获大奖,自然是要作为目前研究的基线来看待。文章作者开源了他们的代码并且持续有更新,因此很容易获取基线结果。对于时序预测问题,我们可以把Ground Truth看做是终极的hard极限,先来看看二者之间的差距。

Informer文中给出的结果主要是均方根误差以及平均绝对误差等根据训练集的均值和方差做归一化后的结果,从数字本身很难感知误差到底有多少。因此,我们做了些可视化来观察具体的预测质量。我们可视化的是ETT-H1这个数据集,共有7个变量,采用的Informer模型是用过去的96小时数据来预测未来48小时数据的模型,我们先统计了在不同变量下的最小误差、最大误差以及平均值,从最小误差的序列开始可视化。

然而可视化的结果有些让我们目瞪口呆,因为即使是误差最小的序列,其预测值与真值也相距甚远!因此不得不强迫学生仔细检查多遍,应该是没有什么错误。

我们挑了两段Informer模型表现还算可以的测试序列进行可视化,如下图所示。左图显示的是测试集第1389个序列的第1个变量的结果;右图则是测试集第441个序列上第5个变量的结果(此序列是2832个测试序列中Informer均方根误差最低的结果)。

对于序列信息建模除了使用RNN或者Transformer,也可以使用卷积神经网络CNN,这里的代表性工作就是前面提到的TCN。由于Informer这篇文章并没有跟TCN的结果做比较,我们用TCN模型跑了同样的数据,得到的结果如下图所示。

可以看到,事实上TCN的结果比Informer要好不少,但也跟真值有着显著差距。显然,目前的基线结果跟hard极限有着巨大的gap,那是不是因为问题本身可达到的极限结果就很低呢?

这当然是有可能的,假设某个时序信号是单纯的噪声,那么,我们不可能学习到可以用于预测的特征。此外,对于极其复杂的时序数据比如说高频交易,由于影响的因素过多,问题过于复杂,没有任何公开的方法能够通过时序预测获取稳定的收益,闷声发大财的有没有就不清楚了 …

遗憾的是,目前还没有什么理论支撑我们来计算可能达到的最好时序预测结果。与此同时,从肉眼观测来看,Informer文章使用的这几个数据集确实相对很多其他时序预测数据集要复杂不少,但我们还是能看到些周期性和趋势,而无论是Informer还是TCN,在很多情况下并没有很好地捕捉到这些特征。因此,我们猜测这个问题还是有很大的提升空间,是个值得尝试的高价值科研问题。

从哪儿入手?

确定了科研问题之后,接下来就要仔细分析问题本身的特性以及现有基线方法的优劣之处,或者针对其不足之处对症下药,或者另辟蹊径来击溃之。

首先,时间序列是一种特殊的序列信息,通常是按等时间间隔排列的一组数据,时序建模过程中我们关注的主要是趋势以及周期性之类的pattern,因此数据发生的先后顺序至关重要,这个特性跟很多其他序列信息是有显著区别的。比如说文本序列,即使打乱一定的顺序,只要比例不是过高,对我们的理解影响并不大。Transformer架构及其变种(包括Informer)使用注意力机制主要关注的是序列信息之间的两两相关性,虽然使用了位置编码来encode信息之间的相对位置,但并不直接保留序列的顺序信息,有不少信息损失,笔者认为这是为什么它对时序预测的效果不如TCN的主要原因。

TCN这个架构是借鉴Google的语音生成网络WaveNet而来。按照arXiv上这篇原文,TCN将时序预测问题转化为:使用卷积神经网络CNN,将输入x0, x1, …, xT滤波输出y0, y1, …, yT这样一个等长预测序列。

具体的卷积操作设计如上图所示,有以下几个主要特点:

  • 因果卷积(Causal Convolution):输出yt在卷积操作中只能使用输入中的x0, …, xt,而不能使用xt之后的数据;
  • 空洞卷积(Dilated Convolution):对于普通的1D卷积操作,为了在输出侧获取足够的“感受野”,网络的层数需要跟追溯的历史信息长度成线性关系。为了降低网络复杂度,减少网络层数,TCN在卷积里注入空洞来增加感受野,可以将网络的层数下降到跟追溯的历史信息长度成指数关系;
  • 为保证各层的输入输出长度一致,在每层的卷积操作都需要做一定程度的Zero Padding来实现;

TCN的网络设计看起来很有道理,在很多数据集上的表现也不错,给人一种“使用CNN来做时序预测就该是这个样子”的感觉。正因如此,虽然这篇arXiv文章的创新性不高,但被广泛引用作为后续工作的基础。

在了解现有工作之后,我们就需要做深入思考,这个阶段要摒弃定式思维,要challenge现有工作,而不是人云亦云。如果我们仔细思考一下TCN的上述设计原则,就会发现它们虽然看起来很有道理,但实际上似是而非!

首先,请各位思考一下,“因果机制”对于时序预测是否必要?答案当然是肯定的,因为我们不能把未来信息当做已知来做预测。

但是,TCN架构中的“因果卷积”是否是必要的呢?答案就是未必了!这取决于输入和输出序列是否存在overlap,对于有混叠的部分,为了不泄露未来的信息,我们只能卷积过去的输入序列信息。然而,在多数时序预测应用中,我们的预测方式是基于过去完整的序列直接来预测后续事件,所以并不存在所谓的“未来信息泄露”问题。TCN中的因果卷积可谓是多此一举,不但没有必要,反而自我限制了对时序信息的提取能力。笔者深切地怀疑这一误解是由于TCN作者在最初formulate问题的时候对输入输出的下标使用了同样的0,…, T导致的,事实上作为预测问题输出的起始点最早也应该是T 1 。更遗憾的是后续工作也想当然地继承了这一做法。

其次,“扩大感受野”对于时序预测是否必要?答案当然也是肯定的,我们要尽可能的利用历史信息来学习有用的特征来增加预测能力。但是,TCN架构中的“空洞卷积”是否是必要的呢?答案也是未必!扩大感受野有多种方式,我们也可以在临近两层之间直接卷积较远的时序信息。真正的问题在于如何找到有意义的扩大感受野方法?

最后,我们再思考一下TCN中要求各层之间的输入输出保持等长真的有必要吗?事实上,时序预测中一个常见问题是single-step预测,也就是只预测下一个时间点的值。如果要求网络的输入输出等长,就必然会在网络各层之间引入人为的混叠,毫无意义。事实上只要将提取特征的网络与预测输出的网络分开,就没必要加入这个限制。

针对上述问题,尤其是考虑到时间序列的特殊性质,我们(主要是学生们)提出了一种全新的卷积网络架构,大幅提升了时序预测效果。针对同样的测试序列,我们的预测结果如下图所示:

我们也在交通、金融、电力等多个时序预测数据集上验证了方法的有效性,效果提升也是肉眼可见。由于这篇文章还在盲审阶段,具体的实现细节这里就先不谈了,如果哪位同学在做跟时序预测问题相关的问题,有兴趣尝试一下我们的方法,请联系小编。

小结一下,科研树的枝繁叶茂固然需要不断地添枝加叶,也需要时不时地剪枝裁叶,有素质的科研汪应该是天生的怀疑论者!本文提到的这两篇高影响力文章都成果斐然,但质疑才是推动科研进步的关键因素,尤其当前AI领域的工作大多都是通过empirical结果而不是理论推导来证明有效性,有太多的可质疑空间。笔者也期待我们提出的方法在不久的将来被推倒重来,最好是我们自己干的。

0 人点赞