美文网首页程序员人工智能
ConvBERT:使用基于区间的动态卷积来提升BERT

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

作者: 酷酷的群 | 来源:发表于2020-11-22 20:06 被阅读0次

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

一、概述

  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为卷积核的宽度,d_{in}代表输入的embedding的维度,d_{out}代表输出的embedding的维度,如果d_{in}=d_{out}=d,则需要的参数量为d^2k

  1. Depthwise convolution

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

depthwise convolution

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

其输出的计算方式为:

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}

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

  1. Lightweight convolution

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

lightweight convolution

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

其输出的计算公式为:

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)

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

  1. Dynamic convolution

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

dynamic convolution

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

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

Dynamic convolution计算输出的公式为:

DynamicConv(X,i,c)=LightConv(X,f(X_{i})_{h,:},i,c)

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

  1. Span-based dynamic convolution
span-based dynamic convolution

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

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

f(Q,K_{s})=softmax(W_{f}(Q\circ K_{s}))

Span-based dynamic convolution的公式为:

SDConv(Q,K_{s},V;W_{f},i)=LightConv(V,softmax(W_{f}(Q\circ K_{s})),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的计算公式为:

MixedAttn(K,Q,K_s,V;W_f)=Cat(SelfAttn(Q,K,V),SDConv(Q,K_s,V;W_f))

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

  1. Bottleneck design for self-attention

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

  1. Grouped feed-forward module

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

该过程的公式为:

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}]})]

上式中H,H^{'}\in R^{n\times d}M,M^{'}\in R^{n\times m}f_{d_{1}\rightarrow d_{2}}(\cdot )表示一个将d_1维映射到d_2维的全连接网络,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

相关文章

网友评论

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

    本文链接:https://www.haomeiwen.com/subject/eizyiktx.html