Efficient Transformers: A Survey

论文

[2009.06732] Efficient Transformers: A Survey

1.Background on Transformers

Dense Attention: encoder和decoder最大的区别在于掩码不同,encoder中的token可以看见所有的,而decoder中的token只能看见它前面的,他后面的token被mask掩掉了,需要预测出来。

Transformers是将 Transformer block彼此堆叠形成的多层体系结构,Transformer block(基本单元块)的特点是多头自注意力机制(multi-head self-attention mechanism)、位置前馈网络(position-wise feed-forward network)、层归一化(layer normalization)和残差连接(residual connectors.)

Transfomers的输入是tensor,shape是R^B\times R^N,B is batch size,N is sequence length。

(1)输入首先通过embedding layer,embedding layer将每个one-hot token 表示为d维embedding,例,R^B \times R^N\times R^D,之后新的tensor与positional encodings相加并通过多头自注意模块。Positional encodings可以采用正弦输入的形式或者可训练的embedding。

(2)multi-head self-attention module的输入和输出residual connectors和一层 normalization layer连接。multi-head self-attention module的输出传递到两层前馈网络,输入和输出类似地以残差方式通过层归一化连接,表示为。

X = LayerNorm(F_{s}(X) )+ X

F_{s} 是sub-layer module,(the multi-headed self-attention或者position-wise 前馈层)

1.1.Multi-Head Self-Attention(多头注意力机制)

Transformer模型利用多头注意力机制,其背后的机制是学习alignment(对比),序列中的每个element学习从其他tokens中收集信息。a single head 定义为:

A_{h} = Softmax(\alpha Q_{h}  K_{h}^T ) V_{h}

Q_{h} = W_{q}  XK_{h} = W_{k}X  V_{h} = W_{v}X   是应用于输入序列的时间维度的线性变换。

W_{q} W_{k} W_{v} \in  R^{d\times \frac{d}{N_{h} } }  是query的权重矩阵(参数),key和values投影并且将输入X映射到x维的输出tensor,N_{h} 是heads的个数。X \in R^N \times R^d  \alpha  是比例因子 通常设置为\frac{1}{\sqrt{d} } N_{H}  表示heads的个数,heads的输出A_{1} ... A_{N_{H} } concatenated together 并且用过一个dense层。输出Y表示为:

Y = W_{o}[A_{1} ...A_{N_{H} }] .这里W_{o}  是输出层映射。注意all heads的线性变换并行计算。

A\in R^B \times  R^N \times  R^{N_{h} } \times R^{\frac{d}{N_{h} } } .

attention matrix A = QK^T  主要学习序列中tokens之间的对比分数(alignment scores),在这个公式中,获取query(Q)中每个元素和key(K)之间的点积。这会推动self-attention中的self-alignment过程,从而使tokens彼此学习。

On the scalability of Self-Attention(自我注意的可扩展性)

很明显输入sequence 长度为N,the attention matrix A 内存和计算的复杂性是 N X N。特别的,仅Q K^T 矩阵的乘法运算就使用N^2 的时间和内存。这限制了self-attention在处理长序列的效果。

1.2 Position-wise Feed-forward Layers(位置前馈层)

self-attention的输出传递给具有ReLU激活的两层前馈网络,该前馈网络独立的在每个位置运行,因此称为“position-wise”,表达式为:

F_{2}(ReLU(F_{1}(X_{A} ) )) F1、F2 为形式是Wx+b的前馈函数。

1.3 Putting it all together

每个Transformer Block 表示为:

X_{A}  = LayerNorm(MultiheadSelfAttention(X)) + X

X_{B}  = LayerNorm(PositionFFN(X_{A} )) + X_{A}

X 是Transformer Block 的输入,X_{B} 是Transformer Block 的输出。不管哪一种类型的结构都是由多个transformer基本单元组成,基本单元包括多头注意力机制、前馈网络、层归一化和残差连接。多头注意力机制主要是将输入的embedding映射到不同的低维度空间上,通过内积计算不同token之间的相关性得分,再将相关性得分乘以对应的token embedding求和得到某一个token的embedding,最后把同一token在不同低维度空间上embedding拼接起来得到最终的向量表征。在这里,每个token都与其他的token进行一次attention计算,如果有序列长度为n,那么时间复杂度为o(n^2 ),这种attention方式称之为稠密注意力机制(dense attention mechanism)。

1.4 Transformer Mode

Transformer block的使用差异,主要有三种使用方式(1)encoder-only(分类),(2)decoder-only(语言模型)(3)encoder - decoder(机器翻译)。在encoder - decoder模式下,通常有多个multi-headed self-attention 模块。包括encoder-decoder中的标准self-attention。包括encoder-decoder cross attention允许decoder

