逍遥一身作品
背景介绍
序列预测在现实中比较基础但又十分重要的研究场景,如商品销量及库存的预测,未来某个时刻某只股票的价格,疾病的传播及扩散预测等。而长序列预测(Long Sequence Time-Series Forecasting,以下称为 LSTF)方面的工作因为其历史数据量大、计算复杂性高、预测精度要求高更是成为序列预测研究的热点,但一直以来长序列预测并没有取得太好的效果。在2021年的AAAI 最佳论文奖项中就有一篇来自北京航空航天大学的工作:Informer,其主要的工作是使用 Transfomer 实现长序列预测,实验表明取得了不错的结果,本文就给大家带来对这篇工作的解读。
论文标题:
Informer: Beyond Efficient Transformer for Long Sequence Time-Series Forecasting
论文链接:
https://arxiv.org/abs/2012.07436
源码链接:
https://github.com/zhouhaoyi/ETDataset
2. 相关工作
长序列时间序列预测(Long sequence time-series forecasting,LSTF)要求模型具有较高的预测能力,即能够准确地捕捉输出与输入之间的长期依赖关系。近年来,针对序列预测问题的研究主要都集中在短序列的预测上,输入序列越长,传统模型的计算复杂度越高,同时预测能力显著降低。文中采用LSTM网络对一组电子变压器数据进行了短时序列(12个数据点,0.5天数据)和长时序列(480个数据点,20天数据)分别进行了实验,结果发现,随着序列长度的增加,预测误差显著增加,同时预测速度急剧下降。
(LSTM预测误差和效率对比)
近年来的研究表明,相对RNN类型的模型来看,Transformer在长距离依赖的表达方面表现出了较高的潜力。然而,Transformer存在几个严重的问题,使其不能直接适用于LSTF问题,例如、高内存使用量和编码器-解码器体系结构固有的局限性。其中Transformer模型主要存在下面三个问题:
self-attention机制的二次计算复杂度问题:self-attention机制的点积操作使每层的时间复杂度和内存使用量为 。
高内存使用量问题:对长序列输入进行堆叠时,J个encoder-decoder层的堆栈使总内存使用量为 ,这限制了模型在接收长序列输入时的可伸缩性。
预测长期输出的效率问题:Transformer的动态解码过程,使得输出变为一个接一个的输出,后面的输出依赖前面一个时间步的预测结果,这样会导致推理非常慢。
基于Transformer的改进工作,学术界也进行得如火如荼,如The Sparse Transformer (Child et al. 2019),
LogSparse Transformer (Li et al. 2019), and Longformer
(Beltagy, Peters, and Cohan 2020) 均使用一种稀疏化方法来处理Transformer的时间复杂度问题,将时间复杂度降到了 O(Llog L), 但这些模型均采用一种启发式方法来决定选择哪些attention来进行计算,不具有通用性。Reformer (Kitaev, Kaiser,
and Levskaya 2019) 使用本地哈希化方法计算attention,同样取得O(Llog L)的时间复杂度,但它只能处理特别长的序列 。最近, Linformer (Wang
et al. 2020) 宣称可以达到O(L)的时间复杂度,但其矩阵维度在真实场景的长序列预测中无法完全确定,有退化到O(L2)的风险。其它一些模型压缩方法也都仅仅解决attention计算时的二次时间复杂度的问题,针对长序列的输入和输出导致的内存使用量偏高和输出效率低的问题都没有解决。
模型特点
这篇文章中,作者针对Transformer模型,提出了下面的目标:能否改进Transformer模型,使其计算、内存和体系结构更高效,同时保持更高的预测能力?为了达到这些目标,这篇文章中设计了一种基于改进Transformer的LSTF模型,即Informer模型,该模型具有三个显著特征:
一种ProbSpare self-attention机制,它可以在时间复杂度和内存使用方面达到 。
self-attention蒸馏机制,通过对每个attention层结果上套一个Conv1D,再加一个Maxpooling层,来对每层输出减半来突出主导注意,并有效地处理过长的输入序列。
并行生成式解码器机制,对长时间序列进行一次前向计算输出所有预测结果而不是逐步的方式进行预测,这大大提高了长序列预测的推理速度。
在介绍模型之前,本文先对模型的输入输出、编解码器结构和输入表示进行介绍(熟悉编解码器的同学可以略过)。
3.预备知识
01 输入输出形式化表示
输入:
输出:
其中dy>1
02 编解码结构
通常,编码-解码结构是这样设计的:将输入Xt编码为隐层状态Ht,然后将隐层状态解码为输出Yt。推理阶段则采用逐步推理方式,即动态解码,一个时间步解码完成后再解码另外一个时间步的结果。
具体为:通过前一步隐层状态
和其它前一步输出,计算k+1步的隐层状态
,然后预测第k+1步的输出
03 输入表示
在长序列时序建模问题中,不仅需要局部时序信息还需要层次时序信息,如星期、月和年等,以及突发时间戳信息(事件或某些节假日等)。常规自注意力机制很难直接适配,可能会带来编码器和解码器之间的 query 和 key 的错误匹配问题,最终影响预测效果。
如上图所示,位置嵌入分为了三种:
局部时间戳:即Transformer中的位置编码。计算公式为:
2. 全局时间戳。这里使用的可学习嵌入表示
具体实现时,构建一个词汇表,使用Embedding层表示每一个“词汇”,为对齐维度,使用1D卷积将输入标量
转为向量
计算公式为:
4. 网络结构
文中提出的Informer模型整体上仍然保存了Encoder-Decoder的架构,其整体框架如下图所示:
在上图左边为编码器,其编码过程为:编码器接收长序列输入(绿色部分),通过ProbSparse自注意力模块和自注意力蒸馏模块,得到特征表示。右边为解码器,解码过程为:解码器接收长序列输入(预测目标部分设置为0),通过多头注意力与编码特征进行交互,最后一次性直接预测输出目标部分(橙黄色部分)。
01 高效的自注意力机制
首先,让我们回顾一下经典的自注意力机制:根据三个输入(query, key, value),使用缩放点积计算输入的注意力矩阵:
其中,
第i个Query的attention系数的概率形式是:
该文作者通过实验验证了经典自注意力机制存在稀疏性,即自注意力特征图的长尾分布现象。具体为如下图所示,较少的点积贡献了绝大部分的注意力得分,也就是说其余部分的成对点积可以忽略。
为了度量query的稀疏性,作者使用KL散度来计算query的attention概率分布与均匀分布的概率分布的相对熵,其中第i个query的稀疏性的评价公式是:
其中第一项是 对于所有的key的Log-Sum-Exp (LSE),第二项是它们的算数平均值。
按照上面的评价方式,就可以得到ProbSparse self-attetion的公式,即:
其中, 是和 具有相同尺寸的稀疏矩阵,并且它只包含在稀疏评估 下top-u的queries。其中,u的大小通过一个采样参数来决定。这使得ProbSparse self-attention对于每个query-key只需要计算 点积操作。另外,为了消除Log-Sum-Exp (LSE)在计算过程中由于计算精度截断导致的数值稳定性问题,其对稀疏评估进行了上边界的计算,从而保证了计算的时间和空间复杂度为 。
通过该方法解决了Transformer的第一个问题,即:self-attention机制的二次计算复杂度问题。
02 编码器
编码器的设计目标为:在内存有限的情况下,通过注意力蒸馏机制,使得单个层级特征在时间维度减半,从而允许编码器处理更长的序列输入。
编码器的主要功能是捕获长序列输入之间的长范围依赖。
作为ProbSpare自注意机制的结果,encoder的特征映射存在值V的冗余组合,因此,这里利用distilling操作对具有主导注意力的优势特征赋予更高权重,并在下一层生成focus self-attention特征映射。从j到j+1层的distilling操作的过程如下:
其中, 包含了multi-head probsparse self-attention以及在attention block中的关键操作。Conv1d表示时间序列上的一维卷积操作,并通过ELU作为了激活函数,最后再进行最大池化操作。
同时为了增强注意力蒸馏机制的鲁棒性,作者还构建了主序列的多个长度减半副本,每个副本是前一个副本长度的一半,这些副本序列和主序列经过同样的注意力蒸馏机制,从而构建多个长度为L/4的特征图。
最后将这些特征图拼接起来,构成输入编码器最终的特征图。
通过以上方法,可以逐级减少特征图的大小,在计算空间上不会耗费过多的内存,解决了Transformer的第二个问题:高内存使用量问题
03 解码器
解码器的设计目标为:通过一次前向计算,预测长序列的所有输出。
原始的解码器结构,即堆叠两个相同的多头注意力层,是一个动态解码过程,即一步一步进行迭代输出。不同的是,本文采用的是批量生成式预测直接输出多步预测结果。此外,喂进解码器的输入也有所不同:
。其中
表示占位符(预测值);
表示开始“字符”,这个设置就比较简单有效。该方法源于NLP技术中的动态解码,原本由单个字符作为“开始字符”,作者将其扩展为生成式方式,即从靠近预测目标的输入序列中动态采样部分序列作为“开始Token”。于是,通过多个output一起计算输出的方法,解决了Transformer在LSTF中的第三个问题:预测长期输出的效率问题。
5.实验结果
01 数据集
该工作使用两个真实数据集和两个公开评测数据集。
1. ETT(电力变压器温度)数据集,从中国两个不同的城市收集的两年数据,传感器每15分钟采集一个样本点,按照两种采样粒度 {1 小时,15 分钟}将原始数据变为两个数据集;
2. ECL(耗电量),收集了 321 个客户端的用电消耗,共22个月的数据;
3. 天气数据集,美国 1600 各地区 4 年的气象数据,采样粒度为1小时。
02 实验结果分析
实验结果分析是我们需要重点关注的部分。
无论是单变量的长序列预测还是多变量的长序列预测,Informer 均能在多数数据集上取得优于baseline的表现(评估指标MSE和MAE)。从单变量时序预测来看:1. 在两种评测指标上,Informer 能够取得不错的提升,并且随着预测序列长度的增加,推理速度和预测误差增长地较为缓慢;2. Informer 相较原始自注意力的 infomer,取得最优的次数最多(28>14),并且优于 LogTansformer 和 Reformer,说明query的稀疏性假设在很多数据集上是成立的;3. Informer 相较 LSTMa 有巨大的提升,说明相较 RNN 类模型,自注意力机制中较短网络路径模型具有更强的预测能力。从多变量预测来看,Informer 依然击败了baseline,可以得出与单变量时序预测相同的结论。并且可以很方便地将单变量预测变为多变量预测,只需要调整最后的全连接层。
03 参数敏感度分析
作者这里通过不同参数的调整对模型最终性能表现进行了评测。参数主要包括输入长度、ProbSparse 的采样因子和堆叠的网络层数。在预测长序列时,通过增加序列输入长度,取得了更好的预测结果,这是因为更长的序列,蕴含了更丰富的特征。
04 消融实验
消融实验主要针对本文的三个创新点进行测试:ProbSparse 自注意力机制、自注意力蒸馏、生成式解码器。
实验表明,三种创新机制对较长的序列预测任务均有正面影响。
6. 总结
回顾一下,本文主要突出以下几点:
a. 长序列预测问题是一个基础且现实需求高的问题,值得重点研究。
b. 基于自注意力机制的模型在解决序列预测问题上是一个很有吸引力的模型
- ProbSparse 自注意力机制有助于降低attention计算过程中的时间复杂度
- self-attention蒸馏机制可以有效减少特征图的时间维度,从而降低内存消耗量
- 并行生成式解码器机制能够大幅提高长序列预测的效率
c. Query的注意力稀疏假设在自注意力网络结构中是行之有效的
本文提出的方法可以在其他领域取得同样良好的效果,如:长序列文本、音乐、视频、图像的生成任务。
Informer能获得AAAI 2021的Best Paper确实有很多值得肯定的地方。首先,在阅读体验上,我们可以很好地顺着作者的逻辑结构了解到本文的研究动机、方法及实验结果,由此可见,不论什么领域,讲故事的能力绝对重要。此外,实验部分比较充实,能够很好地围绕全文一直提及的长序列预测的难点以及Transformer应用到长序列预测上需要解决的问题。最后,作者针对传统attention网络结构中的query稀疏性进行了验证,为今后attention研究提供了明确的思路与方向,值得学习!