论文标题:Informer: Beyond Efficient Transformer for Long Sequence Time-Series Forecasting
论文链接:https://arxiv.org/abs/2012.07436
代码链接:https://github.com/zhouhaoyi/Informer2020
论文来源:AAAI 2021

一、概述

  1. 长序列时间序列预测问题

长序列时间序列预测(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)能力;
②对长序列的输入和输出的有效处理。

  1. Transfomer模型的优势与局限之处

Transfomer模型相较于RNN结构模型表现出了更强的捕获长程依赖关系的能力,其中很重要的一个原因是Transformer应用 self-attention机制将信号传播的最大路径长度降低到了最短的 O ( 1 ) O(1) O(1)并且避免了循环架构(recurrent structure),也就是说Transfomer模型具备能力①,因此Transfomer对于解决LSTF问题表现出巨大的潜力。

然而不幸的是Transfomer模型对于长度为 L L L的序列来说需要 L 2 L^2 L2的二次计算复杂度和内存使用,也就是说它不具备能力②。虽然在一些NLP任务上取得了较好的成效但是也消耗了大量的资源,尤其对于现实世界中的LSTF问题来说,Transfomer模型所需的资源(比如训练时需要多GPU以及部署时昂贵的花费)是难以承受的,这是将Transfomer应用于LSTF的瓶颈所在。

Transformer在应用于LSTF时具体会有以下3种限制:
① **self-attention的二次计算复杂度。self-attention的原子操作——规范点积(canonical dot-product)导致每层的时间复杂度和内存使用是 O ( L 2 ) O(L^2) O(L2)
层的堆叠在输入长序列时受到内存限制。encoder/decoder的 J J J层堆叠架构会导致在输入长序列时内存使用为 O ( J ⋅ L 2 ) O(J\cdot L^{2}) O(JL2),这一点限制了模型输入长序列时的可拓展性(scalability)。
对长序列输出进行预测时的速度骤降。**Transformer的动态解码(dynamic decoding)过程导致在对长序列输出进行推断时速度缓慢,实际效果可能和前面例子里的基于RNN的模型一样差。

基于上述事实,本文试图回答以下问题:在保持对长序列预测容量的同时,Transfomer能不能在计算复杂度、内存使用和架构上同样是高效的?

  1. 相关工作

为了提高self-attention的效率,已有一些前人的工作,提出了一些改进Transformer的模型。Sparse Transformer,LogSparse Transformer,Longformer使用启发式的方法试图解决限制①,将每层复杂度降到了 O ( L l o g L ) O(Llog L) O(LlogL),不过这些模型效果的增益是有限的;Reformer使用locally sensitive hashing self-attention同样达到了 O ( L l o g L ) O(Llog L) O(LlogL)的复杂度,不过其只对非常长的序列才能起到效果; Linformer达到了线性复杂度 O ( L ) O(L) O(L),不过对于真实世界的长序列数据不能固定映射矩阵,因而有退化到 O ( L 2 ) O(L^2) O(L2)的风险;Transformer-XL和Compressive Transformer使用辅助隐状态来捕获长程依赖关系,因而有可能放大限制①,不利于打破效率瓶颈。

  1. 本文的贡献

上述前人的相关工作只关注解决限制①,而没有着手解决限制②和③。为了增强Transformer模型对长序列的容量,本文研究了self-attention机制的稀疏性,将会针对所有的3个限制来提出各自的解决方案。具体来说,本文的贡献如下:
①Informer模型增强了对LSTF问题的预测容量,这一点验证了Transformer-like的模型的潜在价值,即其能够捕获长序列时间序列输入与输出之间的长程依赖关系;
②提出了ProbSparse Self-attention机制,能够替换规范self-attention,并且达到了 O ( L l o g L ) O(LlogL) O(LlogL)的时间复杂度和内存使用量;
③提出了self-attention蒸馏( Self-attention Distilling)操作,能够在堆叠的 J J J层中提炼主要的注意力得分,大幅降低了总的空间复杂度,达到 O ( ( 2 − ϵ ) L l o g L ) O((2-\epsilon )Llog L) O((2ϵ)LlogL)
④提出了生成式的decoder(Generative Style Decoder)来获取长序列输出,只需要一个前向的步骤即可输出整个解码序列,同时避免了推断期间的累积误差传播(cumulative error spreading)。

