
MLNLP
(
機器學習演算法與自然語言處理
)社群是國內外知名自然語言處理社群,受眾覆蓋國內外NLP碩博生、高校老師以及企業研究人員。
社群的願景 是促進國內外自然語言處理,機器學習學術界、產業界和廣大愛好者之間的交流,特別是初學者同學們的進步。
(
機器學習演算法與自然語言處理
)社群是國內外知名自然語言處理社群,受眾覆蓋國內外NLP碩博生、高校老師以及企業研究人員。
本文轉載自 | 極市平臺
作者 | 科技猛獸
1
『概要』
Transformer 是 Google 的團隊在 2017 年提出的一種 NLP 經典模型,現在比較火熱的 Bert 也是基於 Transformer。Transformer 模型使用了 Self-Attention 機制,不採用 RNN 的順序結構,使得模型可以並行化訓練,而且能夠擁有全域性資訊。
雖然視覺 Transformer 已經在多種視覺任務上取得了相當大的進步,但對其架構設計和訓練過程最佳化的探索仍然十分有限。本文提供了3個關於訓練視覺 Transformer 的建議。
2
『關於視覺Transformer你應該知道的3件事』

論文名稱:Three things everyone should know about Vision Transformers
論文地址:
https://arxiv.org/pdf/2203.09795.pdf
論文解讀:
雖然視覺 Transformer 已經在多種視覺任務上取得了相當大的進步,但對其架構設計和訓練過程最佳化的探索仍然十分有限。本文提供了3個關於訓練視覺 Transformer 的建議。
建議1:透過並行的視覺 Transformer 實現更低的延時
更淺的網路架構容易實現更低的延時和更加容易的最佳化。用 MHSA 表示多頭自注意力塊,用 FFN 表示殘差前饋網路。如下圖1所示,作者重新以成對的形式組織模型的架構,這產生了更寬更淺的架構,每個並行的塊擁有相同的引數量和計算量。這種設計允許更多的並行處理,可以實現更低的延時和更加容易的最佳化。

建議2:只微調 Attention 即可實現良好的遷移效能
遷移學習的標準方法一般是先對模型做預訓練,再遷移到目標任務上面。這種情況適用於目標任務的資料集大小受限時,也適用於目標任務和預訓練任務的解析度不一樣時。一般來說,訓練的解析度要比推理時使用的解析度低。這不僅節省了資源,還減少了由於 Data Augmentation 所導致的訓練和測試影像之間的比例差異。作者在本文中表明,在大多數 ViT 的遷移學習情況下,僅 MHSA 層並凍結 FFN 層的引數就足夠了,這可以節省計算量並減少訓練期間的記憶體峰值 (memory peak),且不會影響精度。
建議3:改進 ViT 的 Patch 預處理層以更好地適配基於 MIM 的自監督學習
Transformer 的第1層一般感受野比較小。透過 Convolutional Stem 處理輸入圖片有利於訓練的穩定。然而,用卷積預處理影像與基於 MIM 的自監督學習方法 (如 BeiT[1],MAE[2] 等) 不相容。為了和 MIM 的自監督學習方法相適應,作者在本文中提出了一種 patch pre-processing 的做法。
實驗過程
首先作者跑了一些 Baseline 的實驗結果,如下圖2所示。解析度均為 224×224,LS 代表 Layer Scale。學習率設定為:ViT-Ti 和 ViT-S 為 4e-3,ViT-B 和 ViT-L 為 3e-3。

實驗探索1:透過並行的視覺 Transformer 實現更低的延時
在 ViT 模型裡面,複雜性度量受到寬度和深度的影響。忽略一開始的影像分塊操作和最終的分類頭,因其對複雜性的影響可以忽略不計,則有:
-
ViT 模型的引數量和網路的深度成正比關係,和寬度成二次方關係。
-
ViT 模型的計算量和網路的深度成正比關係,和寬度成二次方關係。
-
ViT 推理時的視訊記憶體峰值不隨深度的改變而改變,但是和寬度成二次方關係。
-
更寬的架構的延時在理論上更好,因為更加並行化,但實際的加速取決於實現和硬體。
作者首先做的實驗是把下式1所示的序列結構變為2式的並行結構:
下圖1是分支數對於 ViT 效能的影響。對於不論是 Small 模型還是 Base 模型,使用2個並行分支可以獲得最佳效能。ViT-S60 的 S20×3 和 S30×2 之間的效能相當。

