Transformer最初是為自然語言處理任務而設計的,但現在已經被廣泛應用於視覺任務。視覺Transformer在多個視覺識別任務中展現出了出色的準確性,並在圖像分類、視頻分類和目標檢測等任務中取得了當前最佳的表現
##視覺Transformer 的一大缺點是計算成本高。典型的捲積網路(CNN)處理每張圖像需要數十 GFlops,而視覺 Transformer 所需的往往會多上一個數量級,達到每張圖像數百 GFlops。在處理影片時,由於資料量龐大,這個問題更為嚴重。高昂的運算成本讓視覺 Transformer 難以被部署到資源有限或有嚴格延遲需求的裝置上,這就限制了這項技術的應用場景,否則我們已經有一些令人興奮的應用了。
在近期一篇論文中,威斯康辛大學麥迪遜分校的三位研究者Matthew Dutson、Yin Li 和Mohit Gupta 首先提出可以在後續輸入之間使用時間冗餘來降低視覺Transformer 在影片應用的成本。他們也發布了模型程式碼,其中包含用於建立 Eventful Transformer 的 PyTorch 模組。
時間冗餘:首先假設有一個視覺Transformer,其可以逐幀或逐影片片段地處理影片序列。這個 Transformer 可能是簡單的逐幀處理的模型(如目標偵測器)或是某個時空模型的中間步驟(如 ViViT 的分解式模型的第一步)。不同於一個輸入就是一個完整序列的語言處理 Transformer,在這裡,研究者的做法是隨時間為 Transformer 提供多個不同的輸入(幀或視頻片段)。
自然影片包含顯著的時間冗餘,即後續影格之間的差異很小。儘管如此,包括 Transformer 在內的深度網路通常都會「從頭開始」計算每一幀。此方法會丟棄先前推理所獲得的潛在相關訊息,浪費極大。故而這三位研究者設想:是否可以重複使用先前計算步驟的中間計算結果來提升處理冗餘序列的效率?
自適應推理:對於視覺 Transformer 以及一般意義上的深度網路而言,推理成本通常由架構決定。然而在現實應用中,可用的資源可能會隨時間而變化,例如可能因為存在相競爭的進程或電源變化。如此一來,可能就存在運行時修改模型計算成本的需求。在這項新成果中,研究者設定的一大主要設計目標就是適應性 —— 其方法可實現對計算成本的即時控制。下圖 1(底部)給出了在視訊處理過程中修改計算預算的範例。
事件化Transformer:本文提出了一個事件化Transformer,該Transformer可以利用輸入之間的時間冗餘來實現高效且自適應的推理。事件化這個術語的靈感來自事件相機(event camera),這種感測器能夠在場景變化時離散地記錄影像。事件化Transformer會追蹤隨時間發生的令牌層面的變化情況,並在每個時間步驟選擇性地更新令牌表示和自註意力映射圖。事件化Transformer的模組中包含一種閘控模組,用於控制更新令牌的數量
該方法適用於現有的模型(通常無需重新訓練),並且適用於許多視訊處理任務。研究人員也進行了實驗證明,結果顯示Eventful Transformer 可以用於現有的最佳模型,同時大幅降低計算成本並維持原有的準確性
重寫後的內容:這項研究的目標是加速用於影片辨識的視覺Transformer。在這個場景中,視覺Transformer需要反覆處理視訊畫面或影片片段,具體的任務包括影片目標偵測和影片動作辨識等。提出的關鍵思想是利用時間冗餘,即復用先前時間步驟的計算結果。以下將詳細描述如何透過修改Transformer模組來使其具備感知時間冗餘的能力
token 閘控:偵測冗餘
#本節將介紹研究者提出的兩種新模組: token 閘和token 緩衝器。這些模組使得模型能夠識別和更新自上次更新以來發生明顯變化的token
門模組:該閘門會從輸入token N 中選擇一部分M 傳送給下下層執行計算。其記憶中維護著一個參考 token 集,記為 u。這個參照向量包含每個 token 在其最近一次更新時的值。在每個時間步驟,比較各個 token 與其對應的參考值,其中與參考值相差較大的 token 獲得更新。
現在將該閘的目前輸入記為 c。在每個時間步驟,依照下列流程更新閘的狀態並決定其輸出(見下圖2):
1. 計算總誤差e = u − c。
2. 對誤差 e 使用一個選取策略。選擇策略傳回一個二元遮罩 m(相當於一個 token 索引清單),表示其中哪 M 個 token 應被更新。
3. 提取出上述策略選取的 token。圖 2 中將其描述為乘積 c×m;在實務上則是透過沿著 c 的第一個軸執行「gather」操作來實現。這裡將收集到的 token 記為,這就是該閘的輸出。
4. 將參考 token 更新成所選 token。圖 2 將這個過程描述為;實務上使用的操作則是「scatter」。在第一個時間步驟,門會更新所有 token(初始化 u ← c 並傳回 c˜ = c)。
緩衝器模組:緩衝模組維護一個狀態張量#,其追蹤的是每個輸入token
時,此緩衝器將來自f (c˜) 的token 分散到其在b 中對應位置。然後它會傳回更新後的 b 作為其輸出,請參閱下圖 3。
研究人員將每個閘與其後的緩衝器組成一對。以下是一個簡單的使用模式:閘的輸出
被傳遞給一系列針對各個token 的運算f (c˜);然後將得到的張量傳遞給一個緩衝器,其將恢復完整的形狀。
重構可感知冗餘的Transformer
#為了利用上述時間冗餘,研究者提出了一種對Transformer 模組的修改方案。下圖 4 展示了 Eventful Transformer 模組的設計。此方法可以加速針對各個 token 的運算(如 MLP)以及查詢 - 鍵值和注意力 - 值乘法。
#在針對各個 token 的運算 Transformer 模組中,許多運算都是針對各個 token 的,也就是說它們不涉及到 token 之間的資訊交換,其中包括 MLP 和 MSA 中的線性變換。為了節省計算成本,研究者表示可以跳過未被閘選取的 token 的面向 token 的運算。由於 token 之間的獨立性,這不會改變對所選 token 的運算結果。參見圖 3。
具體來說,研究者在處理每個token的運算時,包括W_qkv變換、W_p變換和MLP,使用了一對門-緩衝器的連續序列。需要注意的是,在進行skip連接之前,他們還添加了緩衝器,以確保兩個加法操作數的token能夠正確對齊
對於每個令牌的運算成本與令牌數量成正比。透過將數量從N減少到M,下游對每個令牌的運算成本將減少N/M倍
#現在讓我們來看看查詢-鍵值積B = q k ^T 的結果
下圖5 展示了稀疏地更新查詢- 鍵值積B 中一部分元素的方法。
這些更新的總體成本為2NMD,相較之下,從頭開始計算B的成本為N^2D。請注意,新方法的成本與M成正比,即所選的令牌數量。當M
注意力- 值的積:研究者為此提出了一種基於增量∆ 的更新策略。
圖6 展示了一個新提出的高效計算三個增量項目的方法
當M小於N的一半時,可以減少運算量
token 選取策略
Eventful Transformer 的一大重要設計是其token 選取策略。給定一個閘誤差張量 e,這樣一個策略的目標是產生一個遮罩 m,其中指示了應當被更新的 token。具體的策略包括:
Top-r 策略:此策略選取 r 個誤差 e 有最大範數的 token(這裡使用的是 L2 範數)。
閾值策略:此策略會選擇所有誤差e 的範數超過閾值h 的令牌
重寫後的內容:其他策略:採用更複雜精細的令牌選擇策略可以實現更好的準確度-成本權衡,例如可以使用一個輕量級的策略網路來學習策略。然而,訓練策略的決策機制可能會面臨困難,因為二元掩碼m通常是不可微分的。另一種想法是使用重要度分數作為選擇的參考資訊。但是,這些想法仍需進一步研究
#研究人員對新提出的方法進行了實驗評估,具體應用於視訊目標偵測與影片動作辨識任務
下圖7 展示了影片目標偵測的實驗結果。其中正軸是計算節省率,負軸是新方法的 mAP50 分數的相對減少量。可以看到,新方法用少量的準確度犧牲換來了顯著的計算量節省。
在下圖8中展示了針對視訊目標偵測任務的方法比較和消融實驗結果
下圖9 給出了影片動作辨識的實驗結果。
#在下表2中,顯示了在一台CPU(Xeon Silver 4214, 2.2 GHz)和一台GPU(NVIDIA RTX3090)上運行的時間結果(以毫秒為單位)。可以觀察到,在GPU上的時間冗餘帶來了1.74倍的速度提升,而在CPU上的提升則達到了2.47倍
更多技術細節與實驗結果請參考原論文。
以上是令人驚訝的時間冗餘方法:降低視覺Transformer運算成本的新途徑的詳細內容。更多資訊請關注PHP中文網其他相關文章!