Informer: Beyond Efficient Transformer for Long Sequence Time-Series Forecasting
Informer是对Transformer的改造,分为Encoder和Decoder两部分。Informer相对Transformer的主要改进如下:
- 针对Self-attention计算复杂度高的问题:提出Prob Sparse Self-attention,筛选出Active query,降低计算复杂度;
- 针对Attention Stack内存过高的问题:提出Self-attention Distilling,减少维度和网络参数量;
- 原始Transformer的Decoder是step-by-step逐步解码,运行很慢:提出生成式Decoder,一次性生成长序列预测。
ProbSparse 自注意力机制
ProbSparse 自注意力机制 (ProbSparse self-attention mechanism)用于解决传统自注意力机制的二次方计算和内存复杂度问题,该机制的核心在于识别并只关注那些"主导性"的点积对,从而实现稀疏化。
Informer使用Kullback-Leibler (KL) 散度来衡量均匀分布和注意力概率分布之间的距离,目的是识别那些”激活“或”重要“的查询(Query), 即查询稀疏性度量。
注意力分布的稀疏性:通过定性评估发现,自注意力机制中学习到的注意力分数形成了长尾分布(long tail distribution), 这意味着少数点积对贡献了主要的注意力,而其他点积对产生的注意力是微不足道的。
区分注意力的稀疏性:由于注意力机制得出的结论是:第i个查询qiq_iqi对所有键K的注意力被定义为一个概率分布p(kj∣qi)p(k_j∣q_i)p(kj∣qi); **”非重要查询特征“指的是,如果p(kj∣qi)p(k_j∣q_i)p(kj∣qi)接近均匀分布q(kj∣qi)=1/LKq(k_j∣q_i)=1/L_Kq(kj∣qi)=1/LK,则自注意力机制的结果将变成值得求和。”重要特征“**指的是,主导性得点积对会促使相应的注意力概率分布远离均匀分布。
KL散度:利用KL散度,即使用概率分布ppp和均匀分布qqq之间的相似性来区分重要查询。
Decoder: 一次性生成长序列输出
Step1: 构造输入
设Encoder输入为:XencX_{enc}Xenc=32 * 96 * 7, 那么Decoder的输入为:Xdec=32∗72∗7X_{dec}=32*72*7Xdec=32∗72∗7(32个batch,72个时间点的数据,每个时间点的数据对应7维的特征)。XdecX_{dec}Xdec构造方式如下:
(1)选取被预测序列之前的一小段数据作为start_token:从XencX_{enc}Xenc的后半段开始取,比如从XencX_{enc}Xenc的时间点49 ~ 时间点96 取共48个时间点的数据。
(2)需要预测的数据用0 mask掉:从时间点97 ~ 时间点120 取共24个时间点的数据,当然这部分的数据的目标变量是未知且待预测的
Step2: 带掩码的概率稀疏自注意力机制
(1)用Decoder的输入做mask attention,在decoder输入中,当前时间点的qqq只和当前时间点之前的kkk做attention,相当于KTQK^TQKTQ矩阵中只有kiTqj(i<=j)!=0k^T_iq_j(i<=j)!=0kiTqj(i<=j)!=0,矩阵其余部分为0。
(2)Lazy query对应的输出ojo_joj不再用所有时间点的vvv的均值填充,而是用当前时间点之间的所有vvv的累加值填充。
(3)交叉注意力机制Cross Self Attention, K、V是Encoder的输出,Q来自上一层的输出