首页 > 编程知识 正文

informer是什么意思,software informer

时间:2023-05-04 16:36:08 阅读:194419 作者:1965

Informer:使用Transfomer方法解决长序列时间序列预测(LSTF)问题
Transformer的三个问题 1.自注意层的时间和空间复杂度都是 O ( L 2 ) O(L^2) O(L2) 2.多个自注意层是直接堆叠起来,导致内存占用过高 O ( l e v e l ∗ L 2 ) O(level*L^2) O(level∗L2) 3.Transformer仍然采用step-by-step的方式进行生成
论文解决上述问题的三种方法 1.ProbSparse Self-attention

在自注意力计算实验时,作者敏锐的观察到某个时间步对其他时间步的权重概率分布很容易出现稀疏的情况,即某些时间步注意是不必要的,因此这些自注意力的计算是可以忽略的,那不就要想办法从中选出哪些应该忽略。
对于这个问题,首先如果一个自注意力权重概率分布为1/L(L为序列长度),即这个时间步对其他时间步的注意力是完全相同的,那么这个时间步就肯定可以忽略掉,照着这个思路,只要跟这种情况越相似,就越应该忽略掉。作者计算这种均匀分布与正常计算得到的概率分布的KL散度,来表示他们的相差程度。简化后的公式如下:

M越大说明 q i q^i qi越重要,越应该保留,选取前 c = u ∗ l n L c=u * lnL c=u∗lnL个M最大的时间步来计算自注意力。但是现在又存在一个问题,想要计算前c个M最大的时间步就不得不遍历整个L来计算,结果又是一个 O ( L 2 ) O(L^2) O(L2)的时间复杂度。

作者通过上述公式找到了M的一个上界(公式的证明放在后面),然后就把M转化为:

把求和转变为了求最大值,并且由于长尾分布(大部分概率值都很小,即前文所说的稀疏)的特性,我们只需采样 U = L ∗ l o g L U=L*logL U=L∗logL个k计算其中的最大值即可。
不论是在选择时间步,还是在最终计算注意力的时候,时空复杂度都为 O ( L ∗ l o g L ) O(L*logL) O(L∗logL)。

具体算法如下:


2.Self-attention Distilling

这个步骤是对编码器进行改进,作者使用了目前经常使用的蒸馏方法,去减小特征图的大小。

虽然从实验上表现很好,但是这也算是一种模型的魔改,就不过多赘述了。
这算是解决了第二个问题,自注意力层越来越小,减少了内存占用。


3.Generative Inference

这是解码器部分的优化,一个是同时生成多个时间步的结果,一个是动态的选择部分序列作为开始符,与NLP中不同,NLP一般将某个固定的占位符定位开始符,这就实现了快速解码。但是感觉这种方法应该在NLP中不太能用上,因为与长序列时间序列问题不同,自然语言对于轻微的误差都很敏感。

总结

一般的文章能够做到实验充分或者理论推导明了,就能够算是一篇不错的论文,而这篇文章兼具这两个特点,再加上采用问题-解决方法对照式的写法,读起来十分畅快,不愧是AAAI的最佳论文。

这个我确实没能力自己证明出来,就直接贴原文了:

原文:https://arxiv.org/abs/2012.07436

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。