本文的②,③,④3个贡献分别针对前面提出的Transformer的3个限制。

二、ProbSparse Self-attention

  1. 表示

首先定义我们要讨论的问题。时间序列(time-series)简单的说就是各时间点上形成的数值序列,时间序列分析就是通过观察历史数据预测未来的值。时间序列分析并不是关于时间的回归,它主要是研究自身的变化规律的。在进行一个固定窗口的滚动预测(rolling forecast)时,我们的每个时刻的输入为 X t = { x 1 t , ⋯ , x L x t ∣ x i t ∈ R d x } \mathrm{X}^{t}=\left \{x_{1}^{t},\cdots ,x_{L_{x}}^{t}|x_{i}^{t}\in \mathbb{R}^{d_{x}}\right \} Xt={x1t,,xLxtxitRdx},输出为需要预测的序列 Y t = { y 1 t , ⋯ , y L y t ∣ y i t ∈ R d y } \mathrm{Y}^{t}=\left \{y_{1}^{t},\cdots ,y_{L_{y}}^{t}|y_{i}^{t}\in \mathbb{R}^{d_{y}}\right \} Yt={y1t,,yLytyitRdy}。相较于之前的工作,LSTF要求预测一个 L y L_{y} Ly更大的序列,并且这里并不限定仅预测单变量,即 d y ≥ 1 d_{y}\geq 1 dy1

在传统的encoder-decoder架构中,encoder会将输入 X t \mathrm{X}^{t} Xt编码成隐状态序列 H t = { h 1 t , ⋯ , h L h t } \mathrm{H}^{t}=\left \{h_{1}^{t},\cdots ,h_{L_{h}}^{t}\right \} Ht={h1t,,hLht},然后decoder利用 H t \mathrm{H}^{t} Ht解码成 Y t \mathrm{Y}^{t} Yt。在解码过程中,包括一个step-by-step的过程,也就是动态解码,在第 k k k步中,decoder会利用前一个时刻的隐状态 h k − 1 t h_{k-1}^{t} hk1t以及其他必要的前一时刻的输出来计算一个新的隐状态 h k t h_{k}^{t} hkt,然后来预测当前时刻的输出 y k t y_{k}^{t} ykt。在Transformer中也沿用了类似的动态解码的过程(在预测时需要动态解码,在训练时不需要,因为在训练时直接使用ground truth即可),而在本文提出的Informer中同样沿用了encoder-decoder架构,但舍弃了动态解码过程,而采用一种生成式的解码过程一次性解码出整个序列 Y t \mathrm{Y}^{t} Yt

基于RNN的模型依靠其本身的循环结构来学习时间序列,而很少依赖时间戳。在Transformer中,时间戳作为局部的位置信息。然而在LSTF中,为了捕获长程依赖关系需要提供全局的时间信息,比如hierarchical time stamps(周、月、年等)以及agnostic time stamps(假期、时间)。为了能够输入这些信息,本文提出了一种统一的输入表示,如下图所示:

我们有第 t t t个序列输入 X t \mathrm{X}^{t} Xtp p p个类型的全局时间戳,并且模型的输入维度为 d m o d e l d_{model} dmodel,首先使用固定的位置编码 P E PE PE来表示局部的位置信息,即:

P E ( p o s , 2 j ) = s i n ( p o s / ( 2 L x ) 2 j / d m o d e l ) P E ( p o s , 2 j + 1 ) = c o s ( p o s / ( 2 L x ) 2 j / d m o d e l ) w h e r e j ∈ { 1 , ⋯ , ⌊ d m o d e l / 2 ⌋ } PE_{(pos,2j)}=sin(pos/(2L_{x})^{2j/d_{model}})\\ PE_{(pos,2j+1)}=cos(pos/(2L_{x})^{2j/d_{model}})\\ where\; j\in \left \{1,\cdots ,\left \lfloor d_{model}/2\right \rfloor\right \} PE(pos,2j)=sin(pos/(2Lx)2j/dmodel)PE(pos,2j+1)=cos(pos/(2Lx)2j/dmodel)wherej{1,,dmodel/2}

每种类型的全局时间戳都被分配了一个可学习的时间戳embedding S E ( p o s ) SE_{(pos)} SE(pos),每种embedding都有一个固定的vocab size(最大是60,也就是以分钟作为最细的粒度)。另外为了对齐维度,我们使用一维卷积(卷积核宽度为3,步长为1)将 x i t x_i^t xit映射到 d m o d e l d_{model} dmodel维的 u i t u_i^t uit。最终输入到模型中的序列为:

