前言
在很多实际应用问题中,我们需要对长序列时间序列进行预测,例如用电使用规划。长序列时间序列预测(LSTF)要求模型具有很高的预测能力,即能够有效地捕捉输出和输入之间精确的长程相关性耦合。最近的研究表明,Transformer具有提高预测能力的潜力,但是Transformer存在一些严重的问题,如二次时间复杂度、高内存使用率以及encoder-decoder体系结构的固有限制。为了解决这些问题,本篇论文设计了一个有效的基于Transformer的LSTF模型,即Informer,它具有如下三个显著的特点:
- ProbSparse Self-Attention,在时间复杂度和内存使用率上达到了 O ( L l o g L ) O(LlogL) O(LlogL),在序列的依赖对齐上具有相当的性能。
- self-attention 提取通过将级联层输入减半来突出控制注意,并有效地处理超长的输入序列。
- 产生式decoder虽然概念上简单,但在一个正向操作中预测长时间序列,而不是一步一步地进行,这大大提高了长序列预测的推理速度。
在四个大规模数据集上的大量实验表明,Informer的性能明显优于现有的方法,为LSTF问题提供了一种新的解决方案。
背景介绍
在开始之前,先来感受一下LSTM在长序列中的一个例子的实验结果:

随着数据量的增加,很明显LSTF的主要挑战是增强预测能力以满足日益增长的序列需求,即要求模型具有
- 出色的long-range对齐能力
- 对长序列输入和输出的有效操作
Transformer的出现,由于其自注意力机制可以减少网络信号传播路径的最大长度至理论最短 O ( 1 ) O(1) O(1),从而是Transformer表现出了解决LSTF问题的巨大潜力。但是,自注意力机制的计算、内存和架构效率也成为了Transformer应用解决LSTF问题的瓶颈,因此,本论文研究Transformer是否可以提高计算、内存和架构效率,以及保持更高的预测能力?
首先得了解,原始Transformer应用在LSTF上的效率限制问题:
- self-attention的二次计算复杂度,self-attention机制的操作,会导致我们模型的时间复杂度为 O ( L 2 ) O(L^2) O(L2)
- 长输入的stacking层的内存瓶颈: J J J 个encoder/decoder的stack会导致内存的使用为 O ( J ∗ L 2 ) O(J*L^2) O(J∗L2)
- 预测长输出的速度骤降:动态的decoding会导致step-by-step的inference非常慢
论文中提到了许多Transformer的改进版本,如Sparse Transformer、LogSparse、Transformer、LongFormer、reformer、Linformer、Transformer-XL、Compressive Transformer等等,不过都只是局限于解决上述第一个问题,而本文提出的Informer方案同时解决了上面的三个问题,论文中研究了在self-attention机制中的稀疏性问题,本文的贡献有如下几点:
- 提出Informer来成功地提高LSTF问题的预测能力,这验证了类Transformer模型的潜在价值,以捕捉长序列时间序列输出和输入之间的单个的长期依赖性;
- 提出了ProbSparse self-attention机制来高效的替换常规的self-attention并且获得了 O ( L l o g L ) O(LlogL) O(LlogL) 的时间复杂度以及 O ( L l o g L ) O(LlogL) O(LlogL) 的内存使用率;
- 提出了self-attention distilling操作,它大幅降低了所需的总空间复杂度 O ( ( 2 − ϵ ) L l o g L ) O((2-\epsilon)LlogL) O((2−ϵ)LlogL)
- 提出了生成式的Decoder来获取长序列的输出,这只需要一部,避免了在inference阶段的累积误差传播
问题定义
在开始介绍具体细节之前,需要先给出问题的定义,在固定大小的窗口下的rolling forecasting(滚动式预测是一种随时间流逝而进行的推测)中,我们在时刻 t t t 的输入为 X t = { x 1 t , x 2 t , . . . , x L z t ∣ x i t ∈ R d x } X^t=\{x_1^t,x_2^t,...,x_{L_z}^t|x_i^t\in R^{d_x}\} Xt={ x1t,x2t,...,xLzt∣xit∈Rdx} ,我们需要预测对应的输出序列 Y t = { y 1 t , y 2 t , . . . , y L y t ∣ y i t ∈ R d y } Y^t=\{y_1^t,y_2^t,...,y_{L_y}^t|y_i^t\in R^{d_y}\} Yt={ y1t,y2t,...,yLyt∣yit∈Rdy},LSTF问题鼓励输出一个更长的输出,特征维度不再依赖于univariate case( d y ≥ 1 d_y\geq1 dy≥1)
Encoder-decoder结构:许多流行的模型被设计对输入表示 X t X^t Xt 进行编码,将 X t X^t Xt 编码为一个隐藏状态表示 H t = { h 1 t , . . . , h L h t } H^t=\{h_1^t,...,h_{L_h}^t\} Ht={ h1t,...,hLht},并且将输出的表示 Y t Y^t Yt 解码,在推断的过程中,通过step-by-step的过程(dynamic decoding),即decoder从前一个状态 h k t h_k^t hkt 计算一个新的隐藏状态 h k + 1 t h_{k+1}^t h