獨(dú)家 | 為什么在CV(視覺(jué)識(shí)別)領(lǐng)域,Transformers正在緩慢逐步替代CNN?
作者:Pranoy Radhakrishnan
翻譯:wwl
校對(duì):王可汗
在認(rèn)識(shí)Transformers之前,思考一下,為什么已經(jīng)有了MLP、CNN、RNN,研究者還會(huì)對(duì)Transformers產(chǎn)生研究的興趣。
Transformers起初是用于語(yǔ)言翻譯。相比于循環(huán)神經(jīng)網(wǎng)絡(luò)(比如LSTM),Transformers支持模擬輸入序列元素中的長(zhǎng)依賴,并且支持并行處理序列。
Transformers利用同一個(gè)處理模塊,可以支持處理不同類型的輸入(包括圖像、視頻、文本、語(yǔ)音)。每個(gè)人都希望解決不同的問(wèn)題都能有統(tǒng)一的模型,并且兼顧準(zhǔn)確性和速度。和MLPs有通用的函數(shù)近似器一樣,transfomers模型在sequence-to-sequence問(wèn)題上,有通用的解決函數(shù)。
Transformers應(yīng)用了注意力機(jī)制,首先我們學(xué)習(xí)注意力機(jī)制和自注意力機(jī)制。
注意力機(jī)制
注意力機(jī)制的作用是提高輸入數(shù)據(jù)中關(guān)鍵部分的重要性,降低其余部分的重要性。就像是你理解一個(gè)圖片的時(shí)候,你會(huì)聚焦在圖像中有意義的相關(guān)部分。注意力機(jī)制也是這樣做的。
但是為什么我們需要注意力機(jī)制?畢竟CNNs已經(jīng)在圖像特征提取上表現(xiàn)得很好了,不是嗎?
對(duì)于一個(gè)CNN,輸入的每個(gè)圖片都是一樣的操作。CNN不會(huì)對(duì)不同特征的相對(duì)位置進(jìn)行編碼。如果想要對(duì)這些特征組合進(jìn)行編碼,則需要大的卷積核。舉例來(lái)說(shuō),編碼鼻子和嘴巴上邊的眼睛這個(gè)信息,需要大的卷積核。
在一個(gè)圖片里,如果要捕捉較大范圍的依賴關(guān)系的話,是需要大的感受野。提高卷積核的尺寸可以提高模型的表達(dá)能力,但這樣做也會(huì)失去使用局部卷積結(jié)構(gòu)獲得的計(jì)算和統(tǒng)計(jì)效率。
自注意力機(jī)制是注意力機(jī)制的一種,和CNN結(jié)合可以幫助擬合長(zhǎng)距離的依賴關(guān)系且不以犧牲計(jì)算效率和統(tǒng)計(jì)效率為代價(jià)。自注意力模塊是卷積的補(bǔ)充,有助于在圖像區(qū)域內(nèi)擬合遠(yuǎn)距離、多層次的依賴關(guān)系。
你可以看到,自注意力模塊替代了卷積層,現(xiàn)在模型中每個(gè)位置點(diǎn)可以和遠(yuǎn)距離的像素點(diǎn)有相關(guān)關(guān)系。
在最近的一項(xiàng)研究中,研究者執(zhí)行了一系列ResNets實(shí)驗(yàn),分別用注意力模塊替代部分和全部的卷積層,結(jié)果顯示模型效果最好的實(shí)驗(yàn)是在淺層用卷積層,在深層用注意力層。
圖 SAGAN使用的自我注意模塊
自注意力
自注意力機(jī)制是注意力機(jī)制的一種,作用是序列中的每個(gè)元素和序列中其他元素有交互,并發(fā)現(xiàn)應(yīng)該更關(guān)注其他元素中的哪個(gè)。
自注意力的目標(biāo)是捕捉所有實(shí)體的關(guān)系,是一個(gè)所有詞向量的帶權(quán)重的組合,可以捕捉序列中元素之間的長(zhǎng)范圍的信息和依賴關(guān)系。
從上圖可以看到,“it”指代的是“street”,而不是“animal”。自注意力是其他詞向量的帶權(quán)重的組合。這里“it”的詞向量是其他詞向量的加權(quán)的組合,其中單詞“street”的權(quán)重更高。
如果想深入理解權(quán)重是如何得到的,參考這個(gè)視頻:
https://www.youtube.com/watch?v=tIvKXrEDMhk
根本上,一個(gè)自注意力層會(huì)對(duì)輸入序列中的每個(gè)元素進(jìn)行更新,更新的方式是對(duì)完整的輸入序列中的全部信息進(jìn)行整合。
因此,我們已經(jīng)了解了像自注意這樣的注意力機(jī)制如何有效地解決卷積網(wǎng)絡(luò)的一些局限性?,F(xiàn)在是否有可能用像Transformers這樣的基于注意力的模型完全取代CNN?
在NLP領(lǐng)域,Transformers已經(jīng)取代了LSTM。那么在計(jì)算機(jī)視覺(jué)領(lǐng)域,Transfomers可以取代CNN嗎?接下來(lái)我們深入了解下,在哪些方面,注意力的方法超越了CNN。
Transformer 模型
Transformer模型最初是用來(lái)解決自然語(yǔ)言處理中的翻譯問(wèn)題,包含encoder-decoder的模型結(jié)構(gòu)。圖片中左邊表示編碼器,右邊表示****。編碼器和****中都包含自注意力機(jī)制、線性層和剩余的全連接層。
備注:在卷積神經(jīng)網(wǎng)絡(luò)中,特征增強(qiáng)和特征轉(zhuǎn)換是自發(fā)進(jìn)行的(通過(guò)非線性的卷積層),在Transformer模型中,特征增強(qiáng)和特征轉(zhuǎn)換是分開(kāi)進(jìn)行的,舉例來(lái)講,自注意力層僅實(shí)現(xiàn)特征增強(qiáng),前饋網(wǎng)絡(luò)實(shí)現(xiàn)特征轉(zhuǎn)換。
編碼器
以翻譯為例,編碼其中的自注意力是幫助輸入序列中的words產(chǎn)生交互,從而對(duì)每個(gè)word產(chǎn)生一個(gè)包含和序列中其他word的語(yǔ)義相似性的特征表示。
****
****的工作是一次輸出一個(gè)已翻譯的單詞,基于到目前為止生成的輸入詞嵌入和輸出。
****輸出翻譯后的單詞,是通過(guò)對(duì)編碼器的輸出中的特定部分以及對(duì)之前****的輸出。為了確保編碼器只用到了已經(jīng)生成的之前的輸出,不包含訓(xùn)練中未來(lái)的輸出。Mask Self Attention機(jī)制用于****。它只是掩蓋了訓(xùn)練期間****輸入給出的未來(lái)單詞。
自注意力并不關(guān)心位置。比如說(shuō),這個(gè)句子“Deepak is the son of Pradeep”,對(duì)于單詞“son”,自注意力會(huì)給單詞“Deepak”更多權(quán)重。如果我們順序改變得到,“Pradeep is the son of Deepak”,對(duì)單詞“son”,自注意力還是會(huì)給單詞”Deepak”更多權(quán)重,但其實(shí)這里我們希望如果句子中單詞順序改變,對(duì)單詞“son”來(lái)說(shuō),自注意力機(jī)制可以給“Pradeep”更多權(quán)重。
這是因?yàn)?,編碼單詞“son”的時(shí)候,自注意力機(jī)制是對(duì)其他所有單詞的詞向量進(jìn)行了加權(quán)組合且不考慮位置關(guān)系。所以打亂句子中的單詞順序并不會(huì)有任何不同。換句話說(shuō)自注意力機(jī)制是位置無(wú)關(guān)的。除非,在把子向量輸入自注意力模塊之前,給每個(gè)單詞增加了位置信息。
Vision Transformer
Vision Transformer是用Transformer替換卷積層。
圖 Vision Transformer
Transformer一般是應(yīng)用在序列數(shù)據(jù)中,因此我們把圖片切分成圖像塊(patches),然后把每個(gè)patch展開(kāi)為一個(gè)向量。從現(xiàn)在開(kāi)始,我會(huì)把這個(gè)圖像塊稱為一個(gè)元素(token),因此我們現(xiàn)在就得到了一個(gè)由這樣的元素構(gòu)成的序列。
自注意力機(jī)制是位置無(wú)關(guān)(permutation invariance)的。它對(duì)不同注意力向量的加權(quán)求和是“泛化的”匯總。
這里permutation Invariance的意思是指,如果輸入序列是[A, B, C, D],自注意力網(wǎng)絡(luò)得到的輸出結(jié)果和輸入序列為[A, C, B, D]是一樣的,以及任何其他的序列中元素位置發(fā)生改變后的序列,輸出結(jié)果都是一樣的。
圖 如果不向patch中添加位置編碼,這兩個(gè)序列對(duì)于Transformer來(lái)說(shuō)看起來(lái)是一樣的
因此,在輸入之前增加位置信息,增加位置信息有助于Transformer理解序列中元素的相對(duì)位置。在這里,學(xué)習(xí)位置編碼,而不是使用標(biāo)準(zhǔn)編碼。如果沒(méi)有增加位置編碼的話,對(duì)于Transformer來(lái)說(shuō)這些序列都一樣。
最后,Transformer的輸出作為后續(xù)的MLP分類器的輸入。
從零訓(xùn)練Transformers,比CNN需要更多的數(shù)據(jù)。這是因?yàn)镃NN可以編碼圖像的先驗(yàn)知識(shí)比如平移不變性(translational equivariance)。但是Transformers需要從給定的數(shù)據(jù)中獲得這個(gè)信息。
平移不變性是卷積層的一種特性,如果我們將圖像中的對(duì)象向右移動(dòng),則特征層的激活(提取的特征)也將向右移動(dòng)。但它們“實(shí)際上是相同的表示”。
ConViT
Vision Transformer,通過(guò)可以在patch上實(shí)現(xiàn)自注意力機(jī)制,學(xué)習(xí)到卷積歸納偏置(例如:等變)。缺點(diǎn)是,它們需要大量數(shù)據(jù)才能從頭開(kāi)始學(xué)習(xí)所有內(nèi)容
.
CNN有強(qiáng)歸納偏置性,所以在小數(shù)據(jù)集上表現(xiàn)更好。但如果有大量的數(shù)據(jù)可用,CNN的強(qiáng)歸納偏置性反而會(huì)限制模型的能力。
那么,是否有可能既擁有在小數(shù)據(jù)集上的強(qiáng)歸納偏置性,并且在大數(shù)據(jù)集上也不受限呢?
方案是引入?yún)^(qū)域自注意力機(jī)制(Positional Self Attention Mechanism(PSA) ),如果需要的話,它支持模型起卷積層的作用。我們只是用PSA替換了一些自注意層。
我們知道,由于自注意力是有位置無(wú)關(guān)性質(zhì)的,因此位置的信息通常是會(huì)增加到圖像塊上。我們并不是在嵌入階段添加的位置信息,而是用PSA替代原始的自注意層。
在PSA中,注意力的權(quán)重是用相對(duì)位置編碼(r)和經(jīng)過(guò)訓(xùn)練的詞向量(v)。這里相對(duì)位置編碼(r)僅僅依賴于像素間的距離。
這些具有可學(xué)習(xí)的相對(duì)位置編碼的多頭 PSA層可以表達(dá)任意卷積層。
因此,我們并沒(méi)有將CNN和注意力機(jī)制做整合,而是應(yīng)用PSA層,通過(guò)調(diào)整參數(shù)可以使得它具有卷積層的效果。在小數(shù)據(jù)集場(chǎng)景,PSA可以幫助模型更好的推廣,而到了大數(shù)據(jù)集場(chǎng)景,如果需要的話,PSA依然可以保留它的卷積性質(zhì)。
總結(jié)
這里我們展示了,最初用于機(jī)器翻譯的Transformer在圖像領(lǐng)域表現(xiàn)出了很好的效果。在圖像分類上,ViTs超過(guò)CNN是一個(gè)重大的突破。但是,ViTs需要在額外的大數(shù)據(jù)集上的預(yù)訓(xùn)練。在ImageNet數(shù)據(jù)集上,ConViT超過(guò)了ViTs,并且在效率上有所提升。這些都證明了,Transformers具有在圖像領(lǐng)域超越CNN的實(shí)力。
參考文獻(xiàn)
Transformers in Vision —https://arxiv.org/pdf/2101.01169.pdfConViT — https://arxiv.org/pdf/2103.10697.pdf
原文鏈接:https://becominghuman.ai/Transformers-in-vision-e2e87b739fe原文題目:Why Transformers are Slowly Replacing CNNs in Computer Vision?
*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。