X f e e d [ i ] t = α u i t + P E ( L x × ( t − 1 ) + i , ) + ∑ p [ S E ( L x × ( t − 1 ) + i ) ] p w h e r e i ∈ { 1 , ⋯ , L x } X_{feed[i]}^{t}=\alpha u_{i}^{t}+PE_{(L_{x}\times (t-1)+i,)}+\sum _{p}[SE_{(L_{x}\times (t-1)+i)}]_{p}\\ where\; i\in \left \{1,\cdots ,L_{x}\right \} Xfeed[i]t=αuit+PE(Lx×(t1)+i,)+p[SE(Lx×(t1)+i)]pwherei{1,,Lx}

α \alpha α是一个超参数,用来平衡 u i t u_{i}^{t} uit和位置编码以及时间戳embedding,如果输入已经被标准化,那么建议 α = 1 \alpha=1 α=1

  1. self-attention机制

Transformer中定义的self-attention接收3个输入query、key和value,然后计算它们的scale dot-product,即:

A ( Q , K , V ) = s o f t m a x ( Q K T d ) V w h e r e Q ∈ R L Q × d , K ∈ R L K × d , V ∈ R L V × d A(Q,K,V)=softmax\left (\frac{QK^{T}}{\sqrt{d}}\right )V\\ where\; Q\in \mathbb{R}^{L_{Q}\times d},K\in \mathbb{R}^{L_{K}\times d},V\in \mathbb{R}^{L_{V}\times d} A(Q,K,V)=softmax(d

QKT)VwhereQRLQ×d,KRLK×d,VRLV×d

这里的 d d d指输入的维度。这里使用 q i , k i , v i q_i,k_i,v_i qi,ki,vi分别表示 Q , K , V Q,K,V Q,K,V的第 i i i行,那么第 i i i个query的attention就被定义为一个概率形式的核平滑方法(kernel smoother):

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 ] w h e r e p ( k j ∣ q i ) = k ( q i , k j ) ∑ l k ( q i , k l ) a n d k ( q i , k j ) s e l e c t a s y m m e t r i c e x p o n e n t i a l k e r n e l e x p ( q i k j T d ) A(q_{i},K,V)=\sum _{j}\frac{k(q_{i},k_{j})}{\sum _{l}k(q_{i},k_{l})}v_{j}=E_{p(k_{j}|q_{i})}[v_{j}]\\ where\; p(k_{j}|q_{i})=\frac{k(q_{i},k_{j})}{\sum _{l}k(q_{i},k_{l})}\; and\; k(q_{i},k_{j})\; select\; asymmetric\; exponential\; kernel\; exp\left (\frac{q_{i}k_{j}^{T}}{\sqrt{d}}\right ) A(qi,K,V)=jlk(qi,kl)k(qi,kj)vj=Ep(kjqi)[vj]wherep(kjqi)=lk(qi,kl)k(qi,kj)andk(qi,kj)selectasymmetricexponentialkernelexp(d

qikjT)

self-attention通过计算 p ( k j ∣ q i ) p(k_{j}|q_{i}) p(kjqi)来将所有的value进行加权求和,这个过程需要 O ( L Q L K ) O(L_{Q}L_{K}) O(LQLK)的时间复杂度和内存使用,这是增强Transformer对LSTF问题的容量的主要障碍。

  1. ProbSparse Self-attention

一些之前的研究表明self-attention的权重具有潜在的稀疏性(sparsity),并且已经研究了一些选择性的方法来不影响性能地过滤稀疏权重,这一方面的研究包括Sparse Transformer、 LogSparse Transformer、Longformer等。

本文对self-attention的稀疏性进行了调查。self-attention的权重构成了一个长尾分布(long tail distribution),也就是很少的权重贡献了主要的attention,而其他的可以被忽略:

