未来可以预测吗?

本文从两篇高影响力的时序预测文章谈起,其中一篇是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结果而不是理论推导来证明有效性,有太多的可质疑空间。笔者也期待我们提出的方法在不久的将来被推倒重来,最好是我们自己干的。

最后打个广告,笔者和香港理工大学的秦璟老师有个联合项目,需要招两三个博士后,只要是CS和CE相关领域,有科研热情即可。

????

现在,在「知乎」也能找到我们了

进入知乎首页搜索「PaperWeekly」

点击「关注」订阅我们的专栏吧

关于PaperWeekly

PaperWeekly 是一个推荐、解读、讨论、报道人工智能前沿论文成果的学术平台。如果你研究或从事 AI 领域,欢迎在公众号后台点击「交流群」,小助手将把你带入 PaperWeekly 的交流群里。

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

  1. 土壤微生态文献包免费领取 | 150篇近两年高影响因子土壤微生态相关文章

    为了助力土壤微生物研究,深圳微科盟公司将为大家回顾一下近两年来土壤微生物类文章,本次囊括了2020年至今土壤微生物最值得看的150篇高影响因子文章,涉及多个研究领域,有助于了解最新科研动态. 为了方便 ...

  2. 如何写好一篇高质量计算机科学论文?

    话说上世纪五六十年代,出了一门贼高级的学科,它就是计算机.它短短几十年的时间,就让阿尔法狗打败了柯洁.包括跳棋.象棋.五子棋和围棋,人类也都让计算机虐的没脾气. 计算机能实现的东西如此厉害,但是目前的 ...

  3. 重磅福利!60篇近两年高影响因子环境污染微生态相关文献合集免费领取

    为了助力微生物研究,深圳微科盟公司将为大家回顾一下近两年环境污染微生态文章,本次囊括了2020年至今60篇环境污染微生态高影响因子文献合集,涉及多个研究领域,有助于了解最新科研动态. 为了方便各位小伙 ...

  4. 推荐!150篇土壤微生态+60篇根际微生物近两年高影响因子文献合集

    为了助力土壤微生物和植物根际微生物研究,深圳微科盟公司将为大家回顾一下近两年来土壤+根际微生物类文章,本次囊括了2020年至今150篇土壤微生物+60篇根际微生物高影响因子文献合集,涉及多个研究领域, ...

  5. 15条建议,把技术成果写成一篇高质量学术论文

    作者:汪晟    达摩院数据库与存储实验室 引言 随着技术的不断沉淀,研发团队对通过发表学术论文向业界分享研究成果的诉求也愈发强烈.但对许多研发团队而言,论文撰写的相关问题较难把握,例如:如何评估已取 ...

  6. 研究表明:满面笑容者,最有可能写出有影响力的论文!

    两个科研人员,日常工作和生活中,一个不苟言笑,一个喜笑颜开,谁更可能做出有影响的成果?在我们的刻板印象中,答案毫无疑问是前者.在很多电视剧和电影中,不苟言笑.古板严肃是科学家的正统形象,似乎唯有这样的 ...

  7. 两篇2023 ICLR多模态论文分享(模态互补性对多模态鲁棒性影响 与 对多模表示学习有效的单模学习)

    Modality Complementariness Towards Understanding Multi modal Robustness 本文讨论了模态互补性在多模态鲁棒性中的重要性,并基于信息 ...

  8. Python时序预测_第一篇

    https://www.cnblogs.com/lfri/articles/12243268.html

  9. 通过文献计量学助您发表高影响因子论文—基于Citespace和vosviewer文献计量学可视化SCI论文高效写作方法

    目录 专题一.文献计量学方法与应用 专题二.主题确定.数据检索与采集 专题三.Vosviewer可视化绘图精讲 专题四.Citespace可视化绘图精讲 专题五.后期图片优化提升与辅助工具 专题六.论 ...

最新文章

  1. python组合数等于一个值_Python如何实现随机组合结果元组重复数量不能超过某个值?...
  2. openssl 模块 安装 centso Ubuntu
  3. Windows XP下屏蔽Ctrl_Alt_Del键的方法
  4. python读取xml_python解析xml文件
  5. boost::contract模块实现private protected的测试程序
  6. wordweb在线编辑_使用WordWeb享受按需词典和词库功能
  7. 临床外显子组测序分析中的那些坑(下)
  8. 【4】协同过滤算法的原理与实现
  9. vue 中 provide 和 inject 共享数据
  10. window环境读linux文件,Windows本地环境和Linux腾讯云服务器之间传输文件的方法
  11. 软件测试培训费多少钱?贵吗?靠谱吗?
  12. 饭谈:高手是怎么炼成的?
  13. 6大多人协作工具推荐
  14. OpenWRT路由器使用ipv6拨号上网教程
  15. vr云游全景展示,用一部手机看遍各大景区
  16. “IND-”安全概念的简单解释(IND-CPA,IND-CCA等)
  17. 基于OpenCVSharp的图像处理软件
  18. java poi getcelltype_java – 替代已弃用的getCellType
  19. 华南农业大学c语言实验指导答案,华南农业大学C语言程序设计实验指导书参考答案...
  20. CMOS 摄像头的Skipping 和 Binning 模式

热门文章

  1. 链表有环是什么意思_互联网大厂offer收割之单向链表的概念及面试题大全
  2. lombok插件:Data自动get/set方法, Slf4j实现Logger的调用
  3. Spring接入RabbitMQ
  4. 重温SQL——行转列,列转行
  5. TOMOYO Linux(undone)
  6. 剑指offer——不能被继承的类
  7. 2014 Super Training #10 D 花生的序列 --DP
  8. js的comet各个浏览器封装lib
  9. python程序入门设计_程序设计入门—Python
  10. lvm 扩展根目录_Linux下lvm在线扩容步骤