写点什么

详解 NLP 和时序预测的相似性(附赠 AAAI21 最佳论文 INFORMER 的详细解析)

发布于: 2021 年 03 月 05 日

摘要:本文主要分析自然语言处理和时序预测的相似性,并介绍 Informer 的创新点。


前言


时序预测模型无外乎 RNN(LSTM, GRU)以及现在非常火的 Transformer。这些时序神经网络模型的主要应用都集中在自然语言处理上面(transformer 就是为了 NLP 设计的)。在近些年来,RNN 和 Transformer 逐渐被应用于时序预测上面,并取得了很好的效果。2021 年发表的 Informer 网络获得了 AAAI best paper。本文主要分析自然语言处理和时序预测的相似性,并介绍 Informer 的创新点。


具体的本文介绍了


• 早期机器翻译模型 RNN-AutoEncoder 的原理


• RNN-AutoEncoder 升级版 Transformer 的原理


• 时序预测与机器翻译的异同以及时序预测算法的分类


• AAAI21 最佳论文,时序预测模型 INFORMER 的创新点分析


RNN AutoEncoder


早期自然语言处理:RNN autoencoder


Sutskever, Ilya, Oriol Vinyals, and Quoc V. Le. “Sequence to sequence learning with neural networks.” arXiv preprint arXiv:1409.3215 (2014). (google citation 14048)


这里以机器翻译为例子,介绍 RNN autoencoder 的原理。


输入句子经过分词,编码成数字,然后 embedding 成神经网络可以接受的向量。


在训练过程中,可以使用 teacher forcing,即 decoder 的输入使用真实值,迫使在训练过程中,误差不会累加



在在线翻译过程中,encoder 部分流程相同,decoder 部分,目标句子是一个单词一个单词生成的



早期 RNN auto encoder 结构虽然相比于传统模型取得了巨大成功,但 encoder,decoder 之间的信息传播仅仅时由单一的一个隐层链接完成的,这样势必会造成信息丢失,因此,Bahdanau, Dzmitry, Kyunghyun Cho, and Yoshua Bengio. “Neural machine translation by jointly learning to align and translate.” arXiv preprint arXiv:1409.0473 (2014).(citation 16788)提出在输入和输出之间增加额外的 attention 链接,增加信息传递的鲁棒性以及体现输出句子中不同单词受输入句子单词影响的差异性。




Transformer


2017-划时代:Transformer—LSTM autoencoder 的延申。


既然 attention 效果如此的好,那么能否只保留 attention 而抛弃循环神经网络呢?


Google 在 17 年年底提出了 transformer 网络,带来了 nlp 的技术革命。



transformer 本质上还是一个信息顺序传递的模型。主要包含了 positional encoding(用于区分词语出现的先后顺序),self-attention, attention, 以及 feed forward 网络四大部分。与 RNN 不同的是,Transformer 利用了 attention 机制进行信息传递,具体的,self-attention 的信息传递机制如下:



一个词向量和句子中所有词向量构成的矩阵做相关得到相关性向量,做 softmax 归一化后,求得所有词向量构成的加权和,得到新的词向量。


transformer 同样用 attention 机制,代替了 RNN-AE 中用来传递句子之间信息的隐层链接。此外,在 decoder 阶段,为了保证矩阵中上一个下一个单词仅仅由他前面的单词决定,在 self-attention 中,还需要做一个上三角矩阵的 masking。


在训练过程中,一般同样采取 teacher forcing 的方法,即 decoder 输入是完整的目标句子的 embedding。而在在线翻译的时候,依然从采取了如 RNN-AE 一样的滚动输出的方式,即初始输入为<SOS>,余下向量全部用 padding。得到输出后,一个一个加入到 decoder 输入中,直到遇到<EOS>。



在 transformer 提出以后,基于 Transformer 的 BERT 预言模型成为了 NLP 中统治级别的模型。


时序预测与机器翻译的异同


时序预测按照输入的区别可以分为两大类,即直接时序预测和滚动时序预测。


直接时序预测,的输入是被预测部分的时间戳,输出是被预测部分的值。在训练过程中直接时序预测算法首先把输出和时间戳的关系建立为 y=f(x)函数,然后用训练集拟合这个函数。在预测阶段,直接输入被预测部分的时间戳即可获得目标值。典型的算法即为 FB 的 PROPHET 算法。


与直接时序预测算法不同的是,滚动时间序列预测算法绝大部分都不依靠时间戳信息。滚动时间序列预测把时间序列模型建立为 x_{t+1,t+n}=f(x_{t−m,t})_xt_+1,_t_+_n_​=_f_(_xt_−_m_,_t_​),即被预测时间段的值由历史时间段的值决定。在训练阶段,把训练集切分为一个一个的输入输出对,用 SGD 迭代减少输出和目标真实值的误差,在预测阶段用被预测数据前一段的历史数据作为输入,得到预测输出。


