天天看點

論文筆記【2】-- Cait : Going deeper with Image Transformers

論文筆記【2】-- Cait : Going deeper with Image Transformers

動機

去優化Deeper Transformer,即,讓deeper的 vision transformer 收斂更快,精度更高。

所提方法(改進模型結構)

方法1 : LayerScale

論文筆記【2】-- Cait : Going deeper with Image Transformers

圖中 FFN 代表feed-forward networks; SA代表self- attention; η 代表Layer Normalization; α代表一個可學習的參數(比如,0, 0.5,1 );λ可是一個可學習的參數,它們構成了一個對角矩陣。

通過實驗得出:圖(a)(b)結構都不會使訓練收斂,将(a)(b)結合變成圖(c)中的結構,發現其在網絡較深時也能收斂。圖(d)是本文所用結構,即LayerScale。

LayerScale目的:給不同通道乘上一個λ,見公式好了解:

論文筆記【2】-- Cait : Going deeper with Image Transformers

這麼做的原因 : 個人認為,(b)(c)中的 α 是一個實數,即,FFN或SA的輸出特征都統一乘以α;而圖(d)中,FFN或SA輸出特征的不同channel乘上不同的數值,會使得特征更細化,更精準。類似于CNN中channel注意力的感覺。

方法2 : class-attention layers

在原ViT中,在模型一開始輸入時候加入了一個叫做class token的東西,在ViT中這個class token要做兩件事:

  1. 引導attention過程,幫助得到attention map。
  2. 這些token還要輸入到classifier中,完成分類任務。

作者認為class token要同時做到這2件事其實有點沖突,參數會朝着沖突的方向優化。對于分類任務,class token的目的隻是為了獲得圖檔的所有資訊,用于最後的分類。

既然class token隻是為了獲得圖檔的全部資訊,那為什麼要在一開始就同patch一起送入網絡參與attention活動?大可不必吧。是以本文沒有按照原ViT的操作,而是将class token 放在模型的最後兩層處加入,如下圖(中)所示:

論文筆記【2】-- Cait : Going deeper with Image Transformers

CA層公式表示:

論文筆記【2】-- Cait : Going deeper with Image Transformers

問題1:為什麼class token 放到了網絡的後面也可以呢?我們知道圖檔的資訊都在patch embedding裡面,是以我們隻需要用class token來抽取patch embedding中的資訊就相當于class token擁有了圖檔的資訊。

問題2:為什麼class token 放到了網絡的後面效果更好呢?class token若是和patch embedding同時送入網絡,在計算attention時候,class token和patch embedding二者之間就會有資訊的互相傳遞,而然事實上,我們想要的是,用class token 抽取patch embedding中的資訊,而不需要将class token 中的資訊傳遞給patch embedding 。是以将class token 往後放,就使得class token專注于它的工作,即專注于抽取圖檔的資訊。

總結:

為了讓deeper transformer 更易訓練,提高精度。本文在原ViT網絡架構的基礎上做了兩處的改動:LayerScale 和 class-attention layers。

繼續閱讀