论文信息:
题目:Informer: Beyond Effificient Transformer for Long Sequence Time-Series Forecasting
时间:2021 会议:The Thirty-Fifth AAAI Conference on Artificial Intelligence (AAAI-21) 最佳论文
知识回顾:
LSTM缺点
- 在长序列预测过程中,如果序列越长,那么速度会越慢,同时,效果也会越差。
- 更加难以收敛,无论是LSTM还是RNN,其使用的都是反向传播算法计算损失函数来进行优化,序列越长,那么求梯度也就会越困难,即越难收敛,从而会使效果变差。
-
梯度消失(Vanishing)
- 梯度爆炸(Exploding)
Transformer
Transformer 模型的架构就是一个 seq2seq 架构,由多个 Encoder Decoder 堆叠而成
Transformer架构的优势与问题
1.万能模型,直接套用,代码实现简单,现成例子一大片
⒉并行的,比LSTM快,全局信息丰富,注意力机制效果好
3.长序列中attention需要每一个点跟其他点计算(如果序列太长,效率很低)
4.Decoder输出挺墨迹的,要基于上一个预测结果来推断当前的预测结果
Informer
要解决的三大问题
- Attention要算的更快
- Decoder要一次性输出所有预测
- 堆叠encoder也得要更快
论文的三大核心模块
用Transformer结构,有几个问题需要解决:
- self-attention的时间和空间复杂度
- encoder-decoder结构在解码时step-by-step,预测序列越长,预测时间也就越长
针对上面两个问题,Informer在Transformer基础上提出了三点改进:
- 提出了ProbSparse self-attention机制
- 提出了self-attention distilling来缩短每一层的输入序列长度,序列长度短了,计算量和存储量自然就下来了
- 提出了生成式的decoder机制,在预测序列时一步得到结果,而不是step-by-step
ProbSparse self-attention
Attention计算
在长序列中,每一个位置的attention都很重要吗?
对于每一个Q来说,只有一小部分的K是其它有较强关系 (长尾分布)
群众里有坏人(有偷懒不干活的Q)
如何定义每一个Q是不是偷懒的?
- Lazy的Q感觉就像是均匀分布,没啥特点,你有我有全都有
- Active的Q明显在某些位置比较活跃,权重差异较大
对于每一个Q,计算其有均匀分布的差异,差异越大则表示其越活
得到的QK内积为:25,96,就是只选了25个Q
其它位置的Q : 没有计算其attention目前直接用V (96个,表示每一个位置的特征)的均值来替代,也就是选出来的25个会更新,其他剩余的都是均值向量
self-attention distilling
随着Encoder层数的加深,由于序列中每个位置的输出已经包含了序列中其他元素的信息(self-attention的本职工作),我们可以缩短输入序列的长度
Encoder改进后的效果
- 一方面就是速度快效率高了,论文中计算复杂度由L个2->LlogL
- 下采样之后,特征更明显,且跟之前的模式基本一致
Start标志位
要让Decoder输出预测结果,你得先告诉它从哪开始输出
先给一个引导,比如要输出20-30号的预测结果Decoder中需先给出前面一个序列的结果,例如10-20号的标签值
位置编码信息
位置信息比较丰富,不仅有绝对位置编码,还包括了跟时间相关的各种编码(Encoder与Decoder都加入了)
整体网络架构
主要改进就是编码和解码器的优化,速度更快,解决长序列问题
Decoder输入
源码中decoder输入长度为72,其中前48是真实值,后24是预测值
- 第一步还是做自身的ProbAttention,注意这回需要加上mask
- Mask的意思就是前面的不能看到后面的(不能透题)
- 自身计算完Attention,再算与encoder的Attention即可
实验结果