现阶段,基于深度学习的预测算法绝大多数都属于滚动时间序列预测类别。


时序预测与机器翻译的相同点

• 数据输入都是一个时间序列矩阵

○ 时序预测的输入矩阵为(t, d_{feature})(_t_,_dfeature_​), t 为输入时间长度,d_{feature}_dfeature_​为每个时间点的数据维度

○ nlp 的输入矩阵为(t, d_{embed})(_t_,_dembed_​),t 为输入句子的最大长度,d_{embed}_dembed_​为此嵌入向量长度

• 都是一个 seq2seq 的问题,可以用 RNN-AE 以及 Transformer 解决


时序预测与机器翻译的不同点

• nlp 中,词语需要一系列预处理才能得到网络输入矩阵而时序预测中,输入矩阵是自然形成的。

• nlp 中,在线翻译采取了滚动输出的方式,nlp 输出先做 softmax 并匹配为单词后,重新做 embedding 才作为下一次预测的输入,这样的作法可以克服一部分误差累积。而在时序预测中,如果采取滚动输出的方式,上一个时间点的输出是直接被当作下一时间点的输入的。这样可能会带来过多的误差累积。


Informer 论文分析


Transformer 近些年来成为了时序预测的主流模型。在刚刚结束的 AAAI 2021 中,来自北航的论文 Informer: Beyond Efficient Transformer for Long Sequence Time-Series Forecasting 得到了 BEST paper 的荣誉。Informer 论文的主体依然采取了 transformer encoder-decoder 的结构。在 transformer 的基础上,informer 做出了诸多提高性能以及降低复杂度的改进。


  1. Probsparse attention


a. transformer 最大的特点就是利用了 attention 进行时序信息传递。传统 transformer 在信息传递时,需要进行两次矩阵乘,即(softmax(QK)^T/sqrt{d})∗V(_softmax_(_QK_)_T_/_d_​)∗_V_,则 attention 的计算复杂度为 O(L_q L_k)_O_(_Lq_​_Lk_​),其中 L_q_Lq_​ 为 query 矩阵的时间长度,L_k_Lk_​ 为 key 矩阵的时间长度。为了减少 attention 的计算复杂度,作者提出,attention 的信息传递过程具有稀疏性。以 t 时间为例,并非所有 t 时间以前的时间点都和 t 时间点都有关联性。部分时间点和 t 时间点的关联性非常小,可以忽略。如果忽略掉这些时间点和 t 时间点的 attention 计算,则可以降低计算复杂度。


b. attention 的数学表达式为

out_i=softmax(q_i K^T)V=sumlimits_{j=1}^{L_k}frac{exp(q_ik_j^T/sqrt{d})}{sumlimits_{l=1}^{L_k}exp(q_ik_j^T/sqrt{d})}v_j=sumlimits_{j=1}^{L_k}p(k_j|q_i)v_j_outi_​=_softmax_(_qi_​_KT_)_V_=_j_=1∑_Lk_​​_l_=1∑_Lk_​​exp(_qi_​_kjT_​/_d_​)exp(_qi_​_kjT_​/_d_​)​_vj_​=_j_=1∑_Lk_​​_p_(_kj_​∣_qi_​)_vj_​

在计算 attention 的时候,若 q_i_qi_​ 和 key 矩阵整体相关性较低,则 p(k_j |q_i )_p_(_kj_​∣_qi_​)退化为均匀分布,这时,attention 的 output 退化为了对 value 矩阵的行求均值。因此,可以用 p(k_j |q_i )_p_(_kj_​∣_qi_​)和均匀分布的差别,即 p(k_j |q_i )_p_(_kj_​∣_qi_​)和均匀分布的 KL 散度,来度量 queryq_i_qi_​ 的稀疏度。如果 KL 散度高,则按照传统方法求 attention,如果 KL 散度低,则用对 V 求行平均的方式代替 attention。总的来说,INFORMER 中提出了一种度量 query 稀疏度(和均匀分布的相似程度)并用 value 的行平均近似 attention 的方法。


c. 具体的令 q 为均匀分布,p 为 p(k_j |q_i )_p_(_kj_​∣_qi_​),则 KL 散度经过计算为 M(q_i,K)=lnsumlimits_{j=1}^{L_k}e^{frac{q_ik_j^T}{sqrt{d}}}-frac{1}{L_k}sumlimits_{j=1}^{L_k}frac{q_ik_j^T}{sqrt{d}}_M_(_qi_​,_K_)=ln_j_=1∑_Lk_​​_ed_​_qi_​_kjT_​​−_Lk_​1​_j_=1∑_Lk_​​_d_​_qi_​_kjT_​​