3. A Survey of Efficient Transformer Models

3.1 Efficient Transformers 的分类

除了基于段的递归模型,这些模型的主要目标是近似quadratic-cost 注意力矩阵,每种方法都将稀疏性的概念应用稠密的注意力机制。

Table 1:FP( Fixed Patterns )= 固定模式 or 固定模式的组合;M =  Memory; LP = Learnable Pattern (科学习模式); LR = Low Rank ; KR = Kernel and RC = Recurrence ;通常n表示sequence的长度,b是local window (or block) size   ,n_{g} 表示global memory长度,n_{c} 表示卷积压缩的长度。

(1)Fixed Patterns (FP) 

通过限制attention的范围,从全局到局部,降低计算复杂度,包括下述3种方法:

        Blockwise Patterns   ,将输入序列切成多个block,attention只发生在block范围内,所以复杂度从O(N^2 )降低到O(B^2 ),B 是Block size,这种切割会导致序列不连贯,attention能力受限,效果应该不太行。

        Strided Patterns  ,采用滑动窗口的方法,每个token与相邻几个token做attention,相邻的token范围就是window size,这样是有一定道理的,因为自然语言在多数情况下都是局部相关的,所以在一个窗口范围内作attention往往不会丢失太多信息,相比之前的blockwise pattern应该好一些。

       Compressed Patterns  ,则通过卷积池化的方式对序列进行降采样,比如用kernel 为2,stride为2的CNN,将2个token表征成一个向量,然后在做attention,同样也能降低attention的计算复杂度。其实就相当于通过CNN对序列进行n-gram的切分。

(3)Learnable patterns(LP)

learnable patterns是对上文提到的fixed patterns的扩展,简单来说fixed pattern是认为规定好一些区域,让该区域的token进行注意力计算,而learnable patterns则是通过引入可学习参数,让模型自己找到划分区域。比如reformer引入基于哈希的相似度度量方法将输入序列切割;routing transformer对token向量进行k-means聚类来将整体序列分割成多个子序列。所以本质上说LP与FP是一致的,都是通过将整体序列切分成子序列,attention只在子序列中进行,从而降低计算开销,只不过LP的区域划分是通过模型学得,而FP则是人为定义。

(4)Memory

memory乍一听好像有点让人摸不着头脑,其实想法也很简单。最开始是在19年的set transformer上使用。一般来说做multihead self-attention时,Q=K=V=X(X为输入序列,长度为n),而在set transformer中,作者先单独设置了m个向量(m是超参数),然后这m个向量与X做multihead attention,得到m个临时向量(这些个临时变量我们就称作“temporary memory”),接着把X与这m个临时向量再做一次multihead attention得到输出。这个过程其实就是利用这m个向量将输入序列X的信息先通过attention进行压缩,再通过attention还原,达到抽取输入序列的特征的目的。但是在压缩编码解码的过程中肯定会有信息损失,所以后来的改进方法是引入全局记忆,即设置一些token,它们可以与所有的token进行注意力交互,比如bert的[CLS],由于这些token的数目远小于序列长度,因此也不会给计算带来负担,而且往往携带了整个输入序列的信息,这就是我们可以在bert上用[CLS]作文本分类任务的原因。

(4)Low rank methods(低秩方法)

使用self-attention matrix的leveraging low-rank 近似,方法的关键是采用N\times N矩阵的low-rank 结构,Linformer,简单来说,经过softmax的N \times  N矩阵不是满秩的,这意味着我们不需要计算一个完整的注意力矩阵,因此我们可以将n \times d维(n表示序列长度,d表示模型向量维度)的K,V映射到k \times d维空间。

E、F是projection layer,注意力矩阵变为n \times k, k是超参数,因此复杂度为o(n)

(5) Kernels

以核函数变换的新形式取代原有的softmax注意力矩阵计算,将计算复杂度降至 o(n) 范围内,比较代表的有Linear Transformers,下文有介绍。

(6) Recurrence

recurrence实际上也是上文提到的fixed patterns中blockwise的一种延伸。本质上仍是对输入序列进行区域划分,不过它进一步的对划分后的block做了一层循环连接,通过这样的层级关系就可以把一个长序列的输入更好的表征。以recurrence为代表的就是Transformer-XL。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,869评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,716评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,223评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,047评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,089评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,839评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,516评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,410评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,920评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,052评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,179评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,868评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,522评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,070评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,186评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,487评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,162评论 2 356

推荐阅读更多精彩内容