继续创作,加快成长!这是我参加「日新计划 10 月更文应战」的第4天,点击查看活动详情

这一章咱们来唠唠怎么优化BERT对文本长度的约束。BERT运用的Transformer结构中心在于留意力机制强壮的交互和回忆能力。不过Attention自身O(n^2)的核算和内存复杂度,也约束了Transformer在长文本中的运用。

之前对长文档的一些处理计划多是暴力切断,或许分段得到文本表征后再进行融合。这一章咱们看下怎么经过优化attention的核算方法,降低内存/核算复杂度,完结长文本建模。Google出品的Efficient Transformers: A Survey里面对更高效的Transformer魔改进行了分类,这一章咱们首要介绍以下5个方向:

  1. 以Transformer-XL为首的片段递归
  2. Longformer等经过稀少留意力,降低内存运用计划
  3. Performer等经过矩阵分化,降低attention内积核算复杂度的低秩计划
  4. Reformer等可学习pattern的留意力计划
  5. Bigbird等固定pattern留意力机制

Bert不完全手册9. 长文本建模

Transformer-xl

  • paper: Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context
  • github:github.com/kimiyoung/t…
  • Take Away: 相对方位编码 + 片段递归机制
    Bert不完全手册9. 长文本建模

为了突破Transformer对固定长度建模的约束,Transformer-xl提出了相对方位编码和片段递归的计划,后续也被XLNET沿袭~

  1. 片段递归

片段递归的思路其实很早就有,不过之前的计划多是保存上一个片段的last hidden state,作为当时片段的弥补信息。而Transformer-xl则是直接保存并cache了上个片段的所有hidden state,和当时片段进行拼接,梯度更新时只更新当时片段的躲藏层。

具体的Attentenion核算中如下,\tau是片段,nn是hidden layer,∘\circ是向量拼接,SG()SG()是不进行梯度更新的意思。所以当时片段Q,K,V是由上个片段的躲藏层和当时片段的躲藏层拼接得到。每个片段完结核算后会把躲藏层核算成果进行存储,用于下个片段的核算,用空间换时刻,既防止了重复核算,又使得新的片段能保存大部分的前史片段信息。这儿的前史片段信息并不一定只运用T-1,理论上在内存允许的情况下能够拼接更多前史片段~

Bert不完全手册9. 长文本建模

  1. 相对方位编码

片段递归假如和肯定方位编码一同运用会存在问题,由于不同片段相同方位的 肯定方位编码相同,模型无法区分它们来自不同的片段。因而作者提出了相对方位编码。之前在评论肯定方位编码不适用于NER使命时有剖析过相对方位编码>>中文NER的那些事儿5. Transformer相对方位编码&TENER代码完结,这儿咱们再回顾下~

Bert不完全手册9. 长文本建模

肯定方位编码是直接加到词向量上,在Attention核算中进行交互。把内积打开能够得到如上方法,包括4个部分:Query和Key的纯语义交互,各自的方位信息和语义的交互,以及反映相对间隔的方位交互。

Bert不完全手册9. 长文本建模

Transformer-XL的相对方位编码和以上的打开方法根本一一对应,也运用了三角函数的编码方法,只需求两点调整

  • key对应的肯定方位编码pjp_j替换为两个token相对方位i-j的相对方位编码Ri,jR_{i,j}
  • query的方位编码PiWqP_iW_q替换成两个learnable的参数u和v

和以上肯定方位编码的Attention核算比照:

  • 语义交互不变
  • 方位交互:肯定方位编码内积替换为相对方位编码对应的大局方位偏置, 在表征间隔的一同加入了方向信息
  • query方位*key语义:由于交互是核算一个query token对悉数key token的attention,所以这儿的方位编码部分是个常量,作者替换为了trainable的参数u,所以这部分有了更明确的含义便是key对应的大局语义偏置
  • query语义*key方位: 替换为query语义 * query和key的相对方位编码,也便是语义和方位交互

结合片段递归和相对方位编码,Transformer-xl突破了Transformer对固定文本长度的约束。一同片段递归和以下4种Transformer优化计划是正交的联系,能够在以下的四种计划中叠加运用片段递归去优化长文本建模

Longformer

  • paper: Longformer: The Long-Document Transformer
  • github:github.com/allenai/lon…
  • 中文预练习模型:github.com/SCHENLIU/lo…
  • Take Away: 滑动窗口稀少留意力机制

Bert不完全手册9. 长文本建模

Longformer的3点首要创新是

  1. 滑动窗口attention(图b)

处理attention核算复杂度最简略直观的计划,便是把本来all-2-all的attention核算约束到恰当的window size(w)内,这样关于长度为n的序列,本来O(n^2)的复杂度就缩减到了O(n*w)。由于attention本质是引进当时token的上下文信息,但token其实很难和八丈远外的内容进行交互,所以合理的窗口挑选并不会丢失太多的信息,并且和stack-cnn相同更高的layer会拥有更大的感知野。Longformer这儿挑选了512作为窗口巨细,attention的复杂度和BERT相同。

  1. 空泛滑窗attention(图C)

