论文笔记:Informer: Beyond Efficient Transformer for Long Sequence Time-Series Forecasting

AAAI 2021 best paper

1 abstract & intro

  • Transformer 被广泛应用于时间序列预测任务,但是Transformer存在一些严重的问题,使其无法直接应用到LSTF(long sequence time-series forecasting)问题上
    • O(L^2)的时间复杂度
      • <——self-attention机制的逐点点乘操作
    • 内存使用率高
      • J个encoder/decoder的堆叠,会占有O(JL^2)的内存
    • encoder-decoder固有的限制
  • 为解决这些问题,这篇论文设计了Informer
    • ProSparse Self-Attention
      • 在时间复杂度和内存使用率上达到了O(LlogL)
    • self-attention distilling
      • 将级联层输入减半来控制attention,并有效地处理超长的输入序列。
      • 利用J层中的主要attention score
      • 使得空间复杂度进一步降至O((2-\epsilon)LlogL)
    • 对长时间序列直接进行正向预测,而不是一步一步预测,大大提高了LSTF(long sequence time-series forecasting)的速度。

2 preliminary

2.1 问题定义

  • 输入

    • 固定预测窗口大小Lx,则在t时刻的输入为X^t=\{x_1^t,\cdots,x_{L_x}^t|x_i^t \in R^{d_x}\}

    • 每一时刻的维度是dx,t时刻可以看到Lx个不同时间片的信息 

  • 需要预测的输出
    • Y^t=\{y_1^t,\cdots,y_{Ly}^t|y_i^t\in R^{d_y}\}
    • 每一时刻的维度为dy,需要预测未来Ly个不同时间片的信息

2.2 encoder-decoder 架构

  • 先把X^t编码成隐藏状态H^t=\{h_1^t,\cdots,h_L^t\}。然后将H^t解码成Y^t
  • 在解码(inference)的过程中,大部分采用dynamic decoding,即step-by-step的过程
    • 利用前一时刻h^t_k来计算h_{k+1}^t,进而计算y_{k+1}^t

2.3 时间序列表征

为增强时间序列输入的全局位置上下文和局部时间上下文,给出了统一的输入表示

 α是在标量投影和局部投影之间平衡大小的因子

2.4  短时序预测和长时序预测的不同

  • 输入越长,对于transformer的内存占用和时间复杂度要求越高
  • 长时序预测的结果存在累积误差,后面的预测结果一般与前面的结果相关联
    • 前面都预测的不准,往后的预测结果也不会太好
  • 长时序预测的inference时间随着预测的长度的增加上升明显

3 模型方法

3.1 总体框架

Informer模型基于encoder-decoder结构

encoder Input是 [seq_begin,seq_begin+seq_len]这一段时间的时间序列

decoder input是 [seq_begin+seq_len-label_len,seq_begin+seq_len]的观测值+[seq_begin+seq_len,seq_begin+seq_len+pred_len]的0

 3.2 注意力机制

3.2.1 传统注意力机制

A(Q,K,V)=Softmax(\frac{QK^T}{\sqrt{d}})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]

 其中p(k_j|q_i)=\frac{k(q_i,k_j)}{\sum_lk(q_i,k_l)}k(q_i.k_j)=exp(q_ik^T_j/\sqrt{d})

——>需要平方数量的点积计算开销、O(L_QL_K)的内存消耗

3.2.2 传统注意力机制的稀疏性

  • 先前的一些研究表明,自注意概率的分布具有潜在的稀疏性(长尾)
  • 换句话说,只有少数点积对attention有贡献,其他点积可以忽略

3.2.3 query 稀疏性评估 

定义第i个query的稀疏性测量值为:

  • 第一项是log-sum-exp,max的平滑;第二项是各个 k(q_i.k_j)=exp(q_ik^T_j/\sqrt{d})的算术平均值

 max函数的平滑(log-sum-exp trick)_UQI-LIUWJ的博客-CSDN博客

3.3  ProbSparse Self-attention

  • 我们选取一个 \bar{Q},它和q尺寸类似,不过它只包括了top-u个query(M(q,K)最大的u个)
    • 用一个稀疏的矩阵\bar{Q}代替之前的Q
  • u=c\cdot lnL_Q(c是采样因子)
  • ——>每个K的query/attention只需要O(lnL_Q)次点积
  • ——>每层probsparse self-attention有L_K个key
    • ——>每层的内存消耗是O(L_KlnL_Q)
    • 在self-attention中,L_Q=L_K=L,所以复杂度为O(LlnL)

3.4 query sparsity的近似 

  • 但为了获取top u条query,我们需要将每条query和整个key矩阵进行一次内积计算,这需要O(L_Q L_K)
  • 此外计算M(qi,K)的第一项也需要指数级别的计算,这也比较费时间
  • ——>这里提出了query sparsity的近似

3.4.1 一个定理

 3.4.2 M的近似

随机选L_Q lnL_K个 qi,kj对,其他qikj=0,计算\bar{M}(q_i,K) 【对每个query,选择lnLk个key】

 ——>在self-attention的计算中,L_Q=L_K=L,所以无论是找u,还是probsparse attention,复杂度都是O(LlogL)

3.5 encoder 

Encoder设计用于提取长序列输入鲁棒的long-range相关性

随着Encoder层数的加深,由于序列中每个位置的输出已经包含了序列中其他元素的信息(self-attention的本职工作),我们可以缩短输入序列的长度。

  • 为避免encoder的特征映射带来V值的冗余组合,利用distilling对具有支配特征的优势特征进行
    特权化“
  • 对输入的时间维度进行了锐利的修建
  • 从第j层到第j+1层的公式如下:
  •  

     

    • []_{AB}表示Probsparse Self-attention
    • Conv1d是kernel为3的一维卷积
    • MaxPoll是stride为2的最大池化
  • 一次distilling,将L长度的序列变成L/2
  • ——>两层的空间复杂度为O(LlnL+2\times \frac{L}{2}ln\frac{L}{2})=(2-\epsilon)LlnL,小于不加distilling的2LlnL

 3.6 decoder

  • 使用标准的decoder结构
  • 将如下内容(start token和target的补0 placeholder)送入decoder
  • 将Masked Multi-head attention应用于ProbSparse self-attention
  • 将mask的点积设置为负无穷
    • ——>可以防止每个位置都关注未来的位置,从而避免了自回归
  • 一个全连接层获得最终的输出,层大小取决于是在执行单变量预测还是在执行多变量预测。

 3.6 Generative Inference

  • 文章从长序列中采样一个L_{token },这是在输出序列之前的slice。
  • 以预测168个点为例(7天温度预测),将目标序列已知的前5天的值作为“start token”,并将 X_{feed\_de}=[X_{5d},X_0]输入生成式推断Decoder。
  •  X0 包含目标序列的时间戳,即目标周的上下文。
  • 文章提出的decoder通过一个前向过程预测所有输出,并且不存在耗时的“dynamic decoding”。

4 实验结果

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UQI-LIUWJ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值