问题在于对于可忽略的权重,如何识别出它们。第 i i i个query对所有的key的attention权重可以看做一个概率分布 p ( k j ∣ q i ) p(k_{j}|q_{i}) p(kjqi),一些起显著作用的attention权重会使得 p ( k j ∣ q i ) p(k_{j}|q_{i}) p(kjqi)偏离均匀分布。如果 p ( k j ∣ q i ) p(k_{j}|q_{i}) p(kjqi)接近一个均匀分布 q ( k j ∣ q i ) = 1 L K q(k_{j}|q_{i})=\frac{1}{L_{K}} q(kjqi)=LK1,那么self-attention就成了对value的平均,也就是冗余的,也就表明第 i i i个query是lazy的。下图展示了active和lazy的query的attention权重分布:

一个query的分布 p ( k j ∣ q i ) p(k_{j}|q_{i}) p(kjqi)与均匀分布的 q ( k j ∣ q i ) q(k_{j}|q_{i}) q(kjqi)之间的差异可以用KL散度来度量:

K L ( q ∣ ∣ p ) = − ∑ j = 1 L K q ( k j ∣ q i ) l n ( p ( k j ∣ q i ) q ( k j ∣ q i ) ) = ∑ j = 1 L K q ( k j ∣ q i ) l n q ( k j ∣ q i ) − ∑ j = 1 L K p ( k j ∣ q i ) l n p ( k j ∣ q i ) = ∑ j = 1 L K 1 L K l n 1 L K − ∑ j = 1 L K 1 L K l n k ( q i , k j ) ∑ l k ( q i , k l ) = ∑ j = 1 L K 1 L K l n 1 L K − ∑ j = 1 L K 1 L K l n e x p ( q i k j T / d ) ∑ l = 1 L K e x p ( q i k l T / d ) = l n ∑ l = 1 L K e x p ( q i k l T d ) − 1 L K ∑ j = 1 L K q i k j T d − l n L K KL(q||p)=-\sum _{j=1}^{L_{K}}q(k_{j}|q_{i})ln\left (\frac{p(k_{j}|q_{i})}{q(k_{j}|q_{i})}\right )\\ =\sum _{j=1}^{L_{K}}q(k_{j}|q_{i})ln\, q(k_{j}|q_{i})-\sum _{j=1}^{L_{K}}p(k_{j}|q_{i})ln\, p(k_{j}|q_{i})\\ =\sum _{j=1}^{L_{K}}\frac{1}{L_{K}}ln\frac{1}{L_{K}}-\sum _{j=1}^{L_{K}}\frac{1}{L_{K}}ln\frac{k(q_{i},k_{j})}{\sum _{l}k(q_{i},k_{l})}\\ =\sum _{j=1}^{L_{K}}\frac{1}{L_{K}}ln\frac{1}{L_{K}}-\sum _{j=1}^{L_{K}}\frac{1}{L_{K}}ln\frac{exp\left (q_{i}k_{j}^{T}/\sqrt{d}\right )}{\sum _{l=1}^{L_{K}}exp\left (q_{i}k_{l}^{T}/\sqrt{d}\right )}\\ =ln\sum _{l=1}^{L_{K}}exp\left (\frac{q_{i}k_{l}^{T}}{\sqrt{d}}\right )-\frac{1}{L_{K}}\sum _{j=1}^{L_{K}}\frac{q_{i}k_{j}^{T}}{\sqrt{d}}-lnL_{K} KL(qp)=j=1LKq(kjqi)ln(q(kjqi)p(kjqi))=j=1LKq(kjqi)lnq(kjqi)j=1LKp(kjqi)lnp(kjqi)=j=1LKLK1lnLK1j=1LKLK1lnlk(qi,kl)k(qi,kj)=j=1LKLK1lnLK1j=1LKLK1lnl=1LKexp(qiklT/d

)exp(qikjT/d

)
=lnl=1LKexp(d

qiklT
)
LK1j=1LKd

qikjT
lnLK

去掉常数,就可以定义第 i i i个query的稀疏性度量为:

M ( q i , K ) = l n ∑ j = 1 L K e x p ( q i k j T d ) − 1 L K ∑ j = 1 L K q i k j T d M(q_{i},K)=ln\sum _{j=1}^{L_{K}}exp\left (\frac{q_{i}k_{j}^{T}}{\sqrt{d}}\right )-\frac{1}{L_{K}}\sum _{j=1}^{L_{K}}\frac{q_{i}k_{j}^{T}}{\sqrt{d}} M(qi,K)=lnj=1LKexp(d

qikjT)LK1j=1LKd

qikjT

