Self-attention是建立語言及圖像生成模型的有效機制,其通過比較當前時間步中的各個元素,來決定上下文元素的重要程度。文中提出使用lightweight convolutions替代self-attention,結果表現的就很不錯。隨后提出了dynamic convolutions,此時卷積核將在當前時間步中通過函數生成,此方法與self-attention相比有較大提升。并且這種方法所需要的計算量與輸入的長度呈線性增長,而自注意力則是呈二次增長的。此方法在WMT’14 English-German 的測試集上的BLEU得分為29.7。
論文地址:
https://arxiv.org/abs/1901.10430
代碼地址:
https://github.com/pytorch/fairseq
引言
Dynamic convolution每個channel獨立進行卷積,注意到放到NLP任務上channel是指embedding的每一維。每一層都有固定的window size,這和self-attention不同。self-attention是所有的context都進行交互,使其計算的復雜度與輸入長度呈二次增長關系,在對長句子的計算上將極具挑戰性。
模型
其中,GLU(Gate Linear Units):
Depthwise convolutions
傳統的卷積核如下:
如果,參數量為
,其中
為卷積核的寬度。
為降低參數,采用如下depthwise convolutions。
如圖所示,,
,
,
。
使用depthwise convolutions,可將參數量由降為
,其中
為卷積核的寬度。
Lightweight convolutions
如圖所示,,
分割為3個區域,
與
相同顏色區域進行相乘,共享參數。
通過Weight sharing,參數的數量繼續下降為。
Softmax-normalization 對channel一維進行softmax,相當于歸一化每個詞的每一維的的重要性(比self-attention更精細)。實驗證明,如果沒有softmax沒辦法收斂。
Dynamic convolution
在每一個時間步中,通過函數動態生成卷積核。
其中,
是一個線性映射,其中權重
,
。
在動態生成卷積核時,每個對應的權重
,將在當前時間步中通過函數映射生成。其中,右側圖為幫助理解,實際計算中并未進行view步驟。
模型替換
模型在transformer中的位置如下圖所示:
如圖所示,在encoder端,使用LightCov或DynamicConv替代Multi-Head Attention;在decoder端,LightCov或DynamicConv替代第一層的Masked Multi-Head Attention,并且將Mask放入第二層的。
結論
1.Lightweight convolution的權重盡量少并且在不同的時間步中是不變的,但是結果已經與現有文獻最佳結果相當。
2.Dynamic convolution在不同的時間步中生成相應的權重,這點與self-attention相似,但是函數只有當前時間步有關而不是整個上下文。
3.Ligthweight convolution 和 dynamic convolution 在運行時間上都不self-attention快20%。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 掃碼識別關注,獲取更多新鮮論文解讀