Vision Transformers 大有可爲!

Vision Transformers 相關的研究最近非常的火,這篇文章是最近看到的,個人覺得相對講解的比較通俗,以及很多圖解幫助理解。

因此,我也花了很多時間去翻譯(文章內容 6700 字左右),如果對你有所幫助,歡迎給個三連。週末愉快!

視頻講解:https://www.bilibili.com/video/BV1sA41157Fk#reply4390470040

Transformers 簡介

 Why do we need transformers?

但是,讓我們退一步,探究促使谷歌研究人員尋找新的替代體系結構來解決自然語言處理任務的動機。

傳統上,像翻譯這樣的任務是使用遞歸神經網絡(Recurrent Neural Networks)來完成的,衆所周知,遞歸神經網絡有很多問題。主要問題之一是它的順序操作。例如,要將一個句子從英語翻譯成意大利語,使用這種類型的網絡,將要翻譯的句子的第一個單詞與初始狀態一起傳遞到編碼器,然後將下一個狀態與該句子的第二個單詞一起傳遞到第二個編碼器,依此類推直到最後一個單詞。最後一個編碼器的結果狀態隨後被傳遞給解碼器,解碼器作爲輸出返回第一個翻譯的字和隨後的狀態,該狀態被傳遞給另一個解碼器,依此類推。

很明顯這裏的問題,要完成下一步,我必須有上一步的結果。這是一個很大的缺陷,因爲你沒有利用現代 gpu 的並行化功能,因此在性能方面會有所損失。還有其他問題,如梯度爆炸,無法檢測同一句話中遠隔詞之間的依賴關係,等等。

 Attention is all you need?

於是問題就出現了,有沒有一種機制可以讓我們以並行的方式計算,讓我們從句子中提取我們需要的信息?答案是肯定的,這種機制就是注意力(attention)。

如果我們將注意力遺忘定義爲任何技術和實現方面,我們將如何着手這樣做?

讓我們舉一個例句問問自己,把注意力集中在 “gave” 這個詞上,我應該把注意力放在這個句子中的哪些詞上,來增加這個詞的意思?我可能會問自己一系列問題,例如,誰給的?在這種情況下,我會把注意力集中在 “I” 這個詞上,然後我可能會問給誰了?把我的注意力放在查理這個詞上,最後,我可能會問,你給了我什麼?最後集中在食物這個詞上。

通過問我自己這些問題,也許對句子中的每個單詞都這樣做,我也許能夠理解其中的含義和方面。現在的問題是,如何在實踐中實現這個概念?

爲了理解注意力的計算,我們可以將注意力的計算與數據庫世界進行比較。當我們在數據庫中進行搜索時,我們提交一個查詢(Q),並在可用數據中搜索一個或多個滿足查詢的鍵。輸出是與查詢最相關的鍵關聯的值。

注意力計算的情況非常相似。我們首先把要計算注意力的句子看作一組向量。每個單詞,通過一個單詞嵌入機制,被編碼成一個向量。我們認爲這些向量是搜索的關鍵,關於我們正在搜索的查詢,它可以是來自同一個句子(自我注意)或來自另一個句子的單詞。在這一點上,我們需要計算查詢和每個可用鍵之間的相似性,通過縮放點積進行數學計算。這個過程將返回一系列實際值,可能彼此非常不同,但是由於我們希望獲得 0 和 1 之間的權重,其和等於 1,因此我們對結果應用 SoftMax。一旦獲得了權重,我們就必須將每個單詞的權重以及它與查詢的相關性乘以表示它的向量。我們最終返回這些產品的組合作爲注意向量。

爲了建立這種機制,我們使用 linear layers,從輸入向量開始,通過矩陣乘法生成鍵、查詢和值。鍵和查詢的組合將允許在這兩個集合之間獲得最正確的匹配,其結果將與值組合以獲得最相關的組合。

但是,如果我們想把注意力集中在一個單詞上,這個機制就足夠了,但是如果我們想從幾個角度看這個句子,然後並行計算幾次注意力,會怎麼樣?我們使用所謂的多頭注意力,其結構類似,其結果在最後簡單地組合,以返回所有計算出的注意力的單一彙總向量。

既然我們已經瞭解了應該使用哪種機制並確定了它的可並行性,那麼讓我們分析一下多頭部注意力 embedded 的結構以及構成 transformer. 的結構。

但是要翻譯的句子不是唯一輸入 transformer 的,我們有第二塊,解碼器,它接收到 transformer 先前執行的輸出。例如,如果我們假設我們已經翻譯了前兩個單詞,並且我們想用意大利語預測句子的第三個單詞,我們將把前兩個翻譯的單詞傳給解碼器。將對這些單詞執行位置編碼和多頭部注意,結果將與編碼器結果相結合。對組合重新計算注意,結果通過 linear layer 和 softmax,將成爲潛在候選詞的向量,作爲新翻譯詞,並且每個詞都有關聯的概率。在下一次迭代中,解碼器除了前面的單詞之外,還將接收這個單詞。