这里的第一项为一个Log-Sum-Exp(LSE)运算,第二项为一个算术平均值,如果第 i i i个query获得了一个较大的 M ( q i , K ) M(q_{i},K) M(qi,K),这表明它的attention权重分布 p p p是更加的多样化,很可能包含长尾分布中的主要注意力。因此对于所有的query来说,我们选取 M ( q i , K ) M(q_{i},K) M(qi,K)排名前 u u u的若干query作为 Q ^ \hat{Q} Q^,这里的 u = c l n L Q u=c\,lnL_Q u=clnLQc c c是一个常数采样因子,那么ProbSparse Self-attention的过程就表示为:

A ( Q , K , V ) = s o f t m a x ( Q ^ K T d ) V A(Q,K,V)=softmax\left (\frac{\hat{Q}K^{T}}{\sqrt{d}}\right )V A(Q,K,V)=softmax(d

Q^KT)V

这里的ProbSparse Self-attention对于每个key就只需要计算 O ( L Q ) O(L_{Q}) O(LQ)次点积,并且内存使用量为 O ( L K l n L Q ) O(L_{K}lnL_{Q}) O(LKlnLQ)。然而,在计算所有的 M ( q i , K ) M(q_{i},K) M(qi,K)时我们需要计算每个点积,也就是 O ( L Q L K ) O(L_{Q}L_{K}) O(LQLK)的复杂度,并且LSE操作有潜在的数值稳定性问题。对于这个问题,本文提出了一种近似计算稀疏性度量的方法。

对于近似的稀疏性度量,我们采用以下的度量方法:

M ^ ( q i , K ) = m a x j { q i k j T d } − 1 L K ∑ j = 1 L K q i k j T d \hat{M}(q_{i},K)=\underset{j}{max}\left \{\frac{q_{i}k_{j}^{T}}{\sqrt{d}}\right \}-\frac{1}{L_{K}}\sum _{j=1}^{L_{K}}\frac{q_{i}k_{j}^{T}}{\sqrt{d}} M^(qi,K)=jmax{d

qikjT}LK1j=1LKd

qikjT

在实际操作中,我们只需要采样 U = L Q l n L K U=L_QlnL_K U=LQlnLK个点积来近似计算所有的 M ^ ( q i , K ) \hat{M}(q_{i},K) M^(qi,K),对于其他的点积赋值为 0 0 0。根据计算的稀疏性度量 M ^ ( q i , K ) \hat{M}(q_{i},K) M^(qi,K),挑选排名前 u u u的query作为 Q ^ \hat{Q} Q^,然后进行ProbSparse Self-attention。在 M ^ ( q i , K ) \hat{M}(q_{i},K) M^(qi,K)没有LSE操作,其中的最大值操作对 0 0 0不敏感并且数值稳定。最终ProbSparse Self-attention的复杂度为 O ( L l n L ) O(LlnL) O(LlnL)(通常 L Q L_Q LQL K L_K LK是相等的)。

上面之所以可以用 M ^ ( q i , K ) \hat{M}(q_{i},K) M^(qi,K)来代替 M ( q i , K ) M(q_{i},K) M(qi,K)来作为稀疏性度量,是因为有以下Lemma 1和Proposition 1做支撑:

Lemma 1
对于所有的query q i ∈ R d q_{i}\in \mathbb{R}^{d} qiRd以及集合 K K K中所有的key k j ∈ R d k_{j}\in \mathbb{R}^{d} kjRd,我们有 M ( q i , K ) M(q_{i},K) M(qi,K)的上下界:
l n L K ≤ M ( q i , K ) ≤ m a x j { q i k j T d } − 1 L K ∑ j = 1 L K q i k j T d + l n L K lnL_{K}\leq M(q_{i},K)\leq \underset{j}{max}\left \{\frac{q_{i}k_{j}^{T}}{\sqrt{d}}\right \}-\frac{1}{L_{K}}\sum _{j=1}^{L_{K}}\frac{q_{i}k_{j}^{T}}{\sqrt{d}}+lnL_{K} lnLKM(qi,K)jmax{d

qikjT}LK1j=1LKd

qikjT
+
lnLK
q i ∈ K q_{i}\in K qiK时同样满足。

