自留意力 自留意力块是BERT的根本构建模块,它有用地建模了输入标记序列中的全局依赖关系。如图3a所示,给定输入 X ∈ R ( n × d ) X ∈ R^{(n×d)} X∈R(n×d),其中d是隐藏维度,n是标记的数量,自留意力模块对输入X应用三个线性变更,并将它们分别嵌入到键K、查询Q和值V中,其中 K , Q , V ∈ R ( n × d ) K, Q, V ∈ R^{(n×d)} K,Q,V∈R(n×d)。假设有H个自留意力头。键、查询和值嵌入被均匀分割成 d k = d / H d_k = d/H dk=d/H维的段。自留意力模块以以下情势给出输出:
S e l f − A t t n ( Q , K , V ) = s o f t m a x ( Q ⊤ K d k ) V . \mathrm{Self-Attn}(Q,K,V)=\mathrm{softmax}\left(\frac{Q^\top K}{\sqrt{d_k}}\right)V. Self−Attn(Q,K,V)=softmax(dk Q⊤K)V. (1)
BERT的平均留意力图显着显示出类似于[31]分析的对角线模式,这意味着很大一部分留意力头学习了局部依赖性。由于自留意力计算了全部标记对之间的留意力权重,如公式1所示,许多超出捕获的局部上下文的留意力权重是不须要计算的,因为它们与局部权重相比贡献较小。这导致了不须要的计算开销和模子冗余。受此开导,我们接纳卷积操作来捕捉局部依赖性,考虑到它比自留意力更适合学习局部依赖性。
轻量级和动态卷积 轻量级卷积 可以有用地建模局部依赖性。设卷积核为 W ∈ R d × k W\in\mathbb{R}^{d\times k} W∈Rd×k。位置i和通道c的深度卷积输出可以表现为 D W C o n v ( X , W c , : , i , c ) = ∑ j = 1 k W c , j \mathrm{DWConv}(X,W_{c,:},i,c)=\sum_{j=1}^{k}W_{c,j} DWConv(X,Wc,:,i,c)=∑j=1kWc,j。通过在通道维度上绑定权重,我们可以将卷积核简化为 W ∈ R k W\in\mathbb{R}^k W∈Rk,得到以下轻量级卷积:
L C o n v ( X , W , i ) = ∑ j = 1 k W j ⋅ X ( i + j − ⌈ k + 1 2 ⌉ ) \mathrm{LConv}(X,W,i)=\sum_{j=1}^{k}W_{j}\cdot X_{(i+j-\lceil\frac{k+1}{2}\rceil)} LConv(X,W,i)=∑j=1kWj⋅X(i+j−⌈2k+1⌉) (2)
与传统的深度卷积相比,这大大减少了参数巨细(实际中为256或768)。然而,训练后,卷积核参数将对任何输入标记固定,不利于捕捉输入标记的多样性。因此,我们进一步考虑动态卷积,它根据特定输入标记天生卷积核参数。如图3b所示,经过线性投影和门控线性单位(GLU)后,从当前输入标记天生动态卷积核,并应用于与附近标记卷积以天生新的表现嵌入。与训练后固定的标准卷积核相比,动态卷积可以更好地利用输入信息并天生基于输入标记的卷积核。详细来说,利用位置i的位置依赖卷积核 W = f ( X i ) \mathrm{W}{=}f(X_i) W=f(Xi),其中f是具有可学习权重 W f ∈ R k × d k W_f\in\mathbb{R}^{k\times d_k} Wf∈Rk×dk的线性模子,后接softmax。我们将动态卷积表现为:
D C o n v ( X , W f , i ) = L C o n v ( X , s o f t m a x ( W f X i ) , i ) \mathrm{DConv}(X,W_f,i)=\mathrm{LConv}(X,\mathrm{softmax}(W_fX_i),i) DConv(X,Wf,i)=LConv(X,softmax(WfXi),i) (3)
与自留意力相比,自留意力对输入序列长度的计算复杂度为二次方,而线性复杂度的动态卷积更高效,更适合建模局部依赖性,并在机器翻译、语言建模和抽象摘要使命中显示出有用性。然而,我们观察到其卷积核仅依赖于输入的单个标记,忽略了局部上下文。在差别上下文中对具有差别寄义和关系的相同标记利用相同的卷积核会侵害模子性能。因此,我们提出以下基于跨度的动态卷积。
3.2 基于跨度的动态卷积
此外,为了使基于跨度的动态卷积与自留意力兼容,我们对输入X应用线性变更以天生查询Q和值V,并利用深度可分离卷积天生跨度感知的Ks。从输入X转换而来的查询Q和跨度感知键Ks对的逐点乘法结果随后用于天生动态卷积核。详细来说,以查询和键对Q; Ks作为输入,卷积核通过以下方式天生:
f ( Q , K s ) = s o f t m a x ( W f ( Q ⊙ K s ) ) f(Q,K_s)=\mathrm{softmax}(W_f(Q\odot K_s)) f(Q,Ks)=softmax(Wf(Q⊙Ks)) (4)
其中⊙表现逐点乘法。如图3c所示,我们称这种新操作为基于跨度的动态卷积。输出可以表现为:
S D C o n v ( Q , K s , V ; W f , i ) = L C o n v ( V , s o f t m a x ( W f ( Q ⊙ K s ) ) , i ) \mathrm{SDConv}(Q,K_s,V;W_f,i)=\mathrm{LConv}(V,\mathrm{softmax}(W_f(Q\odot K_s)),i) SDConv(Q,Ks,V;Wf,i)=LConv(V,softmax(Wf(Q⊙Ks)),i) (5)
然后应用线性层进行进一步处置处罚。除非尚有说明,我们始终为深度可分离卷积和基于跨度的动态卷积保持相同的核巨细。
3.3 ConvBERT架构
基于上述的跨度动态卷积,我们开辟了新奇的混合留意力块和高效的ConvBERT模子。 混合留意力
混合留意力块集成了基于跨度的动态卷积和自留意力机制,以更好地建模全局和局部依赖关系,同时减少冗余,如图4所示。自留意力和基于跨度的动态卷积共享相同的查询,但利用差别的键作为参考来天生留意力图和卷积核。用Cat( , )表现毗连操作,我们将混合留意力公式化为:
Mixed-Attn ( K , Q , K s , V ; W f ) = C a t ( S e l f − A t t n ( Q , K , V ) , S D C o n v ( Q , K s , V ; W f ) ) \text{Mixed-Attn}(K,Q,K_s,V;W_f)=\mathrm{Cat}(\mathrm{Self-Attn}(Q,K,V),\mathrm{SDConv}(Q,K_s,V;W_f)) Mixed-Attn(K,Q,Ks,V;Wf)=Cat(Self−Attn(Q,K,V),SDConv(Q,Ks,V;Wf)) (6)
最终输出被送入前馈层进行进一步处置处罚。 自留意力的瓶颈设计
由于部分留意力头存在冗余,我们提出在引入基于跨度的动态卷积模块的同时减少留意力头的数量。我们称之为瓶颈结构,因为输入嵌入起首被投影到一个低维空间,然后通过自留意力模块,如图4所示。详细来说,在原始BERT中,维度为d的嵌入特征通过线性变更投影到原始Transformer架构中具有相同维度d的查询、键和值。相反,我们将嵌入特征投影到一个更小的维度 d / γ d/\gamma d/γ空间进行进一步处置处罚,其中 γ > 1 \gamma>1 γ>1是缩减比例。同时,我们将留意力头的数量按比例 γ \gamma γ减少。这大大节省了自留意力内的计算成本,并迫使留意力头天生更紧凑和有用的留意力信息。 分组前馈模块
Transformer模子中大量的参数实际上来自前馈模块。为了在减少参数和计算成本的同时保持表现能力,我们提出以分组方式对前馈模块应用分组线性(GL)操作符,其定义如下:
M = Π i = 0 g [ f d g → m g i ( H [ : , i − 1 : i × d g ] ) ] , M ′ = G e L U ( M ) , H ′ = Π i = 0 g [ f m g → d g i ( M [ : , i − 1 : i × m g ] ′ ) ] M=\Pi_{i=0}^{g}\left[f_{\frac{d}{g}\to\frac{m}{g}}^{i}\left(H_{[:,i-1:i\times\frac{d}{g}]}\right)\right],M^{\prime}=\mathrm{GeLU}(M),H^{\prime}=\Pi_{i=0}^{g}\left[f_{\frac{m}{g}\to\frac{d}{g}}^{i}\left(M_{[:,i-1:i\times\frac{m}{g}]}^{\prime}\right)\right] M=Πi=0g[fgd→gmi(H[:,i−1:i×gd])],M′=GeLU(M),H′=Πi=0g[fgm→gdi(M[:,i−1:i×gm]′)](7)
其中, H ; H 0 ∈ R n × d , M ; M 0 ∈ R n × m , f d 1 → d 2 ( ⋅ ) H;H_0\in\mathbb{R}^{n\times d},M;M_0\in\mathbb{R}^{n\times m},f_{d_1\to d_2}(\cdot) H;H0∈Rn×d,M;M0∈Rn×m,fd1→d2(⋅)表现将维度从 d 1 d_{1} d1转换到 d 2 d_{2} d2的全毗连层,g 是分组数量, I I \mathrm{II} II表现拼接操作。这与原始的多头留意力机制划一,其中输入特征在嵌入维度上被分成多个组并独立处置处罚,全部处置处罚后的特征在嵌入维度上再次拼接。这比全毗连层更高效,而且性能下降可以忽略不计。
通过以迭代方式堆叠混合留意力模块和分组前馈模块,我们构建了ConvBERT模子。正如第4节实验所证明的那样,ConvBERT在捕捉全局和局部上下文方面更轻量、更高效,而且性能更好。
4 实验
我们在图6中提供了更多留意力图的示例。我们还计算了留意力图M的对角线会合度作为定量指标。它定义为 C = ∑ ∣ i − j ∣ ≤ 4 M i , j ∑ ∣ i − j ∣ > 4 M i , j C=\frac{\sum_{|i-j|\leq4}M_{i,j}}{\sum_{|i-j|>4}M_{i,j}} C=∑∣i−j∣>4Mi,j∑∣i−j∣≤4Mi,j。这表明留意力图捕捉了多少局部依赖性。