《informer》学习笔记

研一上第七周周报

一、《Informer: Beyond Efficient Transformer for Long Sequence Time-Series Forecasting》

Proceedings of the AAAI Conference on Artificial Intelligence 2021 被引次数:1580

文章链接

1.背景

这个算法提出来是为了解决长序列预测问题,比如根据过去两个月的发电量预测未来两个月的,意思就是真实数据和预测数据数量差不多。

Transformer 有几个严重的问题,让他不适合长序列预测,包括编码器-解码器架构的二次时间复杂度,两次o(n方)、高内存使用和固有限制。

自注意力机制在 L 长度输入/输出上的 L 二次计算和内存消耗。占用资源太多,自注意力机制和Transformer 架构的效率成为将它们应用于 LSTF 问题的瓶颈。因此作者要改进Transformer。

RNN是串行结构,序列长度长的时候反向传播计算复杂,速度慢,预测结果的时候先预测h1才能预测h2,因为h2的结果和h1和x2有关,h0的信息传到ht的时候几乎消失来,无法做到参考上文。是串行,必须一个挨着一个计算,无法做并行

transfomer是并行结构,更快,全局信息丰富,但是decoder输出是一个挨着一个输出,太慢

image-20231026131231962

image-20231026130136490

存在的问题

  1. 自注意力的二次计算。自注意力机制的规范点积,将查询向量 Q 和键向量 K 进行点积操作,得到一个未经缩放的相似性得分矩阵,然后将矩阵中的所有元素除以一个缩放因子,常用的缩放因子是键向量的维度的平方根。

    Score = Score / sqrt(d_k)

    导致每层的时间复杂度和内存使用量为 O(n2)。作者改进的方向是让Attention要算的更快

  2. 长输入堆叠层的内存瓶颈。encoder是多个encoder堆叠,除了输入输出不同外,其格式完全相同,一次self-attention的计算成本已经是相当昂贵了,更何况是多个叠加。作者要求堆叠encoder也要快

  3. 预测长输出的速度下降。vanilla Transformer 的动态解码,逐步生成输出序列,使得与基于 RNN 的模型一样慢。不用动态解码的话,有可能让2号的发电量基于1号的发电量来做预测。作者要让Decoder要一次性输出所有预测还不会被后续的预测数据影响。

2.相关技术

TransFormer

QK相乘求相似度,做scale为了避免softmax得到概率的时候出现极端情况,新的向量表示暗含了Q的信息,表示对Q来说,K里面重要的是哪些信息。

image-20231026183347367

image-20231026142851506

自注意力机制的QKV都来源于X,通过参数三层线性变换wq,wk,wv,得到了QKV的向量。scale+softmax得到概率,

image-20231026181343736

计算查询(qi)和键(K)之间的注意力得分

image-20231026181523365

image-20231026142421995

3.作者技术路线

1.ProbSparse 自注意力机制

在长序列中,对于每一个Q来说,只有一小部分的K和其他的有较强的关系。

"有很多的Q没有用,他和所有K相乘之后softmax得到了均匀分布的结果,那么计算这些QK相乘完全就是浪费时间。解决方法是不要把所有QK相乘,先把Q进行采样,找到活跃的Q。

image-20231026161042825

image-20231026181951317

稀疏"自注意力分数形成一个长尾分布,即少数点积对贡献主要注意力,而其他点积对产生微不足道的注意力。用KL散度衡量重要程度。第 i 个查询的稀疏度

image-20231026134918366

计算每一个Q和均匀分布的差异,差异越多就越有用。

源码里面,输入序列长度96,随机选25个K(不是全部,因为有用的Q能在大部分K上表现差异性),有用的Q跟部分K计算的结果也可以当作分布。用多头注意力机制,96个Q跟25个K相乘得分,每一个Q有25个得分,这时计算量是9625. 如果要对这25个得分一一比较的话,计算量是962525,作者直接**直接选内积最大值,**计算比较简单,又变成9625。因为作者假设分布呈高斯分布,不会是突变型。在96个Q中选出来差异最大的25个。

两个简化,不选全部QK和算差异时直接选最大值。真正算的时候选择全部的K,选了部分Q。其他的Q,作者用V的平均向量替换,因为作者把剩余的Q直接当成均匀分布了,既然Q算出来跟平均分布差不多,作者直接不算了,用平均向量替换,大大减少计算量。

2.self-attention 蒸馏

传统Transformer使用堆叠encoder,做完attention之后还要继续堆叠。作者叠加多个1D的maxpooling,输入序列中的每个区域会被划分为固定大小为2的窗口,然后在每个窗口内取最大值,将最大值作为输出。这样可以去除部分冗余信息(均匀分布的Q),减少输入序列的长度,同时保留重要的特征。encoder改进之后,计算复杂度从n方变成nlog(n),这个算法通篇都在想怎么减少计算量。图中给的多头自注意力,头就跟卷积核差不多,从不同角度提取特征

image-20231026175601865

image-20231026145536510

3.传统的Encoder-Decoder,是串行的。浪费时间,传统decoder挨个输出,把第一个预测值当已知条件预测第二个,改进之后一口气输出

image-20231026171543681

步骤是,给出一部分真实值,后面拼接上要预测的值,接着跟encoder的self-attention一样,不过这次加上了mask矩阵,是一个下三角矩阵,因为不能用未来的预测值推测之前的预测值,得用当前日期之前的。mask矩阵,当前日期之前的都是1,之后的都是0。然后再跟encoder的self-attention做计算,就能一口气得出全部预测结果。

image-20231026175820602

再decoder还加入了时间嵌入编码。丰富时间上下文信息。不仅要绝对时间编码,还有跟时间相关的各种编码,第几周,第几月,是否节假日,

image-20231026172310941

4.实验部分

  1. 数据集选用2 个LSTF 收集的真实世界数据集和 2 个公共基准数据集。

    ETT 是电力长期部署的关键指标。是从中国两个独立的县收集了2 年的数据。创建了单独的数据集为 1 小时级别的和单位为15分钟级别的。train/val/test是 12/4/4 个月。

    ECL收集了 321 个客户的用电量,将数据集转换为 2 年的每小时用电量,train/val/test 是 15/3/4 个月。

    Weather包含美国近 1,600 个地点的当地气候数据,从 2010 年到 2013 年的 4 年时间里,每隔 1小时收集一次数据点。

  2. 单变量和多变量的长时间序列预测

Informer 在编码器中包含一个3 层堆栈和一个 1 层堆栈(1/4 输入),以及一个 2层解码器。批量大小为 32

image-20231026173336306

image-20231026174112024

  1. 参数敏感度分析

    image-20231026174421706

  2. 消融实验

batch size=8, heads=8, dim=64

image-20231026175231855

image-20231026175241561

image-20231026175253801

image-20231026175306289

image-20231026173610594

  • 26
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值