Proposition 1
假设 k j ∼ N ( μ , Σ ) k_{j}\sim N(\mu ,\Sigma ) kjN(μ,Σ),同时定义集合 q k i = { ( q i k j T ) / d ∣ j = 1 , ⋯ , L K } qk_{i}=\left \{(q_{i}k_{j}^{T})/\sqrt{d}|j=1,\cdots ,L_{K}\right \} qki={(qikjT)/d

j=1,,LK},对于 ∀ M m = m a x i M ( q i , K ) \forall M_{m}=max_{i}M(q_{i},K) Mm=maxiM(qi,K),存在一个 κ \kappa κ满足: ∀ q 1 , q 2 ∈ { q ∣ M ( q , K ) ∈ [ M m , M m − κ ) } \forall q_{1},q_{2}\in \left \{q|M(q,K)\in [M_{m},M_{m}-\kappa )\right \} q1,q2{qM(q,K)[Mm,Mmκ)},如果 M ^ ( q 1 , K ) > M ^ ( q 2 , K ) \hat{M}(q_{1},K)>\hat{M}(q_{2},K) M^(q1,K)>M^(q2,K),同时 V a r ( q k 1 ) > V a r ( q k 2 ) Var(qk_{1})>Var(qk_{2}) Var(qk1)>Var(qk2),那么大概率 M ( q 1 , K ) > M ( q 2 , K ) M(q_{1},K)>M(q_{2},K) M(q1,K)>M(q2,K)

M ^ ( q i , K ) \hat{M}(q_{i},K) M^(qi,K)也就是 M ( q i , K ) M(q_{i},K) M(qi,K)的上界,上述命题保证了使用 M ^ ( q i , K ) \hat{M}(q_{i},K) M^(qi,K)来做稀疏性度量和使用 M ( q i , K ) M(q_{i},K) M(qi,K)的效果是差不多的。关于Lemma 1和Proposition 1的证明可以参照论文附录里的证明。

ProbSparse Self-attention的算法如下:

输入:Tensor Q ∈ R m × d , K ∈ R n × d , V ∈ R n × d Q\in \mathbb{R}^{m\times d},K\in \mathbb{R}^{n\times d},V\in \mathbb{R}^{n\times d} QRm×d,KRn×d,VRn×d
①初始化:设置超参数 c , u = c l n m , U = m l n n c,u=c\, lnm,U=m\, lnn c,u=clnm,U=mlnn
②从 K K K中随机采样 U U U个点积对 K ^ \hat{K} K^
③计算采样的得分 S ^ = Q K ^ T \hat{S}=Q\hat{K}^{T} S^=QK^T
④按行计算稀疏性得分 M ^ = m a x ( S ^ ) − m e a n ( S ^ ) \hat{M}=max(\hat{S})-mean(\hat{S}) M^=max(S^)mean(S^)
⑤按照 M ^ \hat{M} M^选择排名最前的 u u u个query组成 Q ^ \hat{Q} Q^
S 1 = s o f t m a x ( Q K ^ T d ) V S_{1}=softmax\left (\frac{Q\hat{K}^{T}}{\sqrt{d}}\right )V S1=softmax(d

QK^T)V
S 0 = m e a n ( V ) S_{0}=mean(V) S0=mean(V)
S = { S 1 , S 0 } S=\left \{S_{1},S_{0}\right \} S={S1,S0},并且调整为原来的行顺序;
输出:ProbSparse Self-attention的feature map S S S

三、Informer的encoder(Self-attention Distilling)

按照上一节中介绍的输入表示方法, t t t时刻输入的序列 X t \mathrm{X}^{t} Xt会被表示成 X f e e d _ e n t ∈ R L x × d m o d e l X_{feed\_en}^{t}\in \mathbb{R}^{L_{x}\times d_{model}} Xfeed_entRLx×dmodel

按照上面的算法介绍的ProbSparse Self-attention过程,attention的结果必然会产生冗余(由于存在 S 0 S_{0} S0),因此本文又提出了self-attention蒸馏操作来提炼出主要的attention,这大大地缩短了输入的时间维度。具体的,从第 j j j层到 j + 1 j+1 j+1的蒸馏操作为:

X j + 1 t = M a x P o o l ( E L U ( C o n v 1 d ( [ X j t ] A B ) ) ) X_{j+1}^{t}=MaxPool(ELU(Conv1d([X_{j}^{t}]_{AB}))) Xj+1t=MaxPool(ELU(Conv1d([Xjt]AB)))

