ConvBERT: 使用基於區間的動態卷積來提升BERT

論文標題:ConvBERT: Improving BERT with Span-based Dynamic Convolution
論文鏈接://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為卷積核的寬度,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 //arxiv.org/abs/2008.02496
ref:PAY LESS ATTENTION WITH LIGHTWEIGHT AND DYNAMIC CONVOLUTIONS //arxiv.org/abs/1901.10430
ref:ICLR 2019 | 採用輕量化及動態卷積替代注意力機制 //www.jianshu.com/p/78356d6fdd14