Informer:Beyond Efficient Transformer for Long Sequence Time-Series Forecasting
【写在前面】该论文是AAAI 2021中的best paper,作者来自北航,其中心思想就是提出了一种改进版的Transformer模型,然后将其应用在长时间序列的预测上,并且取得了很好的实验效果。整篇论文读下来,还是可以发现best paper确实是有一定东西的,不仅创新点新颖,而且还有较多的理论推导,内容十分翔实,值得大家细读。
论文地址:https://arxiv.org/pdf/2012.07436v2.pdf
论文源码:https://github.com/zhouhaoyi/Informer2020
Abstract: 由于Transformer存在一些问题,例如:二次时间的复杂性、高内存使用率以及编码器-解码器固有的限制,本论文基于Transformer设计了一种适应于长期时间序列预测(LSTF) 的高效的结构–Informer ,该模型主要有一下三个特点:(i) ProbSparse*自注意力机制 ,时间复杂度和空间复杂度都达到了O(LlogL),并且在序列依赖对齐上还有较好的性能;(ii)通过将 层叠层输入减半,使自我注意力的提取更加集中,并有效地处理极长的输入序列; (iii)生成相应风格的decoder,该decoder采用一次向前操作来预测整个长时间序列,而不是一步一步的方法,大大提高了推理速度。
1. Introduction
在一些长时间序列数据集上,作者采用LSTM进行了时序预测的测试,具体效果图如下:
作者分别进行了预测长度从12个点(0.5天)到480个点(20天)的实验,实验发现随着预测时间的变长,MSE分数逐渐上升,推理速度逐渐下降。(注:MSE分数越小说明模型预测能力越好)
作者通过一个小实验说明了进行长时间序列的时间预测技术还不成熟,这也是作者的motivation
针对LSTF问题主要的挑战就是提高预测能力,主要要求有:a)有效的长范围对齐能力; b)对长序列输入输出的高效处理能力。
Transformer中的自注意力机制可以将网络中信号通路长度减小到理论值O(1)并且可以避免循环结构,因此Transformer在LSTF问题上有很大潜力。但是自注意力机制由于它在输入输出上的的L-quadratic计算和内存消耗问题,与LSTF中的b)要求相违背。因此该论文寻找以下问题的答案:
Can Transformer models be improved to be computation, memory, and architecture efficient, as well as maintain higher prediction capacity?
Transformer在解决LSTF上的三大问题:
1.自注意的二次计算 自注意力机制中的原子操作(点积)会将每一层的时间复杂度和内存利用率提升到O(L2)
2.长输入堆叠层中的内存瓶颈 encoder/decoder层中J个stack堆叠,其总体内存使用率就会达到O(J·L2),这就限制了模型对接受长序列输入的可伸缩性
3.预测长输出的速度骤降 Transformer的动态decoder使得step-by-step的推理与基于RNN的模型一样慢
作者认为,现有一些Transformer的变种,例如Sparse Transformer、LogSparse Transformer、Reformer、Linformer、以及Transformer-XL和Compressive Transformer都集中解决了问题1,即自注意力机制的二次计算问题,问题2、3仍然存在。
作者根据以上三个问题,提出了自己的解决方法,也就是作者的idea
本论文的主要贡献如下:
1.提出了ProbSparse 自注意力机制,有效地替代了原始的自注意力机制,并且其时间复杂度和空间利用率都达到了O(LlogL)
2.提出了自注意力蒸馏操作,提取主要的注意力,极大降低了整体的空间复杂度
3.提出了生成风格Decoder,只需要一步前向步骤就可以获得所有输出,避免了在推理阶段的误差积累
2. Preliminary
问题定义
给定固定窗口大小下的滚动预测,input为: X t = { x 1 t , . . . , x L x t ∣ x i t ∈ R d x } X^t=\lbrace x^t_1,...,x^t_{L_x} | x^t_i \in R^{d_x} \rbrace Xt={x1t,...,xLxt∣xit∈Rdx}, output为: Y t = { y 1 t , . . . , y L y t ∣ y i t ∈ R d y } Y^t = \lbrace y^t_1,...,y^t_{L_y} | y^t_i \in R^{d_y} \rbrace Yt={y1t,...,yLyt∣yit∈Rdy},LSTF问题处理的输出长度相比之前的工作要更长,并且特征的维度也并不是限制在单变量。
Encoder-decoder结构
现有的模型都采用了“编码”输入表示 X t X^t Xt成一种隐状态表示 H t H^t Ht ,然后在“解码”部分将隐状态 H t = { h 1 t , . . . , h L h t } H^t= \lbrace h^t_1,...,h^t_{L_h} \rbrace Ht={h1t,...,hLht} 解码为输出 Y t Y^t Yt。这个推理过程涉及到一个逐步的动态解码过程,即需要由 h t h^t ht计算出 h t + 1 h^{t+1} ht+1 ,然后去预测 y k + 1 t y^t_{k+1} yk+1t。
输入表示
给出了一种统一的输入表示法来增强时间序列输入的全局位置上下文和局部时间上下文。输入表示形式作者在附录中进行了详细介绍,具体操作如下,位置信息就是作者所说的局部时间戳,但是同时还会存在一些全局信息,也就是像周数信息等,作者将二者进行了融合。
3. Methodology
上图就是该论文的模型框架图,该模型框架图完全沿用了Transformer的格式,只是在作者提出的三个方面进行了修改。在Encoder中,将原来的self-attention机制进行替换,然后加入了蒸馏操作,其中浅蓝色部分就是蒸馏操作,该部分同时有两天线在进行,也就是图中两个大小不同的矩形;Decoder中的改变就是仅仅替换了self-attention机制,然后在两个部分中都是去掉了原来的前馈网络,在Decoder增加了一个全连接层进行输出。
3.1 高效的自注意力机制
原始Transformer中的self-attention定义了元组(query, key, value)作为输入,然后执行点积操作 A ( Q , K , V ) = S o f t m a x ( Q K T d ) V A(Q,K,V)=Softmax( \frac {QK^T} {\sqrt d})V A(Q,K,V)=Softmax(dQKT)V, Q ∈ R L Q × d , K ∈ R L K × d , V ∈ R L V × d Q \in R^{L_Q \times d}, K\in R^{L_K \times d}, V\in R^{L_V \times d} Q∈RLQ×d,K∈RLK×d,V∈RLV×d, d是输入的维度。
针对Transformer中的self-attention进行了实验,发现现有的注意力机制存在**“长尾”现象**,即少数的注意力点对贡献了大部分的注意力分数,大多数点对是可以被忽略的。
为了解决这个问题,论文定义了一个计算query 和其余所有的Key的公式:
如果这个结果越大,则说明这个query在统计图中靠前的可能性就越大。
ProbSparse 自注意力
本论文根据以上问题提出了一个ProbSparse自注意力机制,在该机制中每一个key与前u个queries进行计算。
其中
Q
‾
\overline{Q}
Q是一个与原始Q大小相同,由前u个queries组成。其中
u
=
c
l
n
L
Q
u=clnL_Q
u=clnLQ,c是一个恒定的采样因子。
对于M的计算公式,仍然存在一些问题,对于所有的query都需要与所有的key进行计算,然后排序取前u个queries,这个时间复杂度仍然是
O
(
L
Q
L
K
)
O(L_QL_K)
O(LQLK),此外对于
e
q
i
k
j
T
d
e^{\frac{q_ik^T_j}{\sqrt{d}}}
edqikjT的计算过程会有潜在的数值稳定问题。因此提出了近似query稀疏度测量。
通过Lemma 1,解决了数值不稳定问题;根据Proposition 1,我们可以随机抽取
U
=
L
Q
l
n
L
K
U=L_QlnL_K
U=LQlnLK个点对来计算
M
‾
\overline{M}
M,即可以将时间复杂度和空间复杂度问题降到
O
(
L
l
n
L
)
O(LlnL)
O(LlnL)。
PS:Proposition 1相关证明没有看太明白,在附录中有详细的证明过程。
3.2 Encoder:允许在内存使用限制下处理较长的顺序输入
编码器的设计是为了提取长序列输入的鲁棒性远距离依赖。模型的第t个输入
X
t
X^t
Xt为
X
f
e
e
d
−
e
n
t
∈
R
L
x
×
d
m
o
d
e
l
X^t_{feed-en} \in R^{L_x \times d_{model}}
Xfeed−ent∈RLx×dmodel。
自注意力蒸馏
在该部分是用来一个自注意力蒸馏操作,在缩小数据的长度,每经过一次蒸馏,数据大小就变为原来的1/2,因此原始一个长度为L的数据在经过两次蒸馏之后,长度就会变成L/4。与此同时,作者采用了两种方式来进行蒸馏:
(1)就是先进行蒸馏,在输入到self-attention层,图中绿色实线部分,
(2)就是先输入到self-attention,再进行蒸馏,绿色虚线部分。
两个部分在最后都保证输入输出的长度为L/4,然后将两个部分的输入进行拼接。
3.3 Decoder:通过一个前向过程产生长的顺序输出
个人感觉这个地方没有什么神秘的,该部分与Transformer有一个区别就是他去掉了Transformer Decoder中的前向传播层,在最后的时候接到一个全连接层进行预测,一次就可以得到所有的预测结果,摒弃了Transformer中step-to-step的形式。
公式中的
X
0
t
X^t_0
X0t是占位符,采用一个负无穷的值将其scalar值mask掉,保留其位置向量信息。
4. Experiment
4.1 Datasets
ETT (Electricity Transformer Temperature):有两个子数据集,二者的数据采集间隔不同,ETT1的采集间隔为1个小时,ETT2的采集间隔为15分钟,采集时长为两年,且train\val\test 为12/4/4个月。
ECL (Electricity Consuming Load):它收集了321个客户的耗电量。由于数据缺失严重,将该数据集的采集间隔改为1个小时,采集时长也是两年,且train\val\test 为15/3/4个月。
Weather:该数据集包含近1600个美国地点的当地气候数据,从2010年到2013年为4年,每1小时收集一次数据点,且train\val\test 为28/10/10个月。
4.2 Results and Analysis
单变量时序预测
多变量时序预测
第二个Informer是将论文中的Informer中的self-attention改为Transformer中的self-attention的实验结果。
通过整个实验结果可以看出Informer在长时间序列预测上的效果非常好。
4.3 Ablation Study
作者分别进行了三种消融实验,第一个是在ProbSparse上的消融实验。
第二个是在蒸馏操作上的实验,通过消融实验可以看出,加入了蒸馏操作可以很好的解决超长时序预测的问题。
第三个是style Decoder上的消融实验,同样可以看出Style Decoder可以很好的解决超长时序预测问题。
4.4 Computation Effificiency
最后论文还进行了计算效率的实验,具体结果如下,从数据可以看出该模型的时间复杂度和空间复杂度相比于其他模型都有了一个很大的提高。