和Dilated-CNN相同,这儿作者也采用了dilation来扩展相同核算量下的感知野。不过感觉这儿和CNN仍是有些差异,图画运用Dilation由于单一像素自身信息有限,需求经过kernel来提取图片部分特征,而对文本序列来说,每个token便是最小粒度的信息元包含信息更多,因而dilation会带来更多的信息丢失。不过作者在运用过程中也加了一些tricks,包括对多头的不同头运用不同的dilation战略,以及底层layer不运用dilation保存更多信息,更高层运用更大的dilation扩展感知野。不过在后面的消融实验中空泛滑窗的作用进步并不十分显著。

  1. 使命导向大局attention(图d)

以上部分attenion在一些使命中存在缺乏,例如QA使命中或许问题无法和上下文进行完整交互,以及分类使命中CLS无法获得悉数上下文信息。因而作者鄙人流使命微调中加入了针对部分token的大局attention。因而鄙人流微调时,需求进行大局交互的token,会用预练习的Q,K,V进行初始化,不过会用两套线性映射的参数分别对大局和滑动窗口的Q,K,V进行映射。

Longformer的预练习是在Roberta的基础上用长文本进行continue train。原始Roberta的position embedding只有512维,这儿longformer把PE直接复制了8遍,得到4096维度的PE用于初始化,这样在有用保存原始PE部分信息的一同,也和以上512的window-size有了对应。至于longformer的作用,能够直接看和下面BigBird的比照。

Bigbird

  • paper: Big Bird:Transformers for Longer Sequences
  • github: github.com/google-rese…
  • Take Away: 运用弥补固定token核算大局留意力

Bert不完全手册9. 长文本建模

又是一个十分清新脱俗的模型起名~ 大鸟模型和longformer比较增加了随机留意力机制,不过感觉首要的创新是对大局留意力机制进行了改进,提出了固定留意力patten的ETC大局留意力机制。

  1. 随机留意力机制

在滑动窗口留意力之外,模型会每行随机采样r个token来进行交互,不过这儿的随机留意力并不好以下的ETC大局留意力一同运用~

  1. 大局留意力

只运用滑动窗口留意力+随机留意力,作者发现作用和BERT比较仍是有所丢失,因而加入了大局留意力。和longformer的差异在于,Bigbird除了支撑对部分已有token(一般是序列的第一个和最终一个字符)进行大局attention之外,简称Bigbird-ITC。还 支撑加入额定token(类似CLS)来做大局留意力,简称Bigbird-ETC,ETC不好随机留意力一同运用。从下流使命作用上来看ETC的作用略好于ITC+随机留意力,作用比照根本是用的BigBird-ETC,不过这也约束了BigBird只能用在NLU场景~

整体作用,在QA和长文本摘要使命上上Bigbird根本是新SOTA

Reformer

  • paper: REFORMER: THE EFFICIENT TRANSFORMER
  • github: github.com/google/trax…
  • Take Away: LSH查找序列中的高权重token,做固定长度部分留意力核算

先来看下原始Transformer的空间复杂度: max(b∗l∗dffn,b∗nh∗l2)∗nlmax(b*l* d_{ffn}, b *n_{h} * l^2)*n_{l}。其间b是batch,l是文本长度,dffnd_{ffn}是Feed Forward层巨细,nhn_{h}是多头的head size,nln_l是层数。Reformer引进了三个计划来降低Transformer的核算和内存复杂度

  • LSH Attention:近似核算,针对l,只核算留意力中高权重的部分
  • 可逆网络:时刻换空间,针对nln_l,只存储最终一层的参数
  • 分块核算:时刻换空间,针对dffnd_{ffn},对FFN层做分块核算

后两个计划和长文本无关这儿咱们简略过,重点是LSH Attention部分的创新~

Bert不完全手册9. 长文本建模

  1. LSH Attention

Local Sensitentive Hashing Attention是Reformer的首要奉献,也便是最初分类中的可学习pattern留意力机制。考虑Attention的成果是被高权重的key主导的,因而每个token的留意力权重能够被部分高权重的token近似,只核算部分留意力然后防止核算L2L^2的留意力矩阵。难点转化成了怎么更高效的找到高权重的key,也便是和query token向量空间更类似的key token来进行部分交互,这儿作者运用了LSH,一种在高维数据中快速近似查找的算法

LSH运用哈希函数对高位空间的向量x核算哈希函数h(x),h(x)h(x)满足在高维空间中更近的向量有更高的概率落在相同的哈希桶中,反之在高维空间中间隔更远的向量有更低的概率会落在相同的哈希桶中。LSH有很多种算法,这儿作者运用的是基于角间隔的部分敏感哈希算法。随机初始化向量R维度是dmodel∗bucket/2d_{model} * bucket/2,哈希成果为旋转(xR)之后最近的一个正或许负的单位向量h(x)=argmax([xR;−xR])h(x) = argmax([xR;-xR])

