(附論文+原始碼)拋棄注意力,比EfficientNet快3.5倍,類Transformer新模型跨界視覺任務實現新SOTA
Transformer 用在影像識別上會存在計算效率過低的挑戰,最近一篇向 ICLR 2021 大會提交的論文似乎很好地解決了這一問題,其研究的 PyTorch 程式碼也已在 GitHub 上開源。
在自然語言處理領域(NLP)成為重要力量的 Transformer 技術最近已經開始在計算機視覺領域展現自己的實力。不過到目前為止,由於 Transformer 注意力機制對記憶體的需求是輸入影像的二次方,所以這一方向還存在一些挑戰。
近日,LambdaNetworks 的出現提供了一種解決此問題的方法,人們可以無需建立昂貴的注意力圖即可捕捉長距離互動。這一方法在 ImageNet 上達到了新的業界最佳水平(state-of-the-art)。
對長程互動進行建模在機器學習中至關重要。注意力已成為捕獲長程互動的一種常用正規化。但是,自注意力二次方式的記憶體佔用已經阻礙了其對長序列或多維輸入(例如包含數萬個畫素的影像)的適用性。例如,將單個多頭注意力層應用於一批 256 個64x64 (8 頭)輸入影像需要32GB的記憶體,這在實踐中是不允許的。
該研究提出了一種名為「lambda」的層,這些層提供了一種捕獲輸入和一組結構化上下文元素之間長程互動的通用框架。
lambda 層將可用上下文轉換為單個線性函式(lambdas)。這些函式直接單獨應用於每個輸入。研究者認為,lambda 層可以作為注意力機制的自然替代。注意力定義了輸入元素和上下文元素之間的相似性核,而 lambda 層將上下文資訊彙總為固定大小的線性函式,從而避免了對記憶體消耗大的注意力圖的需求。這種對比如圖1所示。
研究者證明了 lambda 層的通用性,展示了它們的實現可以被用來捕獲全域性、區域性或掩模上下文中基於內容和位置的互動。利用lambda生成的神經網路 LambdaNetwork 計算效率很高,能夠以很小的記憶體成本建模長程依賴,因而可用於高解析度影像等大型結構化輸入。
研究者在計算機視覺任務上評估了 LambdaNetwork,在這些任務上,自注意力顯示出了希望,但遇到了記憶體成本高昂和無法實際實現的問題。在 ImageNet 分類、COCO 目標檢測和例項分割三方面的對照實驗表明,LambdaNetwork 顯著優於基於卷積和注意力的同類方法,並且計算效率更高、執行速度更快。
最後,研究者提出了 LambdaResNets,它顯著改善了影像分類模型的速度-準確性權衡。具體而言,LambdaResNets 在實現 SOTA ImageNet 準確性的同時,執行速度是 EfficientNets 的4.5 倍左右。
建模長程互動
在論文第二章開頭,研究者定義了查詢、上下文和互動等概念及各種用到的符號,此處不做贅述。
注意力互動。首先縮小查詢深度,建立查詢和上下文元素之間的相似性核(注意力圖),也就是所謂的注意力操作。該機制可以被看作激發查詢、鍵和數值術語的可微記憶體的定址。由於上下文位置 |m| 的數量越來越大,並且輸入和輸出維數 |k| 和 |v| 保持不變,所以在層輸出是較小維數 |v| << |m| 的一個向量時,我們可以假設計算注意力圖是不划算的。
相反, 由於 y_n = F((q_n, n), C) = λ(C, n)(q_n) 擬合一些線性函式 λ(C, n),所以通過線性函式將每個查詢對映到輸出可能更有效率。在這種場景下,上下文聚合到一個固定大小的線性函式 λ_n = λ(C, n)。每個 λ_n作為獨立於上下文(計算後)存在的小的線性函式,並在應用於關聯查詢q_n之後被丟棄。該機制令人聯想到與lambda這個術語相關的函數語言程式設計和 λ 演算。
lambda層
lambda層將輸入 和上下文 作為輸入,生成線性函式lambdas,然後將其應用於查詢,從而得到輸出 。
注意,在自注意力情況下可能有C=X。在不失一般性的前提下,研究者假設d_in=d_c=d_out=d。在論文的其他部分中,研究者將重點放在lambda層的特定例項上,並說明它可以在沒有注意力圖的情況下,處理密集的長程內容和基於位置的互動。
lambda層:將上下文轉換成線性函式
研究者首先在(q_n,n)的上下文中描述lambda層。由於研究者希望生成一個線性函式 或將 矩陣當作函式。
表1給出了lambda層的超引數、引數等量化數值。
1. 生成上下文lambda函式
lambda層首先通過線性投影上下文來計算鍵和值,通過softmax運算對鍵進行歸一化,從而得到歸一化鍵。
這種實現能可以看作是函式訊息傳遞的一種形式,每個上下文元素都貢獻一個內容函式 和一個位置函式 。λ_n 是通過將上下文貢獻求和得到的,如下所示:
其中還定義了內容lambda λ^c和位置lambda λ^p_n。內容lambda λ^c對於上下文元素的排列組合是固定不變的,在所有的查詢位置n上共享,並且對如何轉換僅基於上下文內容的查詢內容q_n進行編碼。相比之下,位置lambda λ^p_n對如何根據內容c_m和位置(n, m)轉換查詢內容q_n,從而可以對諸如影像之類的結構化輸入進行建模。
2. 將lambda應用於查詢
將輸入x_n轉換為查詢 ,然後獲得lambda層的輸出為
3. lambda解釋
矩陣的列可以看作是|k|x|v|維的上下文特徵的固定大小集合。這些上下文特徵是根據上下文的內容和結構彙總得出的。利用lambda線性函式動態分配這些上下文特徵,以產生輸出 。
此過程可以捕獲密集內容和基於位置的長程互動,同時不產生注意力圖。
4. 歸一化
可修改方程式1和2以涵蓋非線性或歸一化運算。該研究的實驗表明,在計算查詢和值之後應用批歸一化是很有用的。
帶有結構化上下文的 lambda 層
這一部分介紹瞭如何使 lambda 層適應結構化的上下文,如相關上下文和區域性上下文。
1. 平移等變性
在很多學習情景中,平移等變性是一種很強的歸納偏置。基於內容的互動是置換等變的,因此它已經具備平移等變性。對於任意的平移 t,研究者通過確保位置嵌入滿足 。在位置互動中得到平移不變性。在實踐中,研究者定義了相對位置嵌入 的一個張量。其中,r 表示所有 (n, m) 對的可能相對位置,並將其重新索引到 ,從而使得 。
2. Lambda 卷積
儘管長程互動有一定的優點,但在很多工中,區域性性依然是一種強大的歸納偏置。從計算的角度來看,使用全域性上下文可能會增加噪聲,增加算力消耗。因此,將位置互動的範圍限制到查詢位置 n 周圍的一個區域性鄰域,就像區域性自注意和卷積中那樣,可能是一種有用的做法。這可以通過對所需範圍之外的上下文位置 m 的位置嵌入進行歸零來實現。但是,對於較大的 |m| 值,這種策略依然代價高昂,因為計算仍在進行。
在這種上下文被安排在多維網格上的情況下,可以使用一個將 V 中的第 v 維視為一個額外空間維度的常規卷積來從區域性上下文中生成位置 lambda。例如,假設我們想在一維序列上生成區域性範圍大小為 |r| 的位置 lambdas。相對位置嵌入張量 可以變為 ,然後被用作一個二維卷積的卷積核,計算所需的位置 lambda
研究者將這個運算稱為 lambda 卷積。由於現在的計算被限制在區域性範圍內,lambda 卷積可以得到與輸入長度相關的線性時間和記憶體複雜度。lambda 卷積很容易用於 dilation 和 striding 等其他功能,並且在專用硬體加速器上享有高度優化的實現。這與區域性自注意力的實現形成鮮明對比,後者需要物化重疊查詢和記憶體塊的特徵塊,從而增加了記憶體消耗和延遲(見下表4)。
利用多查詢 lambda 降低複雜度
對於多個 |b| 元素,每個都包含 |n| 輸入。應用 lambda 層所需算數運算和記憶體佔用的數量分別為 Θ(bnmkv) 和 Θ(bnkv + knm)。由於E_nm 引數捕獲了基於位置的互動 ,因此相對於輸入長度,研究者擁有的記憶體佔用仍是二次的。但是,這個二次項並不隨批大小擴充套件,這與生成每個示例(per-example)注意力圖譜的注意力操作一樣。在實踐中,超引數 |k| 設為很小的值,如 |k| =16,並且在注意力失效的情況下可以處理大批量的大型輸入。
多查詢 lambdas 可以降低複雜度。lambdas 將注意力圖 q_n ∈ R^k對映到輸出 y_n ∈ R^d。如公式2所示,這意味著 |v|=d。所以,|v| 的較小值成為了特徵向量 y_n上的瓶頸,但考慮到 Θ(bnmkv) 和 Θ(bnkv + knm) 的時間和空間複雜度,更大的輸入維數 |v| 將導致非常高昂的計算成本。
所以,研究者提出將 lambda 層的時間和空間複雜度從輸出維數 d 中解耦。他們並沒有強制地令 |v|=d,而是建立了 |h| 查詢 {q^h _n},將相同的 lambda 函式 λ_n 應用到每個查詢 q^h_n,並將輸出串連線成 y_n=concat(λ_nq^1_n , · · · ,λ_nq^|h|_n )。
由於每個 lambda 都應用於 |h| 查詢,所以研究者將這一操作當做多查詢 lambda 層。這也可以理解為將 lambda 約束到具有 |h| 等重複塊的更小塊矩陣。現在d=|hv|,並且時間和空間複雜度變成了 Θ(bnmkd/h) 和 Θ(bnkd/h + knm)。此外,研究者注意到,這類似於多頭或多查詢注意力機制,但motivation不同。在注意力操作中使用多個查詢增強了表示能力和複雜度。而在本研究中,使用多查詢 lambdas 降低了複雜度和表示能力。
下表2比較了多查詢 lambda 層和多頭注意力操作的時間和空間複雜度:
批量多查詢 lambda 層可以使用 einsum 實現高效執行,具體如下
區域性位置的 lambdas 可以通過 lambdas 卷積來獲得,具體如上文公式3所示。
實驗
LambdaNetworks 優於基於卷積和注意力的同類方法
在下表 3 中,研究者進行了控制實驗,以比較 LambdaNetworks 與 a)基線 ResNet50、b)通道注意力和 c)以往使用自注意力來補充或替換 ResNet50 中的 3x3 卷積的研究方法。結果顯示,在引數成本僅為其他方法一小部分的情況下,lambda 層顯著優於這些方法,並且相較於 Squeeze-and-Excitation(通道注意力)實現了 +0.8% 的提升。
在上表 4 中,研究者對比了 lambda 層和自注意力機制,並給出了它們的吞吐量、記憶體複雜度和 ImageNet 影像識別準確性比較,這一結果展示了注意力機制的不足。相比之下,lambda 層可以捕獲高解析度影像上的全域性互動,並可以比區域性自注意力機制獲得多 1.0% 的提升,同時執行速度幾乎是後者的 3 倍。
此外,位置嵌入也可以在 lambda 層之間共享,以最小的降級花費進一步降低了記憶體使用的需求。最後,lambda 卷積具有線性記憶體複雜度,這在影像檢測和分割任務中遇到非常大的圖片時非常有用。
LambdaResNets 明顯改善了 ImageNet 分類任務的速度-準確性權衡
下圖 2 展示了 LambdaResNets與使用或不使用 channel attention 機制的ResNet 及最流行的 EfficientNets 相比的效果。LambdaResNets 在所有深度和影像尺度上均優於基準水平,最大的 LambdaResNet 實現了 SOTA 水平準確度 84.8。更值得注意的是,LambdaResNets 在準確性一定的情況下比 EfficientNets 要快大概 3.5 倍,速度-準確性曲線提升明顯。
計算效率
在下表5和表6中,研究者發現構造 LambdaResNets 來提升大型 EfficientNets 的引數和 flops 效率也是有可能的。
這樣的結果表明,lambda層可能非常適合在資源有限的場景中使用,例如嵌入式視覺應用。
目標檢測與例項分割
最後,研究人員評估了 LambdaResNets 使用 Mask-RCNN 架構在 COCO 資料集上進行目標檢測和實力分割任務的效果。使用 lambda 層會在所有 IoU 閾值和所有物件比例(尤其是難以定位的小物件)上產生一致的增益,這表明 lambda 層容易在需要定位資訊的更復雜的視覺任務中實現不錯的效果。
相關文章
- 多項NLP任務新SOTA,Facebook提出預訓練模型BART模型
- 哈佛NLP組論文解讀:基於隱變數的注意力模型 | 附開原始碼變數模型原始碼
- Bengio等人新作:注意力可被視為RNN,新模型媲美Transformer,但超級省記憶體RNN模型ORM記憶體
- CVPR 2024 | 位元組提出視覺基礎模型:ViTamin,實現多項SOTA!視覺模型
- 微軟論文解讀:用於視覺對話的多步雙重注意力模型微軟視覺模型
- EfficientNet & EfficientDet 論文解讀
- 拋棄視覺編碼器,這個「原生版」多模態大模型也能媲美主流方法視覺大模型
- 22個任務超越SOTA,43個任務媲美SOTA,Google推出醫學治療通用大模型Go大模型
- 李飛飛團隊新論文:新網路新策略,讓AI通過視覺觀察實現因果歸納AI視覺
- 谷歌跨界醫學新動作:基因突變定位模型又更!新!了!谷歌模型
- 查詢CV頂會ICCV,CVPR,ECCV論文方法以及sota實現程式碼
- 計算機視覺經典任務分類計算機視覺
- 還在用餅狀圖?來瞧瞧這些炫酷的百分比視覺化新圖形(附程式碼實現)⛵視覺化
- Transformer模型:Position Embedding實現ORM模型
- 三種Transformer模型中的注意力機制介紹及Pytorch實現:從自注意力到因果自注意力ORM模型PyTorch
- 諜照最新發布!新iPhone徹底拋棄Home鍵iPhone
- 僅用40張圖片就能訓練視覺模型:CVPR 2019伯克利新論文說了什麼?視覺模型
- 任務系統之任務流程視覺化視覺化
- CVPR 2018最佳論文作者親筆解讀:研究視覺任務關聯性的Taskonomy視覺
- 谷歌Transformer再升級——新模型實現效能、速度雙提升,發展潛力巨大谷歌ORM模型
- 懸賞任務系統原始碼_任務接單平臺原始碼PHP版附app原始碼PHPAPP
- 2024年6月計算機視覺論文推薦:擴散模型、視覺語言模型、影片生成等計算機視覺模型
- ReplitLM: 開原始碼生成模型的新突破原始碼模型
- 谷歌T5預訓練模型重新整理GLUE榜單,110億引數量,17項NLP任務新SOTA谷歌模型
- 10個視覺化 CSS 工具, 快速生成 CSS 片段,渣男,又想拋棄我!!視覺化CSS
- 超級英雄遊戲需要拋棄「現實主義」遊戲
- 跨國公司的中國要務:新機遇、新風險、新佈局(附下載)
- 『論文精讀』Vision Transformer(VIT)論文解讀ORM
- CNN也能用於NLP任務,一文簡述文字分類任務的7個模型CNN文字分類模型
- BERT新轉變:面向視覺基礎進行預訓練| NeurIPS 2019論文解讀視覺
- 通用文件理解新SOTA,多模態大模型TextMonkey來了大模型
- transformer多頭注意力的不同框架實現(tensorflow+pytorch)ORM框架PyTorch
- 視覺化經典模型的對比實驗總結視覺化模型
- 計算機視覺 | Matlab實現單目視覺里程計基於SURF特徵(程式碼類)計算機視覺Matlab特徵
- Maya 2024:塑造奇幻領域,視覺創新無邊界 mac/win版視覺Mac
- RoBERTa中文預訓練模型,你離中文任務的「SOTA」只差個它模型
- NeurIPS 2021 | Twins:重新思考高效的視覺注意力模型設計視覺模型
- JavaScript實現垃圾分類小遊戲教程,附原始碼!JavaScript遊戲原始碼