ConvBERT: 使用基于区间的动态卷积来提升BERT

论文标题:ConvBERT: Improving BERT with Span-based Dynamic Convolution
论文链接:https://arxiv.org/abs/2008.02496

一、概述

  1. 简介

本文提出了一种新的预训练语言模型ConvBERT,这个模型是在BERT的基础上进行改进,最终极大地提升了训练的速度,节约了训练成本,同时提升了模型效果,具体的,ConvBERT用 1/10 的训练的时间和 1/6 的参数,就能获得跟原来的模型获得一样的精度。

该模型引入了以下几个新的机制:
①mixed attention;
②span-based dynamic convolution;
③bottleneck structure for self-attention;
④grouped linear operator。

  1. BERT中的冗余

提出该结构的具体出发点是该团队发现BERT结构中存在大量的冗余,具体包括以下两点:

①虽然self-attention是一种非局部(non-local)的operator,但是通过观察attention map可以发现很大比例的attention head主要学习的是文本局部的依赖关系(local dependency)。

这一点可以通过观察BERT的平均attention map来确认:

average attention map

Self-attention使用所有的token来生成attention weight来捕捉全局的依赖关系,但通过观察其平均attention map可以看到BERT更多的学习到了局部的依赖关系。这个事实是很容易理解的,对于语言来说,一句话中的一个词更多地依赖于其附近的词,这也是语言的内在属性。

②在微调时移除一些attention head并不影响模型的性能。

以上两点表明BERT的架构中存在大量的冗余。于是该团队考虑使用一种local operator来替换一些attention head来减少BERT中的冗余。在处理局部依赖关系时我们很自然地会想到卷积操作,于是在结合前人有关语言模型的卷积操作的研究的基础上,该团队提出了基于区间的动态卷积(span-based dynamic convolution)。

  1. 相关工作

一些其他的研究会使用一些方法来压缩预训练模型,比如:
①weight pruning;
②weight sharing;
③knowledge distillation;
④quantization。

另外一些研究会扩展预训练模型,比如:
①incorporate knowledge;
②multiple languages;
③multiple modalities。

但是通过修改模型架构来提升语言模型性能的研究相对较少。

二、不同方法的对比

NLP中的卷积的方式也有很多种,比起使用传统的被所有token分享参数的卷积核,动态卷积(dynamic convolution)对于捕捉局部依赖关系显然更有灵活性。

对比

上图展示了self-attention、dynamic convolution和span-based dynamic convolution共3中不同的方法。

dynamic convolution使用一个kernel generator来为每个词的embedding生成自己的卷积核,但是它的局限性在于会为不同上下文的同一个词生成相同的卷积核,难以学习一词多义的情况(比如下图b中多个“can”)。

而span-based dynamic convolution的kernel generator会输入当前词以及该词周边一个区间内的词来生成卷积核,对解决上述一词多义的问题很有帮助。

另外,由上图可以看出,随着序列长度的增加,self-attention的复杂度呈现二次增长。

三、NLP中的卷积

首先需要说明在NLP任务中,卷积的channel指的是embedding的每一维。

  1. 传统的卷积

convolution

其中 k k k为卷积核的宽度, d i n d_{in} din代表输入的embedding的维度, d o u t d_{out} dout代表输出的embedding的维度,如果 d i n = d o u t = d d_{in}=d_{out}=d din=dout=d,则需要的参数量为 d 2 k d^2k d2k

  1. Depthwise convolution

Depthwise convolution缩减了传统卷积方法的参数量:

depthwise convolution

上图中 k k k为卷积核的宽度, d d d代表embedding的维度。

其输出的计算方式为:

O i , c = D e p t h w i s e C o n v ( X , W c , : , i , c ) = ∑ j = 1 k W c , j ⋅ X ( i + j − ⌈ k + 1 2 ⌉ ) , c O_{i,c}=DepthwiseConv(X,W_{c,:},i,c)=\sum_{j=1}^{k}W_{c,j}\cdot X_{(i+j-\left \lceil \frac{k+1}{2}\right \rceil),c} Oi,c=DepthwiseConv(X,Wc,:,i,c)=j=1kWc,jX(i+j2k+1),c