因此,這種結構被證明是非常有效和高性能的,這是因爲它處理整個句子,而不是逐字逐句,保留有關單詞在句子中位置的信息,並利用注意力這一能夠有效表達句子內容的機制。

在所有這些很好的解釋之後,你可能會認爲 transformer 是完美的,沒有任何缺陷。很顯然,它不是這樣的,它的優點之一也是它的缺點,計算注意!

爲了計算每個單詞相對於所有其他單詞的注意力,我必須執行 N² 計算,即使部分可並行,仍然非常昂貴。有了這樣的複雜性,讓我們想象一下,在一段幾百字的文字上,多次計算注意力意味着什麼。

從圖形上你可以想象一個矩陣,它必須填充每個單詞相對於其他單詞的注意力值,這顯然是有昂貴的成本。必須指出的是,通常在解碼器上,可以計算隱藏的注意,避免計算查詢詞和所有後續詞之間的注意。

有些人可能會爭論,但如果 transformer 帶來的許多好處都與注意力機制有關,那麼我們真的需要上面提到的所有結構嗎?但 2017 年的第一份谷歌大腦論文不是說 “注意力就是你所需要的一切” 嗎?[4] 當然是合法的,但在 2021 年 3 月,谷歌研究人員再次發表了一篇題爲 “注意力不是你所需要的全部” 的論文[6]。那是什麼意思?研究人員進行了實驗,分析了在沒有 transformer 任何其他組件的情況下進行的自我注意機制的行爲,發現它以雙指數速率收斂到秩 1 矩陣。這意味着這種機制本身實際上是無用的。那麼爲什麼 transformer 如此強大呢?這是由於減少矩陣秩的自我注意機制與 transformer 的另外兩個組成部分跳躍連接和 MLP 之間的拉鋸戰。

第一種方法允許路徑的分佈多樣化,避免獲得所有相同的路徑,這大大降低了矩陣被降爲秩 1 的概率。MLP 由於其非線性,因此能夠提高生成矩陣的秩。相反,有人表明,規範化在避免這種自我注意機制的行爲方面沒有作用。因此,注意力不是你所需要的全部,而是 transformer 架構設法利用它的優勢來取得令人印象深刻的結果。

 Vision Transformers

到了 2020 年,谷歌的研究人員又一次想到了這一點,“但是,如果人們發現 Transformers 在自然語言處理領域如此有效,它們將如何處理圖像呢?”. 有點像 NLP,我們從注意力的概念開始,但這一次適用於圖像。讓我們試着通過一個例子來理解它。

Image from “An Image Is Worth 16x16 words” (Dosovitskiy et al)

如果我們考慮一張狗站在牆前的照片,我們中的任何人都會說這是一張 “picture of a dog”,而不是一張 “picture of a wall”,這是因爲我們把注意力集中在圖像的主要和有區別的主體上,而這正是應用於圖像的注意力機制所做的。

既然我們理解了注意力的概念也可以擴展到圖像上,我們只需要找到一種方法,將圖像輸入到一個經典的 transformer 中。

我們知道 transformer 把文字作爲輸入向量,那麼我們怎樣才能把圖像轉換成向量呢?當然,第一種解決方案是使用圖像的所有像素並將它們 “內聯” 以獲得向量。但是讓我們停一下,看看如果我們選擇這個選項會發生什麼。

我們之前說過,注意力的計算複雜度等於 O(N²),這意味着如果我們必須計算每個像素相對於所有其他像素的複雜度,那麼在像 256x256 像素這樣的低分辨率圖像中,我們的計算量會非常大,用現在的資源絕對無法克服。所以這種方法肯定是不可行的。

解決方案非常簡單,在 “一幅圖像值 16x16 個字”[2] 一文中,提出將圖像分割成塊,然後使用線性投影將每個塊轉化爲向量,將塊映射到向量空間中。

現在我們只需要去看看 Vision Transformer 的架構。

然後將圖像劃分爲多個小塊(patches),這些 patches 通過線性投影獲得向量,這些向量與關於 patches 在圖像中的位置的信息耦合,並提交給經典 transformer。在圖像中添加關於 patches 原始位置的信息是基本的,因爲在線性投影過程中,即使充分理解圖像的內容非常重要,這些信息也會丟失。插入另一個向量,該向量獨立於所分析的圖像,用於獲得關於整個圖像的全局信息,實際上,與該面片對應的輸出是唯一被考慮並傳遞到 MLP 的輸出,MLP 將返回預測類。