按照 INFORMER 的思想,即可对每一个 query 计算 KL 散度,然后取 topk 的 query 进行 attention,其余的 query 对应的行直接用 V 的行平均进行填充。


d. 根据以上的思想,在 attention 的时候确实可以降低复杂度,然而,在排序的时候,复杂度依然是 O(L_k L_q)_O_(_Lk_​_Lq_​)。因此,作者又提出了一种对 M(q_i,K)_M_(_qi_​,_K_)排序进行近似计算的方式。在这里,由于证明涉及到我的一些陌生领域,例如随机微分,我并没有深入取细嚼慢咽。这里就直接呈现结论。


i. M(q_i,K)=lnsumlimits_{j=1}^{L_k}e^{q_i k_j^T/sqrt{d}} −frac{1}{L_k}sumlimits_{j=1}^{L_k}{q_i k_j^T}/sqrt{d}_M_(_qi_​,_K_)=ln_j_=1∑_Lk_​​_eqi_​_kjT_​/_d_​−_Lk_​1​_j_=1∑_Lk_​​_qi_​_kjT_​/_d_​ 可以用其上界 bar{M}(q_i,K)=maxlimits_j({q_i k_j^T/sqrt{d}}) −frac{1}{L_k}sumlimits_{j=1}^{L_k}{q_i k_j^T}/sqrt{d}_M_ˉ(_qi_​,_K_)=_j_max​(_qi_​_kjT_​/_d_​)−_Lk_​1​_j_=1∑_Lk_​​_qi_​_kjT_​/_d_​代替,作者证明近似后大概率不影响排序。


ii. 上界在计算的时候可以只随机采样一部分 k_j_kj_​,减少 k_j_kj_​ 也就减少了乘法的次数,降低了复杂度。作者在附录中证明这样的随机采样近似大概率对排序没有影响。


e.


i. 作者在附录中,给出了 probsparse self-attention 的具体实施过程


ii. 在第 2 行,对 K 进行采样,使得 sparse 排序过程得以简化复杂度


iii. 在第 5 行,只选出 top-u 作为 query,使得 attention 做了简化


f. 关于 probsparse,需要注意的问题有以下几点:


i. 这个机制只用在了 self-attention 中。在文中,作者把提出的方法称为了 prob-sparse self-attention,在源代码中,也只用在了 self-attention 中。至于为什么不能用于 cross-attention,现在不太清楚。


ii. 这个机制在有三角矩阵 masking 的情况下也不能用,因为在有 masking 的情况下,query 和 key 的乘法数量本来就减少了。


iii. 因此,probsparse 只能用于 encoder 的 self-attention 中


iv. 虽然论文中提出 probsparse 可以减少复杂度,但由于增加了排序的过程,不一定能减少计算时间,在一些数据长度本来就较少的情况下,可能会增加计算时间。


  1. Attention distilling


a. 与普通 transformer 不同的是,由于 probsparse self-attention 中,一些信息是冗余的,因此在后面采取了 convolution+maxpooling 的方法,减少冗余信息。这种方法也只能在 encoder 中使用。


  1. CNN feed forward network


a. 在 17 年的 transformer 中,feedforward 网络是用全连接网络构成的,在 informer 中,全连接网络由 CNN 代替。


  1. Time stamp embedding


a. Time stamp embedding 也是 Informer 的一个特色。在普通的 transformer 中,由于 qkv 的乘法并不区分矩阵行的先后顺序,因此要加一个 positional encoding。在 INFORMER 中,作者把每个时间点时间戳的年,月,日等信息,也加入作为 encoding 的一部分,让 transformer 能更好的学习到数据的周期性。


  1. Generative decoding


a. 在 NLP 中,decoding 部分是迭代输出的。这样的作法如果在时序预测中应用的化,在长序列预测中会引起较长的计算复杂度。其次,由于 NLP 中有词语匹配的过程,会较少噪声累积,而时序预测中,这种噪声累积则会因为单步滚动预测而变得越发明显。


b. 因此,在 decoding 时,作者采取了一次输出多部预测的方式,decoder 输入是 encoder 输入的后面部分的截取+与预测目标形状相同的 0 矩阵。



其中,X_{token}_Xtoken_​ 由 X_{feed_en}_Xfeed___en_​ 后半部分截取而成。


  1. Informer 代码:https://github.com/zhouhaoyi/Informer2020


点击关注,第一时间了解华为云新鲜技术~


发布于: 2021 年 03 月 05 日阅读数: 26
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
详解NLP和时序预测的相似性(附赠AAAI21最佳论文INFORMER的详细解析)