Press "Enter" to skip to content

Transformer之自适应宽度注意力

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

背景

 

相对于LSTM来说,Transformer几乎在所有的NLP任务上都能胜出。但是有一点,Transformer的时间复杂度是O(N^2)的,因为对于每一步,它都需要计算该步与之前的所有context的attention信息。但LSTM则是O(N)的复杂度。

 

这样的性质,使得Transformer在序列长度上很难扩展,基本上1k个token就是上限了。但对于字符级的语言模型来说,上千个token的输入并不是不常见。顺便提一点,Bert处理的token数目上限是512。

 

所以论文[1]提出了一种自适应宽度的方法,用了这种方法,可以使得输入长度大大扩展,达到了8k之长。

 

动机

 

这个自适应的方法其实是来源于对不同head的观察,在普通的Transformer中,不同的head会学习到不同的attention其实宽度并不同,如下图所示:

 

 

headA关注到的是最近的20个,再往前的80个的权重很低。而HeadB关注到的则是全部的token。

 

因而,如果能有一种方法,使得我们能自动省略掉headA的不相干的计算,那幺,就可以大大减少计算量。

 

实现

 

自适应宽度的实现借助了一个Mask函数,函数公式和曲线图如下,函数的含义是在距离当前位置近的时候,正常计算注意力权重,而距离较远的时候,就会衰减,衰减的幅度则靠z来决定。

 

 

 

在计算attention的权重的时候,使用Context和当前位置的距离来作为Mask函数的输入。在学习过程中,z是需要学习的参数,对每个head,z都是不同的。attention权重的计算如下图:

 

 

在损失函数中,给z添加一个L1 penalization.

 

 

作为扩展,我们也可以用网络的方式来学习z,即z是基于当前输入的一个输出。这种方式被称为动态宽度。

 

 

效果

 

效果,参数量和计算量之前的对比如下:

 

 

可以看到,相对于普通的Transformer来说,参数量并没有太大的降低,但是计算量却会有三四个数量级的减少。

 

随着input长度的增长,平均宽度,计算量的对比如下图:

 

 

可以看到,即使输入变长,计算量和平均的注意力宽度变化很小。

 

不同层次上的平均宽度如下:

 

 

可以看到,越是高层,attention的宽度越大。另外,动态宽度和自适应宽度效果基本相似。不放图了。

 

参考

 

[1]. Sukhbaatar, S., Grave, E., Bojanowski, P., & Joulin, A. (2019). Adaptive Attention Span in Transformers. arXiv preprint arXiv:1905.07799.

 

[2]. Shaw, Peter, Jakob Uszkoreit, and Ashish Vaswani. “Self-attention with relative position representations.” arXiv preprint arXiv:1803.02155 (2018).

 

[3]. Dai, Zihang, et al. “-xl: Attentive language models beyond a fixed-length context.” arXiv preprint arXiv:1901.02860 (2019).

Be First to Comment

发表评论

电子邮件地址不会被公开。 必填项已用*标注