论文标题:Informer: Beyond Efficient Transformer for Long Sequence Time-Series Forecasting
论文链接:https://arxiv.org/abs/2012.07436
代码链接:https://github.com/zhouhaoyi/Informer2020
论文来源:AAAI 2021
一、概述
- 长序列时间序列预测问题
长序列时间序列预测(Long sequence time-series forecasting,LSTF)问题在现实世界中经常遇到,比如电力消耗规划。LSTF期待模型能够拥有较高的预测容量(capacity),以便于能够捕捉输入与输出之间的长程依赖关系。Transformer模型相较于其他模型提高了预测的容量,然而其本身也受到诸多限制以致于难以直接应用于LSTF,比如二次时间复杂度、高内存占用以及encoder-decoder架构所固有的一些限制。
LSTF存在于多个领域,比如网络监控、能源管理、经济与金融以及疾病传播分析等,在这些场景下需要依据过去的大量数据来对未来做出长期预测。现有模型在长序列预测问题上能力不足,举例来说,使用LSTM来进行时间序列预测时,模型预测短序列(比如12 points, 0.5 days)时能够取得较高的精度,而预测长序列(比如480 points, 20 days)时会出现预测速度的下降和MSE损失的上升,尤其是48 points这个分界线上,模型的预测速度急剧下降,损失急剧上升,LSTM对长序列预测任务来说是失败的:
上述模型的失败表明需要提高模型对长序列的容量以应对LSTM问题,具体来说需要模型具备以下能力:
①良好的长程对齐(long-range alignment)能力;
②对长序列的输入和输出的有效处理。
- Transfomer模型的优势与局限之处
Transfomer模型相较于RNN结构模型表现出了更强的捕获长程依赖关系的能力,其中很重要的一个原因是Transformer应用 self-attention机制将信号传播的最大路径长度降低到了最短的并且避免了循环架构(recurrent structure),也就是说Transfomer模型具备能力①,因此Transfomer对于解决LSTF问题表现出巨大的潜力。
然而不幸的是Transfomer模型对于长度为的序列来说需要的二次计算复杂度和内存使用,也就是说它不具备能力②。虽然在一些NLP任务上取得了较好的成效但是也消耗了大量的资源,尤其对于现实世界中的LSTF问题来说,Transfomer模型所需的资源(比如训练时需要多GPU以及部署时昂贵的花费)是难以承受的,这是将Transfomer应用于LSTF的瓶颈所在。
Transformer在应用于LSTF时具体会有以下3种限制:
① self-attention的二次计算复杂度。self-attention的原子操作——规范点积(canonical dot-product)导致每层的时间复杂度和内存使用是。
②层的堆叠在输入长序列时受到内存限制。encoder/decoder的层堆叠架构会导致在输入长序列时内存使用为,这一点限制了模型输入长序列时的可拓展性(scalability)。
③对长序列输出进行预测时的速度骤降。Transformer的动态解码(dynamic decoding)过程导致在对长序列输出进行推断时速度缓慢,实际效果可能和前面例子里的基于RNN的模型一样差。
基于上述事实,本文试图回答以下问题:在保持对长序列预测容量的同时,Transfomer能不能在计算复杂度、内存使用和架构上同样是高效的?
- 相关工作
为了提高self-attention的效率,已有一些前人的工作,提出了一些改进Transformer的模型。Sparse Transformer,LogSparse Transformer,Longformer使用启发式的方法试图解决限制①,将每层复杂度降到了,不过这些模型效果的增益是有限的;Reformer使用locally sensitive hashing self-attention同样达到了的复杂度,不过其只对非常长的序列才能起到效果; Linformer达到了线性复杂度,不过对于真实世界的长序列数据不能固定映射矩阵,因而有退化到的风险;Transformer-XL和Compressive Transformer使用辅助隐状态来捕获长程依赖关系,因而有可能放大限制①,不利于打破效率瓶颈。
- 本文的贡献
上述前人的相关工作只关注解决限制①,而没有着手解决限制②和③。为了增强Transformer模型对长序列的容量,本文研究了self-attention机制的稀疏性,将会针对所有的3个限制来提出各自的解决方案。具体来说,本文的贡献如下:
①Informer模型增强了对LSTF问题的预测容量,这一点验证了Transformer-like的模型的潜在价值,即其能够捕获长序列时间序列输入与输出之间的长程依赖关系;
②提出了ProbSparse Self-attention机制,能够替换规范self-attention,并且达到了的时间复杂度和内存使用量;
③提出了self-attention蒸馏( Self-attention Distilling)操作,能够在堆叠的层中提炼主要的注意力得分,大幅降低了总的空间复杂度,达到;
④提出了生成式的decoder(Generative Style Decoder)来获取长序列输出,只需要一个前向的步骤即可输出整个解码序列,同时避免了推断期间的累积误差传播(cumulative error spreading)。
本文的②,③,④3个贡献分别针对前面提出的Transformer的3个限制。
二、ProbSparse Self-attention
- 表示
首先定义我们要讨论的问题。时间序列(time-series)简单的说就是各时间点上形成的数值序列,时间序列分析就是通过观察历史数据预测未来的值。时间序列分析并不是关于时间的回归,它主要是研究自身的变化规律的。在进行一个固定窗口的滚动预测(rolling forecast)时,我们的每个时刻的输入为,输出为需要预测的序列。相较于之前的工作,LSTF要求预测一个更大的序列,并且这里并不限定仅预测单变量,即。
在传统的encoder-decoder架构中,encoder会将输入编码成隐状态序列,然后decoder利用解码成。在解码过程中,包括一个step-by-step的过程,也就是动态解码,在第步中,decoder会利用前一个时刻的隐状态以及其他必要的前一时刻的输出来计算一个新的隐状态,然后来预测当前时刻的输出。在Transformer中也沿用了类似的动态解码的过程(在预测时需要动态解码,在训练时不需要,因为在训练时直接使用ground truth即可),而在本文提出的Informer中同样沿用了encoder-decoder架构,但舍弃了动态解码过程,而采用一种生成式的解码过程一次性解码出整个序列。
基于RNN的模型依靠其本身的循环结构来学习时间序列,而很少依赖时间戳。在Transformer中,时间戳作为局部的位置信息。然而在LSTF中,为了捕获长程依赖关系需要提供全局的时间信息,比如hierarchical time stamps(周、月、年等)以及agnostic time stamps(假期、时间)。为了能够输入这些信息,本文提出了一种统一的输入表示,如下图所示:
我们有第个序列输入和个类型的全局时间戳,并且模型的输入维度为,首先使用固定的位置编码来表示局部的位置信息,即:
每种类型的全局时间戳都被分配了一个可学习的时间戳embedding,每种embedding都有一个固定的vocab size(最大是60,也就是以分钟作为最细的粒度)。另外为了对齐维度,我们使用一维卷积(卷积核宽度为3,步长为1)将映射到维的。最终输入到模型中的序列为:
是一个超参数,用来平衡和位置编码以及时间戳embedding,如果输入已经被标准化,那么建议。
- self-attention机制
Transformer中定义的self-attention接收3个输入query、key和value,然后计算它们的scale dot-product,即:
这里的指输入的维度。这里使用分别表示的第行,那么第个query的attention就被定义为一个概率形式的核平滑方法(kernel smoother):
self-attention通过计算来将所有的value进行加权求和,这个过程需要的时间复杂度和内存使用,这是增强Transformer对LSTF问题的容量的主要障碍。
- ProbSparse Self-attention
一些之前的研究表明self-attention的权重具有潜在的稀疏性(sparsity),并且已经研究了一些选择性的方法来不影响性能地过滤稀疏权重,这一方面的研究包括Sparse Transformer、 LogSparse Transformer、Longformer等。
本文对self-attention的稀疏性进行了调查。self-attention的权重构成了一个长尾分布(long tail distribution),也就是很少的权重贡献了主要的attention,而其他的可以被忽略:
问题在于对于可忽略的权重,如何识别出它们。第个query对所有的key的attention权重可以看做一个概率分布,一些起显著作用的attention权重会使得偏离均匀分布。如果接近一个均匀分布,那么self-attention就成了对value的平均,也就是冗余的,也就表明第个query是lazy的。下图展示了active和lazy的query的attention权重分布:
一个query的分布与均匀分布的之间的差异可以用KL散度来度量:
去掉常数,就可以定义第个query的稀疏性度量为:
这里的第一项为一个Log-Sum-Exp(LSE)运算,第二项为一个算术平均值,如果第个query获得了一个较大的,这表明它的attention权重分布是更加的多样化,很可能包含长尾分布中的主要注意力。因此对于所有的query来说,我们选取排名前的若干query作为,这里的,是一个常数采样因子,那么ProbSparse Self-attention的过程就表示为:
这里的ProbSparse Self-attention对于每个key就只需要计算次点积,并且内存使用量为。然而,在计算所有的时我们需要计算每个点积,也就是的复杂度,并且LSE操作有潜在的数值稳定性问题。对于这个问题,本文提出了一种近似计算稀疏性度量的方法。
对于近似的稀疏性度量,我们采用以下的度量方法:
在实际操作中,我们只需要采样个点积来近似计算所有的,对于其他的点积赋值为。根据计算的稀疏性度量,挑选排名前的query作为,然后进行ProbSparse Self-attention。在没有LSE操作,其中的最大值操作对不敏感并且数值稳定。最终ProbSparse Self-attention的复杂度为(通常和是相等的)。
上面之所以可以用来代替来作为稀疏性度量,是因为有以下Lemma 1和Proposition 1做支撑:
Lemma 1
对于所有的query以及集合中所有的key,我们有的上下界:
当时同样满足。
Proposition 1
假设,同时定义集合,对于,存在一个满足:,如果,同时,那么大概率。
也就是的上界,上述命题保证了使用来做稀疏性度量和使用的效果是差不多的。关于Lemma 1和Proposition 1的证明可以参照论文附录里的证明。
ProbSparse Self-attention的算法如下:
输入:Tensor
①初始化:设置超参数;
②从中随机采样个点积对;
③计算采样的得分;
④按行计算稀疏性得分;
⑤按照选择排名最前的个query组成;
⑥;
⑦;
⑧,并且调整为原来的行顺序;
输出:ProbSparse Self-attention的feature map 。
三、Informer的encoder(Self-attention Distilling)
按照上一节中介绍的输入表示方法,时刻输入的序列会被表示成。
按照上面的算法介绍的ProbSparse Self-attention过程,attention的结果必然会产生冗余(由于存在),因此本文又提出了self-attention蒸馏操作来提炼出主要的attention,这大大地缩短了输入的时间维度。具体的,从第层到的蒸馏操作为:
式子中表示Multi-head ProbSparse Self-attention以及其他必要的操作(包括Add、LayerNorm、FFN等),表示在时间维度上执行一维卷积(卷积核宽度为3)并且后面跟随激活函数,然后经过进行最大池化下采样(池化窗口宽度为2),将输入的长度变为原来的一半。self-attention蒸馏操作将总共的内存占用量变为了,这里的是一个很小的数字。
为了增强蒸馏操作的鲁棒性,本文的encoder架构还建立了多个encoder的stack,每个stack都是一个独立的小的encoder,只是随着stack的增加,逐步每次减少一个蒸馏操作层和输入长度的一半,最终将所有的stack输出拼接起来。Informer的encoder架构如下图所示:
举例来说,如果encoder存在3个stack,那么第一个stack就会有3个Multi-head ProbSparse Self-attention层和2个Self-attention Distilling层(输入为,输出为),第二个stack就会有2个Multi-head ProbSparse Self-attention层和1个Self-attention Distilling层(输入为,输出为),第三个stack就会有1个Multi-head ProbSparse Self-attention层而没有Self-attention Distilling层(输入为,输出为)。这里的stack输入如果为,则使用的是原输入的后半部分,类似。
四、Informer的decoder(Generative Style Decoder)
Informer的decoder由一个Multi-head Masked ProbSparse Self-attention层和一个Multi-head Self-attention层组成。这里的Multi-head ProbSparse Self-attention要进行mask,也是为了避免左向信息流,防止自回归。同时最后要有一个全连接层,全连接层输出的维度取决于要预测的变量维度。本文提出了一种生成式的推理过程来提高推理的速度,具体的,decoder的输入为:
这里的是start token,是一个为预测序列保留的placehood(设置scalar值为0)。start token是自然语言处理的动态解码过程中一项有效的技术,通常start token设置为一个特殊的flag,而在Informer里的start token是一个序列,从encoder的输入中截取得到,举例来说,要预测7天的序列,那么可以截取输入序列中的最后5天作为start token。包含预测序列的时间戳embedding。整个decoder的解码过程舍弃了动态解码过程,而采用一次前向过程即可解码得到整个输出序列。训练时选用MSE作为损失函数。
结合前面的encoder,整个Informer的架构如下:
五、实验
Infromer在ETTh1,ETTh2,ETTm1,Weather,ECL五个数据集上进行了实验,其中前三个是作者提供的现实世界工业领域的数据集,后两个是通用的benchmark数据集。分别进行了单变量和多变量LSTF预测:
对实验结果的统计表明,Informer在单变量预测上取得了相较于其他方法的压倒性优势,而多变量虽然也取得了一定优势,但结果并没有压倒性,作者推测原因在于特征多维度预测的各向异性,在接下来的工作中还有待研究。
六、消融实验
- ProbSparse Self-attention的性能
- Self-attention Distilling的性能
- Generative Style Decoder的性能
这里值得注意的一点是Informer的预测可以有一定的offset,这表明预测结果仅依赖于时间戳:
- 计算效率