下圖2是不同尺寸大小的模型採用順序結構和並行結構的效能對比。對於不論是 Small 模型還是 Base 模型,使用2個並行分支可以獲得最佳效能。ViT-S60 的 S20×3 和 S30×2 之間的效能相當。實驗的觀察與先前的發現一致:ViT 模型採用並行版本對於更難最佳化的更深和更高容量的模型有幫助,本文提出的的並行化方案使得深層 ViT 的訓練更加容易。

下圖3是不同尺寸大小的模型採用順序結構和並行結構的處理速度對比。在 V100 GPUs 上,作者觀察到單樣本處理的速度明顯加快,但是當 Batch Size 變得比較大時,處理的速度沒有提升。

實驗探索2:只微調 Attention 即可實現良好的遷移效能
本節中作者重點關注 ViT 模型的微調,以使模型適應更高的影像解析度,或者解決不同的下游分類任務。具體來說,考慮一種方法,其中僅微調 MHSA 層的權重,如下圖4所示。作者從預測的準確性,峰值記憶體的使用和引數量方面分析了這麼做帶來的影響。
如下圖4所示是作者在 384×384 解析度下微調了在 224×224 解析度下預訓練ViT-S、ViT-B 和 ViT-L 模型的結果。可以看到無論是在 ImageNet-val 還是 ImageNet-V2 上,單獨微調 MHSA 層權重的結果和微調全部權重的結果相差很小。但是隻微調 FFN 層時,結果相差較大。

與微調所有引數相比,在高解析度下微調 MHSA 引數的優勢是:可以在引數,延遲和峰值記憶體使用方面獲得大量的節約,如下圖5所示。微調 MHSA 在 GPU 上可以節約 10% 的記憶體,這在高解析度微調需要更多記憶體的情況中特別有用。此外訓練速度也提高了 10%,因為計算的梯度更少了。最後,MHSA 的權重大約相當於權重的三分之一。因此,如果想要使用針對不同輸入解析度進行微調的多個模型,我們可以為每個額外的模型節省 66% 的儲存空間。

實驗探索3:改進 ViT 的 Patch 預處理層以更好地適配基於 MIM 的自監督學習
傳統的 ViT 模型透過卷積頭進行輸入圖片的預處理 (分塊) 操作,通常稱之為 Convolutional Stem。雖然這些預處理設計能夠提高準確性或穩定性,但是仍然存在一些問題。比如,Patch 預處理層如何去更好地適配基於 MIM 的自監督學習,比如 BEiT 的正規化。
在這部分中,作者設計了一種 hierarchical MLP (hMLP) stem,即分層 MLP 預處理正規化,如下圖6所示。第一次把圖片分成 4×4 大小的 Patch,再經過兩次合併 2×2 的區域,最終把 224×224 大小的圖片變換成 14×14 的特徵。可以看到每個 16×16 大小的影像 Patch 是獨立處理的

hMLP 的具體實現如下圖7所示。Linear 操作具體都是使用卷積來實現,三個卷積的引數分別是:。

hMLP 的一個好處是:這樣的方式處理圖片的話,圖片的各個 Patch 之間是互不關聯的。換言之,不同的 Patch 之間就存在資訊互動,也就和原來的 ViT 不是完全等價。而且,hMLP 的設計沒有顯著增加計算需求。比如,ViT-B 需要的 FLOPs 僅僅為 17.73 GFLOPs。與使用通常的線性投影相比,只增加了不到 1% 的計算量。
作者在下圖8中比較了幾種 Stem 在有監督學習任務和 BEiT 的自監督式學習任務上的效能。hMLP 也都實現了更好的精度-計算量均衡。

3
『總結』
本文介紹了 ViT 的3個不同主題。首先是一種簡單而有效的並行化方法,能夠節約推理延時。其二是在做遷移學習任務時,僅僅微調 MHSA 的引數就能獲得不錯的效能,同時節約訓練的記憶體佔用。最後是一種圖片分塊的方式:hMLP,它可以很好地適配於基於 MIM 的自監督學習方法,使得不同的 Patch 之間資訊不相互關聯。
參考
-
BEiT: BERT pre-training of image transformers -
Masked autoencoders are scalable vision learners
技術交流群邀請函

△長按新增小助手
掃描二維碼新增小助手微信
關於我們
