字節(jié)跳動AI Lab最新的工作,研究了如何把ViT做的更深的問題。之前的ViT采用的都是固定的12層,所不同的是head的數(shù)目和embedding的通道數(shù),由此構成small、medium以及l(fā)arge版本。但是關于ViT層數(shù)的問題,則很少有探討。
本文首先將ViT由12層加深到32層,發(fā)現(xiàn)隨著網(wǎng)絡層數(shù)的加深,性能并沒有獲得相應幅度的上升,甚至還有下降:

類似的網(wǎng)絡退化問題在cnn中也有出現(xiàn),cnn中通過加入residual connection來解決網(wǎng)絡退化。本文中則觀察發(fā)現(xiàn)ViT的退化是由于attention collapse,即隨著層數(shù)的加深,attention map的變化越來越小,相應的feature map也開始停止學習,因而隨著層數(shù)加深性能增長逐漸停滯。

作者的解決方案其實很簡單,觀察發(fā)現(xiàn)雖然同一個token在不同層的attention map差別小,但是同一層不同head之間差距還是很大,因此作者額外加入一個HxH大小的矩陣,來對attention map進行re-attention,利用其他head的attention map來對當前attention map進行增強。

反應在公式上的變化就是在與V相乘之前先與theta矩陣相乘,看起來很簡潔了。消融實驗結果顯示,在32層ViT上,本文所提的解決方案(DeepViT)可以比vanilla ViT有1.6的提升,在深層ViT上的提升還是比較顯著的。
作者解釋re-attention起作用的原因在于在不同head之間進行了interaction,而不是單純的解決over smoothing,因而可以編碼更豐富的信息,當然通過可視化結果也可以看到,加入re-attention之后,block的相似性也顯著降低了。