Transformer 眼中世界 Vs. CNN 眼中世界
消失人口回歸系列,嗯,這段時(shí)間也一直在從事反卷事業(yè)。
最近幫朋友看畢業(yè) Report,主要對比視覺識別比較前沿的兩個(gè)模型,ViT(Vision Transformer) 和 EfficientNet. 需要可視化解釋一下這兩模型對同一任務(wù)的不同之處。
EfficientNet 主要組件是 CNN 還好,CNN 在可視化各位大佬都做了,但 ViT 的 Transformer 在圖像方面,說實(shí)話都不知道可視化哪部分,開頭 patch 的轉(zhuǎn)換部分或者 attention map 還行。
剛好看到這篇論文 Do Vision Transformers See Like Convolutional Neural Networks? 時(shí)不時(shí)莫名其妙在想什么問題時(shí),突然蹦出相關(guān)論文,可能是老天想讓我動動了。
ViT 和 ResNet 回顧
這篇論文如果只是想看結(jié)論,直接跳到第三小節(jié)就行。這里簡單介紹一下要對比的模型 ViT 和 ResNet。
ViT 全稱 Vision Transformer,即 Transformer 模型用在視覺領(lǐng)域,于去年年底谷歌論文 An Image is Worth 16x16 Words 中提出,當(dāng)看到該來的還是來了,大家緊跟著趕緊各種魔改,最近也不少相關(guān)論文。
主要點(diǎn)還是怎么將圖片作為 token 輸入。之前比較粗暴點(diǎn)就是直接像素作為 token 輸入,或者如 OpenAI 先訓(xùn)VAE 給圖片轉(zhuǎn)成離散 token 接著輸入。而 ViT 是給圖片切成一塊塊小方塊(patch) ,經(jīng)過線性投影成一個(gè) embedding 表示,然后輸入 Transformer 進(jìn)行交互。

方法不難,但效果很不錯(cuò),直接 SOTA 了。關(guān)于 ViT 各個(gè)版本變好主要就是模型大小和切塊大小,比如16就是16x16的切塊。
之后 ResNet 沒有太多要介紹了,太經(jīng)典了。

這篇 Transformer 和 CNN 對比論文,主要就是給 ViT 模型和 ResNet 模型中的表征抽取出來,然后進(jìn)行分析。
CKA 向量相似計(jì)算介紹
其中用到最主要的分析方法就是 CKA 向量相似度分析法。
CKA(Centered Kernel Alignment)12年就提出來了,但在神經(jīng)網(wǎng)絡(luò)表征相似度計(jì)算的推廣還要多虧 Hinton 團(tuán)隊(duì)19年那篇 Similarity of neural network representations revisited.
要計(jì)算神經(jīng)網(wǎng)絡(luò)表征在模型不同層,或不同模型間的相似度。因?yàn)樘卣魇欠稚⒃诖罅可窠?jīng)元中,還有分布順序和 scaling 問題,還是有些困難的。
CKA 方法,就是先選定兩個(gè)要對比的表征層,比如說 ViT 的第2層和 ResNet 的第10層,那么取一些樣本,輸入兩個(gè)模型,就能從對應(yīng)層拿到兩份表征。

先分別對著兩份表征計(jì)算 Gram matrix(就是計(jì)算向量兩兩之間內(nèi)積組成的矩陣,相當(dāng)于計(jì)算了各個(gè)數(shù)據(jù)點(diǎn)pair對之間的相似度)

分別獲得 和 ,之后再來計(jì)算它們的 Hilbert-Schmidt independence criterion (HSIC,Hilbert-Schmidt獨(dú)立性指標(biāo),用于計(jì)算兩個(gè)分布的統(tǒng)計(jì)學(xué)獨(dú)立性),這里兩個(gè)分布就是 和 ,具體計(jì)算過程如下,先構(gòu)建一個(gè)中心矩陣

接著用 來給 和 分別中心化

接著就可以直接計(jì)算 HSIC 了
最后 Normalize 一下就是 CKA 了

