ConvBERT: Improving BERT with Span-based Dynamic Convolution(2020-8-6)

模型介绍

像BERT及其变种这样的经过预训练的语言模型,最近在各种自然语言理解任务中取得了令人印象深刻的性能。但是,BERT严重依赖于全局自注意力模块,因此会需要较大的内存占用和计算成本。尽管其所有attention head作用于整个输入序列,以从全局角度生成attention map,但我们观察到有些head只需要学习本地依赖关系,这意味着存在计算冗余。

因此,我们提出了一种新颖的基于跨度的动态卷积,以取代这些self-attention head来直接对局部依赖性进行建模。新颖的卷积头与其余的self-attention头共同构成了一个新的混合注意力块,在全局和局部上下文学习中都更加有效。ConvBERT就是基于这种混合注意力构建的模型。

ConvBERT相比BERT改进的地方有两点:

  • 提出了一种新的混合注意力以取代BERT中的self-attention模块,该模块利用了卷积的优势来更好地捕获局部依赖。

  • 介绍了一种新颖的基于跨度的动态卷积运算,以利用多个输入token动态生成卷积核。

模型改进

基于跨度的动态卷积,得到了高效的混合注意力块。通过以迭代方式堆叠混合注意力和分组前馈模块,构建了ConvBERT模型。ConvBERT更轻量级且更有效地捕获全局和局部上下文,并且性能更高。

NLP中的卷积

一维卷积被应用于特定的seq2seq学习任务,像机器翻译和摘要。深度可分离卷积被应用于编码器和解码器,以执行翻译任务,并减少参数和计算成本。轻量和动态卷积可以进一步增强了卷积的表达能力。 但是,所有这些模型在捕获长句子的上下文上能力有限。注意在NLP任务中,卷积的channel指的是embedding的每一维。

1、Conventional 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

2、Depthwise Convolution

在这里插入图片描述
图中k为卷积核的宽度,d代表embedding的维度。通过使用depthwise convolution,参数量降为dk。

用公式可以表达为:

D W C o n v ( X , W c , : , i , c ) = ∑ j = 1 k W c , j ⋅ X ( i + j − ⌈ k + 1 2 ⌉ ) , c DWConv(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} DWConv(X,Wc,:,i,c)=j=1kWc,jX(i+j2k+1),c

3、Lightweight Convolution

在这里插入图片描述
在上图中,沿X的embedding维度划分为H个区域,这里H=3,卷积核W与X相同颜色的区域进行卷积,X中相同颜色区域参数共享。计算公式为:

L C o n v ( X , W ⌈ c H d ⌉ , : , i , c ) = D W C o n v ( X , s o f t m a x ( W ⌈ c H d ⌉ , : ) , i , c ) = ∑ j = 1 k W c , j ⋅ X ( i + j − ⌈ k + 1 2 ⌉ ) , c \begin{aligned} LConv(X,W_{\left \lceil \frac{cH}{d}\right \rceil,:},i,c)&=DWConv(X,softmax(W_{\left \lceil \frac{cH}{d}\right \rceil,:}),i,c) \\ &=\sum_{j=1}^{k}W_{c,j} \cdot X_{(i+j-\left \lceil \frac{k+1}{2}\right \rceil),c} \end{aligned} LConv(X,WdcH,:,i,c)=DWConv(X,softmax(WdcH,:),i,c)=j=1kWc,jX(i+j2k+1),c

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

4、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 C o n v ( X , i , c ) = L C o n v ( X , f ( X i ) h , : , i , c ) DConv(X,i,c)=LConv(X,f(X_{i})_{h,:},i,c) DConv(X,i,c)=LConv(X,f(Xi)h,:,i,c)

5、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 ∈ R k × d W_f,W_f \in R^{k \times d} Wf,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一致。

混合注意力

混合注意力块集成了基于跨度的动态卷积和self-attention,以更好地建模全局和局部依赖,并减少了冗余。
在这里插入图片描述
如图所示,它们共享相同的Query,但使用不同的Key分别生成注意力映射和卷积核。我们减少了attention heads的数量,通过将输入直接投影到较小的嵌入空间,形成self-attention和基于跨度的动态卷积的瓶颈结构。

假设用Concat()表示为连接操作,将混合注意力用公式可以表示为:

Mixed-Attn ( K , Q , K s , V ; W f ) = (K,Q,K_s,V;W_f)= (K,Q,Ks,V;Wf)= Concat ( ( (Self-Attn ( Q , K , V ) , (Q,K,V), (Q,K,V),SDConv Q , K s , V ; W f ) ) Q,K_s,V;W_f)) Q,Ks,V;Wf))

self-attention有些头是多余的,因此提议在引入基于跨度的动态卷积模块同时,减少头的数量。输入的嵌入首先被投影到一个较低维的空间,然后通过自注意力模块。具体地,在原始BERT中,尺寸d的嵌入特征被投影到Query,Key和Value,具有原始transformer体系结构中相同维度d。在这里将嵌入特征投影到为d /γ的更小维度,其中γ> 1是缩小比率。这意味着,通过控制γ减少了attention heads的数量。 这极大地节省了self-attention内的计算开销,并迫使注意力头产生更紧凑和有用的注意力信息。

分组前馈模块

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=\displaystyle\prod^g_{i=0}[f^i_{\frac d g \rightarrow \frac m g}(H_{[:,i-1:i \times \frac d g]})],M'=GeLU(M),H'=\prod^g_{i=0}[f^i_{\frac m g \rightarrow \frac d g}(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 , M , M ′ ∈ R n × m , f d 1 → d 2 ( ⋅ ) H,H'\in R^{n \times d},M,M' \in R^{n \times m},f_{d_1 \rightarrow d_2}(\cdot) H,HRn×d,M,MRn×m,fd1d2() 表示将维度d1转换为d2的全连接,g为组号, ∏ \prod 表示拼接。 这与原始的多头注意力机制是一致的,其中输入特征在嵌入维度上分为多个组并独立处理,并且所有处理后的特征再次在嵌入维度上拼接。 这比全连接的层更有效,并且性能下降的开销可以忽略不计。

模型参考

论文地址:https://arxiv.org/abs/2008.02496

代码地址:https://github.com/yitu-opensource/ConvBert

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不负韶华ღ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值