Informer:AAAI2021 最佳论文整理

前言

本文是在Transformer的基础上进行的改进,首先作者提出Transformer在长时间序列预测中的三个局限性:

  1. 自注意力的二次计算复杂度 O ( L 2 ) O(L^2) O(L2)(L表示输入序列的长度)
  2. 堆叠J层编码器(解码器)后会是内存使用量达到 O ( J L 2 ) O(JL^2) O(JL2),这限制了模型接收长序列输入的可伸缩性
  3. Transformer解码器中step-by-step推断流程,会导致在预测长输出时速度急剧下降

Transformer

既然是在Transformer的基础上,就先了解下Transformer
Informer:AAAI2021 最佳论文整理
Transformer单看结构还是比较好理解,编解码器组合,编解码器中都是多层多头注意力和前馈神经网络组成。多头注意力思想就是执行多次注意力以达到更稳定的注意力分配,可以参考注意力机制的改进

Transfromer中使用的自注意力,公式如下
Informer:AAAI2021 最佳论文整理
一般Q的长度等于K,故其中点积 Q K T QK^T QKT的时间复杂度达到 O ( L 2 ) O(L^2) O(L2)(1)
其次,Transformer在预测(inference)过程中,解码器的输入总是需要依赖上一时间步的输出(类似RNN),这就限制了模型的预测的速度(3)。

本文贡献

  1. 改进原先的自注意力机制,提出一个ProbSparse self-attention mechanism,实现了 O ( L l o g L ) O(LlogL) O(LlogL)的时间复杂度和空间复杂度
  2. 提出自注意力蒸馏机制,降低时间和空间花费
  3. 提出生成式解码器,避免了step-by-step的缺陷

方法

作者可视化自注意力机制中的两个注意力分数分布,发现都符合长尾分布,即只有少数点积对贡献了主要的注意力,而大部分的可以直接忽略。
Informer:AAAI2021 最佳论文整理
基于上述观点,作者提出了ProbSparse self-attention mechanism,即在Q中找到最重要的几个查询点,只对这几个点做自注意力计算,以此来大大降低时间复杂度。

怎么来衡量Q中哪些点比较重要呢?后面作者给出一堆数学推导证明,证明其提出的衡量方法的合理性。由于本人数学比较菜,这里就省略证明过程(可查看原文地址),直接介绍ProbSparse self-attention是怎么实现的:
对于 Q ∈ R m × d Q\in R^{m\times d} Q∈Rm×d, K ∈ R n × d K\in R^{n\times d} K∈Rn×d, V ∈ R n × d V \in R ^ {n \times d} V∈Rn×d
1、设置超参数 c ,令 u = c ln ⁡ m u=c\ln m u=clnm , U = m ln ⁡ n U=m\ln n U=mlnn
2、从 K 中随机选择 U 个点 得到 K ′ ∈ R U × d K'\in R^{U\times d} K′∈RU×d
3、令 S ′ = Q K ′ T ∈ R m × U S'=QK'^T\in R^{m\times U} S′=QK′T∈Rm×U
4、计算衡量得分 M = m a x ( S ′ ) − m e a n ( S ′ ) ∈ R m × 1 M=max(S')-mean(S')\in R^{m\times 1} M=max(S′)−mean(S′)∈Rm×1(按行计算)
5、根据 M 取最大的 u 个Q来和K计算注意力,这里就和自注意力机制一样了,但是只能得到 u 个结果
6、剩余L-u个结果直接取V的平均值,即保证了注意力层的输入和输出的长度不变

蒸馏机制就是使用卷积加池化的方式降低序列的长度

生成式解码器是在解码器的输入中,使用预测时间前的部分序列和预测时间的占位序列,作者表明这样就能在inference中实现一步预测。(由于还没看源码,这块有点迷糊)

Informer的整体结构如下:
Informer:AAAI2021 最佳论文整理

总结

该论文最大的亮点是对自注意力机制的时空复杂度优化,使模型轻量化的同时还能拥有强大的预测性能。看完这篇论文,对编解码的具体结构,模型的输入输出以及训练和测试的具体情况等细节不清楚,后续还是要好好啃啃源码(Informer源码

上一篇:自己实现Controller——标准型


下一篇:k8s声明式API介绍