CKA 最大的優(yōu)點(diǎn)是對矩陣正交變換后獲得的結(jié)果也是不變的(比如排列不同),所以一個(gè)相同模型因?yàn)殡S機(jī)種子不同,表征順序不同也沒關(guān)系;而且 Normalization 后對不同 Scaling 也可以進(jìn)行對比。
結(jié)論:這倆眼中的世界灰常的不同
講完技術(shù)部分,就直接看實(shí)驗(yàn)結(jié)論吧。
ViT 內(nèi)層間表征結(jié)構(gòu)和 ResNet 內(nèi)層間表征結(jié)構(gòu)有很大不同
在 ViT 和 ResNet 模型內(nèi),對每層之間表征進(jìn)行 CKA 分析

可清晰看到分別的熱度圖結(jié)構(gòu)有很大的差別,對于 ViT 模型所有層之間會學(xué)到高度相似的表征,而對于 ResNet 則底層和高層網(wǎng)絡(luò)學(xué)到的表征有很大不同。
ViT 和 ResNet 間表征對比也有很大不同
對不同模型表征之間進(jìn)行相似度計(jì)算,看看 ViT 和 ResNet 學(xué)到的表征是不是有相似的。

結(jié)果發(fā)現(xiàn),ResNet 低層有很多層和 ViT的低層比較像,之后往上走點(diǎn) ResNet 和 ViT 中間層的表征比較像,而沒有特征和 ViT 的頂層相似,也就是說 ViT 頂層學(xué)到的表示和 ResNet 所有層學(xué)到的表示都差很多。
可能跟 ViT 最后輸出用 [CLS] token,而 ResNet 用的 Global Pooling 有關(guān),后面也有相關(guān)對比。
ViT 和 ResNet 表征中的局部和全局信息學(xué)習(xí)
對 ViT 每層各個(gè)頭進(jìn)行分析,每層各個(gè)頭算 attention 的平均距離,排序畫圖,如下

發(fā)現(xiàn),對于 ViT 模型,在底層就已經(jīng)是局部和全局信息都混在一起了,而上層則基本都是全局信息。和 ResNet 差別在于,因?yàn)?CNN 本身特性,底層只利用局部信息。之后作者們用 ResNet 學(xué)到的特征和 ViT 里注意力頭特征做 CKA 分析,發(fā)現(xiàn) ResNet 學(xué)到的和學(xué)習(xí)局部信息頭學(xué)到的特征更相似。
此外,當(dāng)用少量數(shù)據(jù)訓(xùn)練 ViT 的時(shí)候,發(fā)現(xiàn)底層的頭是學(xué)習(xí)不到局部信息的。

而這也導(dǎo)致了模型性能不是很好,所以視覺模型需要表現(xiàn)好,底層一般都需要學(xué)習(xí)到局部信息,這也是符合解剖學(xué)里面人類視覺神經(jīng)結(jié)構(gòu)的。
關(guān)于局部和全局信息,最近 Transformer 在視覺方面模型幾個(gè)改進(jìn)也都和這相關(guān),比如最近的 Focal Transformer.
殘差連接對 ViT 表征傳播影響大些
有觀察到 ViT 模型表征在各個(gè)層都近似,所以作者也有做關(guān)于殘差連接對表征影響的實(shí)驗(yàn)。

提到 ViT 模型很明顯的有兩個(gè)階段,在前一個(gè)階段殘差連接主要保留 CLS token 的信息,之后階段就主要是其他 token 的信息。這個(gè)之前看文本方面 Transformer 的分析好像也有類似結(jié)論。
這個(gè)還不夠直觀,最直觀的是直接給其中一些殘差連接去掉,然后做個(gè)對比

能明顯看到去掉殘差連接后,不同層表示之間相似度的變化。
最后一層空間信息的學(xué)習(xí)和 Pooling 相關(guān)
發(fā)現(xiàn) ViT 高層比起 ResNet 能保留更多的空間位置,但作者猜想和 ViT 訓(xùn)練用 CLS 做 Pooling 有關(guān),而 ResNet 是直接Global Pooling 取特征相關(guān)。
當(dāng)對 ViT 也直接Global Pooling 取特征之后,就發(fā)現(xiàn)之前提到現(xiàn)象少了很多。
在遷移學(xué)習(xí)上 Scaling
發(fā)現(xiàn)對于ViT模型,大模型加大數(shù)據(jù)可以獲得明顯更好的中間表示,正常結(jié)論.
——The End——