式子中 [ ⋅ ] A B [\cdot ]_{AB} []AB表示Multi-head ProbSparse Self-attention以及其他必要的操作(包括Add、LayerNorm、FFN等), C o n v 1 d Conv1d Conv1d表示在时间维度上执行一维卷积(卷积核宽度为3)并且后面跟随 E L U ELU ELU激活函数,然后经过 M a x P o o l MaxPool MaxPool进行最大池化下采样(池化窗口宽度为2),将输入的长度变为原来的一半。self-attention蒸馏操作将总共的内存占用量变为了 O ( ( 2 − ϵ ) L l o g L ) O((2-\epsilon )LlogL) O((2ϵ)LlogL),这里的 ϵ \epsilon ϵ是一个很小的数字。

为了增强蒸馏操作的鲁棒性,本文的encoder架构还建立了多个encoder的stack,每个stack都是一个独立的小的encoder,只是随着stack的增加,逐步每次减少一个蒸馏操作层和输入长度的一半,最终将所有的stack输出拼接起来。Informer的encoder架构如下图所示:

举例来说,如果encoder存在3个stack,那么第一个stack就会有3个Multi-head ProbSparse Self-attention层和2个Self-attention Distilling层(输入为 L L L,输出为 L / 4 L/4 L/4),第二个stack就会有2个Multi-head ProbSparse Self-attention层和1个Self-attention Distilling层(输入为 L / 2 L/2 L/2,输出为 L / 4 L/4 L/4),第三个stack就会有1个Multi-head ProbSparse Self-attention层而没有Self-attention Distilling层(输入为 L / 4 L/4 L/4,输出为 L / 4 L/4 L/4)。这里的stack输入如果为 L / 2 L/2 L/2,则使用的是原输入的后半部分, L / 4 L/4 L/4类似。

四、Informer的decoder(Generative Style Decoder)

Informer的decoder由一个Multi-head Masked ProbSparse Self-attention层和一个Multi-head Self-attention层组成。这里的Multi-head ProbSparse Self-attention要进行mask,也是为了避免左向信息流,防止自回归。同时最后要有一个全连接层,全连接层输出的维度取决于要预测的变量维度 d y d_y dy。本文提出了一种生成式的推理过程来提高推理的速度,具体的,decoder的输入为:

X f e e d _ d e t = C o n c a t ( X t o k e n t , X 0 t ) ∈ R ( L t o k e n + L y ) × d m o d e l X_{feed\_de}^{t}=Concat(X_{token}^{t},X_{0}^{t})\in \mathbb{R}^{(L_{token}+L_{y})\times d_{model}} Xfeed_det=Concat(Xtokent,X0t)R(Ltoken+Ly)×dmodel

这里的 X t o k e n t ∈ R L t o k e n × d m o d e l X_{token}^{t}\in \mathbb{R}^{L_{token}\times d_{model}} XtokentRLtoken×dmodel是start token, X 0 t ∈ R L y × d m o d e l X_{0}^{t}\in \mathbb{R}^{L_{y}\times d_{model}} X0tRLy×dmodel是一个为预测序列保留的placehood(设置scalar值为0)。start token是自然语言处理的动态解码过程中一项有效的技术,通常start token设置为一个特殊的flag,而在Informer里的start token是一个序列,从encoder的输入中截取得到,举例来说,要预测7天的序列,那么可以截取输入序列中的最后5天作为start token。 X 0 t X_{0}^{t} X0t包含预测序列的时间戳embedding。整个decoder的解码过程舍弃了动态解码过程,而采用一次前向过程即可解码得到整个输出序列。训练时选用MSE作为损失函数。

结合前面的encoder,整个Informer的架构如下:

五、实验

Infromer在ETTh1,ETTh2,ETTm1,Weather,ECL五个数据集上进行了实验,其中前三个是作者提供的现实世界工业领域的数据集,后两个是通用的benchmark数据集。分别进行了单变量和多变量LSTF预测:

对实验结果的统计表明,Informer在单变量预测上取得了相较于其他方法的压倒性优势,而多变量虽然也取得了一定优势,但结果并没有压倒性,作者推测原因在于特征多维度预测的各向异性,在接下来的工作中还有待研究。

六、消融实验

  1. ProbSparse Self-attention的性能

  1. Self-attention Distilling的性能

  1. Generative Style Decoder的性能

这里值得注意的一点是Informer的预测可以有一定的offset,这表明预测结果仅依赖于时间戳:

  1. 计算效率

