AAAI 2021最佳论文 Informer


第一作者来自北航的Haoyi Zhou,由北航、UC伯克利、 罗格斯大学以及北京国网富达公司共同协作完成。本文设计了一种专为LSTF (长序列时间序列预测)设计的基于Transformer模型 Informer,来解决Transformer在应用于LSTF时存在一些严重的问题。比如二次时间复杂度、较高的内存使用量和编解码器结构的固有限制等。Informer具有三个显著特点:采用ProbSparse自关注机制、自注意力提炼、生成式解码器。
(个人对长序列的时序预测比较感兴趣,如果有做期货预测这一方面的大佬或者小伙伴可以留言经常沟通呢)对于论文中的公式不会去细讲…

原文地址:Informer: Beyond Efficient Transformer for Long Sequence Time-Series Forecasting, AAAI2021
源码地址:https://github.com/zhouhaoyi/Informer2020

背景

长序列时间序列预测(LSTF)要求该模型具有较高的预测能力,即能够有效地捕获输出和输入之间精确的长距离依赖耦合的能力。时间序列预测 (Time-Series Forecasting) 任务在工业界应用场景还是挺多的,比如银行的交易量预测、电力系统的用电量预测、云服务的访问量预测,如果能提前预测到未来一段时间内的访问量/用电量,就可以提前进行资源部署,防止访问量过大耗尽现有计算资源,拖垮服务。当然大家最喜闻乐见的估计还是股票预测。
预测明天一天的访问量并不难,我们可以假设局部平滑,利用今天和前几天的数据就能保证一定的准确性,但是如果要预测未来一个月的访问量,任务的难度就大大不同了。也就是随着预测序列长度增加,预测难度越来越高,本文就是针对长序列预测的,也就是Long sequence time-series forecasting,以下简称LSTF。
LSTF由于预测序列很长,所以模型需要具有较强的解决长距离依赖(long-range dependency)问题的能力,作者想到了最近几年在NLP领域大杀特杀的Transformer模型,在Informer之前,已经有很多工作将Transformer应用到时间序列任务了。然而,Transformer存在一些严重的问题。

Transformer的问题

  • self-attention的时间和空间复杂度都是 O ( L 2 ) O\left ( L^{2} \right ) O(L2),这里L表示序列长度
  • 高内存使用率
  • encoder-decoder结构在解码时step-by-step,预测序列越长,预测时间也就越长

自我注意的二次计算

自我注意的二次计算(The quadratic computation of self-attention)。自注意机制的原子操作,即标准的点积,导致每层的时间复杂度和内存使用量为 O ( L 2 ) O\left ( L^{2} \right ) O(L2)

长输入堆叠层的内存瓶颈

长输入堆叠层的内存瓶颈(The memory bottleneck in stacking layers for long inputs)。编码器/解码器层的堆栈使总内存使用量为 O ( J ∗ L 2 ) O\left ( J\ast L^{2} \right ) O(JL2),这限制了模型在接收长序列输入时的可伸缩性。

在预测长期输出时的速度下降

在预测长期输出时的速度下降(The speed plunge in predicting long outputs)。普通transformer的动态解码使得一步一步的推理与基于RNN的模型一样慢。

Informer解决的问题

  • 提出了ProbSparse self-attention机制,时间复杂度为O(L*logL)
  • 提出了self-attention蒸馏机制来缩短每一层的输入序列长度,序列长度短了,计算量和存储量自然就下来了
  • 提出了生成式的decoder机制,在预测序列(也包括inference阶段)时一步得到结果,而不是step-by-step,直接将预测时间复杂度由 O(N) 降到了 O(1)
    在这里插入图片描述
    上图描述:Informer模型概述。左:编码器接收大量的长序列输入(绿色序列)。我们用所提出的主动火花自我注意来代替规范的自我注意。蓝色梯形是提取主导注意力的自我注意力提取操作,大大减小了网络规模。层叠加复制副本增加了鲁棒性。右:解码器接收长序列输入,将目标元素填充为零,测量特征图的加权注意力组成,并立即以生成方式预测输出元素(橙色系列)

本文贡献

  • 我们提出了成功提高LSTF问题的预测容量,验证了变压器类模型捕获长序列时间序列输出和输入之间的个体长期依赖关系的潜在值。
  • 我们提出了主动稀疏的自我注意机制来取代规范的自我注意。它实现了依赖对齐的O(L logL)时间复杂度和O(L logL)的内存使用。
  • 我们提出了自注意力提取操作来实现特权在 j堆叠(J-stacking layers)层中支配注意力分数,并显著降低总空间复杂度为O((2−e)LlogL),这有助于接收长序列输入。
  • 我们提出了生成式解码器来获得长序列输出,只需要一步,同时避免了避免了在inference阶段的累计误差传播。

Informer 创新点介绍:

ProbSparse self-attention(时空复杂度为O(L*log(L)))

现有很多研究是针对self-attention的O(L2)二次复杂度问题,详细可以看这一篇综述。包含了十几种优化self-attention计算效率的结构。
Efficient Transformers: A Survey
在这里插入图片描述
而在Informer中的ProbSparse self-attention,作者提到,虽然已经有很多优化self-attention的工作,但是他们:

  • 缺少理论分析
  • 对于multi-head self-attention,每个head都采取相同的优化策略

作者的insight是,如果将self-attention中的点积结果进行可视化分析,会发现服从长尾分布,在Appendix C The long tail distribution in self-attention feature map中:
在这里插入图片描述
上图描述:在ETTh1数据集上训练的4层标准的self-attention Transformer的Softmax自我得分。
也就是少数的几个query和key的点积计算结果主导了softmax后的分布,这种稀疏性分布是有现实含义的:序列中的某个元素一般只会和少数几个元素具有较高的相似性/关联性。ProbSparse self-attention的核心思想就是找到这些重要的/稀疏的query,从而只计算这些query的attention值,来优化计算效率。

流程可以表述为:(整体的时间复杂度为 O(L*lnL))

  • 为每个query都随机采样部分的Key,默认值是 5*lnL
  • 计算每个query的稀疏性得分
  • 选择稀疏性分数最高的 N 个query,N 的默认值是 5*lnL
  • 只计算 N 个query和所有Key的点积结果,从而得到attention的结果
  • 其余的 L-N 个query不计算,直接将self-attention层的输入取均值(mean(V))作为输出,保证每一个ProbSparse self-attention层的输入和输出序列长度都是 L

在这里插入图片描述
如何解决“每一个head采用相同优化策略”的问题:
在为每个query随机采样key这一步,每个head的采样结果是相同的,但是由于每一层self-attention都会先对Q、K、V做线性转换,这就使得序列中同一个位置上不同head对应的query、key向量不同。
换句话说,假设query对应 q 1 q_1 q1

  • 11
    点赞
  • 92
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值