通过使用depthwise convolution,参数量降为 d k dk dk

  1. Lightweight convolution

Lightweight convolution进一步缩减了卷积核的参数量:

lightweight convolution

在上图中,沿 X X X的embedding维度划分为 H H H个区域,这里 H H H=3,卷积核 W W W X X X相同颜色的区域进行卷积, X X X中相同颜色区域参数共享。

其输出的计算公式为:

L i g h t C o n v ( X , W ⌈ c H d ⌉ , : , i , c ) = D e p t h w i s e C o n v ( X , s o f t m a x ( W ⌈ c H d ⌉ , : ) , i , c ) LightConv(X,W_{\left \lceil \frac{cH}{d}\right \rceil,:},i,c)=DepthwiseConv(X,softmax(W_{\left \lceil \frac{cH}{d}\right \rceil,:}),i,c) LightConv(X,WdcH,:,i,c)=DepthwiseConv(X,softmax(WdcH,:),i,c)

Softmax-normalization对卷积核channel一维进行softmax处理,相当于归一化每个词的每一维的重要性。实现表明,如果不进行softmax就不会收敛。

  1. Dynamic convolution

Dynamic convolution会动态地生成卷积核:

dynamic convolution

Dynamic convolution会为每一个词的embedding动态地生成卷积核,生成卷积核时使用一个kernel generator,这个kernel generator是一个函数 f : R d → R H × k f:R^{d}\rightarrow R^{H\times k} f:RdRH×k f f f是一个线性映射,其中权重 W Q ∈ R H × k × d W^{Q}\in R^{H\times k\times d} WQRH×k×d,动态生成 i i i位置词的卷积核公式为:

f ( X i ) = ∑ c = 1 d W h , j , c Q X i , c f(X_{i})=\sum _{c=1}^{d}W^{Q}_{h,j,c}X_{i,c} f(Xi)=c=1dWh,j,cQXi,c

Dynamic convolution计算输出的公式为:

D y n a m i c C o n v ( X , i , c ) = L i g h t C o n v ( X , f ( X i ) h , : , i , c ) DynamicConv(X,i,c)=LightConv(X,f(X_{i})_{h,:},i,c) DynamicConv(X,i,c)=LightConv(X,f(Xi)h,:,i,c)

上图中,右侧部分为帮助理解,实际计算中并未进行view步骤。

  1. Span-based dynamic convolution

span-based dynamic convolution

上图展示了span-based dynamic convolution的架构,其中 Q , V , K s ∈ R n × d Q,V,K_s\in R^{n\times d} Q,V,KsRn×d,也就是self-attention中的query和value。输入的 X X X首先需要经过一个depthwise convolution来获取每个token局部的一个区间内的信息,然后使用这个depthwise convolution卷积后的结果 K s K_s Ks Q Q Q的Hadamard积来动态地生成卷积核(kernel generator的权重为 W f W_f Wf W f ∈ R k × d W_{f} \in R^{k\times d} WfRk×d,也就是说 H = 1 H=1 H=1),然后使用动态生成的卷积核在 V V V上做卷积。

上述过程的动态生成卷积核公式为:

f ( Q , K s ) = s o f t m a x ( W f ( Q ∘ K s ) ) f(Q,K_{s})=softmax(W_{f}(Q\circ K_{s})) f(Q,Ks)=softmax(Wf(QKs))

Span-based dynamic convolution的公式为:

S D C o n v ( Q , K s , V ; W f , i ) = L i g h t C o n v ( V , s o f t m a x ( W f ( Q ∘ K s ) ) , i ) SDConv(Q,K_{s},V;W_{f},i)=LightConv(V,softmax(W_{f}(Q\circ K_{s})),i) SDConv(Q,Ks,V;Wf,i)=LightConv(V,softmax(Wf(QKs)),i)

然后需要经过一个Linear层进行处理。

