进击的Transformer --- 一文介绍Efficient Transformers

Transformer的好处及复杂度

Transformer今天多么的火这里就不用多说了。每个节点对每个节点的注意力机制保证了长程无损耗的信息传递。从图神经网络的观点来看,它是一个全连接的完全图。

为什么它在NLP领域中如此有效?这是因为它足够复杂,以至于满足了语言内生的复杂性。引用史蒂芬平克的对写作的定义:… the writer’s goal is to encode a web of ideas into a string of words using a tree of phrases …
写作过程即是从思维之网(web of ideas),经由语法之树(a tree of phrases),转化为词汇之串(a string of words) 。这里从网(二维),到树(大于一维),最终到串(一维),是个不断降维损失信息的过程。
在这里插入图片描述

而Transformer通过"所有节点对所有节点"的注意力,把一维的句子映射到二维,重塑了网状的思维。如下图:

语法
Transformer
思维
句子

作为从句子到思维转化的副产品,我们可以观察到很多语法和语义的涌现。在Chris Manning的一系列论文里,我们看到,如下图所示,
在这里插入图片描述名词-动词,形容词-名词,所有关系,被动语态,共指关系都能在注意力图中有所体现。这些都应归功于Transformer的有着足够复杂度( O ( L 2 ) O(L^2) O(L2) L L L是句子长度)的自注意力机制。

对比CNN,LSTM等,Transformer的强大一目了然,但是对应着它的强大性能,它的计算复杂度和内存需求也带来了工业应用的限制。今天已经有很多新的方法加入了Transformer家族,这里试图对它们进行一下总结。

Transformer变种的几大流派

哈希派

代表是Reformer。主要想法是改造原来的点积注意力,变成LSH(局部敏感哈希)的点积注意力。这里不打算过多描述。原因是暂时没能称为主流,理论上复杂度为 O ( n l o g n ) O(nlogn) O(nlogn),而且在和一些其他算法的比较中,表现并不突出。
在这里插入图片描述

稀疏派

这一类有一些不错的算法,而且已经在工业界取得了应用。主要介绍一下LongformerBig Bird

在Longformer里,self-attention以下图(b) - (d)的方式呈现。为了避免 O ( n 2 ) O(n^2) O(n2)级别的运算和内存需求,作者选择性的只保留注意力矩阵的一部分。在图(b)中,我们可以只注意每个词的最近邻。如果滑窗(sliding window)的宽度为 w w w,那么运算量只是 O ( n w ) O(nw) O(nw)。这很像CNN,每个filter也是只对有限的区域做运算。缺点是,和CNN的filter一样,它缺乏对对象全局性的了解。CNN对这个问题的解决方法是通过增加层数来增大receptive field(感受视野)。这里也是一样,通过把层数增加到 l l l,顶层的有效的注意力长度会变为 O ( l w ) O(lw) O(lw)。在实际使用中可以考虑给每层不同的滑窗宽度 w w w,来取得计算效率和模型表达能力的平衡。实验表明,给顶层较大的 w w w并且给低层较小的 w w w能够取得最佳效果。这符合低层学习语法,顶层学习语义的直觉。

或者也可以采取扩张滑窗的方法,这又和dialated CNN很像。如果扩张度为 d d d,那么滑窗覆盖的句子长度变为 O ( d w ) O(dw) O(dw),顶层的注意力长度相应变为 O ( l d w ) O(ldw) O(ldw)。这显然是一种非常有效的获得长程注意力的方式。实践中,我们给不同的注意力头不同的扩张度,是它们分别能够获取局域的或者长程的信息。

仅有滑窗和扩张滑窗还不够,对于一些特殊字符来说(比如[CLS]),最好还是能获取全局性的注意。所以作者最终采取了Global+Sliding window的方法。Global是指对于[CLS]这样的特殊字符使用全局注意力。
在这里插入图片描述Big Bird和Longformer非常像。不同之处在于前者使用了随机注意力。如下图:
在这里插入图片描述
(a)图表示作者引入了随机注意力。Query可以有选择随机选择Key的两个token产生注意。Big Bird把这个过程等价于一个小世界网络随机图的产生过程: 在小世界网络的产生中,首先每个节点都和自己的最近邻产生连接,这对应着Window attention,然后再随机和其他节点产生连接,这对应Random attention。可以这么说,如果我们把full attention对应于全连接的完全图,那么Big Bird就对应于小世界网络图。
下表是加入window和random注意力的效果。直觉上讲window应该比random注意力更有效,但是实验结果正好相反。我个人感觉可能跟实际的实现方法有关。上面介绍的算法并不能最大限度的利用GPU的并行操作,所以工程上采取了"blockify"注意力的方法,这里不再介绍。
在这里插入图片描述BigBird在下游任务上的表现:
在这里插入图片描述在多个任务上都达到最佳的效果。

评价一下稀疏派:window attention直觉上很有道理。过去有些实验表明Transformer里的self-attention最大的权重基本集中在每个token的最近邻(locality of reference),所以应该说滑窗注意力是有实验上的证据来支撑的。global attention在处理特殊token时有必要。实验的效果完全可以和全注意力的版本比较。在实现上,我们常常需要增加层数来弥补滑窗注意力感受野的不足,所以最终在内存上的优势未必那么大。相对来讲,速度的提升仍然有限,所以暂时没有在工业界流行。

降秩派

个人认为这一类算法和下面的重整Kernel派是效果最好而且最有希望称为主流的方向。 代表的算法有Linformer,。

Linformer

这篇文章复杂度上算是吊打了之前的所有算法。上来就指出和哈希派及稀疏派在复杂度上的差异。如下表:
在这里插入图片描述

该算法基于这样的观察,即自注意力系数矩阵常常是低秩的。如下图,左图表示对于满秩为512的自注意力系数矩阵,大概前128个本征值可占所有本征值大小的90%。在不同大小的RoBERTa和在不同的数据(IMDB, Wiki103)上都可以观察到这样的现象。右图表示针对不同的层数和不同的注意力头,我们都可以看到前128个本征值之和占了所有本征值总和的88%以上。这说明层数越高,自注意力系数矩阵的低秩效应越明显,换言之,越多的信息集中在最大的本征值最大的方向上。

在这里插入图片描述
这个并不奇怪。对于一个长度为 n n n的句子,自注意力矩阵大小为 n 2 n^2 n2,满秩意味着矩阵的每一行向量都互相独立(正交)。 但是这不太可能。因为这表明任何两个token对其他所有token的注意量向量完全正交,这在人类语言中是在很难想象,因为人类的语言总是充满各种重复修饰,共指等等来保证信息传递。相反,一个低秩的自注意力系数矩阵才应该是常态。而且从直觉上来讲,我觉得句子的长度越大,这个低秩的效应就越明显。前面的Sparse Attention效果不错,从本质上也说明自注意力系数矩阵是低秩的。

基于这样的观察,我们完全可以考虑把自注意力系数矩阵 P P P做SVD,把它手动降成真正的低秩(即抛去太小的奇异值的方向)。如下式:

在这里插入图片描述然后利用 P l o w P_{low}

  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值