ConvBERT: 使用基於區間的動態卷積來提升BERT
論文標題:ConvBERT: Improving BERT with Span-based Dynamic Convolution
論文鏈接://arxiv.org/abs/2008.02496
一、概述
- 簡介
本文提出了一種新的預訓練語言模型ConvBERT,這個模型是在BERT的基礎上進行改進,最終極大地提升了訓練的速度,節約了訓練成本,同時提升了模型效果,具體的,ConvBERT用 1/10 的訓練的時間和 1/6 的參數,就能獲得跟原來的模型獲得一樣的精度。
該模型引入了以下幾個新的機制:
①mixed attention;
②span-based dynamic convolution;
③bottleneck structure for self-attention;
④grouped linear operator。
- BERT中的冗餘
提出該結構的具體出發點是該團隊發現BERT結構中存在大量的冗餘,具體包括以下兩點:
①雖然self-attention是一種非局部(non-local)的operator,但是通過觀察attention map可以發現很大比例的attention head主要學習的是文本局部的依賴關係(local dependency)。
這一點可以通過觀察BERT的平均attention map來確認:
Self-attention使用所有的token來生成attention weight來捕捉全局的依賴關係,但通過觀察其平均attention map可以看到BERT更多的學習到了局部的依賴關係。這個事實是很容易理解的,對於語言來說,一句話中的一個詞更多地依賴於其附近的詞,這也是語言的內在屬性。
②在微調時移除一些attention head並不影響模型的性能。
以上兩點表明BERT的架構中存在大量的冗餘。於是該團隊考慮使用一種local operator來替換一些attention head來減少BERT中的冗餘。在處理局部依賴關係時我們很自然地會想到卷積操作,於是在結合前人有關語言模型的卷積操作的研究的基礎上,該團隊提出了基於區間的動態卷積(span-based dynamic convolution)。
- 相關工作
一些其他的研究會使用一些方法來壓縮預訓練模型,比如:
①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的每一維。
- 傳統的卷積
其中k為卷積核的寬度,d_{in}代表輸入的embedding的維度,d_{out}代表輸出的embedding的維度,如果d_{in}=d_{out}=d,則需要的參數量為d^2k。
- 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。
- Lightweight convolution
Lightweight convolution進一步縮減了卷積核的參數量:
在上圖中,沿X的embedding維度劃分為H個區域,這裡H=3,卷積核W與X相同顏色的區域進行卷積,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就不會收斂。
- 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步驟。
- 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_s與Q的Hadamard積來動態地生成卷積核(kernel generator的權重為W_f,W_{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
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操作。
- Bottleneck design for self-attention
Self-attention中一些head是冗餘的,我們引入span-based dynamic convolution後需要減少一部分head,這裡用到的操作被稱為bottleneck structure。Bottleneck structure是指將輸入的embedding被映射到更低的維度d/\gamma(\gamma >1)。同時也按照比例\gamma來減少head的數量。
- 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上的效果對比:
可以看到ConvBERT相對於BERT和ELECTRA取得了更好的效果且需要更少的算力。
六、其他要點
- 對比平均attention map
對比BERT和ConvBERT的平均attention map我們可以看到,ConvBERT的相對於BERT,其self-attention模塊更多地用來提取全局信息,這也就減少了冗餘:
- 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