Informer:用于长序列时间序列预测的新型Transformer相关推荐

  1. 【时序】Informer:用于长序列预测的高效 Transformer 论文笔记

    论文名称:Informer: Beyond Efficient Transformer for Long Sequence Time-Series Forecasting 论文下载:https://a ...

  2. Informer--用于长序列时序预测【2021AAAI Best Paper】

    开篇 这篇文章来解读Informer,文章的出发点是利用Transformer来解决长序列时序预测问题[Long sequence time-series forecasting ,LSTF],数据集 ...

  3. 【时序】N-BEATS:用于可解释时间序列预测的神经基础扩展分析

    论文名称:N-BEATS: Neural basis expansion analysis for interpretable time series forecasting 论文下载:https:/ ...

  4. 时间序列预测 | Python实现Transformer时间序列数据预测

    时间序列预测 | Python实现Transformer时间序列数据预测 目录 时间序列预测 | Python实现Transformer时间序列数据预测 基本介绍 Transformer设计 Tran ...

  5. 【论文解读】AAAI21最佳论文Informer:效果远超Transformer的长序列预测神器!

    炼丹笔记干货 作者:一元,四品炼丹师 Informer:最强最快的序列预测神器 01 简介 在很多实际应用问题中,我们需要对长序列时间序列进行预测,例如用电使用规划.长序列时间序列预测(LSTF)要求 ...

  6. 解读:Informer——比Transformer更有效的长时间序列预测方法

    写在前面 下面这篇文章的内容主要是来自发表于AAAI21的一篇最佳论文<Informer: Beyond Efficient Transformer for Long Sequence Time ...

  7. AAAI21最佳论文Informer:效果远超Transformer的长序列预测神器???

    Informer:最强最快的序列预测神器??? AAAI21最佳论文Informer:效果远超Transformer的长序列预测神器! 01 简介 在很多实际应用问题中,我们需要对长序列时间序列进行预 ...

  8. AAAI21最佳论文Informer:效果远超Transformer的长序列预测神器!

    Informer:最强最快的序列预测神器 AAAI21最佳论文Informer:效果远超Transformer的长序列预测神器! 作者:一元,公众号:炼丹笔记 01 简介 在很多实际应用问题中,我们需 ...

  9. 【时序】TCCT:用于时间序列预测的紧耦合卷积 Transformer

    论文名称:TCCT: Tightly-coupled convolutional transformer on time series forecasting 论文下载:https://doi.org ...

最新文章

  1. AI换脸、声音篡改等,明确写入新版《民法典》
  2. 用node批量压缩html页面
  3. Cocos Creator学习目录
  4. 【转】ABAP的坑4
  5. python写表格_python写入表格
  6. Spring装配Bean的过程
  7. java ee 中文乱码的问题
  8. TCPMP0.72RC1的编译与移植以及自己另外做UI完整方法
  9. php使用webservivce_JWS服务开发使用指南
  10. 【你敢说你懂JS吗】——JS测试
  11. [我的成长:1004期]春节快乐
  12. ASM磁盘配置(udev)
  13. gotoxy c语言,C语言中的gotoxy()到c++中变成什么了?
  14. 麻将编程c语言,C语言麻将算法(胡牌算法)
  15. 音乐播放器功能的实现,歌词lrc显示,播放过程中来电
  16. 当下中国的十二种孤独
  17. APP开放源码第一弹《纳豆》
  18. Oracle日期函数months_between的用法
  19. 概论第7章_参数估计_点估计的评价标准_相合性_无偏性_有效性
  20. 百度SEO浏览器插件开发,能够实时显示百度搜索排名的一款插件 seo.lantianye3.top出品

热门文章

  1. 为什么新安装的Eclipse不能打开
  2. byte b=(byte)128 b=-128转换过程
  3. 空间说说html,qq空间说说带图片 唯美心情说说
  4. 猜数字游戏穷举法(迅雷水晶矿场中的游戏求解)
  5. Trick:不用table,怎么等分DIV
  6. 甄别集成灶品牌,对比集成灶排名,无边界青年这样构建无界厨房
  7. 剑指 Offer 笔记: T58 - II. 左旋转字符串
  8. ZStack平台连接iSCSI存储构建云计算服务
  9. lua4 垃圾收集 collectgarbage
  10. 简说华为云鲲鹏手机是什么?