然而,在這個過程中,有一點是信息損失非常嚴重的。實際上,在從 patch 到矢量的轉換過程中,任何關於像素在 patch 中位置的信息都會丟失。(Transformer-in-Transformer,TnT)[3] 的作者指出,這當然是一件很嚴重的事情,因爲要進行質量預測,我們不希望丟失待分析圖像一部分中像素的排列。

TnT 的作者接着問自己,有沒有可能找到一種更好的方法讓向量提交給 Transformer?他們的建議是將圖像的每一個單獨的 patch(pxp),它們本身就是 3 個 RGB 通道上的圖像,並將其轉換成一個 c 通道張量。然後將這個張量分成 p'部分,其中 p'<p,在示例 p'=4 中。這就產生了 c 維中的 p'向量。這些向量現在包含關於面片內像素排列的信息。

然後將它們串聯併線性投影,以便使它們與從原始面片的線性投影獲得並與之結合的向量大小相同。

通過這樣做,transformer 的輸入向量也會受到 patch 內像素排列的影響,通過這樣做,作者設法進一步提高了各種計算機視覺任務的性能。

 TimeSformers

鑑於 transformers 在 NLP 中取得了巨大的成功,然後又將其應用於圖像,2021 年,Facebook 的研究人員試圖將這種架構應用於視頻。

直觀地說,很明顯這是可能的,因爲我們都知道,視頻不過是一組幀一個接一個,幀不過是圖像。

只有一個小細節,使他們不同於 Vision Transformers,你必須考慮到不僅是空間,而且時間。事實上,在這種情況下,當我們去計算注意力時,我們不能把這些幀看作孤立的圖像,但我們應該找到某種形式的注意力,考慮到連續幀之間發生的變化,因爲它是視頻評估的中心。

爲了解決這個問題,作者提出了幾種新的注意機制,從那些只關注空間的,主要用作參考點的,到那些在空間和時間之間軸向、分散或聯合計算注意的機制。

Image from “An Image Is Worth 16x16 words” (Dosovitskiy et al)

然而,取得最佳效果的方法是 Divided Space-Time Attention。它包括,給定一幀在瞬間 t 和它的一個 patches 作爲一個查詢,計算整個幀上的空間注意,然後在查詢的同一 patches 中,但在前一幀和下一幀上的時間注意。

但爲什麼這種方法如此有效呢?原因是它比其他方法學習更多獨立的特徵,因此能夠更好地理解不同類別的視頻。我們可以在下面的可視化中看到這一點,其中每個視頻都由空間中的一個點表示,其顏色表示它所屬的類別。

Image from “An Image Is Worth 16x16 words” (Dosovitskiy et al)

作者還質疑了視頻分辨率和視頻幀數的相關性,發現分辨率越高,模型的準確性就越好。至於幀數,同樣隨着幀數的增加,精確度也會增加。有趣的是,不可能用比圖中顯示的幀數更多的幀數進行測試,因此潛在的精確度仍然可以提高,我們還沒有找到這種提高的上限。

在 Vision Transformers 中,一個較大的訓練數據集通常會導致更好的精確度。作者也在 TimeSformers 上檢查了這一點,而且隨着所考慮的訓練視頻數量的增加,準確率也會增加。

 Conclusions

現在該怎麼辦?Transformers 剛剛登陸計算機視覺領域,似乎下定決心要取代傳統的卷積網絡,或者至少在這一領域爲自己開闢一個重要的角色。因此,科學界正處於混亂之中,試圖進一步改進 Transformers,將其與各種技術結合起來,並將其應用於實際問題,最終能夠做一些直到最近纔可能做到的事情。像 Facebook 和 Google 這樣的大公司正在積極開發和應用 Transformers,我們可能還只是觸及了表面。

 References and insights

[1] ”Gedas Bertasius, Heng Wang, and Lorenzo Torresani”. ”Is Space-Time Attention All You Need for Video Understanding?”.

[2] ”Alexey Dosovitskiy et al.”. ”An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale”.

[3] ”Kai Han et al.”. ”Transformer in Transformer”.

[4] ”Ashish Vaswani et al.”. ”Attention Is All You Need”.

[5] ”Qizhe Xie et al.”. ”Self-training with Noisy Student improves ImageNet classification”.

[6] “Yihe Dong et al.”, “Attention is Not All You Need: Pure Attention Loses Rank Doubly Exponentially with Depth”

[7] “Nicola Messina et al.”, “Transformer Reasoning Network for Image-Text Matching and Retrieval”

[8] “Nicola Messina et al.”, “Fine-grained Visual Textual Alignment for Cross-Modal Retrieval using Transformer Encoders”

[9] “Davide Coccomini”, “TimeSformer for video classification with training code”

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/RFNpEt_rfubg2mesQVdhYw