目前里面提到的很多东西我自己也不太懂,不过先记下来,用到的时候也知道去哪找。

image-20230301133511944

注:

  • 横轴:运行速度
  • 纵轴:表现
  • 圆圈大小:内存占用

Transformer的局限#

Transformer的一大局限是其运算效率,对于有N个vector的序列,由于每个query都需要和key作点积,那么就需要做次点积,如果序列非常长,那么运算成本可能是无法承受的。例如图像任务中,当图片中的每个pixel被看作向量,256x256大小的图片在一个self-attention层上的点积次数是

image-20230228164413055

Human Knowledge#

Local Attention / Truncated Attention#

在一些问题中,一个vector只需要把注意力放在临近的vector上,那么就可以使用Local Attention / Truncated Attention,只计算attention matrix中对角线临近区域的部分,其他设为0。这样的操作其实和CNN是类似的。

image-20230228171451274

Stride Attention#

如下图所示,每一个vector只关注与其一定间隔的向量,这个间隔是一个超参数。

image-20230228172619577

Global Attention#

Global attention是取出special token,然后用special token作为query、key和所有token计算attention。

image-20230228172727955

实际上我们有时会采用多种注意力机制进行结合,如下图所示。

image-20230228172922846

Clustering#

Clustering方法是指把query和key进行聚类,然后只计算相近的query和key之间的attention,而差距较大的query和key之间的attention score被设置为0。

image-20230301132812960

image-20230301132908158

Learnable Patterns#

在之前的方法中,我们还是依赖人对于问题的理解去判定哪些attention score是需要计算的,但是其实可以让模型自己学习出哪些attention score是需要计算的。

image-20230301144917415

Representative key#

因为attention map通常是低秩的,所以可以用有代表性的向量代表V、K(低秩近似),以减少运算量。

image-20230301133049522

image-20230301133117076

k,q first → v,k first#

先计算value和key的积可以使得运算量降低,从而加速transformer运算。

image-20230301133222135

对于不同的query,value和key的积是相同的,所以可以把先算出来(有点像一个模板),从而减少重复运算。

image-20230301134918742

image-20230301135059486

New framework#

image-20230301134644083

本文采用CC-BY-SA-3.0协议,转载请注明出处
作者: 核子