运用LSH核算Attention会存在几个问题

  • query和key的hashing不同:为了处理这个问题作者把核算留意力之前query和key各自的线性映射统一成了一个,kj=qj∣∣qj∣∣k_j=\frac{q_j}{||q_j||},这样二者的哈希也会相同,只需求对key进行核算就得到token的哈希分桶。例如上图(b)长度为6的序列被分红3个桶[1,2,4],[3,6],[5]
  • 哈希的差错:哈希仅仅使得类似的向量落入相同桶的概率更高,为了进一步进步这个概率,能够进行屡次不同的哈希函数对输出成果取交际,进一步降低近似带来的信息丢失。也便是用更多的时刻和空间来换取更好的近似作用
  • 每个序列哈希分桶的巨细或许不尽相同,无法进行batch核算:这儿作者又做了一步近似。依据以上的哈希成果对token进行重排序,相同哈希的token放一同,桶内按原始方位排序,按固定长度m进行切分,每个chunk的query对当时chunk和前一个chunk的key核算留意,也便是坐落[m,2m]的query对[0,2m]的key核算留意力,这儿m和哈希桶数反向相关m=lnbucketm=\frac{l}{n_{bucket}},也便是和均匀哈希桶的巨细正相关。实际上LSH仅仅用来排序,进步固定长度内留意力权重占整个序列的比例,然后经过有限长度的留意力矩阵近似全序列的留意力成果。同样是固定窗口,LSH使得该窗口内的token权重会高于以上Longformer,BigBird这类彻底基于方位的固定窗口的留意力机制,不过LSH的查找和排序也会进一步进步时刻复杂度
  1. 可逆残差网络

可逆残差的概念是来自The reversible residual network: Backpropagation without storing activations(Gomez2017)。经过引进可逆改换,RevNet使得模型不需求存储中间层的参数核算梯度 ,每一层的参数能够由下一层经过可逆运算得到。属于时刻换空间的计划,由于反向传播核算梯度时需求先还本来层的参数,因而时刻上会增加50%左右~ 细节咱们就不多打开想看math的往苏神这看可逆ResNet:极致的暴力美学, 简略易懂的往大师兄这看可逆残差网络RevNet

  1. 分块核算

分块首要针对FFN层。由于Feed Forward一般会设置几倍于Attention层的hidden size,经过先升维再降维的操作进步中间层的信息表达能力,优化信息的空间散布,以及抵消Relu带来的信息丢失。可是过大的hidden size会带来极高的空间占用。由所以在embedding维度进行改换每个方位之间的核算独立,因而能够分块进行核算再拼接,用时刻来换空间

作用评测部分咱们鄙人面的performer里一同评论

Performer

  • paper: Rethinking Attention with Performers
  • github: github.com/google-rese…
  • Take Away: 提出核函数使得QK改换后的内积能够近似留意力矩阵,合作乘法结合律把复杂度从平方降低到线性

Bert不完全手册9. 长文本建模

多头留意力机制的核算是query和key先核算Attention矩阵A,再对V进行加权,也便是上图等号左面的核算顺序,复杂度是序列长度的平方。为了防止核算L2L^2的留意力矩阵,作者采用矩阵分化q′∈RL,r,k′∈RL,rq^{\prime} \in R^{L,r},k^{\prime} \in R^{L,r},这儿r<d<<L,合作矩阵乘法的结合律,K先和V核算再和Q内积,把空间复杂度从平方级降低到线性。可是留意力矩阵过softmax之后无法直接做可逆转化得到q′,k′q^{\prime},k^{\prime}, 因而作者提出了运用positive Random Feature对QK进行映射,使得映射后的矩阵q′,k′q^{\prime},k^{\prime}内积能够近似Attention矩阵。简略解释便是以下的改换

softmax(QKT)V=(Q)⋅(K)T⋅V=(Q)⋅((K)T⋅V)softmax(QK^T)V = \phi(Q) \cdot \phi(K)^T \cdot V = \phi(Q) \cdot(\phi(K)^T \cdot V)

所以Performer的中心在\phi核函数的规划使得映射后的QK内积能够高度近似留意力矩阵,具体规划如下

Bert不完全手册9. 长文本建模

这儿SM(x,y)=exp(xTy)SM(x,y) = exp(x^Ty)也便是原。始的留意力矩阵,依照f(x)=exp(wTx−∣∣x∣∣22)f(x)=exp(w^Tx-\frac{||x||^2}{2})对Q和K进行改换后,QK内积的希望就等于原始的留意力矩阵。不过在实际核算中只能对随机变量w进行有限次采样, 因而是近似原始留意力矩阵。论文有大量篇幅在进行推导和证明,这儿就不做打开了。

作用比照咱们直接参阅Google给出的作用比照,横轴是速度,纵轴是作用(多使命均匀值),点的巨细是内存。整体上BigBird仍是拔得头筹,它并不是所有使命的SOTA可是整体作用安稳优秀,想看具体比照成果的参阅REF2~

Bert不完全手册9. 长文本建模

BERT手册相关论文和博客详见BertManual


Reference

  1. Efficient Transformers: A Survey
  2. Long Range Arena: A Benchmark for Efficient Transformers