文章全名:Informer: Beyond Efficient Transformer for Long Sequence Time-Series Forecasting
来源:AAAI 2021 best paper
完成单位:北京航空航天大学、加州大学伯克利分校、罗格斯大学、北京国网富达科技发展有限责任公司
摘要
长时预测需要模型有着较高的预测能力,这种能力能够捕捉到输出和输入之间精确的长期依赖耦合。
近期研究发现Transformer能够提升预测能力,但是由于其存在的一些问题导致它无法直接应用于长时预测。问题包括:二次的时间复杂度,高内存消耗,编解码器结构内在的一些限制。
因此本文设计了一种基于Transformer的长时预测模型,包含了三个独特的成分。
-
ProbSparse 自注意机制,达到了 O ( L l o g L ) \mathcal O(LlogL) O(LlogL)的时空复杂度,表现也很好。
-
自注意力蒸馏通过将级联层输入减半,突出显示主导注意力,并有效处理极长的输入序列。
-
生成式解码器,能够以一个正向操作预测长时间序列,而不是一步一步的方式,这大大提高了长序列预测的推理速度。
简介
简介的主要内容和摘要类似,主要介绍了Transformer的一些缺陷,导致它无法有效地进行长时预测。
总结了如下三个最大的限制:
- 自注意力的二次幂计算。自注意力是计算每个时间点与其它所有时间点的注意力分数,计算方式是是点积计算,所以每一层的时间和空间复杂度都是 O ( L 2 ) \mathcal O(L^2) O(L2)
- 对处理长输入的堆叠层的存储瓶颈。对于 J J J层编解码层,就会让整个模型的内存使用达到 O ( J ⋅ L 2 ) \mathcal O(J \cdot L^2) O(J⋅L2),这就限制了模型处理长序列输入的规模。
- 预测长期输出的速度急剧下降。传统Transformer在解码的时候是逐步输出,这样就和RNN一样速度比较慢。
目前大部分的工作都致力于解决限制1,比如说Reformer、Linformer,都是为了解决时间复杂度,但是限制2和限制3仍处于未被解决的状态。
本文所做的贡献如下:
-
本文提出的Informer在长时预测任务表现良好,说明了Transformer结构的模型在捕获长序列依赖上有着很大的潜力。
-
本文提出的ProbSparse自注意力机制能够有效取代原来的自注意力机制,时空复杂度均为 O ( L l o g L ) \mathcal O(LlogL) O(LlogL)
-
本文提出自注意力蒸馏操作,来突出那些占主导作用的自注意力,进一步将空间复杂度限制在了 O ( ( 2 − ϵ ) L l o g L ) \mathcal O((2-\epsilon)LlogL) O((2−ϵ)LlogL)
-
本文提出了生成式解码器,只需要一步前向步骤就可以获得输出,这样也能避免推理过程中传播过程可能存在的累计误差这一问题。
模型
首先是模型的整体结构
查询的稀疏度衡量
A ( q i , K , V ) = ∑ j k ( q i , k j ) ∑ l k ( q i , k l ) v j = E p ( k j ∣ q i ) [ v j ] \mathcal{A}\left(\mathbf{q}_i, \mathbf{K}, \mathbf{V}\right)=\sum_j \frac{k\left(\mathbf{q}_i, \mathbf{k}_j\right)}{\sum_l k\left(\mathbf{q}_i, \mathbf{k}_l\right)} \mathbf{v}_j=\mathbb{E}_{p\left(\mathbf{k}_j \mid \mathbf{q}_i\right)}\left[\mathbf{v}_j\right] A(qi,K,V)=j∑∑lk(qi,kl)k(qi,kj)vj=Ep(kj∣qi)[vj]
如上式所示,第i个查询在所有键的注意力可以被定义为一个可能性 p ( k j ∣ q i ) p\left(\mathbf{k}_j \mid \mathbf{q}_i\right) p(kj∣qi),输出就是每个可能性乘上对应v的和。占主导地位的点积对鼓励对应查询的注意力概率分布远离均匀分布。如果p趋近于一个均匀分布 q ( k j ∣ q i ) = 1 L k q(k_j|q_i)=\frac{1}{L_k} q(kj∣qi)=Lk1,那么自注意力就变成一个普通的和,这样的话这个输出对于残差输入就是冗余的,因为这两个东西是一样的。所以通过每个查询对应的 p ( k j ∣ q i ) p\left(\mathbf{k}_j \mid \mathbf{q}_i\right) p(kj∣qi)与 q ( k j ∣ q i ) q(k_j\mid q_i) q(kj∣qi)的相似性可以用来判别那些查询是重要的。
判断两个分布相似度的方法是KL散度。
K L ( q ∥ p ) = ln ∑ l = 1 L K e q i k l ⊤ / d − 1 L K ∑ j = 1 L K q i k j ⊤ / d − ln L K K L(q \| p)=\ln \sum_{l=1}^{L_K} e^{\mathbf{q}_i \mathbf{k}_l^{\top} / \sqrt{d}}-\frac{1}{L_K} \sum_{j=1}^{L_K} \mathbf{q}_i \mathbf{k}_j^{\top} / \sqrt{d}-\ln L_K KL(q∥p)=lnl=1∑LKeqikl⊤/d −LK1j=1∑LKqikj⊤/d −lnLK
将常量删掉,最终定义第i个查询的稀疏度为:
M ( q i , K ) = ln ∑ j = 1 L K e q i k j ⊤ d − 1 L K ∑ j = 1 L K q i k j ⊤ d M\left(\mathbf{q}_i, \mathbf{K}\right)=\ln \sum_{j=1}^{L_K} e^{\frac{\mathbf{q}_i \mathbf{k}_j^{\top}}{\sqrt{d}}}-\frac{1}{L_K} \sum_{j=1}^{L_K} \frac{\mathbf{q}_i \mathbf{k}_j^{\top}}{\sqrt{d}} M(qi,K)=lnj=1∑LKed qikj⊤−LK1j=1∑LKd qikj⊤
这个公式的前半部分是对数和Log-Sum-Exp(LSE),后半部分是算术平均和,LSE 会增强较大的数值对结果的影响,即较大的数值会对结果产生较大的贡献。而算术平均对所有数值都有相等的贡献。
ProbSparse Self-attention
基于稀疏度衡量方法,本文提出了如下的自注意力,让每个键只关注于最占主导地位的 u u u个查询。
A ( Q , K , V ) = Softmax ( Q ‾ K ⊤ d ) V \mathcal{A}(\mathbf{Q}, \mathbf{K}, \mathbf{V})=\operatorname{Softmax}\left(\frac{\overline{\mathbf{Q}} \mathbf{K}^{\top}}{\sqrt{d}}\right) \mathbf{V} A(Q,K,V)=Softmax(d QK⊤)V
Q ‾ \overline{\mathbf{Q}} Q是一个和 q q q相同大小的稀疏矩阵,只包含稀疏度衡量最高的 u u u个查询的信息。 u = c ⋅ ln L Q u=c \cdot \ln L_Q u=c⋅lnLQ,这样时间空间复杂度都会下降。本文也使用了多头注意的机制,这种注意为每个头部生成不同的稀疏查询键对,从而避免了严重的信息损失
但是计算稀疏度的时候还是需要遍历所有的 q i q_i qi,进行点积运算,这样运算复杂度达到了 O ( L Q L K ) \mathcal O(L_QL_K) O(LQLK),于是本文提出了一种经验近似方法来更高效的获得查询的稀疏度。
文章给出了一个引理:(具体的证明放在了附录中)
ln L K ≤ M ( q i , K ) ≤ max j { q i k j ⊤ / d } − 1 L K ∑ j = 1 L K { q i k j ⊤ / d } + ln L K \ln L_K \leq M\left(\mathbf{q}_i, \mathbf{K}\right) \leq \max _j\left\{\mathbf{q}_i \mathbf{k}_j^{\top} / \sqrt{d}\right\}-\frac{1}{L_K} \sum_{j=1}^{L_K}\left\{\mathbf{q}_i \mathbf{k}_j^{\top} / \sqrt{d}\right\}+\ln L_K lnLK≤M(qi,K)≤jmax{qikj⊤/d }−LK1j=1∑LK{qikj⊤/d }+lnLK
从而给出了一种最大-平均的稀疏度评估方法。
M ˉ ( q i , K ) = max j { q i k j ⊤ d } − 1 L K ∑ j = 1 L K q i k j ⊤ d \bar{M}\left(\mathbf{q}_i, \mathbf{K}\right)=\max _j\left\{\frac{\mathbf{q}_i \mathbf{k}_j^{\top}}{\sqrt{d}}\right\}-\frac{1}{L_K} \sum_{j=1}^{L_K} \frac{\mathbf{q}_i \mathbf{k}_j^{\top}}{\sqrt{d}} Mˉ(qi,K)=jmax{d qikj⊤}−LK1j=1∑LKd qikj⊤
Encoder
首先给出encoder的整体结构:
自注意力蒸馏
encoder的特征图中有很多 V V V值的冗余组合,所以本文使用了蒸馏操作来优先选择具有主导特征的优越特征,并在下一层中生成一个带有聚焦的自注意力特征图。
蒸馏的计算方式如下:
X j + 1 t = MaxPool ( ELU ( Conv1d ( [ X j t ] A B ) ) ) \mathbf{X}_{j+1}^t=\operatorname{MaxPool}\left(\operatorname{ELU}\left(\operatorname{Conv1d}\left(\left[\mathbf{X}_j^t\right]_{\mathrm{AB}}\right)\right)\right) Xj+1t=MaxPool(ELU(Conv1d([Xjt]AB)))
[ ⋅ ] A B [\cdot]_{AB} [⋅]AB表示注意力块,包含多头ProbSparse自注意力和其它基本运算。
为了增强蒸馏操作的鲁棒性,本文使用输入减半构建主堆叠的副本,并逐渐减少自注意力蒸馏层的数量,一次丢弃一层,就像Figure2中的金字塔一样,使它们的输出维度对齐。因此,本文将所有堆叠的输出连接起来,得到编码器的最终隐藏表示。
Decoder
本文使用了原Transformer的解码器结构,但是采用了生成推理来缓解长时间预测中的速度下降。
decoder的输入如下式所示:
X d e t = Concat ( X token t , X 0 t ) ∈ R ( L token + L y ) × d model \mathbf{X}_{\mathrm{de}}^t=\operatorname{Concat}\left(\mathbf{X}_{\text {token }}^t, \mathbf{X}_{\mathbf{0}}^t\right) \in \mathbb{R}^{\left(L_{\text {token }}+L_y\right) \times d_{\text {model }}} Xdet=Concat(Xtoken t,X0t)∈R(Ltoken +Ly)×dmodel
X token t ∈ R L token × d model \mathbf{X}_{\text {token }}^t \in \mathbb{R}^{L_{\text {token }} \times d_{\text {model }}} Xtoken t∈RLtoken ×dmodel 是开始的token, X 0 t ∈ R L y × d model \mathbf{X}_0^t \in \mathbb{R}^{L_{y} \times d_{\text {model }}} X0t∈RLy×dmodel 是目标序列的占位符,设置为0。
ProbSparse自注意力采用了掩蔽多头自注意力,将需要掩盖的位置的点积都设置为负无穷。它组织了每个位置会注意那些即将到来的位置,从而来避免自回归的情况。最终输出是靠全连接层输出, d y d_y dy的大小取决于是执行单变量预测或多变量预测。
生成式推理
不同于选择特定的flag作为token,本文从输入序列中选择了 L t o k e n L_{token} Ltoken这么长的序列作为token。
比如说我们要预测七天的气温数据,那么我们就可以选择已知的五天的气温数据作为start token,那么输入decoder的内容就是 X d e = { X 5 d , X 0 } X_{de}=\{X_{5d},X_0\} Xde={X5d,X0}, X 0 X_0 X0包含目标序列的时间戳,即目标周的上下文。然后,本文提出的解码器通过一个前向过程来预测输出,而不是在传统的编码器-解码器架构中耗时的"动态解码"。
损失函数
本模型采用了MSE损失函数。
实验
数据集
ETT:电力变压器温度数据,数据来源是中国两个不同县两年的数据,为了探索长时预测的粒度问题,本文将数据分为1-小时级别和15-分钟级别这两种粒度的数据,每个数据点包含了目标值“oil temperature”和六种电力特征。训练验证测试集分别为12、4、4个月
ECL:电力消耗数据,包含321个客户的用电数据,一共有两年的数据,以小时为级别,训练验证测试集分别为15、3、4个月
天气:该数据集包含了近1600个美国地点的本地气候数据,时间跨度为2010年到2013年,数据点每小时采集一次。每个数据点包含了目标值"wet bulb"和11个气候特征。训练/验证/测试的时间分配为28个月/10个月/10个月。
实验细节
有关超参数的设置可以参考论文。
衡量预测效果的指标有两个
M A E = 1 n ∑ i = 1 n ∣ y − y ^ ∣ \mathrm{MAE}=\frac{1}{n} \sum_{i=1}^n|\mathbf{y}-\hat{\mathbf{y}}| MAE=n1i=1∑n∣y−y^∣
M S E = 1 n ∑ i = 1 n ( y − y ^ ) 2 \mathrm{MSE}=\frac{1}{n} \sum_{i=1}^n(\mathbf{y}-\hat{\mathbf{y}})^2 MSE=n1i=1∑n(y−y^)2
作用在每个预测窗口,对于多变量预测就取平均。
结果分析
单变量时序预测
本文的模型在所有数据集上都表现良好,并且当需要预测的长度变长时,模型的预测误差也是平滑且缓慢的上升,说明模型的预测能力很优秀。
Informer相较于没有采用sparse策略的Informer表现要更好,说明对查询进行稀疏操作也是能够生成合理的注意力图的。
Reformer因为使用的是动态解码,在长时预测任务中表现很差,其它使用生成式解码器的非自回归的解码器表现就更好一些。
本文提出的方法要比使用循环神经网络的方法表现好很多。
多变量时序预测
整体表现和单变量时序预测类似,仍然能超过其它baseline,并且比基于RNN的方法要好
与单变量结果相比,相较其它模型优势的压倒性有所降低。这种现象可能是由于特征维度的预测能力的异性所导致的。本文没有再做更多的研究和探讨。
不同粒度数据的比较
ETT分钟级别的序列{96,288,672}和ETT小时级别的序列{24,48,168}是对齐的。当数据的粒度不同时,Informer仍都能够比其它的baseline表现更好。