39

Transformer之自适应宽度注意力

 3 years ago
source link: http://mp.weixin.qq.com/s?__biz=MjM5ODkzMzMwMQ%3D%3D&%3Bmid=2650416047&%3Bidx=2&%3Bsn=f0c0e349e33ad30697e3d42d0265fee9
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Znui6v.jpg!mobile

最近要开始使用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其实宽度并不同,如下图所示:

uQ7NRrQ.png!mobile

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

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

实现

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

yMR3aiq.png!mobile

EbUbAj3.png!mobile

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

i6VRVnM.png!mobile

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

byIZ3a7.png!mobile

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

qAfqaez.png!mobile

效果

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

Bf6vyy3.png!mobile

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

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

Z3y6juf.png!mobile

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

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

IbmuueB.png!mobile

可以看到,越是高层,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. "Transformer-xl: Attentive language models beyond a fixed-length context." arXiv preprint arXiv:1901.02860 (2019).

欢迎加入预训练模型交流群

进群请添加AINLP小助手微信 AINLPer(id: ainlper),备注 预训练模型

yi6vEbV.jpg!mobile

推荐阅读

这个NLP工具,玩得根本停不下来

征稿启示| 200元稿费+5000DBC(价值20个小时GPU算力)

完结撒花!李宏毅老师深度学习与人类语言处理课程视频及课件(附下载)

从数据到模型,你可能需要1篇详实的pytorch踩坑指南

如何让Bert在finetune小数据集时更“稳”一点

模型压缩实践系列之——bert-of-theseus,一个非常亲民的bert压缩方法

文本自动摘要任务的“不完全”心得总结番外篇——submodular函数优化

Node2Vec 论文+代码笔记

模型压缩实践收尾篇——模型蒸馏以及其他一些技巧实践小结

中文命名实体识别工具(NER)哪家强?

学自然语言处理,其实更应该学好英语

斯坦福大学NLP组Python深度学习自然语言处理工具Stanza试用

关于AINLP

AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括文本摘要、智能问答、聊天机器人、机器翻译、自动生成、知识图谱、预训练模型、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLPer(id:ainlper),备注工作/研究方向+加群目的。

yamaeu.jpg!mobile

阅读至此了,分享、点赞、在看三选一吧:pray:


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK