Informer 的简单介绍
Informer 学习笔记
1. 什么是时间序列预测?
- 用例子来看比较好理解

- 符合一定时间规律的数据
2. 为什么是Informer?
- 背景图

2.1 几种简单任务
- 短序列预测
- 常用的 RNN 系列模型,可以很好的预测短期数据,比如利用 30 天数据,预测后 1-3 天的短期数据,但一旦需要预测的时序变长,效果不好。
- 主要是因为 RNN 系列模型自身的记忆限制,过长的序列,会出现梯度消失(RNN)或之前信息丢失过多(LSTM),最后参考性不大,预测自然也逐渐失去效果。

- 具体点:LSTM 的缺点

1、并行处理上存在劣势;
2、RNN的梯度问题在LSTM及其变种里面得到了一定程度的解决,但还是更长的序列则依然会显得很棘手;
3、多个门的计算,意味着计算费时,如果时间跨度很大,且网络很深,计算量会很大,很耗时。

- 图也可以看到预测序列越长,计算速度(红)和MSE损失(蓝)的变化。
- 趋势预测
- 预测的值加入数据继续预测,可以得出趋势,但不够精准,后期如果全是预测数据,则变成了预测的预测,效果可想而知。
- 精准长序列预测
- 序列长,还要精准,恭喜,Informer 可以。
2.2 简单看下老牌的算法
- 除了 RNNs 系列,还有
- Prophet:预测趋势,是个工具包。
- Arima:经典算法,短序列可以,预测趋势不准。
3. 什么是Informer?
3.1 核心思想
- 套了 Transformer 架构,进一步优化。Transformer的简单介绍
3.1.1 Transfomer架构的优劣
- 优势
- 万能模型,实现简单,现成代码一大堆(Pytorch也可以调)。
- 并行的(比较 LSTM 更快), 而且有注意力机制,全局信息丰富。
- 劣势
- 计算问题,注意力机制需要参考每一个序列,所以序列长,效率自然也低。
- Decoder的输出墨迹,需要参考上一个预测结果推断当前预测。
3.1.2 需要优化的地方
- Attention 计算(Faster) ——> Encoder 堆叠
- Decoder 输出(Once All)
3.1.3 如何优化?
- Attention 是否有多余的计算?

可以看出相关性可能只是一小部分,大部分都是低相关;也意味着对每一个 Q 来说,只有一小部分的 K 是与其相关性强的。 - 剔除群众中的“坏人”
- 首先搞清楚是哪一部分群众出了问题,Q 还是 K;
K 是关键信息,而 Q 是查询条件,需要通过 Q 把 K 筛选,形成新的带解码信息;继而说明 Q 内有"坏人",去问的时候走形式不办事,所以浪费了时间和精力。

- 其次,研究如何从群众中剔除"坏人";
首要的,找到坏人的共性或好坏群众的差异,形成标准去考核。- 坏 Q 分布像是均匀分布,为了利益四处不得罪;
- 好 Q 分布某些位置相当活跃,权重差异较大(有事情是真上)。
- 那么方法就是,计算分布差异,即每个 Q 分布与均匀分布的差异,来显示活跃度,差异越大越活跃,剔除活跃度低的 Q,公式如下:
\[M\left( q_i,K \right) =ln\sum_{j=1}^{L_K}{e^{\frac{q_ik_{j}^{T}}{\sqrt{d}}}}-\frac{1}{L_K}\sum_{j=1}^{L_K}{\frac{q_ik_{j}^{T}}{\sqrt{d}}} \]- 优化 Attention 为 ProbAttention
- 从 K 中随机采样对 Q 进行全员考核;
为啥随机采样?之前几张图可以显示的很好,不光 Q 少,让 Q 敏感 的 K 也很少;简单理解,选拔式的考核,真正优秀的随机考都能过,普通的偶尔能过,坏的咋考都不能过。

- 那么现在每个 Q 都有 K 个得分,接着计算差异;
- 而为了加速,论文比较绝,直接选最大值与均匀分布算差异,即
\[\bar{M}\left( q_i,K \right) =\mathop {max} \limits_{j}\left\{ \frac{q_ik_{j}^{T}}{\sqrt{d}} \right\} -\frac{1}{L_K}\sum_{j=1}^{L_K}{\frac{q_ik_{j}^{T}}{\sqrt{d}}} \]- 最后从全员 Q 选出差异最大的 N 个(N 根据序列长度来定),和所有的 K 做内积。
那没选的咋办?组织上还需要人,用 V 的均值代替。 - 即与其用坏人,不如从后备人员里选觉悟高的平均人才,那么 N 个会更新,其余都是 V 均值向量。
- 从 K 中随机采样对 Q 进行全员考核;
- 首先搞清楚是哪一部分群众出了问题,Q 还是 K;
- Encoder 的 Attention 的堆叠
- 为了提高效率,将每次经过 Attention 的数据,通过 MaxPool 操作下采样序列变为原先的 \(\frac{1}{2}\) 长度。
- 其次,Q 和 K 的个数也随之变小。
- 总的来说就是继续筛人,选精英。


- Decoder 输出(Once All)
- 传统的 Decoder 需要前序输出参考作用于后续输出(One By One)。能不能一下都输出(Once All),怎么做?
- 从输入设置Start标志位,给一个简单引导,比如预测 20-30号的结果,需要给 Decoder 一个前序指导,10-20号的标签值。如下图所示(0为待预测结果)。
3.2 模型总体
- 位置编码
- 三合一大礼包,信息非常丰富。
- 位置 + 时间 + 相关时间编码。
- Encoder
- 输入
- 位置编码后的信息
- 多头 ProbSpare Self-attention
- ProbAttention
- MaxPool
- 输出
- 待解码的特征(K, V)
- 输入
- Decoder
- 输入
- 带引导信息和待预测位置的输入
- 多头 Masked ProbSpare Self-attention
- Masked ProbAttention
- MaxPool
- 多头 Attention
- 来自Decoder下层的 Q 和 Encoder 输出的 K,V
- 输出
- 解码完成的信息
- 输入
- 全连接层
- 输出

浙公网安备 33010602011771号