我们总是保持depthwise convolution和span-based dynamic convolution卷积核的size一致。

四、ConvBERT的架构

mixed attention

上图为mixed attention的架构。

  1. Mixed attention

Mixed attention集成了self-attention和span-based dynamic convolution,其中self-attention负责捕获全局信息,span-based dynamic convolution负责捕获局部信息。self-attention和span-based dynamic convolution使用相同的query和value,但是使用不同的key。Mixed attention的计算公式为:

M i x e d A t t n ( 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 ) ) MixedAttn(K,Q,K_s,V;W_f)=Cat(SelfAttn(Q,K,V),SDConv(Q,K_s,V;W_f)) MixedAttn(K,Q,Ks,V;Wf)=Cat(SelfAttn(Q,K,V),SDConv(Q,Ks,V;Wf))

上式中 C a t ( , ) Cat( , ) Cat(,)是concatenate操作。

  1. Bottleneck design for self-attention

Self-attention中一些head是冗余的,我们引入span-based dynamic convolution后需要减少一部分head,这里用到的操作被称为bottleneck structure。Bottleneck structure是指将输入的embedding被映射到更低的维度 d / γ d/\gamma d/γ γ > 1 \gamma >1 γ>1)。同时也按照比例 γ \gamma γ来减少head的数量。

  1. Grouped feed-forward module

Transformer中很大一部分参数量来自于前馈网络模块,在能减少参数量和运算成本又不损伤模型性能的前提下,该团队提出了一种grouped linear (GL)操作来改进前馈网络部分。其思路是mixed attention输出的embedding是 n × d n\times d n×d维的,则在embedding维度上将 d d d个维度分成 g g g组,然后将每组输入到各自的前馈网络中然后再将前馈网络的输出concatenate起来。

该过程的公式为:

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}[f_{\frac{d}{g}\rightarrow \frac{m}{g}}^{i}(H_{[:,i-1:i\times \frac{d}{g}]})]\\ M^{'}=GeLU(M)\\ H^{'}=\Pi _{i=0}^{g}[f_{\frac{m}{g}\rightarrow \frac{d}{g}}^{i}(M^{'}_{[:,i-1:i\times \frac{m}{g}]})] M=Πi=0g[fgdgmi(H[:,i1:i×gd])]M=GeLU(M)H=Πi=0g[fgmgdi(M[:,i1:i×gm])]

上式中 H , H ′ ∈ R n × d H,H^{'}\in R^{n\times d} H,HRn×d M , M ′ ∈ R n × m M,M^{'}\in R^{n\times m} M,MRn×m f d 1 → d 2 ( ⋅ ) f_{d_{1}\rightarrow d_{2}}(\cdot ) fd1d2()表示一个将 d 1 d_1 d1维映射到 d 2 d_2 d2维的全连接网络, g g g表示分组的数量, Π \Pi Π代表concatenate操作。

这种方式比前馈网络更有效并且模型性能下降可以忽略不计。

五、对比

下图展示了BERT、ELECTRA、ConvBERT等模型在GLUE上的效果对比:

GLUE对比

可以看到ConvBERT相对于BERT和ELECTRA取得了更好的效果且需要更少的算力。

六、其他要点

  1. 对比平均attention map

对比BERT和ConvBERT的平均attention map我们可以看到,ConvBERT的相对于BERT,其self-attention模块更多地用来提取全局信息,这也就减少了冗余:

对比平均attention map

  1. Kernel size的选择

kernel size

卷积核的receptive filed还没有覆盖整个输入序列时,kernel size越大效果越好,而如果kernel size达到覆盖了整个输入序列,效果就会下降。

参考资料

ref:ConvBERT: Improving BERT with Span-based Dynamic Convolution https://arxiv.org/abs/2008.02496
ref:PAY LESS ATTENTION WITH LIGHTWEIGHT AND DYNAMIC CONVOLUTIONS https://arxiv.org/abs/1901.10430
ref:ICLR 2019 | 采用轻量化及动态卷积替代注意力机制 https://www.jianshu.com/p/78356d6fdd14

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值