思考NLP和CV中的Local和Global建模
【寫在前面】
CNN的感受野受卷積核大小的限制,導致了CNN實際上是一種Local的信息建模;而Self-Attention(SA)是將每個位置和所有位置計算attention weight,考慮了每個點之間的聯系,因此SA是一種Global的建模。
起初,CNN大多用在CV領域中,而SA大多用在NLP領域中。但是隨著SA和CNN各自優(yōu)缺點的顯現(如下表所示),越來越多的文章對這兩個結構進行了混合的應用,使得模型不僅能夠捕獲全局的信息,還能建模局部信息來建模更加細粒度的信息。本文將結合兩篇NLP和CV的文章,對全局信息建模(SA)和局部信息建模(CNN)進行進一步的分析。
CNN和SA的優(yōu)缺點分析:

1)Conv的卷積核是靜態(tài)的,是與輸入的特征無關的;Self-Attention的權重是根據QKV動態(tài)計算得到的,所以Self-Attention的動態(tài)自適應加權的。
2)對卷積來說,它只關心每個位置周圍的特征,因此卷積具有平移不變性。但是Self-Attention不具備這個性質。
3)Conv的感知范圍受卷積核大小的限制,而大范圍的感知能力有利于模型獲得更多的上下文信息。Self-Attention是對特征進行全局感知。
1.CNN和SA在NLP中的聯合應用
1.1. 論文地址和代碼
MUSE:Parallel Multi-Scale Attention for Sequence to Sequence Learning
論文地址:https://arxiv.org/abs/1911.09483
代碼地址:https://github.com/lancopku/MUSE
核心代碼:https://github.com/xmu-xiaoma666/External-Attention-pytorch/blob/master/attention/MUSEAttention.py
1.2. Motivation
Transformer在NLP領域曾經掀起了熱潮,原因是SA對句子序列的建模能力非常強,性能上遠超RNN等結構,對RNN-based NLP時代進行了革新。
但是一些研究表明,SA對于短句子的建模非常有效,對于長句子的建模能力就會減弱。原因是SA建模時注意力會過度集中或過度分散,如下圖所示,有的區(qū)域幾乎沒有attention,有的區(qū)域會有特別大的attention weight,另外大部分區(qū)域的attention weight都比較小,只有很少一部分的區(qū)域的attention weight比較大。

除此之外,如下圖所示,SA在短句子上的效果非常好,在長句子的效果極具下降,也在一定程度上顯示了SA對于長句子序列建模能力的不足。(這一點我倒是不太贊同,因為,可能是因為本身長句子包含的信息更加豐富(或者信息更加冗余),所以對于模型來說,長句子序列的學習本身就比短句子要難,所以也會導致性能的下降。因此,是否是因為SA對長句子序列建模能力的不足導致的性能下降,還需要做進一步的實驗)

基于以上的發(fā)現,作者提出了通過引入多尺度的CNN,在不同尺度上進行局部信息的感知,由此來提升SA全局建模能力的不足。
1.3. 方法

模型結構如上圖所示,作者將原來只能對特征進行全局建模的SA換成能夠進行多尺度建模的CNN與SA的結合(Multi-Scale Attention)。
在卷積方面作者用的是深度可分離卷積:

此外,除了感受野為1的特征,其他尺度的Attention在進行特征映射的時候都采用了與SA參數共享的映射矩陣。
為了能夠動態(tài)選擇不同感受野處理之后的特征,作者還對各個卷積核處理之后的結果進行了動態(tài)加權:

1.4. 實驗

在翻譯任務上,MUSE模型能夠超過其他的所有模型。

在感受野的選擇方面,如果只采用一個卷積,那么k=3或7的時候效果比較好;采用多個卷積,比采用單個卷積的效果要更好一些。
2. CV中CNN和SA的聯合應用
2.1. 論文地址代碼
CoAtNet: Marrying Convolution and Attention for All Data Sizes
論文地址:https://arxiv.org/abs/2106.04803
官方代碼:未開源
核心代碼:https://github.com/xmu-xiaoma666/External-Attention-pytorch/blob/master/attention/CoAtNet.py
2.2. Motivation
在本文的【寫在前面】,我們提到了CNN有一個特點,叫做平移不變性。這是CV任務中的一個假設偏置,對于提高模型在CV任務上的泛化能力是非常重要的。而SA對于捕獲圖片的全局信息是非常重要的,能夠極大的提高模型的學習能力。因此,作者就想到了,將這兩者都用到了CV任務中,讓模型不僅擁有很強的泛化能力,也能擁有很強的學習能力。
2.3. 方法&實驗
本文倒是沒有提什么特別新穎的方法,不過CNN和SA的串聯結構做了詳細的實驗。首先作者提出了四種結構,1)C-C-C-C;2)C-C-C-T;3)C-C-T-T ;4)C-T-T-T。其中C代表Convolution,T代表Transformer。
用這幾個結構分別在ImageNet1K和JFT數據集上做了實驗,訓練的loss和準確率如下:

根據上面的結果,作者得出來以下的結論:
不同結構的泛化能力排序如下:

不同結構的學習能力排序如下:

然后,作者為了探究C-C-T-T 和 C-T-T-T,哪一個比較好。作者在JFT上預訓練后,在ImageNet-1K上再訓練了30個epoch。結果如下:

可以看出C-C-T-T的效果比較好,因此作者選用了C-C-T-T作為CoAtNet的結構。

從上圖中可以看出,CNN+SA的結構確實比單純的CNN或者SA的結構性能要好。
【總結】
CNN和SA其實還是有一些相似,又有一些不同的。既然各有優(yōu)缺點,將他們進行結合確實是不個不錯的選擇。但是,個人覺得,目前的方法將CNN和SA做結合都比較粗暴,所以會導致sub-optimal的問題。
個人覺得,如果能夠將SA融入到CNN中,形成一種內容自適應的卷積;或者將CNN到SA中,形成一種具有平移不變性的SA,這樣的結構,或許會比當前這樣直接并列或者串聯有意思的多。
除此之外,出了簡單粗暴的將CNN和SA融合的到一起,最近還有一系列文章提出了局部的注意力(e.g., VOLO[1], Focal Self-Attention[2])來提高模型的能力。
【參考文獻】
[1]. Yuan, Li, et al. "VOLO: Vision Outlooker for Visual Recognition." arXiv preprint arXiv:2106.13112 (2021).
[2]. Yang, J., Li, C., Zhang, P., Dai, X., Xiao, B., Yuan, L., & Gao, J. (2021). Focal Self-attention for Local-Global Interactions in Vision Transformers. arXiv preprint arXiv:2107.00641.
關于文章有任何問題,歡迎在評論區(qū)留言或者添加作者微信: xmu_xiaoma
