帶你讀Paper丨分析ViT尚存問題和相對應的解決方案

華為雲開發者社群發表於2021-10-08
摘要:針對ViT現狀,分析ViT尚存問題和相對應的解決方案,和相關論文idea彙總。

本文分享自華為雲社群《【ViT】目前Vision Transformer遇到的問題和克服方法的相關論文彙總》,作者:蘇道 。

首先來看ViT始祖級論文:

An image is worth 16x16 words: Transformers for image recognition at scale

論文地址:https://arxiv.org/abs/2010.11929

帶你讀Paper丨分析ViT尚存問題和相對應的解決方案

他使用全Transformer結構,將影像區域劃分為一個個小方塊作為Patch作為輸入。左圖是ViT的總體架構,右邊是Transformer Encoder中每個Block的外形。我們可以看到,他基本就是原始Transformer的結構,除了他把norm放在前面,有文章表明norm放在前面更加容易訓練一點。

使用Transformer可以在每一層都得到圖片的全域性資訊,但是他也不是十全十美的,他有以下的這些缺點:

1、資料需求量大: Self-Attention歸納偏置能力較CNN弱。歸納偏置怎麼說呢,就是模型對沒遇到的資料做的一些假設,CNN具有空間不變性的假設,所以他可以用一個權重去滑窗處理整個特徵圖,而RNN具有時間不變性的假設。但是Self-Attetnion沒有這些假設,所以他需要更多的資料去自動學習到這些假設,但是這樣有一個好處就是可能學到的假設會更靈活一些。

那針對這個問題,我們可以使用一個CNN網路作為Teacher網路,新增蒸餾損失去幫助他學習。

Patch Embedding本質是一個卷積核與滑動步長都為Patch size的大卷積和,想Vit為16的卷積核,那肯定是不夠穩定的,所以後來的一些研究會使用幾個卷積與池化相結合或者乾脆前幾個block是殘差塊的方式來代替。

2、計算量大:計算複雜度與token的平方相關,如果輸入特徵圖為56*56的特徵圖,那麼會涉及3000+長寬的矩陣運算,計算量很大,同時在原始Transformer計算過程中token數以及hidden size保持不變,所以後來的研究者採用了幾個方法是解決計算量大的問題。參考resnet結構使用金字塔的結構,越高層的token數量越少;使用區域性視窗sa,分別考慮特徵圖的一部分做sa,再想辦法把這些區域性資訊進行互動;使用卷積來代替fc,以減少引數;在生成Q,K,V過程中,對K,V的特徵圖或者是token做池化,減少計算複雜度。

3、堆疊層數數量受限:存在過度平滑問題,不同的Block之間的相似性隨著模型的加深而增加;不同token之間的相似性隨著隨著模型的加深而增加。解決方法主要是增大hidden size,不過這個方法引數增加量也會很大;在注意力圖softmex前後,在head維度進行線性變換以增加資訊互動,增加註意力圖的多樣性;在深層dropout增大以增加特徵的多樣性;或者增加相似度懲罰損失項。

4、模型本身無法編碼位置:那就需要各種各樣的位置編碼,以下列出了一些位置編碼,有固定的與可學習的,有絕對的和相對的,還有利用卷積的特性使用卷積去作為位置編碼的。

具體可見下表

帶你讀Paper丨分析ViT尚存問題和相對應的解決方案

上述改進點相關論文大家可以查下表:

帶你讀Paper丨分析ViT尚存問題和相對應的解決方案帶你讀Paper丨分析ViT尚存問題和相對應的解決方案

 

點選關注,第一時間瞭解華為雲新鮮技術~

相關文章