• 【时间序列预测】Informer论文笔记


    文章全名:Informer: Beyond Efficient Transformer for Long Sequence Time-Series Forecasting

    文章地址:[2012.07436] Informer: Beyond Efficient Transformer for Long Sequence Time-Series Forecasting (arxiv.org)

    来源:AAAI 2021 best paper

    完成单位:北京航空航天大学、加州大学伯克利分校、罗格斯大学、北京国网富达科技发展有限责任公司


    摘要

    长时预测需要模型有着较高的预测能力,这种能力能够捕捉到输出和输入之间精确的长期依赖耦合。

    近期研究发现Transformer能够提升预测能力,但是由于其存在的一些问题导致它无法直接应用于长时预测。问题包括:二次的时间复杂度,高内存消耗,编解码器结构内在的一些限制。

    因此本文设计了一种基于Transformer的长时预测模型,包含了三个独特的成分。

    1. ProbSparse 自注意机制,达到了 O ( L l o g L ) \mathcal O(LlogL) O(LlogL)的时空复杂度,表现也很好。

    2. 自注意力蒸馏通过将级联层输入减半,突出显示主导注意力,并有效处理极长的输入序列。

    3. 生成式解码器,能够以一个正向操作预测长时间序列,而不是一步一步的方式,这大大提高了长序列预测的推理速度。


    简介

    简介的主要内容和摘要类似,主要介绍了Transformer的一些缺陷,导致它无法有效地进行长时预测。

    总结了如下三个最大的限制:

    1. 自注意力的二次幂计算。自注意力是计算每个时间点与其它所有时间点的注意力分数,计算方式是是点积计算,所以每一层的时间和空间复杂度都是 O ( L 2 ) \mathcal O(L^2) O(L2)
    2. 对处理长输入的堆叠层的存储瓶颈。对于 J J J层编解码层,就会让整个模型的内存使用达到 O ( J ⋅ L 2 ) \mathcal O(J \cdot L^2) O(JL2),这就限制了模型处理长序列输入的规模。
    3. 预测长期输出的速度急剧下降。传统Transformer在解码的时候是逐步输出,这样就和RNN一样速度比较慢。

    目前大部分的工作都致力于解决限制1,比如说Reformer、Linformer,都是为了解决时间复杂度,但是限制2和限制3仍处于未被解决的状态。

    本文所做的贡献如下:

    1. 本文提出的Informer在长时预测任务表现良好,说明了Transformer结构的模型在捕获长序列依赖上有着很大的潜力。

    2. 本文提出的ProbSparse自注意力机制能够有效取代原来的自注意力机制,时空复杂度均为 O ( L l o g L ) \mathcal O(LlogL) O(LlogL)

    3. 本文提出自注意力蒸馏操作,来突出那些占主导作用的自注意力,进一步将空间复杂度限制在了 O ( ( 2 − ϵ ) L l o g L ) \mathcal O((2-\epsilon)LlogL) O((2ϵ)LlogL)

    4. 本文提出了生成式解码器,只需要一步前向步骤就可以获得输出,这样也能避免推理过程中传播过程可能存在的累计误差这一问题。


    模型

    首先是模型的整体结构

    image-20230904151326381


    查询的稀疏度衡量

    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)=jlk(qi,kl)k(qi,kj)vj=Ep(kjqi)[vj]

    如上式所示,第i个查询在所有键的注意力可以被定义为一个可能性 p ( k j ∣ q i ) p\left(\mathbf{k}_j \mid \mathbf{q}_i\right) p(kjqi),输出就是每个可能性乘上对应v的和。占主导地位的点积对鼓励对应查询的注意力概率分布远离均匀分布。如果p趋近于一个均匀分布 q ( k j ∣ q i ) = 1 L k q(k_j|q_i)=\frac{1}{L_k} q(kjqi)=Lk1,那么自注意力就变成一个普通的和,这样的话这个输出对于残差输入就是冗余的,因为这两个东西是一样的。所以通过每个查询对应的 p ( k j ∣ q i ) p\left(\mathbf{k}_j \mid \mathbf{q}_i\right) p(kjqi) q ( k j ∣ q i ) q(k_j\mid q_i) q(kjqi)的相似性可以用来判别那些查询是重要的。

    判断两个分布相似度的方法是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(qp)=lnl=1LKeqikl/d LK1j=1LKqikj/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=1LKed qikjLK1j=1LKd 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=clnLQ,这样时间空间复杂度都会下降。本文也使用了多头注意的机制,这种注意为每个头部生成不同的稀疏查询键对,从而避免了严重的信息损失

    但是计算稀疏度的时候还是需要遍历所有的 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 lnLKM(qi,K)jmax{qikj/d }LK1j=1LK{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=1LKd qikj


    Encoder

    首先给出encoder的整体结构:

    image-20230904165515635

    自注意力蒸馏

    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 tRLtoken ×dmodel 是开始的token, X 0 t ∈ R L y × d model  \mathbf{X}_0^t \in \mathbb{R}^{L_{y} \times d_{\text {model }}} X0tRLy×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=1nyy^

    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=1n(yy^)2

    作用在每个预测窗口,对于多变量预测就取平均。


    结果分析

    image-20230904190542187

    image-20230904190633755


    单变量时序预测

    本文的模型在所有数据集上都表现良好,并且当需要预测的长度变长时,模型的预测误差也是平滑且缓慢的上升,说明模型的预测能力很优秀。

    Informer相较于没有采用sparse策略的Informer表现要更好,说明对查询进行稀疏操作也是能够生成合理的注意力图的。

    Reformer因为使用的是动态解码,在长时预测任务中表现很差,其它使用生成式解码器的非自回归的解码器表现就更好一些。

    本文提出的方法要比使用循环神经网络的方法表现好很多。


    多变量时序预测

    整体表现和单变量时序预测类似,仍然能超过其它baseline,并且比基于RNN的方法要好

    与单变量结果相比,相较其它模型优势的压倒性有所降低。这种现象可能是由于特征维度的预测能力的异性所导致的。本文没有再做更多的研究和探讨。

    不同粒度数据的比较

    ETT分钟级别的序列{96,288,672}和ETT小时级别的序列{24,48,168}是对齐的。当数据的粒度不同时,Informer仍都能够比其它的baseline表现更好。


    消融实验

    对ProbSparse自注意力的消融

    image-20230904200231177


    对自注意力蒸馏的消融

    image-20230904200332255


    对生成式解码器的消融

    image-20230904200402056


    运算效率

    image-20230904200536079

  • 相关阅读:
    Ubuntu22.04 搭建 OpenHarmony 命令行开发环境
    java通过解密身份证计算年龄(精确到日)
    Vue第四讲
    LeetCode50天刷题计划(Day 6—— 整数反转 14.20-15.20)
    Hbase(二)进阶
    c# 设计剪刀石头布游戏
    【LeetCode每日一题:813. 最大平均值和的分组~~~前缀和+递归+记忆化搜索】
    Nginx部署SSL证书
    单片机毕业设计-基于单片机的运动手环
    智慧城市建设方案建议书——如何打造智慧城市
  • 原文地址:https://blog.csdn.net/Henry_Zhao10/article/details/132701347