Meta新研究挑戰CV領域基操:ViT根本不用patch,用像素做token效果更佳
正如token是文本處理的基本單位,patch也被默認是計算機視覺領域處理圖像的基本單位。
從CNN誕生,到結合Transformer架構的ViT,雖然模型架構發生了很大的變化,但有一點始終一致——
研究人員們都會把原始圖像先進行切割,模型輸入以patch作為基本單位。
這種預處理方法非常有效,因此有廣泛的影響力,幾乎主導了整個CV領域。甚至于,Sora等視頻生成模型也沿用了這種方法。
Sora技術報告,訓練時將視覺數據切割為patch
然而,Meta AI和阿姆斯特丹大學最近聯合發表了一篇文章,對這個CV領域的「基操」提出了有理有據的質疑:圖像切成patch,真的有必要嗎?
https://arxiv.org/abs/2406.09415
首先我們可以做一個思維實驗,將圖片切成patch,究竟會對模型的哪方面造成影響?
論文作者提出,將整個圖像切割為patch再輸入,實質上會為模型引入一種「歸納偏差」(inductive bias),其背后依據的是局部性假設:與距離較遠的像素相比,相鄰像素更相關,能提供更多信息。
然而,回顧近年來的深度學習革命,我們似乎一直在通過減少歸納偏差取得進步。
比如,從前的研究人員會手動選擇特征,現在則是讓神經網絡從數據中自行學習特征。
不僅是數據,模型架構方面也是如此。CNN的核心是不同大小的卷積核,極其擅長提取圖像中的空間層次結構。
在分層學習的過程中,卷積網絡先提取邊緣、顏色、紋理等低級特征,在此基礎上,隨后提取出更加抽象、復雜的特征表達,比如面部表情、物體類別等等。
CNN這種對圖像特征的空間層次結構的假定,也是另一種形式的歸納偏差。相比之下,Transformer架構則擺脫了這種先驗假設,選擇用簡單的架構對多個尺度進行建模。
作者認為,減少歸納偏差不僅能讓模型泛化到更多任務上,還可以促進不同模態數據之間的更大統一,這也是為什么Transformer架構能從處理自然語言逐漸擴展到圖像、視頻、代碼、點云等不同領域。
因此,一個自然的問題出現了:我們能否消除ViT架構中剩余的歸納偏差,即局部性假設,從而實現性能提升?
由此,論文提出了PiT架構,引入關于圖像的2D網格結構的「零先驗」,將每個單獨的像素作為模型輸入的token(而不是patch),并加上位置編碼。
令人驚訝的結果出現了,模型不但沒有表現出訓練不收斂或性能退化,反而在下游任務上展現出比ViT更強的性能。
局部性歸納偏差
想要消除模型的局部性偏差,首先要弄清CNN和ViT架構分別在哪部分、用什么方式引入了局部性假設。
在卷積網絡中,局部性偏差反映在網絡每層計算的特征的感受域中,卷積和池化操作都是局部偏置的。
比如,第一層卷積的感受域通常僅對應于一個小的局部窗口。隨著網絡變深,該區域逐漸擴展,但窗口仍然是局部的,并且仍以某個像素位置為中心。
那么ViT呢?
乍一看,ViT和文本模型中所用的Transfomer類模型一樣,都是無局部性的。
因為大多數Transformer中的操作要么是在全局范圍內(如自注意力),要么純粹是在每個單獨的token上(比如MLP)。
然而,作者發現,ViT中的兩種設計依然會引入局部性歸納偏差:將圖像切割成patch,以及位置編碼。
將圖像切割為16×16大小的patch并將其作為基本操作單元,意味著patch內部和patch之間的計算量截然不同。
各個patch之間會進行多次自注意力操作,但patch內部256個像素被編碼為同一個token,始終「綁定」在一起。雖然第一個自注意力塊之后會將感受域擴展至全局,但patch化過程已經引入了這種鄰域的歸納偏差,「覆水難收」。
位置編碼的情況則更復雜一些。如果是可學習的位置編碼,則沒有引入局部性假設,但實際上CV領域更常用的是絕對位置編碼,比如2D sin-cos函數。
PE(x,y,2i) = sin(x/10000^(4i/D))
PE(x,y,2i+1) = cos(x/10000^(4i/D))
PE(x,y,2j+D/2) = sin(y/10000^(4j/D))
PE(x,y,2j+1+D/2) = cos(y/10000^(4j/D))
Where:
(x,y) is a point in 2d space
i,j is an integer in [0, D/4), where D is the size of the ch dimension
https://github.com/tatp22/multidim-positional-encoding
由于sin-cos函數的平滑特點,它們也往往會引入局部性偏差,即位置相近的token在編碼空間中也會更相似。
https://github.com/tatp22/multidim-positional-encoding
PiT:直接學習像素的Transformer
相比CNN,ViT的局部性偏差已經大大減少。但想徹底消除,就需要從patch化和位置偏碼兩個方向同時入手。
因此,編碼過程中,PiT將直接把整個圖像看作一系列無序的像素進行學習,輸入序列可以被表示為如下形式。
其中,d是隱藏維度,L是序列長度,也就是原始圖像的大小H×W。
圖像的每個像素通常被表示為三維的RGB值,因此PiT只是通過線性層將每個像素投影為d維向量,再加上可學習的CLS標簽和可學習的位置編碼
就構成了輸入的token。
PiT模型消除了像素空間結構關系的假設,而是讓模型自行從數據中學習,也因此更加通用——它能對任意大小的圖像建模,不受卷積核步長或patch大小的限制,甚至可以學習形狀不規則的圖像。
此外,從文本角度來看,以像素作為token的單位還能大大減少詞匯量。比如,對于[0, 255]范圍的三通道RGB值,p×p大小的patch可能導致2553·p·p的詞匯量,但PiT的詞匯量就只有2553。
然而,PiT最大的缺點就在于,移除patch這個單位后會造成輸入序列過長,這對Transformer架構而言是一個致命問題——計算成本會隨序列長度大幅增加。
正因為這個原因,評估實驗中只能在較小數據規模上驗證PiT的有效性。但作者認為,隨著LLM處理序列長度的快速發展,PiT的這個缺陷在未來也許不會成為阻礙。
實驗評估
論文通過三個實驗研究了PiT架構的有效性,分別是監督學習、使用MAE(masked autoencoder)的自監督學習,以及使用DiT的圖像生成。
使用的模型是4種不同規格的PiT和ViT從頭開始訓練并進行對比,ViT的patch大小為2×2,模型的參數配置如下:
監督學習
該任務使用了CIFAR-100和ImageNet兩個數據集,前者包含100個類別標簽和6萬張圖片,后者有1000個類別標簽和128萬張圖片;評估指標則使用驗證集上的top-1分類準確率(Acc@1) 和top-5(Acc@5)準確率。
從結果中可以看到,即使ViT已經充分優化,各種規格的PiT在兩個指標上都能取得更優的分類準確度。
從概念上看,PiT可以看作patch大小為1×1的ViT,因此模型性能隨patch大小的變化趨勢可以帶來關于模型架構的關鍵見解。
從上圖中可以看到兩種不同的趨勢。序列長度固定時,降低patch大小雖然在一開始沒有顯著變化,但隨后由于輸入尺寸下降、信息量減少,模型性能會迅速退化。
右側則相反,控制輸入大小不變(相當于有固定的信息量),更小的patch會帶來性能提升,在patch尺寸為1×1時達到最優。
這表明,patch尺寸雖然能影響模型性能,但輸入信息量是更重要的因素。
自監督學習
此實驗依舊使用CIFAR-100數據集,讓PiT進行自監督預訓練,隨后針對監督分類進行微調,其中MAE預訓練的掩碼比例設定為75%隨機掩碼。
與進行縱向比較可以發現,相比從頭開始訓練,MAE預訓練可以提高分類準確性,且PiT的結果依舊全面優于ViT。
圖像生成
此任務中的基線模型用DiT代替了ViT,使用ImageNet讓模型進行以類別為條件的圖像生成,并通過多個指標量化生成質量,包括FID、sFID、IS分數和準確率/召回率。
本實驗中所用的基線模型DiT-L相比之前的研究(最后兩行)已經有了顯著增益,但PiT-L依舊能在前三個指標上超越DiT-L的表現,且準確率/召回率達到同等水平。
這篇論文對PiT的探索證明了一個令人驚訝的結果——Transformer可以使用單個像素作為token。這就意味著,可能有一種干凈的、潛在可擴展的、無需局部性假設的架構。
作者提出,提出PiT的目的并不是要將其推廣并取代ViT,因為將每個像素視為token將導致序列長度大幅增加。以目前Transformer類模型的效率,PiT仍不如ViT實用。
考慮到二次計算的復雜性,PiT更多的是一種研究方法,ViT依舊是以效率換質量的最佳選擇。
然而,論文希望借助PiT的有效性挑戰一下CV領域長久以來的「局部性假設」。這并不是一個「必選項」或者Transformer的本質屬性,而只是一種啟發式方法。
下一代的視覺模型也許不需要引入patch這個概念,從局部歸納偏差中解放出來,或許能取得更好的性能。