文章目录
Informer介绍
1. Transformer存在的问题
Informer实质是在Transformer的基础上进行改进,通过修改transformer的结构,提高transformer的速度。那么Transformer有什么样的缺点:
(1)self-attention的平方复杂度。self-attention的时间和空间复杂度是O(L^2),L为序列长度。
(2)对长输入进行堆叠(stack)时的内存瓶颈。多个encoder-decoder堆叠起来就会形成复杂的空间复杂度,这会限制模型接受较长的序列输入。
(3)预测长输出时速度骤降。对于Tansformer的输出,使用的是step-by-step推理得像RNN模型一样慢,并且动态解码还存在错误传递的问题。
2. Informer研究背景
论文的研究背景为:长序列预测问题。这些问题会出现在哪些地方呢:
● 股票预测(数据、规则都在变,模型都是无法预测的)
● 机器人动作的预测
● 人体行为识别(视频前后帧的关系)
● 气温的预测、疫情下的确诊人数
● 流水线每一时刻的材料消耗,预测下一时刻原材料需要多少…
那么以上需要时间线来进行实现的,无疑会想到使用Transformer来解决这些问题,Transformer的最大特点就是利用了attention进行时序信息传递。每次进行一次信息传递,我们需要执行两次矩阵乘积,也就是QKV的计算。并且我们需要思考一下,我们每次所执行的attention计算所保留下来的值是否是真的有效的吗?我们有没有必要去计算这么多attention?
那么对于现在的时间预测可以大致分为下面三种:
● 短序列预测
● 趋势预测
● 精准长序列预测
很多算法都是基于短序列进行预测的,先得知前一部分的数据,之后去预测短时间的情况。想要预测一个长序列,就不可以使用短预测,预测未来半年or一年,很难预测很准。长序列其实像是滑动窗口,不断地往后滑动,一步一步走,但是越滑越后的时候,他一直在使用预测好的值进行预测,长时间的序列预测是有难度的。
那么有哪些时间序列的经典算法:
● Prophnet:很实用的工具包,很适合预测趋势,但算的不精准。
● Arima:短序列预测还算精准,但是趋势预测不准。多标签。
以上两种一旦涉及到了长序列,都不可以使用。
● Informer中将主要致力于长序列问题的解决
可能在这里大家也会想到LSTM:但是这个模型在长序列预测中,如果序列越长,那速度肯定越慢,效果也越差。这个模型使用的为串行结构,效率很低,也会基于前面的特征来预测下一个特征,其损失函数的值也会越来越大。
LSTM预测能力限制了LSTF的性能。例如,从长度=48开始,MSE上升得高得令人无法接受,推理速度迅速下降。
那么我们Transformer中也有提及到改进LSTM的方法,其优势和问题在于:
(1)万能模型,可直接套用,代码实现简单。
(2)并行的,比LSTM快,全局信息丰富,注意力机制效果好。
(3)长序列中attention需要每一个点跟其他点计算,如果序列太长,其效率很低。
(4)Decoder输出很麻烦,都要基于上一个预测结果来推断当前的预测结果,这对于一个长序列的预测中最好是不要出现这样的情况。
那么Informer就需要解决如下的问题:
Transformer的缺点 | Informer的改进 |
---|---|
self-attention平方级的计算复杂度 | 提出ProbSparse Self-attention筛选出最重要的Q,降低计算复杂度 |
堆叠多层网络,内存占用瓶颈 | 提出Self-attention Distilling进行下采样操作,减少维度和网络参数的数量 |
step-by-step解码预测,速度较慢 | 提出Generative Style Decoder,一步可以得到所有预测的 |
3. Informer 整体架构
3.1 ProbSparse Self-attention
通过以下图数据可以看到,并不是每个QK的点积都是有效值,我们也不需要花很多时间在处理这些数据上:
这个结果也是合理的,因为某个元素可能只和几个元素高度相关,和其他的元素并没有很显著的关联。如果我们要提高计算效率的话,我们需要关注那些有特点的那些值,那我们要怎么去关注那些有特点的值呢:
我们需要进行一次Query稀疏性的衡量:
作者从概率的角度看待自注意力,定义