w~Transformer~合集5

我自己的原文哦~?? ?https://blog.51cto.com/whaosoft/12406495

#transformer~x1

太可怕了都到6了 太強~~

DeepMind 表示,他們提出的算法蒸餾(AD)是首個通過對具有模仿損失的離線數據進行順序建模以展示上下文強化學習的方法。同時基于觀察結果開啟了一種可能,即任何 RL 算法都可以通過模仿學習蒸餾成足夠強大的序列模型如 transformer,并將這些模型轉換為上下文 RL 算法。

無需權重更新、提示和微調,在試錯中自主改進 ?

論文地址:https://arxiv.org/pdf/2210.14215.pdf

Transformers 已經成為序列建模的強大神經網絡架構。預訓練 transformer 的一個顯著特性是它們有能力通過提示 conditioning 或上下文學習來適應下游任務。經過大型離線數據集上的預訓練之后,大規模 transformers 已被證明可以高效地泛化到文本補全、語言理解和圖像生成方面的下游任務。

最近的工作表明,transformers 還可以通過將離線強化學習(RL)視作順序預測問題,進而從離線數據中學習策略。Chen et al. (2021)的工作表明,transformers 可以通過模仿學習從離線 RL 數據中學習單任務策略,隨后的工作表明 transformers 可以在同領域和跨領域設置中提取多任務策略。這些工作都展示了提取通用多任務策略的范式,即首先收集大規模和多樣化的環境交互數據集,然后通過順序建模從數據中提取策略。這類通過模仿學習從離線 RL 數據中學習策略的方法被稱為離線策略蒸餾(Offline Policy Distillation)或策略蒸餾(Policy Distillation, PD)。

PD 具有簡單性和可擴展性,但它的一大缺點是生成的策略不會在與環境的額外交互中逐步改進。舉例而言,谷歌的通才智能體 Multi-Game Decision Transformers 學習了一個可以玩很多 Atari 游戲的返回條件式(return-conditioned)策略,而 DeepMind 的通才智能體 Gato 通過上下文任務推理來學習一個解決多樣化環境中任務的策略。遺憾的是,這兩個智能體都不能通過試錯來提升上下文中的策略。因此 PD 方法學習的是策略而不是強化學習算法。

在近日 DeepMind 的一篇論文中,研究者假設 PD 沒能通過試錯得到改進的原因是它訓練用的數據無法顯示學習進度。當前方法要么從不含學習的數據中學習策略(例如通過蒸餾固定專家策略),要么從包含學習的數據中學習策略(例如 RL 智能體的重放緩沖區),但后者的上下文大小(太小)無法捕獲策略改進。

研究者的主要觀察結果是,RL 算法訓練中學習的順序性在原則上可以將強化學習本身建模為一個因果序列預測問題。具體地,如果一個 transformer 的上下文足夠長,包含了由學習更新帶來的策略改進,那么它不僅應該可以表示一個固定策略,而且能夠通過關注之前 episodes 的狀態、動作和獎勵來表示一個策略改進算子。這樣開啟了一種可能性,即任何 RL 算法都可以通過模仿學習蒸餾成足夠強大的序列模型如 transformer,并將這些模型轉換為上下文 RL 算法。

研究者提出了算法蒸餾(Algorithm Distillation, AD),這是一種通過優化 RL 算法學習歷史中因果序列預測損失來學習上下文策略改進算子的方法。如下圖 1 所示,AD 由兩部分組成。首先通過保存 RL 算法在大量單獨任務上的訓練歷史來生成大型多任務數據集,然后 transformer 模型通過將前面的學習歷史用作其上下文來對動作進行因果建模。由于策略在源 RL 算法的訓練過程中持續改進,因此 AD 不得不學習改進算子以便準確地建模訓練歷史中任何給定點的動作。至關重要的一點是,transformer 上下文必須足夠大(即 across-episodic)才能捕獲訓練數據的改進。

研究者表示,通過使用足夠大上下文的因果 transformer 來模仿基于梯度的 RL 算法,AD 完全可以在上下文中強化新任務學習。研究者在很多需要探索的部分可觀察環境中評估了 AD,包括來自 DMLab 的基于像素的 Watermaze,結果表明 AD 能夠進行上下文探索、時序信度分配和泛化。此外,AD 學習到的算法比生成 transformer 訓練源數據的算法更加高效。

最后值得關注的是,AD 是首個通過對具有模仿損失的離線數據進行順序建模以展示上下文強化學習的方法。

方法

在生命周期內,強化學習智能體需要在執行復雜的動作方面表現良好。對智能體而言,不管它所處的環境、內部結構和執行情況如何,都可以被視為是在過去經驗的基礎上完成的。可用如下形式表示:

研究者同時將「長期歷史條件, long history-conditioned」策略看作一種算法,得出:?

研究者用大寫拉丁字母表示隨機變量,例如 O、A、R 及其對應的小寫形式 o,α,r。通過將算法視為長期歷史條件策略,他們假設任何生成學習歷史的算法都可以通過對動作執行行為克隆來轉換成神經網絡。接下來,該研究提出了一種方法,該方法提供了智能體在生命周期內學習具有行為克隆的序列模型,以將長期歷史映射到動作分布。 ? ? ?

實際執行

在實踐中,該研究將算法蒸餾過程 ( algorithm distillation ,AD)實現為一個兩步過程。首先,通過在許多不同的任務上運行單獨的基于梯度的 RL 算法來收集學習歷史數據集。接下來,訓練具有多情節上下文的序列模型來預測歷史中的動作。具體算法如下所示:

實驗

實驗要求所使用的環境都支持許多任務,而這些任務不能從觀察中輕易的進行推斷,并且情節(episodes)足夠短,可以有效地訓練跨情節因果 transformers。這項工作的主要目的是調查相對于先前工作,AD 強化在多大程度上是在上下文中學習的。實驗將 AD、 ED( Expert Distillation)? 、RL^2 等進行了比較。

評估 AD、ED、 RL^2 結果如圖 3 所示。該研究發現 AD 和 RL^2 都可以在上下文中學習從訓練分布中采樣的任務,而 ED 則不能,盡管 ED 在分布內評估時確實比隨機猜測做得更好。

圍繞下圖 4,研究者回答了一系列問題。AD 是否表現出上下文強化學習?結果表明 AD 上下文強化學習在所有環境中都能學習,相比之下,ED 在大多數情況下都無法在上下文中探索和學習。?

AD 能從基于像素的觀察中學習嗎?結果表明 AD 通過上下文 RL 最大化了情景回歸,而 ED 則不能學習。

AD 是否可以學習一種比生成源數據的算法更有效的 RL 算法?結果表明 AD 的數據效率明顯高于源算法(A3C 和 DQN)。

是否可以通過演示來加速 AD?為了回答這個問題,該研究保留測試集數據中沿源算法歷史的不同點采樣策略,然后,使用此策略數據預先填充 AD 和 ED 的上下文,并在 Dark Room 的環境中運行這兩種方法,將結果繪制在圖 5 中。雖然 ED 保持了輸入策略的性能,AD 在上下文中改進每個策略,直到它接近最優。重要的是,輸入策略越優化,AD 改進它的速度就越快,直到達到最優。?

完事~~?

#LightSeq?

太快了 又挖了一個來哦?字節出的~LightSeq?~~?Transformer只是看并沒用過 ....

近年來,Transformer 已經成為了 NLP 和 CV 等領域的主流模型,但龐大的模型參數限制了它的高效訓練和推理。于是字節跳動在 2019 年 12 月和 2021 年 6 月分別推出了高效推理和訓練引擎 LightSeq,大大加速了 Transformer 系列模型的訓練和推理,也打通了 Transformer 從訓練到推理的整個流程,極大優化了用戶使用體驗。最近,LightSeq 訓練引擎相關論文[1],被錄用難度極高的超算領域國際頂會 SC22 接收,得到了學術界的廣泛認可!

  • SC22 接收論文:https://sc22.supercomputing.org/presentation/?id=pap211&sess=sess154
  • 代碼地址:https://github.com/bytedance/lightseq

如何繼續提升速度?降低計算精度是比較直接的方法。2017 年以來,fp16 混合精度技術 [2] 獲得了廣泛應用。在對模型效果無損的前提下,將模型訓練和推理的速度提升了 50% 以上。而為了維持模型效果,更低精度的方法(例如 int8)通常需要使用如下傳統方案:

  1. 首先使用 fp16 混合精度將模型訓練至收斂;
  2. 然后在模型計算密集型算子的權重、輸入和輸出位置處,插入偽量化結點,進行量化感知訓練;
  3. 最后將帶有偽量化結點的模型計算圖轉換到專用的 int8 推理引擎中,進行服務部署和模型推理。

雖然在多數任務上,上述方案可以實現模型效果無損,但還是存在以下問題:

  1. 使用方法復雜。例如要多一次量化感知訓練 [4] 的過程,并且帶有偽量化節點的計算圖轉換復雜。
  2. 訓練速度慢。由于目前流行的深度學習框架不支持 int8 精度,所以量化感知訓練需要插入 fp16 的偽量化結點來模擬 int8 量化,導致量化感知訓練反而比 fp16 混合精度訓練慢 2-3 倍。
  3. 推理部署難且加速比低。對比 fp32、fp16 等類型,int8 硬件和底層軟件庫優化相對滯后。例如在 NVIDIA GPU 上,int8 矩陣乘法加速受限于硬件架構和特定 shape,實際加速比遠遠低于理論值。

在下文中,如無特殊說明,量化都是指的 int8 精度的量化

?針對這些問題,字節跳動推出了全新版本的 LightSeq GPU 量化訓練與推理引擎。支持 Transformer 系列模型的量化訓練與推理,并做到了開箱即用,用戶友好。LightSeq 快準狠地實現了 int8 精度的量化訓練和推理:

  1. 快:A100 多卡訓練最高加速 5.2 倍,T4 單卡推理最高加速 8.9 倍。
  2. 準:訓練和推理效果基本無損。
  3. 狠:相同數據量下,顯存占用最高減少 68%,模型存儲空間減少 75%。

總體來說,LightSeq 新版量化訓練與推理引擎具有如下幾個優點:

1.?豐富的支持

支持完整的 Transformer 模塊和多種解碼算法,支持 Transformer、BERT、GPT、BART、ViT 等多種模型結構,支持 Fairseq、Hugging Face、NeurST 等多種訓練框架接入量化訓練、導出模型以及量化推理,提供了豐富的樣例供用戶參考。

2.?卓越的性能

相比于 fp16 精度的 LightSeq 推理引擎,int8 量化還可以進一步加速最高 70%,相比于 PyTorch 推理更是達到了最高 8.9 倍的加速比。同時顯存占用相比 fp16 推理引擎降低了 30% 左右,模型存儲空間只需要原來的四分之一。最后經過多個任務的驗證,推理效果幾乎無損。

3. 便捷的使用

LightSeq 已經針對多個訓練庫進行了量化支持,可以一鍵開啟量化訓練,然后輕松導出為 LightSeq 支持的模型格式,最后實現量化推理。除此之外,LightSeq 還支持訓練后量化,無需額外訓練即可體驗量化推理。

使用方法

如上圖所示,為了最大程度減小量化帶來的損失,首先需要用 fp16 精度訓練一個浮點數模型,將模型效果訓到最好。然后開啟量化進行 finetune,得到微調過的量化模型,此時模型效果已經基本恢復到浮點數模型的水平。接著將量化模型轉換為 LightSeq 支持的 PB 或者 HDF5 模型格式,最后用 LightSeq 進行量化推理。

安裝方法

LightSeq 安裝非常簡單,只需要一行命令即可:

pip install lightseq

量化訓練

LightSeq 支持 Fairseq、Hugging Face、NeurST 等訓練框架的量化接入,同時也可以自定義模型并開啟量化訓練。以 encoder 層為例,只需要先定義浮點數模型,然后開啟量化即可:

from lightseq.training import LSTransformerEncoderLayer
from lightseq.training.ops.pytorch.quantization import enable_quant
config = LSTransformerEncoderLayer.get_config(model="bert-base",max_batch_tokens=4096,max_seq_len=512,fp16=True,local_rank=0,
)
layer = LSTransformerEncoderLayer(config)
# 開啟量化
layer.apply(enable_quant)

量化推理

LightSeq 提供了便捷的 python 推理接口,只需要三行代碼即可實現快速的量化推理:

import lightseq.inference as lsi
model = lsi.QuantTransformer(pb_path, batch_size)
result = model.infer(input)

此外 LightSeq 還提供了 BERT、GPT、ViT 等模型的 python 接口,分別調用 QuantBert、QuantGpt 和 QuanVit 即可體驗。

梯度通信量化

LightSeq 支持 Transformer 模型的梯度通信量化[5],使用 Fairseq 或者 Hugging Face 即可輕松開啟分布式量化訓練,并同時支持浮點數模型和量化模型。在構建模型后,只需要為模型注冊一個 communication hook 即可開啟梯度通信量化,再開始訓練過程。

from lightseq.training.gradient_comm_quantization import encode_and_decode, GCQState
from torch.nn.parallel import DistributedDataParallel 
# model could be from Fairseq or Hugging Face, wrapped by DDP
model = DistributedDataParallel(model)
state =  GCQState(process_group)
# register hook
model.register_comm_hook(state=state, hook=encode_and_decode)

性能測試

LightSeq 在多個任務上測試了量化訓練、量化推理和梯度通信量化的速度,并且分析了顯存占用情況和量化模型的效果。

量化訓練速度

LightSeq 在 8 張 A100 顯卡上進行了訓練實驗,主要對比對象是 Fairseq 的 Transformer、Hugging Face 的 BERT、GPT2 和 ViT。

可以看出,四種模型結構加速趨勢都是類似的,加速比都會隨著數據量的增大而減小,原因有三點:

  1. 隨著數據量的增大,矩陣乘法 GEMM 的占比會明顯增加,因此 PyTorch QAT 增加的額外的偽量化結點時間占比會逐漸減小,最后速度會和 PyTorch fp16 無限接近。
  2. 與此同時,隨著 GEMM 占比升高,LightSeq fp16 自定義算子的提速效果也逐漸減小,因此時間上也會和 PyTorch fp16 無限接近。
  3. 由于 Ampere 架構顯卡上 int8 GEMM 在 shape 較小時甚至不如 fp16 GEMM 快,在大 shape 下才能稍快一點,因此隨著數據量增大,LightSeq int8 也會無限接近 LightSeq fp16 的速度。

量化推理速度

LightSeq 在單張 T4 顯卡上進行了推理實驗,主要對比對象是 Hugging Face 的 Transformer、BERT、GPT2 和 ViT。 ? ? ? ? ? ? ? ? ??

可以看出,隨著輸入數據量的增大,LightSeq 與 PyTorch 的差距會逐漸減小,這也是 GEMM 占比升高造成的。比較 LightSeq fp16 和 LightSeq int8,可以看出隨著數據量的增大,LightSeq int8 越來越快。這是因為在 T4 顯卡上,int8 GEMM 的加速會隨著 shape 的增大而有明顯增加。因此在 T4 顯卡上進行量化推理時,輸入數據量越大,加速效果越好。

?LightSeq 還針對機器翻譯多個語向和多個測試集,測試了不同 batch size 下,LightSeq int8 推理相對于 LightSeq fp16 推理的加速比,實驗同樣是在單張 T4 顯卡上進行的,采用的模型都是標準的 Transformer-Big。

可以得到和上文中相同的結論,隨著 batch size 的增大,量化推理的加速比會逐漸升高。相比于 LightSeq fp16,最高還可以再加速近 70%,這極大地縮短了線上翻譯模型的推理延時。

最后如上圖所示,為了展示自動 GEMM 調優技術的效果,LightSeq 測試對比了 A100 顯卡上 Transformer 和 BERT 模型 fp16、int8 調優前和 int8 調優后的延時。可以看出調優前某些 shape 的 int8 GEMM 速度甚至比 fp16 還要慢,而調優后全面超越了 fp16。

顯存占用

LightSeq 分析了不同 batch size 下,量化模型相對于浮點數模型顯存占用的加速比。可以看出隨著 batch size 的增大,量化模型的顯存占用優勢更明顯,最高可以減少 30% 左右。而 LightSeq fp16 引擎相對于 PyTorch 模型也極大程度減少了顯存占用,因此 LightSeq int8 引擎最終能夠減少最多 68% 左右的顯存。

量化模型效果

?針對機器翻譯多個語向和多個測試集,LightSeq 測試了量化模型推理相對于浮點數模型 BLEU 的損失,采用的模型都是標準的 Transformer-Big。

在數據量較大的語向 en2zh 上,LightSeq int8 相對 BLEU 損失較大些,最大達到了 - 0.4。而在數據量較小的語向 en2es 上,LightSeq int8 不僅沒有任何效果損失,反而比浮點數模型更好。總體而言,int8 量化模型的平均 BLEU 相比浮點數模型基本無損。在 GLUE 和 SQuAD 等多個任務上,LightSeq 也驗證了量化模型的效果。

梯度通信量化

由于在多機多卡場景下通信瓶頸更加明顯,所以梯度通信量化主要應用在分布式訓練場景。因此 LightSeq 在 2 機 8 卡的 A100 上進行了分布式訓練的速度測試。

可以看出,梯度通信量化的訓練加速效果整體上隨著輸入數據的增大而減弱。這主要是因為隨著輸入數據的增大,計算時間占比升高,梯度通信時間占比減少,梯度量化的收益也隨之減小。

LightSeq 還額外增加了不同數量網卡(NIC)下的訓練速度測試。可以看到使用梯度通信量化的分布式訓練速度相比原始的 LightSeq fp16 有大幅度提升。

量化技術

int8 量化的加速收益主要來自如下幾個方面:

  1. GEMM 精度從 fp16 降低到 int8 后,計算時間縮短;
  2. 自定義算子采用 int8 輸入輸出后,數據讀寫時間縮短;
  3. 梯度采用 int8 存儲后,多機之間通信時間縮短。

以 Transformer 模型為例,經過 LightSeq fp16 引擎加速后,自定義算子時間大大縮短,而 GEMM 時間占比提升到了 90% 左右,因此優化的重點轉移到了 GEMM 提速。將 fp16 GEMM 替換為 int8 GEMM 不僅可以縮短 GEMM 時間,還可以減小前后算子的輸入輸出位寬,從而減小讀寫數據的時間。最后多機訓練的瓶頸主要在梯度的通信,將梯度量化為 int8 精度可以大大加快分布式訓練的速度。 ? ? ? ? ? ? ? ? ? ? ? ?

量化原理

?為了彌補量化帶來的精度損失,通常需要用量化感知訓練來模擬量化過程。如上圖所示,量化感知訓練就是將 float GEMM 的兩個 float 輸入分別做一遍量化和反量化(稱之為偽量化結點),離散化成分段的浮點數輸入,然后進行 float GEMM 運算。得到結果后再次進行量化與反量化,得到最終的浮點數結果。而量化的過程是不可導的,因此需要用 STE 方法來估計量化參數的梯度。之所以量化感知訓練中需要插入偽量化結點,然后用 float GEMM 去模擬量化過程,是因為 TensorFlow 和 PyTorch 等訓練框架不支持 int8 GEMM。

而 LightSeq 量化訓練直接采用 int8 GEMM 來真實還原量化過程,因此相比傳統的實現要更快,且更加節省顯存。在推理的時候,同樣采用離散化后的整數進行 int8 GEMM 運算,最后再反量化回浮點數結果。量化推理過程和量化訓練完全一致,并且和傳統的量化感知訓練是完全等價的。

量化位置

?整個量化 Transformer 的網絡結構如上圖所示,紅色箭頭表示需要加上量化和反量化結點的位置。

首先所有 int8 GEMM 的輸入和輸出都需要進行量化。由于 int8 GEMM 的 shape 限制,部分 GEMM(例如注意力分數的計算)仍然采用 float GEMM。此外第二層 FFN 的 GEMM 采用的是 int32 的輸出,因為它的 GEMM 輸入是 ReLU 激活函數的輸出結果,只包含正數,非對稱,因此如果采用 int8 輸出的 GEMM,將無法反量化為正確的浮點數結果。

然后所有的模型權重 weight 都需要存儲為 int8 類型,因此需要對 weight 做量化。而權重 bias 參數量較小,無需量化,保留 float 精度反而可以提升模型效果。

最后需要對 decoder 端的 cache 進行量化。因為在推理時,decoder 端的 cache 需要頻繁進行讀寫,因此將 cache 量化為 int8 可以大大加快解碼的速度。

量化策略

將一個浮點數矩陣量化為 int8 整數矩陣有很多方法,LightSeq 采用的是對稱量化,即將正負數范圍對稱的浮點數區間等比例地映射到整數區間 [-127, 127] 上。

而實際上浮點數矩陣的數值范圍通常并不對稱,存在極少的離群值。如果直接按照離群值的范圍來量化矩陣,會影響到量化后的精度,所以需要先對矩陣進行數值截斷。

LightSeq 采用 PACT 方法進行截斷[6],將截斷的范圍當作模型可學習的參數,然后利用 STE 算法去估計參數的梯度,并進行反向傳播優化。根據實踐經驗,權重 weight 的初始截斷范圍設為[-1, 1],中間結果的初始截斷范圍設為[-16, 16],可以在大部分任務上達到最好的效果。最后經過截斷范圍和其他模型參數的聯合優化,量化模型的效果可以達到基本無損。

梯度通信量化

針對分布式訓練場景,LightSeq 推出了梯度量化壓縮技術。即對浮點精度的梯度進行 int8 量化,以減少梯度通信的時間消耗,從而加速訓練,這就是梯度通信量化(GCQ)。

如上圖所示,梯度通信量化的主要流程如下:

  1. 計算每張卡上各自梯度的截斷范圍;
  2. 對截斷范圍執行 all-reduce max 操作;
  3. 每張卡使用統一的截斷范圍對各自梯度進行 int8 量化;
  4. 對 int8 梯度執行 all-reduce sum 操作;
  5. 每張卡對 all-reduce 后的梯度進行反量化,還原為浮點數梯度,并進行參數更新。

為了解決 int8 梯度在 all-reduce 過程中溢出的問題,LightSeq 首先將每張卡上的浮點數梯度除以卡數,再使用除之前的截斷范圍進行量化,最后進行 all-reduce 操作。這樣每張卡上量化后的 int8 整數 all-reduce 完就不會溢出,但是單卡實際用于量化的比特數也因此而減少,所以目前方案在 2 機 8 卡效果幾乎無損,但隨著卡數的上漲,訓練效果會有所下降。以 en2de 和 en2fr 翻譯任務為例,在 4 機 8 卡上進行分布式量化訓練,BLEU 值分別會下降 0.4 和 1.5 左右。未來 LightSeq 將會持續探索更好的方法來解決這一問題。

通用技術

除了上一章節中提到的量化技術以外,此次更新 LightSeq 還提出了幾種通用的優化技術,不僅可以應用在量化模型中,也適用于其它所有精度模型的訓練與推理。

算子融合

?上圖是 encoder 模塊量化訓練的計算圖,LightSeq 將兩次 GEMM 運算之間的所有操作融合成一個算子[7],減少了 kernel 調用的次數,因此減少了總的計算時間。

圖中黃色矩形表示 int8 GEMM,綠色矩形表示 float GEMM。這里采用 float GEMM 是由于 shape 的限制,不適合使用 int8 GEMM 加速。紅色箭頭表示流動數據的類型是 int8,綠色箭頭表示第二層 FFN 的 GEMM 輸出是 int32 數據類型。int8 GEMM 輸入輸出的量化與反量化操作都被融合到了前后 kernel 里,這不僅可以減少數據搬運,還可以減小顯存占用。

在推理時,LightSeq 還針對 decoder 做了優化。如上圖所示,在計算 self-attention 時,注意力得分的維度是(batch size, 1, sequence length)。因此在計算 value 乘積時,可以不采用 GEMM 運算,而直接手寫加權求和的算子,從而將圖中虛線框中的計算融合成一個 kernel。

自動顯存管理

模型量化引入了更復雜的張量類型和張量依賴關系,這給顯存管理帶來新的挑戰。為此,LightSeq 設計了新的顯存管理機制。如上圖所示,主要包括以下過程:

  1. 訓練啟動前,根據每個算子的拓撲依賴關系,自動計算每個張量的生命周期及顯存空間大小。其中,包含動態維度的張量按照此維度的最大量進行計算,例如機器翻譯任務中的最大句長和最大 batch 句子數量。這些最大量在訓練前已被指定;
  2. 張量確定生命周期和大小后,分析顯存復用關系。其中,無生命周期重合的張量可以共用一片顯存空間,所有顯存空間都是無數據類型的,可以被分配到任意數據類型的張量上;
  3. 根據張量顯存復用關系,申請多段顯存空間,為每個張量分配實際的顯存起止地址。

張量顯存復用的分析,LightSeq 借鑒了論文 [3] 中提出的 Greedy by Size for Offset Calculation 方法,做了三個改進:

  1. 支持了整個訓練過程的顯存復用(forward/backward);
  2. 不同數據類型能做到顯存復用(int8/fp16/fp32);
  3. 在多段顯存空間上容納所有張量,而非一段非常大的顯存空間,這樣能有效提升顯存利用率。

自動 GEMM 調優

LightSeq 的 int8 GEMM 采用了 NVIDIA 的 cuBLASLt 庫,這也是目前 NVIDIA 顯卡上最為高效的矩陣運算庫。但是輸入數據的 shape 或者顯卡不同的話,GEMM 所采用的最優配置(例如數據排布、GEMM 算法等等)也可能不同,因此需要進行自動選取。LightSeq 采取的自動調優方案如下:

  1. 在多種型號顯卡上(例如 T4 和 A100)進行不同 shape 的 GEMM 最優配置搜索,并將結果保存到配置文件中,用戶只需要下載即可;
  2. 模型初始化時,加載對應型號顯卡的配置文件,解析并保存到鍵值對為 (shape, 最優配置) 的字典中。如果沒有對應型號顯卡的配置文件,或者沒有需要的 GEMM shape,那么用戶可以選擇自己搜索并保存,或者直接使用默認配置;
  3. 模型前向或后向計算時,根據輸入的 shape 在字典中尋找最優配置,然后進行 GEMM 計算。如果沒有找到對應的 shape,那么直接采用默認的配置。

未來工作

未來 LightSeq 還將繼續探索移動端的低精度量化、反向傳播中梯度的量化、大模型量化等方向。 ?

哈哈 是不是看著說的好厲害啊

#awesome-visual-transformers

多厲害啊 都說到9了 好火感覺比yolo還厲害

Transformer,一種基于注意力的編碼器-解碼器模型,已經徹底改變了自然語言處理(NLP)領域。受這些重大成就的啟發,最近在計算機視覺(CV)領域采用類似Transformer的架構進行了一些開創性的工作,這些工作證明了它們在三個基本CV任務(分類、檢測和分割)以及多傳感器數據(圖像、點云和視覺-語言數據)上的有效性。由于其具有競爭力的建模能力,與現代卷積神經網絡(CNN)相比,視覺Transformer在多個基準測試中取得了令人印象深刻的性能改進。

本綜述根據三個基本的CV任務和不同的數據流類型,全面調查了100多種不同的視覺Transformer,并提出了一種分類法,根據其動機、結構和應用場景來組織代表性方法。由于它們在訓練設置和專用視覺任務上的差異,論文還評估并比較了不同配置下的所有現有視覺Transformer。

此外,論文還揭示了一系列重要但尚未開發的方面,這些方面可能使此類視覺Transformer能夠從眾多架構中脫穎而出,例如,松散的高級語義嵌入,以彌合視覺Transformer與序列式之間的差距。最后,提出了未來有前景的研究方向。倉庫地址:https://github.com/liuyang-ict/awesome-visual-transformers

本文旨在對最新的視覺Transformer進行更全面的回顧,并對其進行系統分類:

全面性和可讀性:?本文根據它們在三個基本CV任務(即分類、檢測和分割)和數據流類型(即圖像、點云、多流數據)上的應用,全面回顧了100多個視覺Transformer。論文選擇了更具代表性的方法,并進行了詳細的描述和分析,但簡要介紹了其他相關工作。本文不僅從一個角度對每個模型進行了詳盡的分析,而且還從某種意義上建立了它們的內部聯系,如漸進、對比和多視角分析。

直觀的比較:?由于現有的視覺Transformer針對各種視覺任務遵循不同的訓練方案和超參數設置,本文對不同的數據集和限制進行了多次橫向比較。更重要的是,總結了為每個任務設計的一系列有效組件,包括:(a)具有層次結構的淺局部卷積;(b) neck detector的稀疏注意力空間先驗加速;(c)以及用于分割的通用掩模預測方案;

深入分析:?論文進一步深入分析了以下幾個方面:(a)從傳統序列任務到視覺任務的轉換過程;(b) 視覺Transformer和其他神經網絡之間的對應關系;(c)以及不同任務和數據流類型中使用的可學習嵌入(即class token、object query、mask embedding)的相關性。最后,論文概述了一些未來的研究方向。例如,編碼器-解碼器Transformer主干可以通過query embedding來統一多個視覺任務和數據流類型。

原始Transformer

最初的Transformer[1]首先應用于序列到序列自動回歸的任務。與先前的序列轉導模型[49]、[50]相比,這種原始的Transformer繼承了編碼器-解碼器結構,但通過使用multi-head attention機制和point-wise feed-forward網絡,完全放棄了遞歸和卷積。圖4展示了帶有編碼器-解碼器架構的整體Transformer模型。具體而言,它由N個連續的編碼器模塊組成,每個編碼器由兩個子層組成。1) MHSA層聚合編碼器嵌入內的關系;2) 逐位置FFN層提取特征表示。

在自然語言回歸模型中,Transformer源于機器翻譯任務。給定一個單詞序列,Transformer將輸入序列矢量化為單詞嵌入,添加位置編碼,并將生成的向量序列輸入編碼器。在訓練期間,如圖4所示,Vaswani等人根據自回歸任務的規則設計了masking操作,其中當前位置僅取決于先前位置的輸出。基于這種masking,Transformer解碼器能夠并行處理輸入標簽的序列。在推理期間,通過相同的操作處理先前預測的單詞序列以預測下一個單詞。

分類Transformer

隨著NLP中Transformer的顯著發展[2]–[5],最近的工作試圖引入視覺Transformer來進行圖像分類。本節全面回顧了40多個視覺Transformer,并將其分為六類,如圖5所示。

首先介紹了Fully-Attentional網絡[24]、[28]和Vision Transformer(ViT)[29],這種原始ViT首先證明了其在多個分類基準上的功效。然后討論了Transformer增強的CNN方法,該方法利用Transformer來增強CNN的表示學習。由于忽略了原始ViT中的局部信息,CNN增強型Transformer采用了適當的卷積inductive bias來增強ViT,而局部注意力增強型Transformer重新設計了patch分區和注意力塊,以提高其局部性。

繼CNN[162]中的分層和深層結構之后,分層Transformer用金字塔代替了固定分辨率的柱狀結構,而Deep Transformer防止了注意力圖過于平滑,并增加了其在深層中的多樣性。此外,論文還回顧了現有的基于自監督學習的ViT。

最后,本文根據直觀的比較進行了簡短的討論,組織了一個ViT的里程碑,并討論了一個共同的問題以供進一步研究。

Original Visual Transformer

受Transformer在NLP領域取得的巨大成就的啟發[2]-[5],先前視覺任務的技術趨勢[14]-[17],[163]將注意力機制與卷積模型相結合,以增強模型的感受野和全局依賴性。除了這種混合模型,Ramachandran等人考慮了注意力是否可以完全取代卷積,然后提出了一個Stand-Alone自注意力網絡(SANet)[24],與原始基線相比,該網絡在視覺任務上取得了優異的性能。給定ResNet[11]架構,作者直接將每個bottleneck中的空間卷積層(3*3)替換為局部空間自注意力層,并保持其他結構與ResNet中的原始設置相同。此外,大量消融已經表明,位置編碼和卷積可以進一步提高網絡效率。

繼[24]之后,Cordonnier等人設計了一個原型(稱為“Fully-Attentional Network”)[28],包括一個fully vanilla Transformer和一個二次位置編碼。作者還從理論上證明了卷積層可以用具有相對位置編碼和足夠head的單個MHSA層來近似。通過在CIFAR-10上的消融實驗[164],他們進一步驗證了這樣的原型設計確實能夠學習到每個query像素周圍的網格狀圖案,這是他們的理論結論。與[28]只關注小尺度模型不同,ViT[29]通過大規模預訓練學習進一步探索了vanilla Transformer的有效性,這樣的先鋒工作對社區產生了重大影響。因為vanilla Transformer只接受序列輸入,ViT中的輸入圖像首先被拆分成一系列不重疊的patch,然后被投影到patch嵌入中。將一維可學習位置編碼添加到patch embeddings上以保留空間信息,然后將joint embeddings饋送到編碼器中,如圖6所示。

與BERT[5]類似,將學習的 [class] token與patch embeddings附加在一起,以聚合全局表示,并將其用作分類的輸入。此外,2D插值補充了預訓練的位置編碼,以在饋送圖像是任意分辨率時保持patche的一致順序。通過使用大規模私有數據集(JFT-300M[165])進行預訓練,與最流行的CNN方法相比,ViT在多個圖像識別基準(ImageNet[166]和CIFAR-100[164])上取得了相似甚至更好的結果。然而,它的泛化能力往往會受到有限訓練數據的侵蝕。

Transformer Enhanced CNNs

如上所述Transformer有兩個關鍵:MHSA和FFN。卷積層和MHSA之間存在近似值[28],Dong等人認為,Transformer可以借助跳躍連接和FFN[167]進一步減輕MHSA的強偏置。最近,一些方法試圖將Transformer集成到CNN中以增強表示學習。VTs[51]將輸入圖像的語義概念解耦到不同的通道中,并通過編碼器塊(即VT塊)將它們緊密關聯。這種VT塊替代了最后的卷積階段,以增強CNN模型的語義建模能力。與先前直接用注意力結構代替卷積的方法不同,Vaswani等人提出了一種概念上的重新定義,即具有MHSA的連續bottleneck block可以被表述為Bottleneck Transformer(BoTNet)[52]塊。采用相對位置編碼[168]進一步模擬原始Transformer.。基于ResNet[11],BoTNet在ImageNet基準上的參數設置類似,優于大多數CNN模型,并進一步證明了混合模型的有效性。

CNN Enhanced Transformer

Inductive bias被定義為關于數據分布和解空間的一組假設,其在卷積中的表現為局部性和平移不變性[169]。由于局部鄰域內的協方差很大,并且在圖像中逐漸趨于平穩,CNN可以在偏差的幫助下有效地處理圖像。然而,當有足夠的數據可用時,強偏差也限制了CNN的上限。最近的努力試圖利用適當的CNN bias來增強Transformer。相關算法有DeiT[40]、ConViT[53]、CeiT[54]、LocalViT[55]、ResT[57]、CPVT[56]、CvT[36]、CoAtNet)[39]等。

Local Attention Enhanced Transformer

ViT[29]中的coarse patchify過程忽略了局部圖像信息。除了卷積,研究人員提出了一種局部注意力機制,以動態關注相鄰元素并增強局部提取能力。代表性方法之一是Swin Transformer[35]。類似于TSM[173](圖7(a)),Swin利用沿空間維度的移位窗口來建模全局和邊界特征。具體而言,兩個連續的window-wise attention可以促進cross-window相互作用(圖7(b)-(c)),類似于CNN中的感受野擴展。這種操作將計算量由降低至。其他相關算法TNT[59]、Twins[60]、ViL[61]、VOLO[44]可以參考具體論文。

Hierarchical Transformer

由于ViT[29]在整個Transformer層中采用具有固定分辨率的柱狀結構,忽略了細粒度特征,并帶來了沉重的計算成本。繼分層模型之后,Tokens to Token ViT(T2T-ViT)首先引入了分層Transformer的范例,并采用overlapping unfold操作進行下采樣。然而,這種操作帶來了沉重的內存和計算成本。因此,Pyramid Vision Transformer(PVT)[41]利用非重疊的patch分區來減少特征大小。此外,PVT中的spatial-reduction attention(SRA)層被應用于通過學習低分辨率key-value pairs來進一步降低計算成本。在經驗上,PVT使Transformer適應許多基準上的密集預測任務,這些基準需要大量輸入和細粒度特征,并且具有計算效率。此外,PiT[64]和CvT[36]都分別利用池化和卷積來進行token下采樣。具體而言,CvT[36]通過用卷積投影替換線性層來改進PVT[41]的SRA。基于convolutional bias,CvT[36]可以適應任意大小的輸入,而無需位置編碼。

Deep Transformer

經驗上,增加模型的深度是可以增強其學習能力[11]的。最近的工作將深度結構應用于Transformer,并進行了大量實驗,通過分析cross-patch[67]和cross-layer[37]、[66]的相似性以及殘差的貢獻[42]來研究其可擴展性。在Deep Transformer中,來自較深層的特征往往不太具有代表性(attention collapse[66]),并且patch被映射到不可區分的潛在表示中(patch over-smoothing[67])。為了解決上述限制,這些方法從兩個方面提出了相應的解決方案。從模型結構的角度來看,Touvron等人在圖像Transformers中提出了有效的Class-attention(CaiT[42]),包括兩個階段:1)沒有class token的多個self-attention階段。在每一層中,利用由small values初始化的可學習對角矩陣來動態更新channel權重,從而為channel調整提供一定的自由度;2) 最后class-attention階段是凍結patch embeddings。之后的class token被插入到模型全局表示中,類似于具有編碼器-解碼器結構的DETR。這種顯式分離基于這樣一個假設,即class token對于前向傳遞中的patch embeddings梯度無效。通過蒸餾訓練策略[40],CaiT在沒有外部數據的情況下在imagenet-1k上實現了新的SOTA(86.5%的TOP1精度)。Deep Transformer遭受attention collapse和過度平滑問題的困擾,但仍在很大程度上保留了不同head之間注意力圖的多樣性。基于這一觀察,Zhou等人提出了Deep Vision Transformer(DeepViT)[66],該Transformer聚合cross-head attention maps,并通過使用線性層重新生成新的注意力圖,以增加跨層特征多樣性。此外,Refiner[37]應用線性層來擴展注意力圖的維度(間接增加head數量),以促進多樣性。然后,采用分布式局部注意力(DLA)來實現對局部特征和全局特征的更好建模,這是通過影響注意力圖的head-wise卷積來實現的。從訓練策略的角度來看,Gong等人提出了deep Transformer的三個Patch Diversity損失,這可以顯著鼓勵patch的多樣性并抵消過度平滑問題[67]。類似于[175],patch-wise余弦損失最小化了patch之間的成對余弦相似性。patch-wise對比度損失通過其在早期層中的對應patch使較深的patch正則化。受Cutmix[176]的啟發,patch-wise混合損失混合了兩個不同的圖像,并迫使每個patch只關注來自同一圖像的patch,而忽略不相關的patch。與LV-ViT[43]相比,它們具有相似的損失功能,但動機不同。前者側重于patch多樣性,而后者側重于關于token標記的數據增強。

Transformers with Self-Supervised Learning

自監督Transformer在NLP領域取得了巨大的成功[5],但視覺Transformer仍停留在監督的預訓練階段[35],[40]。最近的工作還試圖以生成和判別的方式為ViT設計各種自監督學習方案。生成式的相關工作有iGPT[68]、BEiT[70]、dVAE[147]。判別式的相關工作有[72]、DINO[73]。

討論

算法評估和比較分析:在論文的分類法中,所有現有的監督模型被分為六類。表一總結了這些現有ViT在ImageNet-1k基準上的性能。為了客觀直觀地評估它們,論文使用以下三張圖來說明它們在不同配置下在ImageNet-1k上的性能。圖8(a)總結了2242個輸入大小下每個模型的精度。圖8(b)以FLOP為水平軸,重點關注其在更高分辨率下的性能。圖8(c)側重于具有外部數據集的預訓練模型。根據這些比較結果,論文簡要總結了在效率和可伸縮性方面的幾項性能改進,如下所示:

與大多數結構改進方法相比,DeiT[40]和LV-ViT[43]等基本訓練策略更適用于各種模型、任務和輸入;

局部性對于Transformer是必不可少的,這反映在VOLO[44]和Swin[35]分別在分類和密集預測任務上的優勢;

卷積patchify stem(ViTc[58])和早期卷積階段(CoAtNet[39])可以顯著提高Transformer器的精度,尤其是對于大模型。論文推測原因是因為這些設計引入了比ViT中的non-overlapping patch projection更嚴格的高級特征[29];

deep Transformer,如Refined-ViT[37]和CaiT[42],具有巨大的潛力。隨著模型尺寸與channel尺寸成二次增長,未來可以進一步研究deep Transformer中的相關權衡策略;

CeiT[54]和CvT[36]在訓練中小型模型(0到40M)有顯著優勢,這表明輕量模型的這種混合注意力block值得進一步探索。

?ViT發展趨勢綜述

當論文的系統學與這些模型的時間線匹配時,我們可以清楚地跟蹤Transformer用于圖像分類的發展趨勢(圖1)。作為一種自注意機制,視覺Transformer主要根據NLP中的樸素結構(ViT[29]和iGPT[68])或CV中基于注意力的模型(VTs[51]和BoTNet[52])進行重新設計。然后,許多方法開始將CNN的層次結構或深層結構擴展到ViT。T2T-ViT[63]、PVT[41]、CvT[36]和PiT[64]都有一個動機,即將分層結構遷移到Transformer中,但它們實現的下采樣方式不同。CaiT[42]、Diverse Patch[67]、DeepViT[66]和Refiner[37]關注deep Transformer中的問題。此外,一些方法轉向內部組件以進一步增強先前Transformer的圖像處理能力,即位置編碼[56]、[179]、[180]、MHSA[28]和MLP[167]。下一波Transformer是局部范式。其中大多數通過引入局部注意機制[35]、[44]、[59]、[60]或卷積[53]–[55]將局部性引入Transformer。如今,最新監督Transformer正在探索結構組合[39]、[58]和scaling laws[38]、[181]。除了有監督的Transformer,自監督學習在ViT[68]–[70]、[72]–[74]中占據了很大一部分。然而,目前尚不清楚哪些任務和結構對CV中的自監督Transformer更有利。關于備選方案的簡要討論:在ViT的開發過程中,最常見的問題是ViT能否完全取代傳統的卷積。通過回顧過去一年的性能改進歷史,這里沒有任何相對劣勢的跡象。ViT已經從一個純粹的結構回歸到一個混合的形式,而全局信息已經逐漸回歸到帶有局部bias的混合階段。盡管ViT可以等同于CNN,甚至具有更好的建模能力,但這種簡單有效的卷積運算足以處理淺層中的局部性和語義特征。未來,兩者結合的精神將推動圖像分類取得更多突破。

檢測Transformer

在本節中,論文將回顧用于目標檢測的ViT,它可以分為兩個部分:Transformer Neck和Transformer Backbone。對于neck,論文主要關注為Transformer結構指定的一種新表示,稱為object query,即一組可學習的參數等價地聚集了全局特征。最近的變體試圖在收斂加速或性能改進方面解決最優融合范式。除了專門為檢測任務設計的neck外,一部分主干檢測器還考慮了特定的策略。最后,論文對它們進行了評估,并分析了這些檢測器的一些潛在方法。

Transformer Neck

首先回顧DETR[30]和Pix2seq[75],它們是最初的Transformer檢測器,重新定義了兩種不同的目標檢測范式。隨后,論文主要關注基于DETR的變體,從五個方面改進了Transformer檢測器的準確性和收斂性:稀疏注意力、空間先驗、結構重新設計、分配優化和預訓練模型。原始檢測器:DETR[30]是第一個端到端Transformer檢測器,它消除了手工設計的表示[182]-[185]和非最大抑制(NMS)后處理,這將目標檢測重新定義為集合預測問題。詳細地說,一小組可學習的位置編碼,稱為object query,被并行饋送到Transformer解碼器中,以從圖像特征中聚合實例信息。然后,預測頭直接從解碼器的輸出query產生檢測結果。在訓練過程中,在預測目標和GT之間使用二分匹配策略,以識別一對一的標簽分配,從而在沒有NMS的情況下消除推理時的冗余預測。在反向傳播中,匈牙利損失包括所有分類結果的對數似然損失和所有匹配對的box損失。總之,DETR為端到端目標檢測提供了一種新的范例。object query在與圖像特征交互期間逐漸學習實例表示。二分匹配允許直接的集合預測很容易適應一對一的標簽分配,從而消除了傳統的后處理。DETR在COCO基準上實現了具有競爭力的性能,但在小目標上存在收斂速度慢和性能差的問題。另一項開創性工作是Pix2seq[75],將通用目標檢測視為一項語言建模任務。給定一個圖像輸入,執行一個vanilla sequential Transformer來提取特征并自動回歸生成一系列目標描述(即類標簽和邊界框)。這種簡化但更復雜的圖像caption方法是在這樣的假設下得出的,即如果模型同時了解目標的位置和標簽,則可以教導其生成具有指定序列的描述[75]。與DETR相比,Pix2seq在小目標上獲得了更好的結果。如何將這兩種概念結合起來值得進一步考慮。稀疏注意力:在DETR中,query和特征圖之間的密集交互耗費了難以承受的資源,并減緩了DETR的收斂速度。因此,最近的努力旨在設計依賴于數據的稀疏注意力來解決這些問題。繼[186]之后,Zhu等人開發了Deformable DETR,以通過多尺度deformable attention顯著改善訓練收斂性和檢測性能[76]。與原始DETR相比,deformable attention模塊僅對一小部分關鍵點進行采樣,以進行全特征聚合。這種稀疏注意力可以很容易地擴展到多尺度特征融合,而無需FPN[187]的幫助,因此稱為多尺度可定義注意力(MSDA),如圖10所示。其他相關算法ACT[77]、PnP[78]、Sparse DETR[79]可以參考具體論文。

空間先驗:與由內容和幾何特征[182]、[188]直接生成的anchor或其他表示不同,object query通過隨機初始化隱式建模空間信息,這與邊界框弱相關。空間先驗應用的主流是具有經驗空間信息的一階段檢測器和具有幾何坐標初始化或感興趣區域(RoI)特征的兩階段檢測器。一階段相關算法有SMCA[80]、Conditional DETR[81]、Anchor DETR[82]、DAB-DETR[83]。二階段相關算法有Efficient DETR[84]、Dynamic DETR[85]。結構重新設計:除了關注交叉注意力的修改之外,一些工作重新設計了僅編碼器的結構,以直接避免解碼器的問題。TSP[86]繼承了集合預測[30]的思想,并去除了解碼器和object query以加速收斂。這種僅編碼器的DETR重用先前的表示[182]、[188],并生成一組固定大小的感興趣特征(FoI)[188]或proposal[182],這些proposal隨后被饋送到Transformer編碼器。此外,匹配蒸餾被應用于解決二分匹配的不穩定性,特別是在早期訓練階段。Fang等人[87]將DETR的編碼器-解碼器 neck和ViT的僅編碼器主干合并為僅編碼器檢測器,并開發了YOLOS,一種純序列到序列轉換器,以統一分類和檢測任務。它繼承了ViT的結構,并用固定大小的可學習檢測token替換了單個類token。這些目標token首先在分類任務上進行預訓練,然后在檢測基準上進行微調。二分匹配優化:在DETR[30]中,二分匹配策略迫使預測結果在訓練期間完成一對一的標簽分配。這樣的訓練策略簡化了檢測管道,并在無需NMS幫助的情況下直接構建端到端系統。為了深入了解端到端檢測器的功效,Sun等人致力于探索一對一預測的理論觀點[192]。基于多次消融和理論分析,他們得出結論,一對一匹配策略的分類成本是顯著避免重復預測的關鍵因素。即便如此,DETR仍面臨著由二分匹配引起的多重問題。Li等人[90]利用denoisingDETR(DN-DETR)來減輕二部分匹配的不穩定性。具體地說,一系列有輕微擾動的目標應該重建它們的真實坐標和類。去噪(或重建)部分的主要成分是防止匹配部分和噪聲部分之間信息泄漏的注意力掩碼,以及指示擾動的指定標簽嵌入。其他工作還有DINO[91]。預訓練:靈感來自預訓練的語言Transformer[3],[5],相關工作有UP-DETR[88]、FP-DETR[89]。

Transformer Backbone

前文已經回顧了許多基于Transformer的圖像分類主干[29]、[40]。這些主干可以很容易地并入各種框架(例如,Mask R-CNN[189]、RetinaNet[184]、DETR[30]等),以執行密集預測任務。例如,像PVT[41]、[65]這樣的分層結構將ViT構造為一個高分辨率到低分辨率的過程,以學習多尺度特征。局部增強結構將主干構建為局部到全局的組合,可以有效地提取短距離和長距離視覺相關性,并避免二次計算開銷,如Swin Transformer[35]、ViL[61]和Focal Transformer[62]。表III包括密集預測任務的這些模型的更詳細比較。除了通用Transformer主干,特征金字塔Transformer(FPT)[92]通過使用self-attention、自上而下的cross-attention和自底向上的cross channel attention,結合了空間和尺度的特性。繼[193]之后,HRFormer[93]向Transformer介紹了多分辨率的優點以及非重疊的局部self-attention。HRViT[94]重新設計了異質分支和十字形注意力模塊。

討論

論文在表II中總結了Transformer neck檢測器的五個部分,密集預測任務的Transformer backbone的更多細節參見表III。大多數neck提升集中在以下五個方面:

1)提出了稀疏注意力模型和評分網絡,以解決冗余特征交互問題。這些方法可以顯著降低計算成本并加速模型收斂;

2)將顯式空間先驗分解為所選特征初始化和由可學習參數提取的位置信息,將使檢測器能夠精確預測結果;

3)在Transformer解碼器中擴展了多尺度特征和逐層更新,用于小目標細化;

4)改進的二分匹配策略有利于避免冗余預測以及實現端到端目標檢測;

5)僅編碼器結構減少了整個Transformer堆棧層,但過度增加了FLOPs,而編碼器-解碼器結構是FLOPs和參數之間的良好權衡,但更深的解碼器層可能會導致長時間訓練過程和過度平滑的問題。

此外,有許多Transformer主干用于改進分類性能,但很少有針對密集預測任務的工作。未來,論文預計Transformer主干將與深度高分辨率網絡合作,以解決密集預測任務。

分割Transformer

Patch-Based 和 Query-Based Transformer是分割的兩種主要應用方式。后者可以進一步細分為Object Query 和 Mask Embedding兩類。

Patch-Based Transformer

由于感受野擴展策略[194],CNN需要多個解碼器堆棧來將高級特征映射到原始空間分辨率。相反,基于patch的Transformer由于其全局建模能力和分辨率不變性,可以很容易地與用于分割mask預測的簡單解碼器結合。Zheng等人擴展了用于語義分割任務的ViT[29],并通過使用解碼器的三種方式來實現逐像素分類,提出了SEgmentation TRansformer(SETR)[95]:naive上采樣(naive)、漸進上采樣(PUP)和多級特征聚合(MLA)。SETR展示了ViT用于分割任務的可行性,但它也帶來了不可接受的額外GPU開銷。TransUNet[96]是第一個用于醫學圖像分割的方法。形式上,它可以被視為帶有MLA解碼器的SETR的變體[95],或者是U-Net[195]和Transformer的混合模型。由于Transformer編碼器強大的全局建模能力,Segformer[97]設計了一個只有四個MLP層的輕量級解碼器。當使用多種損壞類型的圖像進行測試時,Segformer顯示出比CNN更好的性能和更強的魯棒性。

Query-Based Transformer

Query embedding是一組從圖像輸入中逐漸學習的臨時語義/實例表示。與patch嵌入不同,query可以更“公平”地集成來自特征的信息,并自然地與集合預測損失結合[30],用于去除后處理。現有的基于query的模型可以分為兩類。一種是由檢測和分割任務同時驅動的(稱為object queries)。另一個僅由分割任務(稱為mask embeddings)監督。Object Queries:基于object queries的方法有三種訓練方式(圖11)。如圖11(a)所示的Panoptic DETR[30]。圖11(b)所示的Cell-DETR[98]和VisTR[99],以及如圖11(c)所示的QueryInst[100]

Mask Embeddings:另一個框架使用query直接預測掩碼,論文將這種基于掩碼的學習查詢稱為mask embedding。與object queries不同,mask embedding僅由分割任務監督。如圖11(d)所示,兩個不相交的query集被并行用于不同的任務,box學習被視為進一步增強的輔助損失,相關算法有ISTR[101]、SOLQ[102]。對于語義和box-free實例分割,一系列基于query的Transformer直接預測掩碼,而不需要框分支的幫助(圖11(e)),相關算法如Max-DeepLab[31]、Segmenter[103]、Maskformer[104]等。

討論

論文根據三個不同的任務總結了上述Transformer。表IV(a)側重于ADE20K(170類)。可以表明,當在具有大量類的數據集上進行訓練時,ViT的分割性能顯著提高。表IV(b)側重于實例分割的COCO測試數據集。顯然,在分割和檢測任務中,帶有掩模嵌入的ViT超過了大多數主流模型。然而,APbox和APseg之間存在巨大的性能差距。通過級聯框架,QueryInst[100]在各種Transformer模型中實現了SOTA。將ViT與混合任務級聯結構相結合,值得進一步研究。表IV(c)側重于全景分割。Max-DeepLab[31]通常通過掩碼預測形式解決全景分割任務中的前景和背景問題,而Maskformer[104]成功地將這種格式用于語義分割,并將語義和實例分割任務統一為一個模型。基于它們在全景分割領域的表現,我們可以得出結論,ViT可以將多個分割任務統一到一個box-free框架中,并進行掩模預測。

3D視覺Transformer

隨著3D采集技術的快速發展,雙目/單目圖像和LiDAR(Light Detection and Ranging)點云成為3D識別的流行傳感數據。與RGB(D)數據不同,點云表示更關注距離、幾何圖形和形狀信息。值得注意的是,由于其稀疏性、無序性和不規則性的特點,這種幾何特征非常適合Transformer。隨著2D ViT的成功,開發了大量的3D分析方法。本節展示了3D ViT在表示學習、認知映射和特定處理之后的簡要回顧。

表示學習

與傳統的手工設計的網絡相比,ViT更適合于從點云學習語義表示,在點云中,這種不規則和排列不變的性質可以轉化為一系列具有位置信息的并行嵌入。鑒于此,Point Transformer[105]和PCT[106]首先證明了ViT對3D表示學習的有效性。前者將hierarchical Transformer[105]與下采樣策略[203]合并,并將其先前的vector attention block[25]擴展到3D點云。后者首先聚集相鄰點云,然后在全局off-set Transformer上處理這些相鄰嵌入,其中來自圖卷積網絡(GCN)的知識遷移被應用于噪聲緩解。值得注意的是,由于點云的固有坐標信息,位置編碼(ViT的重要操作)在兩種方法中都有所減少。PCT直接處理坐標,無需位置編碼,而Point Transformer添加了可學習的相對位置編碼以進一步增強。繼[105]、[106]之后,Lu等人利用local-global聚合模塊3DCTN[107]來實現局部增強和成本效率。給定多步長下采樣組,使用具有max-pooling操作的顯式圖卷積來聚合每個組內的局部信息。將得到的組嵌入級聯并饋送到改進的Transformer[105]、[106]中,用于全局聚合。Park等人提出了Fast Point Transformer[108],通過使用voxel-hashing鄰域搜索、體素橋接相對位置編碼和基于余弦相似性的局部關注來優化模型效率。為了進行密集預測,Pan等人提出了一種定制的基于點云的Transformer主干(Pointformer)[109],用于在每個層中分別參與局部和全局交互。與以往的局部-全局形式不同,采用局部關注后的坐標細化操作來更新質心點而不是曲面點。局部-全局交叉注意力模型融合了高分辨率特征,然后是全局注意力。Fan等人返回到Single-stride Sparse Transformer(SST)[110],而不是下采樣操作,以解決小目標檢測的問題。與Swin[35]類似,連續Transformer塊中的移位組被用于分別處理每組token,這進一步緩解了計算問題。在基于體素的方法中,Voxel Transformer(VoTr)[111]采用兩步voxel Transformer來有效地操作空和非空體素位置,包括通過local attention和dilated attention。VoxSeT[112]進一步將self-attention分解為兩個交叉關注層,一組潛在編碼將它們鏈接起來,以在隱藏空間中保存全局特征。一系列自監督Transformer也被擴展到3D空間,例如Point BERT[113]、Point MAE[114]和MaskPoint[115]。具體而言,Point BERT[113]和Point MAE[114]直接將先前的工作[70]、[71]轉移到點云,而MaskPoint[115]通過使用與DINO(2022)[91]類似的對比解碼器來改變生成訓練方案,以進行自訓練。基于大量實驗,論文得出結論,這種生成/對比自訓練方法使ViT能夠在圖像或點云中有效。

Cognition Mapping

鑒于豐富的表示特征,如何將實例/語義認知直接映射到目標輸出也引起了相當大的興趣。與2D圖像不同,3D場景中的目標是獨立的,可以由一系列離散的表面點直觀地表示。為了彌補這一差距,一些現有的方法將領域知識轉移到2D主流模型中。繼[30]之后,3DETR[116]通過最遠點采樣和傅里葉位置嵌入將端到端模塊擴展到3D目標檢測,以用于object queries初始化。Group Free 3D DETR[117]應用了比[116]更具體和更強的結構。詳細地說,當object queries時,它直接從提取的點云中選擇一組候選采樣點,并在解碼器中逐層迭代地更新它們。Sheng等人提出了一種典型的兩階段方法,該方法利用Channel-wise Transformer3D檢測器(CT3D)[118]同時聚合每個提案中的點云特征的proposal-aware嵌入和channel-wise上下文信息。對于單目傳感器,MonoDTR[119]和MonoDETR[120]在訓練過程中使用輔助深度監督來估計偽深度位置編碼(DPE)。DETR3D[121]引入了一種多目3D目標檢測范式,其中2D圖像和3D位置都通過攝像機變換矩陣和一組3D object queries相關聯。TransFusion[122]通過連續通過兩個Transformer解碼器層與object queries交互,進一步利用了LiDAR點和RGB圖像的優點。

Specific Processing

受傳感器分辨率和視角的限制,點云在真實場景中存在不完整、噪聲和稀疏性問題。為此,PoinTr[123]將原始點云表示為一組局部點云代理,并利用幾何感知編碼器-解碼器Transformer將中心點云代理向不完整點云方向遷移。SnowflakeNet[124]將點云補全的過程公式化為類似雪花的生長,它通過point-wise splitting deconvolution策略從父點云逐步生成子點云。相鄰層的skip-Transformer進一步細化父層和子層之間的空間上下文特征,以增強它們的連接區域。Choe等人將各種生成任務(例如降噪、補全和超分辨率)統一為點云重構問題,因此稱為PointRecon[125]。基于體素散列,它覆蓋了絕對尺度的局部幾何結構,并利用PointTransformerlike[105]結構將每個體素(query)與其相鄰體素(value-key)進行聚合,以便從離散體素到一組點云集進行細粒度轉換。此外,增強的位置編碼適用于體素局部attention方案,通過使用L1損失的負指數函數作為樸素位置編碼的權重來實現。值得注意的是,與masked生成自訓練相比,補全任務直接生成一組完整點云,而不需要不完整點云的顯式空間先驗。

多傳感器數據流Transformer

在現實世界中,多個傳感器總是互補使用,而不是單個傳感器。為此,最近的工作開始探索不同的融合方法,以有效地協同多傳感器數據流。與典型的CNN相比,Transformer自然適合于多流數據融合,因為它的非特定嵌入和動態交互注意機制。本節根據數據流源(同源流和異源流)詳細介紹了這些方法。

Homologous Stream

同源流是一組具有相似內在特征的多傳感器數據,如多視圖、多維和多模態視覺流數據。根據融合機制,它們可以分為兩類:交互融合和遷移融合。交互融合:CNN的經典融合模式采用channel級聯操作。然而,來自不同模態的相同位置可能是各向異性的,這不適合CNN的平移不變偏差。相反,Transformer的空間級聯操作使不同的模態能夠超越局部限制進行交互。對于局部交互,MVT[126]在空間上連接來自不同視圖的patch嵌入,并通過使用模式不可知的Transformer來加強它們的交互。為了減輕多模態特征的冗余信息,MVDeTr[127]將特征圖的每個視圖投影到地平面上,并將多尺度可變形注意力[76]擴展到多視圖設計。其他相關算法TransFuser[128]、COTR[129]可參考論文。對于全局交互,Wang等人[130]利用共享主干提取不同視圖的特征。代替COTR[129]中的逐像素/逐patch級聯,提取的逐視圖全局特征在空間上進行級聯,以在Transformer中進行視圖融合。考慮到不同相機視圖之間的角度和位置差異,TransformerFusion[132]首先將每個視圖特征轉換為具有其相機視圖的內部和外部的嵌入向量。這些嵌入然后被饋送到global Transformer中,該global Transformer的注意力權重用于幀選擇,以便有效地計算。為了在3D檢測中統一多傳感器數據,FUTR3D[131]將類DETR解碼器中的object queries投影到一組3D參考點中云。這些點云及其相關特征隨后從不同的模態中采樣并在空間上連接以更新object queries。遷移融合:與Transformer編碼器通過self-attention實現的交互式融合不同,另一種融合形式更像是通過交叉關注機制從源數據到目標數據的遷移學習。例如,Tulder等人[133]在中間主干特征中插入了兩個協作的交叉注意力Transformer,用于橋接未配準的多視圖醫學圖像。代替pixel-wise 注意力形式,進一步開發了token-pixel交叉注意力,以減輕繁重的計算。Long等人[134]提出了一種用于多視圖圖像深度估計的對極時空Transformer。給定包含一系列靜態多視點幀的單個視頻,首先將相鄰幀連接起來,然后將對極線扭曲到中心相機空間中。最終得到的幀volume作為源數據,通過交叉注意力與中心幀進行融合。對于空間對齊的數據流,DRT[135]首先通過使用卷積層顯式地建模不同數據流之間的關系圖。隨后將生成的map輸入到雙路徑交叉注意力中,以并行構建局部和全局關系,從而可以收集更多的區域信息用于青光眼診斷。

Heterologous Stream

ViT在異源數據融合方面也表現出色,尤其是在視覺語言表示學習方面。盡管不同的任務可能采用不同的訓練方案,例如監督/自監督學習或緊湊/大規模數據集,但論文僅根據其認知形式將其分為兩類:1)視覺語言-預訓練,包括視覺-語言預訓練(VLP)[204]和對比語言-圖像預訓練(CLIP)[146];2)Visual Grounding如Phrase Grounding(PG)、參考表達理解(REC)。更多比較見表五。視覺-語言預訓練:由于有限的標注數據,早期的VLP方法通常依賴于現成的目標檢測器[204]和文本編碼器[5]來提取數據特定的特征以進行聯合分布學習。給定圖像-文本對,在視覺基因組(VG)上預先訓練的目標檢測器[205]首先從圖像中提取一組以目標為中心的RoI特征。然后將用作視覺標記的RoI特征與用于預定義任務預訓練的文本嵌入合并。基本上,這些方法分為雙流和單流融合。雙流方法包括ViLBERT[137]、LXMERT[138]。單流方法包括VideoBERT[136]、VisualBERT[139]、VL-BERT[140]、UNITER[141]、Oscar[142]、Unified VLP[143]。然而,這些方法嚴重依賴于視覺提取器或其預定義的視覺詞匯表,導致了降低VLP表達能力上限的瓶頸。一些算法如VinVL[145]、ViLT[144]、UniT[149]、SimVLM[150]嘗試解決這個問題。除了傳統的帶有多任務監督的預訓練方案外,另一條最新的對比學習路線已經開發出來。相關算法有CLIP[146]、ALIGN[148]、Data2Vec[151]。Visual Grounding:與VLP相比,Visual Grounding具有更具體的目標信號監督,其目標是根據目標對象的相應描述來定位目標對象。在圖像空間中,Modulated DETR(MDETR)[152]將其先前的工作[30]擴展到phrase grounding預訓練,該訓練在一個描述中定位并將邊界框分配給每個instance phrase。其他相關算法Referring Transformer[155]、VGTR[154]、TransVG[153]、LanguageRefer[157]、TransRefer3D[158]、MVT 2022[159]、TubeDETR[160]可以參考具體論文。

討論和結論近期改進總結

對于分類,深度分層Transformer主干對于降低計算復雜度[41]和避免深層中的過平滑特征[37]、[42]、[66]、[67]是有效的。同時,早期卷積[39]足以捕獲低層特征,這可以顯著增強魯棒性并降低淺層的計算復雜性。此外,卷積投影[54]、[55]和局部注意力機制[35]、[44]都可以改善ViT的局部性。前者[56]、[57]也可能是替代位置編碼的新方法;

對于檢測,Transformer neck從編碼器-解碼器結構中受益,其計算量比僅編碼器Transformer 檢測器少[87]。因此,解碼器是必要的,但由于其收斂較慢,因此需要更多的空間先驗[76],[80]–[85]。此外,前景采樣的稀疏注意力[76]和評分網絡[78]、[79]有助于降低計算成本并加速ViT的收斂;

對于分割,編碼器-解碼器Transformer模型可以通過一組可學習的mask embedding[31]、[103]、[202]將三個分割子任務統一為mask預測問題。這種box-free方法在多個基準測試中實現了最新的SOTA性能[202]。此外,特定的混合任務與基于框的ViT[100]級聯,該模型在實例分割方面表現出了更高的性能;

對于3D視覺,具有評分網絡的局部分層Transformer可以有效地從點云數據中提取特征。全局建模能力使Transformer能夠輕松聚合曲面點,而不是復雜的局部設計。此外,ViT可以處理3D視覺識別中的多傳感器數據,如多視圖和多維數據;

視覺-語言預訓練的主流方法已經逐漸放棄了預訓練的檢測器[144],并專注于基于大規模噪聲數據集[148]的潛在空間中不同數據流之間的對齊[146]或相似性[151]。另一個問題是使下游視覺任務適應預訓練方案,以進行zero-shot遷移[146];

最近流行的多傳感器數據融合架構是單流方法,它在空間上連接不同的數據流并同時執行交互。基于單流模型,最近的許多工作致力于尋找一個潛在空間,使不同的數據流語義一致。

ViT的討論

盡管ViT模型有了很大的發展,但“基本”理解仍然不夠。因此,論文將重點審查一些關鍵問題,以獲得深入和全面的理解。

Transformer如何彌合語言和視覺之間的鴻溝

Transformer最初是為機器翻譯任務設計的[1],其中句子的每個單詞都被視為表示高級語義信息的基本單元。這些詞可以嵌入到低維向量空間中的表示中。對于視覺任務,圖像的每個像素都不能攜帶語義信息,這與傳統NLP任務中的特征嵌入不匹配。因此,將這種特征嵌入(即單詞嵌入)轉移到CV任務中的關鍵是構建圖像到向量的轉換并有效地保持圖像的特征。例如,ViT[29]在強松弛條件下將圖像轉換為具有多個低層信息的patch嵌入。

Transformer、Self-Attention與CNN的關系

從CNN的角度來看,其inductive bias主要表現為局部性、平移不變性、權重共享和稀疏連接。這種簡單的卷積內核可以在低級語義處理中高效地進行模板匹配,但由于過度的偏差,其上限低于Transformers。從self-attention機制的角度來看,當采用足夠數量的head時,它們理論上可以表示任何卷積層[28]。這種完全注意力操作可以結合局部和全局注意力,并根據特征關系動態生成注意力權重。盡管如此,它的實用性仍然不如SOTA CNN,因為精度更低,計算成本更高。從Transformer的角度來看,Dong等人證明,當在沒有short connection或FFN的深層上訓練self-attention層時,self-attention表現出對“token uniformity”的強烈感應偏差[167]。可以得出結論,Transformer由兩個關鍵組件組成:self-attention聚合token的關系,以及按位置的FFN從輸入中提取特征。盡管ViT具有強大的全局建模能力,CNN可以有效地處理低級特征[39]、[58],增強ViT的局部性[53]、[81],并通過填充[56]、[57]、[172]附加位置特征。

不同視覺任務的可學習嵌入

各種可學習的嵌入被設計用于進行不同的視覺任務。從目標任務的角度來看,這些嵌入可以分為class token、object query和mask embedding。從結構上看,這些ViT主要采用兩種不同的模式,編碼器和編碼器-解碼器。如圖15所示,每個結構由三個嵌入級別組成。在位置級別上,編碼器Transformer中可學習嵌入的應用被分解為initial token[29]、[87]和later token[42]、[103],而可學習位置編碼[30]、[81]、,[202]和可學習的解碼器輸入嵌入[76]被應用于編碼器-解碼器結構。在數量層面上,編碼器僅設計應用不同數量的token。例如,ViT[29]、[40]家族和YOLOS[87]將不同數量的token添加到初始層中,而CaiT[42]和Segmenter[103]利用這些token來表示不同任務中最后幾層的特征。在編碼器-解碼器結構中,解碼器的可學習位置編碼(object query[30]、[81]或mask embedding[202])被顯式地加入到解碼器輸入[30],[202]或隱式地加入到解碼器輸入[80],[81]。與恒定輸入不同,Deformable DETR[76]采用可學習嵌入作為輸入,并關注編碼器輸出。

在多頭注意力機制的啟發下,使用多個初始token的策略有望進一步提高分類性能。然而,DeiT[40]指出,這些額外的token將朝著相同的結果收斂,并且不會對ViT有利。從另一個角度來看,YOLOS[87]提供了一種范例,通過使用多個初始token來統一分類和檢測任務,但這種編碼器的設計只會導致更高的計算復雜度。根據CaiT[42]的觀察,較后的class token可以略微降低Transformer的FLOPs并提高性能(從79.9%提高到80.5%)。Segmenter[103]也展示了分割任務的策略效率。與具有多個后期token的僅編碼器Transformer不同,編碼器-解碼器結構減少了計算成本。它通過使用一小組object query(mask embedding)在檢測[30]和分割[202]領域標準化了ViT。通過組合后期token和object query(mask embedding),像Deformable DETR[76]這樣的結構,它將object query和可學習解碼器嵌入(相當于后期token)作為輸入,可以將不同任務的可學習嵌入統一到Transformer編碼器解碼器中。? ? ? ?

未來研究方向

ViT已經取得了重大進展,并取得了令人鼓舞的結果,在多個基準上接近甚至超過了SOTA CNN方法。然而,ViT的一些關鍵技術仍然不足以應對CV領域的復雜挑戰。基于上述分析,論文指出了未來研究的一些有前景的研究方向。集合預測:由于損失函數的相同梯度,多類token將一致收斂[40]。具有二分損失函數的集合預測策略已廣泛應用于ViT,用于許多密集預測任務[30],[202]。因此,自然要考慮分類任務的集合預測設計,例如,多類token Transformer通過集合預測預測混合patch中的圖像,這與LV-ViT中的數據增強策略類似[43]。此外,集合預測策略中的一對一標簽分配導致早期過程中的訓練不穩定,這可能會降低最終結果的準確性。使用其他標簽分配和損失改進集合預測可能有助于新的檢測框架。自監督學習:Transformer的自監督預訓練使NLP領域標準化,并在各種應用中取得巨大成功[2],[5]。由于自監督范式在CV領域的流行,卷積孿生網絡使用對比學習來實現自監督預訓練,這與NLP領域中使用的masked自動編碼器不同。最近,一些研究試圖設計自監督的ViT,以彌合視覺和語言之間的預訓練方法的差異。它們中的大多數繼承了NLP領域中的masked自動編碼器或CV領域中的對比學習方案。ViT沒有特定的監督方法,但它徹底改變了GPT-3等NLP任務。如前文所述,編碼器-解碼器結構可以通過聯合學習解碼器嵌入和位置編碼來統一視覺任務。因此,值得進一步研究用于自監督學習的編碼器-編碼器Transformer。

結論

自從ViT證明了其在CV任務中的有效性之后,ViT受到了相當大的關注,并削弱了CNN在CV領域的主導地位。本文全面回顧了100多個ViT模型,這些模型相繼應用于各種視覺任務(即分類、檢測和分割)和數據流(如圖像、點云、圖像文本對和其他多個數據流)。對于每個視覺任務和數據流,提出了一種特定的分類法來組織最近開發的ViT,并在各種主流基準上進一步評估其性能。通過對所有這些現有方法的綜合分析和系統比較,本文總結了顯著的性能改進,還討論了ViT的三個基本問題,并進一步提出了未來投資的幾個潛在研究方向。我們希望這篇綜述文章能幫助讀者在決定進行深入探索之前更好地理解各種視覺Transformer。

#transformer~x2

太火了都說到第8了~~ ?其實有點重復了 作為之前補充把

該怎么把預訓練Transformer范式用到強化學習里?DeepMind提出「算法蒸餾」:可探索的預訓練強化學習Transformer

sformer模型可以將prompt作為條件或上下文學習(in-context learning)適應不同的下游任務。

大型預訓練Transformer模型的泛化能力已經在多個領域得到驗證,如文本補全、語言理解、圖像生成等等。

從去年開始,已經有相關工作證明,通過將離線強化學習(offline RL)視為一個序列預測問題,那么模型就可以從離線數據中學習策略。

但目前的方法要么是從不包含學習的數據中學習策略(如通過蒸餾固定的專家策略),要么是從包含學習的數據(如智能體的重放緩沖區)中學習,但由于其context太小,以至于無法捕捉到策略提升。

DeepMind的研究人員通過觀察發現,原則上強化學習算法訓練中學習的順序性(sequential nature)可以將強化學習過程本身建模為一個「因果序列預測問題」。

具體來說,如果一個Transformer的上下文足夠長到可以包含由于學習更新而產生的策略改進,那它應該不僅能夠表示一個固定的策略,而且能夠通過關注之前episodes的狀態、行動和獎勵表示為一個策略提升算子(policy improvement operator)。

這也提供了一種技術上的可行性,即任何RL算法都可以通過模仿學習蒸餾成一個足夠強大的序列模型,并將其轉化為一個in-context RL算法。

基于此,DeepMind提出了算法蒸餾(Algorithm Distillation, AD) ,通過建立因果序列模型將強化學習算法提取到神經網絡中。

論文鏈接:https://arxiv.org/pdf/2210.14215.pdf

算法蒸餾將學習強化學習視為一個跨episode的序列預測問題,通過源RL算法生成一個學習歷史數據集,然后根據學習歷史作為上下文,通過自回歸預測行為來訓練因果Transformer。

與蒸餾后學習(post-learning)或專家序列的序列策略預測結構不同,AD能夠在不更新其網絡參數的情況下完全在上下文中改進其策略。

  • Transfomer收集自己的數據,并在新任務上最大化獎勵;
  • 無需prompting或微調;
  • 在權重凍結的情況下,Transformer可探索、利用和最大化上下文的返回(return)!諸如Gato類的專家蒸餾(Expert Distillation)方法無法探索,也無法最大化返回。

實驗結果證明了AD可以在稀疏獎勵、組合任務結構和基于像素觀察的各種環境中進行強化學習,并且AD學習的數據效率(data-efficient)比生成源數據的RL算法更高。

AD也是第一個通過對具有模仿損失(imitation loss)的離線數據進行序列建模來展示in-context強化學習的方法。

算法蒸餾

2021年,有研究人員首先發現Transformer可以通過模仿學習從離線RL數據中學習單任務策略,隨后又被擴展為可以在同域和跨域設置中提取多任務策略。

這些工作為提取通用的多任務策略提出了一個很有前景的范式:首先收集大量不同的環境互動數據集,然后通過序列建模從數據中提取一個策略。

把通過模仿學習從離線RL數據中學習策略的方法也稱之為離線策略蒸餾,或者簡稱為策略蒸餾(Policy Distillation, PD)。

盡管PD的思路非常簡單,并且十分易于擴展,但PD有一個重大的缺陷:生成的策略并沒有從與環境的額外互動中得到提升。

例如,MultiGame Decision Transformer(MGDT)學習了一個可以玩大量Atari游戲的返回條件策略,而Gato通過上下文推斷任務,學習了一個在不同環境中解決任務的策略,但這兩種方法都不能通過試錯來改進其策略。

MGDT通過微調模型的權重使變壓器適應新的任務,而Gato則需要專家的示范提示才能適應新的任務。

簡而言之,Policy Distillation方法學習政策而非強化學習算法。

研究人員假設Policy Distillation不能通過試錯來改進的原因是,它在沒有顯示學習進展的數據上進行訓練。

算法蒸餾(AD)通過優化一個RL算法的學習歷史上的因果序列預測損失來學習內涵式策略改進算子的方法。

AD包括兩個組成部分:

1、通過保存一個RL算法在許多單獨任務上的訓練歷史,生成一個大型的多任務數據集;

2、將Transformer使用前面的學習歷史作為其背景對行動進行因果建模。

由于策略在源RL算法的整個訓練過程中不斷改進,AD必須得學習如何改進算子,才能準確模擬訓練歷史中任何給定點的行動。

最重要的是,Transformer的上下文大小必須足夠大(即跨周期),以捕捉訓練數據的改進。

在實驗部分,為了探索AD在in-context RL能力上的優勢,研究人員把重點放在預訓練后不能通過zero-shot 泛化解決的環境上,即要求每個環境支持多種任務,且模型無法輕易地從觀察中推斷出任務的解決方案。同時episodes需要足夠短以便可以訓練跨episode的因果Transformer。

在四個環境Adversarial Bandit、Dark Room、Dark Key-to-Door、DMLab Watermaze的實驗結果中可以看到,通過模仿基于梯度的RL算法,使用具有足夠大上下文的因果Transformer,AD可以完全在上下文中強化學習新任務。

AD能夠進行in-context中的探索、時間上的信用分配和泛化,AD學習的算法比產生Transformer訓練的源數據的算法更有數據效率。

算法蒸餾的實驗表明,Transformer可以通過試錯自主改善模型,并且不用更新權重,無需提示、也無需微調。單個Transformer可以收集自己的數據,并在新任務上將獎勵最大化。

盡管目前已經有很多成功的模型展示了Transformer如何在上下文中學習,但Transformer還沒有被證明可以在上下文中強化學習。

為了適應新的任務,開發者要么需要手動指定一個提示,要么需要調整模型。

如果Transformer可以適應強化學習,做到開箱即用豈不美哉?

但Decision Transformers或者Gato只能從離線數據中學習策略,無法通過反復實驗自動改進。

使用算法蒸餾(AD)的預訓練方法生成的Transformer可以在上下文中強化學習。

首先訓練一個強化學習算法的多個副本來解決不同的任務和保存學習歷史。

一旦收集完學習歷史的數據集,就可以訓練一個Transformer來預測之前的學習歷史的行動。

由于策略在歷史上有所改進,因此準確地預測行動將會迫使Transformer對策略提升進行建模。

整個過程就是這么簡單,Transformer只是通過模仿動作來訓練,沒有像常見的強化學習模型所用的Q值,沒有長的操作-動作-獎勵序列,也沒有像 DTs 那樣的返回條件。

在上下文中,強化學習沒有額外開銷,然后通過觀察 AD 是否能最大化新任務的獎勵來評估模型。

Transformer探索、利用、并最大化返回在上下文時,它的權重是凍結的!

另一方面,專家蒸餾(最類似于Gato)不能探索,也不能最大化回報。

AD 可以提取任何 RL 算法,研究人員嘗試了 UCB、DQNA2C,一個有趣的發現是,在上下文 RL 算法學習中,AD更有數據效率。

用戶還可以輸入prompt和次優的demo,模型會自動進行策略提升,直到獲得最優解!

而專家蒸餾ED只能維持次優的demo表現。

只有當Transformer的上下文足夠長,跨越多個episode時,上下文RL才會出現。

AD需要一個足夠長的歷史,以進行有效的模型改進和identify任務。

通過實驗,研究人員得出以下結論:

  • Transformer可以在上下文中進行 RL
  • 帶 AD 的上下文 RL 算法比基于梯度的源 RL 算法更有效
  • AD提升了次優策略
  • in-context強化學習產生于長上下文的模仿學習

#transformer~x3

太強了都連載14了~~ 這次是無殘差連接或歸一化層,也能成功訓練深度

盡管取得了很多顯著的成就,但訓練深度神經網絡(DNN)的實踐進展在很大程度上獨立于理論依據。大多數成功的現代 DNN 依賴殘差連接和歸一化層的特定排列,但如何在新架構中使用這些組件的一般原則仍然未知,并且它們在現有架構中的作用也依然未能完全搞清楚。

殘差架構是最流行和成功的,最初是在卷積神經網絡(CNN)的背景下開發的,后來自注意力網絡中產生了無處不在的 transformer 架構。殘差架構之所以取得成功,一種原因是與普通 DNN 相比具有更好的信號傳播能力,其中信號傳播指的是幾何信息通過 DNN 層的傳輸,并由內核函數表示。

最近,使用信號傳播原則來訓練更深度的 DNN 并且殘差架構中沒有殘差連接和 / 或歸一化層的參與,成為了社區感興趣的領域。原因有兩個:首先驗證了殘差架構有效性的信號傳播假設,從而闡明對 DNN 可解釋性的理解;其次這可能會實現超越殘差范式的 DNN 可訓練性的一般原則和方法。

對于 CNN,Xiao et al. (2018)的工作表明,通過更好初始化提升的信號傳播能夠高效地訓練普通深度網絡,盡管與殘差網絡比速度顯著降低。Martens et al. (2021) 的工作提出了 Deep Kernel Shaping (DKS),使用激活函數轉換來控制信號傳播,使用 K-FAC 等強二階優化器在 ImageNet 上實現了普通網絡和殘差網絡的訓練速度相等。Zhang et al. (2022) 的工作將 DKS 擴展到了更大類的激活函數,在泛化方面也實現了接近相等。

信號傳播中需要分析的關鍵量是 DNN 的初始化時間內核,或者更準確地說,是無限寬度限制下的近似內核。對于多層感知機(MLP)以及使用 Delta 初始化的 CNN,該內核可以編寫為僅包含 2D 函數的簡單層遞歸,以便于進行直接分析。跨層 transformer 的內核演化更加復雜,因此 DKS 等現有方法不適用 transformer 或實際上任何包含自注意力層的架構。

在 MLP 中,信號傳播是通過查看(一維)內核的行為來判斷的,而 transformer 中的信號傳播可以通過查看(高維)內核矩陣在網絡層中的演化來判斷。

該研究必須避免一種情況:對角線元素隨深度增加快速增長或收縮,這與不受控制的激活范數有關,可能導致飽和損失或數值問題。避免秩崩潰(rank collapse)對于深度 transformer 的可訓練性是必要的,而是否可以訓練深度無殘差 transformer 仍是一個懸而未決的問題。

ICLR 2023 盲審階段的這篇論文解決了這個問題,首次證明了無需殘差連接或歸一化層時也可能成功訓練深度 transformer。為此,他們研究了深度無殘差 transformer 中的信號傳播和秩崩潰問題,并推導出三種方法來阻止它們。具體而言,方法中使用了以下組合:參數初始化、偏置矩陣和位置相關的重縮放,并強調了 transformer 中信號傳播特有的幾種復雜性,包括與位置編碼和因果掩蔽的交互。研究者實證證明了他們的方法可以生成可訓練的深度無殘差 transformer。

在實驗部分,在 WikiText-103 和 C4 數據集上,研究者展示了使用他們主要的方法——指數信號保持注意力(Exponential Signal Preserving Attention, E-SPA),可以通過延長大約五倍的訓練時間使得標準 transformer 與文中無殘差 transformer 的訓練損失相當。此外通過將這一方法與殘差連接結合,研究者還表明無歸一化層的 transformer 能夠實現與標準 transformer 相當的訓練速度。

論文地址:https://openreview.net/pdf?id=NPrsUQgMjKK

對于這篇論文,Google AI 首席工程師 Rohan Anil 認為是 Transformer 架構向前邁出的一大步,還是一個基礎性的改進。

構造無捷徑可訓練的深層 Transformer

迄今為止,糾正 Transformer 秩崩潰(rank collapse)的唯一策略依賴于殘差連接,該方式跳過了自注意力層固有的可訓練性問題。與此相反,該研究直接解決這個問題。首先通過注意力層更好地理解信號傳播,然后根據見解(insights)進行修改,以在深度 transformer 中實現對忠實信號的傳輸,無論是否使用殘差連接,都可以對信號進行訓練。

具體而言,首先,該研究對僅存在注意力的深度 vanilla transformer 進行了一下簡單設置,之后他們假設該 transformer 具有單一頭(h = 1)設置或具有多頭設置,其中注意力矩陣 A 在不同頭之間不會變化。如果塊 l≤L 初始化時有注意力矩陣 A_l,則最終塊的表示形式為 X_L:

在接下來的 3.1 和 3.2 節中,該研究專注于尋找滿足上述需求的注意力矩陣,他們提出了 3 種方法 E-SPA、U-SPA 和 Value-Skipinit,每種方法都用來控制 transformer 的注意力矩陣,即使在很深的深度也能實現忠實的信號傳播。此外,3.3 節演示了如何修改 softmax 注意力以實現這些注意力矩陣。

下圖中,該研究對提出的兩個 SPA 方案進行了驗證,U-SPA 和 E-SPA,結果顯示即使在網絡較深時也能成功地避免僅注意力 vanilla transformers 中的秩崩潰現象。

實驗

WikiText-103 基線:首先,該研究驗證了沒有殘差連接的標準深度 transformer 是不可訓練的,即使它們有歸一化層 (LN) 和 transformed 激活,但本文的方法可以解決這個問題。如圖 2 所示,可以清楚地看到,從標準 transformer 中移除殘差連接使其不可訓練,訓練損失穩定在 7.5 左右。正如圖 1 所示,標準 transformer 遭受了秩崩潰。

?另一方面,該研究提出的 E-SPA 方法優于 U-SPA 和 Value-Skipinit。然而,與本文無殘差方法相比,帶有殘差和 LN 的默認 transformer 仍然保持訓練速度優勢。在表 1 中,該研究使用提出的方法評估了 MLP 塊中不同激活函數的影響,以及 LN 在無殘差 transformer 的使用。可以看到在深度為 36 處,本文方法針對一系列激活實現了良好的訓練性能:DKS-transformed GeLU、TAT-transformed Leaky ReLU 以及 untransformed GeLU ,但不是 untransformed Sigmoid。通過實驗還看到,層歸一化對于訓練速度而言相對不重要,甚至在使用 SPA 時對 transformed activation 的激活有害,因為 SPA 已經具有控制激活規范的內置機制。?

在圖 3 中,我們看到一種不需要更多迭代就能匹配默認 transformer 訓練損失的方法是使用歸一化殘差連接。

表 2 顯示帶有歸一化殘差和 LN 的 E-SPA 優于默認的 PreLN transformer。?

下圖 4(a)表明 E-SPA 再次優于其他方法;4(b)表明訓練損失差距可以通過簡單地增加訓練時間來消除。?

#transformer~x4

最近Transformer文章太多了 索性一起發了得~~ ?以后關于這個的都不單發了

如何提高ViT的效率?可以是讓模型更容易訓練,減少訓練時間,也可以減少模型部署在硬件上的功耗等等。本文主要講inference time的效率問題,簡單說就是如何讓模型更快,同時性能不掉太多甚至反升。

如何提高ViT的效率?可以是讓模型更容易訓練,減少訓練時間,也可以減少模型部署在硬件上的功耗等等。本文主要講inference time的效率問題,簡單說就是如何讓模型更快,同時性能不掉太多甚至反升。

背景

2021開年后,Transformer在CV任務中大放光彩,Google的初版Vision Transformer(ViT)雖然方法簡單,但通過大量的實驗證明了Transformer在計算機視覺(CV)任務上,特別是image classification上的可能性。論文展示,ViT經過large-scale pretrain之后在ImageNet上可以達到和CNN媲美的性能。

然而,CV的任務可不止image classification,給一個圖片預測一個label就結束了。對于大量dense prediction的任務而言, 比如object detection和segmentation,Transformer都有其局限性,而其中最關鍵的有兩點,

缺少金字塔特征(Pyramid Feature Map)。?層級特征對物體的檢測很重要,特別是小物體,因為feature map的scale如果比較小的話,小物體相當于直接被忽視了。常見的CNN,如ResNet將網絡劃分四個stage,每個stage處理一種scale的feature map, 如1/4,1/8, 1/16,1/32。這樣出來的層級特征可以送入FPN進行處理,然后作為輸入給detection或者segmentation的head。而ViT只處理1/16這個scale下的feature map,直觀上來看是對dense prediction任務不利的。

Multi-head Self-attention(MSA)計算開銷問題。?MSA是一個quadtic complexity的模塊,小圖還好,但是遇到分辨率大的時候,無論是顯存占用還是計算速度都會大打折扣。然而像detection和segmentation這種任務,圖片一般都比較大,如512x512。按照ViT的patch embedding劃分,圖片會分成 (512/16)x (512/16) = 1024。此時ViT-Base的單層MSA會消耗4G FLOPs。然而整個ResNet-50也才消耗4G FLOPs. 因此MSA的計算開銷限制了ViT在高分辨率圖像上的效率。

對于第一個問題,一個自然的想法就是給ViT引入pyramid feature map, 這也是ICCV 2021積極涌現的idea,如Swin, PVT。然而,引入結構上的hierarchy造成了前期feature map的scale比較大,此時MSA的計算開銷上漲。這使得efficient attention在ViT上成為了必需品,正如Swin用到的local window attention和PVT的spatial reduction attention,當然后面有更多的architecture,更多的attention,在此就不一一舉例了。

自此,ViT適配下游任務已經基本沒有了大的障礙。大致結構上和CNN保持一致,如劃分stage,逐漸對feature map做downsampling。得益于attention的結構, ViT在各個task上性能都保證的不錯。那接下來的主要問題就是對ViT在CV任務中進行優化。

什么最影響ViT的速度?

影響一個模型速度的東西無非是兩個大方面,一是結構,二是處理的數據規模,剩下基本是工程上的優化。從個人觀點來看,對于ViT來說,影響結構效率的有兩個,

Efficient General Architecture.?整體結構上的設計需要變得有效并且scalable

Efficient Multi-head Self-attention.?注意力機制必須足夠efficient

對于處理的數據規模問題,這個CNN也有,但有一個明顯區別于CNN的是,ViT對input是permutation-invariant的,只要加入了positional encoding就可以無視2D spatial order。所以針對ViT而言,減少input tokens是可以做推理加速的,如本人在ICCV 2021上的工作HVT: Scalable Vision Transformers with Hierarchical Pooling(https://arxiv.org/abs/2103.10619)。

結構上怎么設計最合理?- LITv1

HVT之后,我們曾經的一個想法是進一步對token做一個dynamic的選取,因為直覺上來講dynamic要比unifrom的pooling要好,了解這一領域的同學可能有點耳熟,沒錯,這個思路就是DynamicViT(https://arxiv.org/abs/2106.02034)。

然而,實驗過程中的一個發現,使得我們展現給大家的是LIT, Less is More: Pay Less Attention in Vision Transformers(https://arxiv.org/abs/2105.14217) (AAAI 2022)。

和DynamicViT利用pretrained weights和plain ViT不一樣,我們直接從hierarchical Vision Transformer入手并且train from scratch,如PVT,用幾層FC對前兩個stage中每個block的input tokens做一個dynamic的選取,使得前期MSA只需要處理1/4, 1/8 scale下選取的部分token。這個思路聽起來感覺沒什么問題,可視化效果也確實不錯,如下面是去年基于PVT-S做sparse選取token做的一個可視化:

雖然但是,當我們對比random sampling的baseline時,發現性能差距并不大,一番分析之后,我們直接訓練了一個完整的基于原始MSA的PVT-Small,通過可視化attention head, 我們發現前期的head只能關注于很小的local區域,尤其是第一個stage的MSA,attention weight基本都在關注自己,我們進一步在論文給出了理論上的解釋。

基于這個發現,我們做了一個在當時來看(2021.05)比較大膽的決定,直接拿掉前兩個stage的所有MSA layer,這樣前期的Transformer block中只剩下了FFN, 而后期的兩個stage直接采用最原始的MSA。這使得我們模型的整體結構看起來非常簡單,如下面所示。?

我們把這種設計原則在Swin Transformer和PVT上做了驗證,結果顯示這種方案不僅不降性能,還因為避開了前期MSA的計算開銷,減小了理論復雜度,大幅度加快了推理速度。

Model

Params (M)

FLOPs (G)

Throughputs (imgs/s)

ImageNet@Top-1

PVT-S

25

3.8

1,058

79.8

PVT-S w/ remove early MSAs

19

3.6

1,388

80.4

Swin-Ti

28

4.5

960

81.3

Swin-Ti w/ remove early MSAs

27

4.1

1,444

81.3

另外我們在LIT中提出了一個Deformable Token Merging module (DTM),使得feature map在下采樣時可以動態的根據前景信息對token做選取。經過可視化發現學習到的offset十分精準地捕捉到了前景物體信息。相關可視化代碼已公開在https://github.com/ziplab/LIT。

上面每張圖片中,綠框代表最后一個scale下(1/32)的某個位置的token,紅色點表示DTM在downsample時最終選取的1/4 scale的token

階段總結:?LIT在結構上主要陳述了一個事情,backbone前期采用MSA的效益并不高。即使是擅長global attention的MSA也依然重點關注local區域,何況前面的feature map比較大,MSA處理高分辨圖像的開銷很大,即使采用efficient attention也難以避開這部分計算。

所以我們看到后來的Uniformer, MobileViT,EfficientFormer都是這種前面local后面global的結構。想要快,前面還是得盡量避開MSA。

Architecture和Attention一起優化 -?LITv2

在前期的工作中,我們定下了ViT的Architecture設計原則,但第一版LIT有兩個問題影響實際推理速度,

RPE雖然能漲點,但對于LIT來說,由于后面需要動態根據input大小做插值,所以對速度影響很大。

后兩個stage的原始MSA針對高分圖像還是會有很大的計算開銷。

基于此,我們提出了LITv2:Fast Vision Transformers with HiLo Attention(https://arxiv.org/abs/2205.13213) (NeurIPS 2022), 主要對LIT做了兩點改進,

去掉了relative positional encoding (RPE), FFN中加入depthwise convolution來引入conditional positional embedding。通過引入depthwise conv不僅能引入positional encoding, 還能同時增大網絡前期的receptive field。(因為LIT前面兩個stage只有FFN)

換上了全新的attention方法,HiLo。

Attention還能更快

直接影響ViT在高分辨率圖像上的效率的還是attention。從21年到現在,這一領域已經針對ViT提出了不少attention的變種,如SRA(https://arxiv.org/abs/2102.12122)(ICCV-21),local window(https://arxiv.org/abs/2103.14030)(ICCV-21), focal attention(https://arxiv.org/abs/2107.00641)(NeurIPS-21), QuadTree(https://arxiv.org/abs/2201.02767) (ICLR-22)。和MSA相比,這些方法都能保證更優的理論復雜度。但是我們注意到FLOPs只能反映理論復雜度,而真正想在CV任務中beat過純CNN的話,除了性能,實測速度也十分關鍵,因為理論復雜度并不能反應GPU和CPU上的實際速度。影響實測throughput/latency的還有memory access cost和其他難以被統計進FLOPs的因素,如for-loop。

以實測速度為核心,我們在LITv2中提出了HiLo。HiLo的設計理念很簡單: 在信號處理中,高頻關注local detail, 因此就用部分head做local window attention去捕獲,而低頻關注global structure,對local detail并不太在乎,所以另一部分head只需處理average pool的低頻信號,這樣高低頻同時捕捉,實現單層MSA同時抓取local和global信息。相對應的branch,我將它命名為Hi-Fi和Lo-Fi,如下圖所示。

為了保證實際速度,HiLo避開了一些不能算到FLOPs但損害速度的運算,如overlapping window和interpolation。基于此,HiLo在實測速度,memory占用,以及性能上都超越了SOTA方法。

在CPU和GPU上,單層HiLo的推理速度非常快?

上圖的測試結果可以參考我的vit-attention-benchmark(https://github.com/HubHop/vit-attention-benchmark)倉庫。 ?????

又快,又好,又容易訓練的LITv2

LITv2共推出了三個變種,small, medium, base, 為了公平對比,三個模型的寬度和深度和Swin Transformer一樣,超參seed一點沒調。LITv2整體在ImageNet-1K上效果占優,同時降低了訓練顯存要求,推理速度更快。

由于資源實在有限,對比Swin-Large和ImageNet-22k上的setting確實沒法跑。。。。

另外我們在多個GPU平臺上測試了推理速度(來自reviewer的意見)。對比ResNet-50和其他11個最近的ViT模型,相似參數量下,LITv2-S在速度和理論復雜度上實現了全面超越,同時ImageNet的Top-1 accuracy在第一梯隊。

上面關于LITv2的Speed測試和運行示例都已公開在:https://github.com/ziplab/LITv2,歡迎大家嘗試。

未來還能做什么

Vision Transformer的故事還在繼續,今年NeurIPS投稿也能看到大家陸續也在關注實測速度了,如TRT ViT,EfficientFormer, 但實際上ViT的工業落地相比CNN可能還是會有障礙。如量化上,ViT還是在低bit上還有很大提升空間。除此之外,我們組(https://ziplab.github.io/)也在探索Transformer的其他efficiency問題,比如

ViT的Training efficiency還有很大的空間。?ViT普遍難訓練,需要的顯存大,訓練時間長。特別是backbone的公認setting是1024的batch size + 8 GPUs,使得很多小組連ViT跑都跑不起來(8卡 32GB V100不是所有人都有的),針對這一問題我們提出了一個針對Transformer的一個memory-efficient的訓練框架: Mesa: A Memory-saving Training Framework for Transformers(https:arxiv.org/abs/2111.11124). 和普通訓練相比,Mesa可以做到顯存節省一半,同時與checkpointing和gradient accumulation等技術方案不沖突。

Transformer的能源消耗也是一個問題,特別是當下很多大組在跑以Transformer為backbone的大模型,訓練時所造成的電力損耗,碳排放對Green AI這一長遠目標不利。針對Energy efficiency,我們組在NeurIPS 2022最新的工作 EcoFormer: Energy-Saving Attention with Linear Complexity(https://arxiv.org/abs/2209.09004) 提出了一個Transformer二值化的全新方案,全新設計的EcoFormer是一個general的efficient attention, 性能和功耗上都優于一眾線性復雜度的Linformer, Performer等,同時在45nm CMOS microcontroller上能耗更低,速度更快。

至于CNN和Transformer哪個好的問題,這個答案其實不必再過多討論了,因為兩者互補。通過合理地配置CNN和MSA在Backbone中的位置,可以讓網絡得到雙倍的快樂。更不用說Convolution和MSA兩者之間本身存在一種聯系,比如我們組的另一篇工作:Pruning Self-attentions into Convolutional Layers in Single Path(https://arxiv.org/abs/2111.11802), 巧妙地通過參數共享將計算復雜度較高的attention layer剪成更為efficient的convolutional layer,工程細節可以參考:https://github.com/ziplab/SPViT。

個人主頁:Zizheng Pan:https://link.zhihu.com/?target=https%3A//zizhengpan.github.io/

下面在說一下torch創始人的看法

2017 年 Transformer 首次亮相,便迅速在 AI 領域擴散開來,CV、NLP 等任務都有其身影,越來越多的研究人員投入其中。

要說 Transformer 有多厲害,比如 OpenAI 重磅推出的 GPT-3,就是基于 Transformer 實現的。至于傳播速度方面,短短 5 年,Transformer 便在 TensorFlow 、PyTorch 等主流深度學習框架支持的 AI 程序中占據一席之地。

可別小看這 5 年,假如我們把機器學習比作一個世界,毫不夸張地說,它們的 5 年相當于我們的半個世紀。

不過與高調宣傳 Transformer 的學者不同,這次 PyTorch 創始人、Meta 杰出工程師 Soumith Chintala 卻唱起了反調,并警告說,Transformer 如此流行,可能是一把雙刃劍,Transformer太火很不好,AI易撞墻。

他認為,到今天為止, Transformer 已經 5 年了,這期間還沒有可替代的研究出現。他表示,對占主導地位的 AI 方法(此處指 Transformer)的強烈認可,可能會產生意想不到的后果,越來越多的 Transformer 專用硬件可能會使新策略更難以流行。?

?看吧一個阿三大哥... 他們還是挺厲害的 其實

至于 Soumith Chintala 為何會有上述結論,他首先從硬件進行舉例。

專用 AI 硬件不斷出現,其他技術將很難出頭

Transformer 自從在論文《 Attention Is All You Need 》中被首次提出,之后便在很多地方都能看到它的身影。

相應地,為 AI 定制專門的硬件開始流行起來。在 GPU 方面,英偉達一直占據重要地位,他們還發布了一個名為 Hopper 的架構,其名稱來自于計算機科學先驅 Grace Hopper,該架構專門用于 Transformer。

英偉達甚至還基于 Transformer,專門優化了 H100 加速卡的設計,提出了 Transformer Engine,它集合了新的 Tensor Core、FP8 和 FP16 精度計算,以及 Transformer 神經網絡動態處理能力,可以將此類機器學習模型的訓練時間從幾周縮短到幾天。

Transformer Engine 使用每層統計分析來確定模型每一層的最佳精度(FP16 或 FP8),在保持模型準確率的同時實現最佳性能。

英偉達首席執行官黃仁勛在最近的財報電話會議上表示,Hopper 將是其戰略的重要組成部分(不過,可以肯定的是,英偉達是一家規模龐大的公司,其產品遠不止 Hopper)。黃仁勛還表示:預計 Hopper 將成為未來增長的下一個跳板。他還表示 Transformer 這個新模型的重要性不能被低估,也不能被夸大。

不過,英偉達一方面推出了專為 Transformer 設計的產品,同時也提供了一系列適合多種不同型號的產品,而且可能已經為新技術的出現做好了準備。盡管如此,硬件專業化仍存在鎖定現代用例的風險,而不是啟用新興用例。

Chintala 對此表示,如果像英偉達這樣的供應商將硬件定制得更適用于當前范式,那么其他想法將更難出頭。

不止硬件,更多定制和特定于領域的技術不斷出現,如谷歌的張量處理單元、Cerebras Wafer Scale 引擎等都被提出來,這進一步限制了其他技術的發展。

Chintala 還提到,最近一段時間,AI 圈一直流行著這樣一種說法「PyTorch 在受歡迎程度上超越谷歌的 TensorFlow 」,對于這一結論,Chintala 是拒絕的。

Chintala 表示,PyTorch 不是為了搶走 TensorFlow 的「午餐」而誕生的,它們有各自的優點,這兩種框架各自擅長不同的任務。在研究界,PyTorch 有很好的市場份額,但在其他領域,就很難說了。

不過,谷歌也意識到了 PyTorch 的威脅,他們悄悄地開發一個機器學習框架,JAX(曾是「Just After eXecution」的首字母縮寫,但官方說法中不再代表任何東西),許多人將其視為 TensorFlow 的繼承者。

曾一度有傳言說谷歌大腦和 DeepMind 在很大程度上放棄了 TensorFlow,轉而使用 JAX。谷歌很快出來打假,表示「我們繼續開發 TensorFlow ,并將其作為一流的應用 ML 平臺,與 JAX 并肩推動 ML 研究發展。」

至于 JAX,其擅長將復雜的機器學習任務分散到多個硬件上,極大地簡化了現有工具,使其更容易管理日益龐大的機器學習問題。

Chintala 表示:「我們正在向 JAX 學習,我們也在 PyTorch 中添加了這些內容。顯然,JAX 在某些方面做得更好。Pytorch 確實擅長很多事情,這就是它成為主流的原因,人們用它可以做很多事情。但作為主流框架并不意味著它可以覆蓋所有內容。」

-----?

上面提到了.DeepMind 這里仔細說瞎

強化學習發現矩陣乘法算法,DeepMind再登Nature封面推出AlphaTensor

DeepMind 的 Alpha 系列 AI 智能體家族又多了一個成員——AlphaTensor,這次是用來發現算法。

數千年來,算法一直在幫助數學家們進行基本運算。早在很久之前,古埃及人就發明了一種不需要乘法表就能將兩個數字相乘的算法。希臘數學家歐幾里得描述了一種計算最大公約數的算法,這種算法至今仍在使用。在伊斯蘭的黃金時代,波斯數學家 Muhammad ibn Musa al-Khwarizmi 設計了一種求解線性方程和二次方程的新算法,這些算法都對后來的研究產生了深遠的影響。

事實上,算法一詞的出現,有這樣一種說法:波斯數學家 Muhammad ibn Musa al-Khwarizmi 名字中的 al-Khwarizmi 一詞翻譯為拉丁語為 Algoritmi 的意思,從而引出了算法一詞。不過,雖然今天我們對算法很熟悉,可以從課堂中學習、在科研領域也經常遇到,似乎整個社會都在使用算法,然而發現新算法的過程是非常困難的。

現在,DeepMind 用 AI 來發現新算法。

在最新一期 Nature 封面論文《Discovering faster matrix multiplication algorithms with reinforcement learning》中,DeepMind 提出了 AlphaTensor,并表示它是第一個可用于為矩陣乘法等基本任務發現新穎、高效且可證明正確的算法的人工智能系統。簡單來說,使用 AlphaTensor 能夠發現新算法。這項研究揭示了 50 年來在數學領域一個懸而未決的問題,即找到兩個矩陣相乘最快方法。

論文地址 :https://www.nature.com/articles/s41586-022-05172-4

GitHub 地址:https://github.com/deepmind/alphatensor

AlphaTensor 建立在 AlphaZero 的基礎上,而 AlphaZero 是一種在國際象棋、圍棋和將棋等棋盤游戲中可以打敗人類的智能體。這項工作展示了 AlphaZero 從用于游戲到首次用于解決未解決的數學問題的一次轉變。

矩陣乘法

矩陣乘法是代數中最簡單的運算之一,通常在高中數學課上教授。但在課堂之外,這種不起眼的數學運算在當代數字世界中產生了巨大的影響,在現代計算中無處不在。

兩個 3x3 矩陣相乘的例子。

你可能沒注意到,我們生活中處處隱藏著矩陣相乘,如智能手機中的圖像處理、識別語音命令、為電腦游戲生成圖形等都有它在背后進行運算。遍布世界各地的公司都愿意花費大量的時間和金錢開發計算硬件以有效地解決矩陣相乘。因此,即使是對矩陣乘法效率的微小改進也會產生廣泛的影響。

幾個世紀以來,數學家認為標準矩陣乘法算法是效率最高的算法。但在 1969 年,德國數學家 Volken Strassen 通過證明確實存在更好的算法,這一研究震驚了整個數學界。

標準算法與 Strassen 算法對比,后者少進行了一次乘法運算,為 7 次,而前者需要 8 次,整體效率大幅提高。

通過研究非常小的矩陣(大小為 2x2),Strassen 發現了一種巧妙的方法來組合矩陣的項以產生更快的算法。之后數十年,研究者都在研究更大的矩陣,甚至找到 3x3 矩陣相乘的高效方法,都還沒有解決。

DeepMind 的最新研究探討了現代 AI 技術如何推動新矩陣乘法算法的自動發現。基于人類直覺(human intuition)的進步,對于更大的矩陣來說,AlphaTensor 發現的算法比許多 SOTA 方法更有效。該研究表明 AI 設計的算法優于人類設計的算法,這是算法發現領域向前邁出的重要一步。

算法發現自動化的過程和進展

首先將發現矩陣乘法高效算法的問題轉換為單人游戲。其中,board 是一個三維度張量(數字數組),用于捕捉當前算法的正確程度。通過一組與算法指令相對應的所允許的移動,玩家嘗試修改張量并將其條目歸零。

當玩家設法這樣做時,將為任何一對矩陣生成可證明是正確的矩陣乘法算法,并且其效率由將張量清零所采取的步驟數來衡量。

這個游戲非常具有挑戰性,要考慮的可能算法的數量遠遠大于宇宙中原子的數量,即使對于矩陣乘法這樣小的情況也是如此。與幾十年來一直是人工智能挑戰的圍棋游戲相比,該游戲每一步可能的移動數量要多 30 個數量級(DeepMind 考慮的一種設置是 10^33 以上。)

為了解決這個與傳統游戲明顯不同的領域所面臨的挑戰,DeepMind 開發了多個關鍵組件,包括一個結合特定問題歸納偏置的全新神經網絡架構、一個生成有用合成數據的程序以及一種利用問題對稱性的方法。

接著,DeepMind 訓練了一個利用強化學習的智能體 AlphaTensor 來玩這個游戲,該智能體在開始時沒有任何現有矩陣乘法算法的知識。通過學習,AlphaTensor 隨時間逐漸地改進,重新發現了歷史上的快速矩陣算法(如 Strassen 算法),并且發現算法的速度比以往已知的要快。

AlphaTensor 玩的單人游戲,目標是找到正確的矩陣乘法算法。游戲狀態是一個由數字組成的立方數組(灰色表示 0,藍色表示 1,綠色表示 - 1),它代表了要完成的剩余工作。

舉例而言,如果學校里教的傳統算法可以使用 100 次乘法完成 4x5 與 5x5 矩陣相乘,通過人類的聰明才智可以將這一數字降至 80 次。與之相比,AlphaTensor 發現的算法只需使用 76 次乘法即可完成相同的運算,如下圖所示。

除了上述例子之外,AlphaTensor 發現的算法還首次在一個有限域中改進了 Strassen 的二階算法。這些用于小矩陣相乘的算法可以當做原語來乘以任意大小的更大矩陣。

AlphaTensor 還發現了具有 SOTA 復雜性的多樣化算法集,其中每種大小的矩陣乘法算法多達數千,表明矩陣乘法算法的空間比以前想象的要豐富。

在這個豐富空間中的算法具有不同的數學和實用屬性。利用這種多樣性,DeepMind 對 AlphaTensor 進行了調整,以專門發現在給定硬件(如 Nvidia V100 GPU、Google TPU v2)上運行速度快的算法。這些算法在相同硬件上進行大矩陣相乘的速度比常用算法快了 10-20%,表明了 AlphaTensor 在優化任意目標方面具備了靈活性。

AlphaTensor 具有一個對應于算法運行時的目標。當發現正確的矩陣乘法算法時,它會在指定硬件上進行基準測試,然后反饋給 AlphaTensor,以便在指定硬件上學習更高效的算法。

對未來研究和應用的影響

從數學的角度來看,對于旨在確定解決計算問題的最快算法的復雜性理論而言,DeepMind 的結果可以指導它的進一步研究。通過較以往方法更高效地探索可能的算法空間,AlphaTensor 有助于加深我們對矩陣乘法算法豐富性的理解。

此外,由于矩陣乘法是計算機圖形學、數字通信、神經網絡訓練和科學計算等很多計算任務的核心組成部分,AlphaTensor 發現的算法可以顯著提升這些領域的計算效率。

雖然本文只專注于矩陣乘法這一特定問題,但 DeepMind 希望能夠啟發更多的人使用 AI 來指導其他基礎計算任務的算法發現。并且,DeepMind 的研究還表明,AlphaZero 這種強大的算法遠遠超出了傳統游戲的領域,可以幫助解決數學領域的開放問題。

未來,DeepMind 希望基于他們的研究,更多地將人工智能用來幫助社會解決數學和科學領域的一些最重要的挑戰。

#IPMT

什么都不說了 都12級了~~?通過設計的中間原型挖掘Transformer并采取迭代的方式使用中間原型來聚合來自于支持圖像的確定性類型信息和查詢圖像的自適應的類別信息。方法簡單但卻高效,該方法在兩個小樣本語義分割基準數據集上大大優于以前的最新結果。

本文簡要介紹關于小樣本語義分割的論文《Intermediate Prototype Mining Transformer for Few-Shot Semantic Segmentation》。該論文針對現有研究中忽視查詢和支持圖像之間因類內多樣性而帶來的類別信息的差距,而強行將支持圖片的類別信息遷移到查詢圖片中帶來的分割效率低下的問題,引入了一個中間原型,用于從支持中挖掘確定性類別信息和從查詢中挖掘自適應類別知識,并因此設計了一個中間原型挖掘Transformer。

文章在每一層中實現將支持和查詢特征中的類型信息到中間原型的傳播,然后利用該中間原型來激活查詢特征圖。借助Transformer迭代的特性,使得中間原型和查詢特征都可以逐步改進。

論文鏈接:https://arxiv.org/abs/2210.06780

代碼鏈接:https://github.com/LIUYUANWEI98/IPMT

目前在計算機視覺取得的巨大進展在很大程度上依賴于大量帶標注的數據,然而收集這些數據是一項耗時耗力的工作。為了解決這個問題,通過小樣本學習來學習一個模型,并將該模型可以推廣到只有少數標注圖像的新類別。這種設置也更接近人類的學習習慣,即可以從稀缺標注的示例中學習知識并快速識別新類別。

本文專注于小樣本學習在語義分割上的應用,即小樣本語義分割。該任務旨在用一些帶標注的支持樣本來分割查詢圖像中的目標物體。然而,目前的研究方法都嚴重依賴從支持集中提取的類別信息。盡管支持樣本能提供確定性的類別信息指導,但大家都忽略了查詢和支持樣本之間可能存在固有的類內多樣性。

在圖1中,展示了一些支持樣本原型和查詢圖像原型的分布。從圖中可以觀察到,對于與查詢圖像相似的支持圖像(在右側標記為“相似支持圖像”),它們的原型在特征空間中與查詢原型接近,在這種情況下匹配網絡可以很好地工作。然而,對于與查詢相比在姿勢和外觀上具有較大差異的支持圖像(在左側標記為“多樣化支持圖像”),支持和查詢原型之間的距離會很遠。在這種情況下,如果將支持原型中的類別信息強行遷移到查詢中,則不可避免地會引入較大的類別信息偏差。

圖1 支持樣本原型與查詢圖像原型分布圖

因此,本文在通過引入一個中間原型來緩解這個問題,該原型可以通過作者提出的中間原型挖掘Transformer彌補查詢和支持圖像之間的類別信息差距。每層Transformer由兩個步驟組成,即中間原型挖掘和查詢激活。在中間原型挖掘中,通過結合來自支持圖像的確定性類別信息和來自查詢圖像的自適應類別知識來學習中間原型。然后,使用學習到的原型在查詢特征激活模塊中激活查詢特征圖。此外,中間原型挖掘Transformer以迭代方式使用,以逐步提高學習原型和激活查詢功能的質量。

圖2 方法總框圖

支持圖像和查詢圖像輸入到主干網絡分別提取除支持特征和查詢特征。查詢特征在原型激活(PA)模塊中經過簡單的利用支持圖像原型進行激活后,分割成一個初始預測掩碼,并將該掩碼和激活后的查詢特征作為中間原型挖掘Transformer層的一個輸入。同時,將支持特征、支持圖片掩碼和隨機初始化的一個中間原型也做為第一層中間原型挖掘Transformer的輸入。在中間原型挖掘Transformer層中,首先進行掩碼注意力操作。具體來說,計算中間原型與查詢或支持特征之間的相似度矩陣,并利用下式僅保留前景區域的特征相似度矩陣:

處理后的相似度矩陣作為權重,分別捕獲查詢或支持特征中的類別信息并形成新的原型。

查詢特征新原型、支持特征新原型和原中間原型結合在一起形成新的中間原型,完成對中間原型的挖掘。

而后,新的中間原型在查詢特征激活模塊中對查詢特征中的類別目標予以激活。

為了便于學習中間原型中的自適應類別信息,作者使用它在支持和查詢圖像上生成兩個分割掩碼,并計算兩個分割損失。

?并設計雙分工分割損失(DSL):

由于一個中間原型挖掘Transformer層可以更新中間原型、查詢特征圖和查詢分割掩碼,因此,作者通過迭代執行這個過程,得到越來越好的中間原型和查詢特征,最終使分割結果得到有效提升。假設有L 層,那么對于每一層有:?

上式中具體過程又可以分解為以下環節:

?實驗結果及可視化

圖3 作者提出方法的結果的可視化與比較

在圖3中,作者可視化了文章中方法和僅使用支持圖像的小樣本語義分割方法[1]的一些預測結果。可以看出,與第 2 行中僅使用支持信息的結果相比,第3行中的結果展現出作者的方法可以有效地緩解由固有的類內多樣性引起的分割錯誤。

表4 與先前工作在PASCAL-5i[2]數據集上的效果比較

從表4中可以發現,作者的方法大大超過了所有其他方法,并取得了新的最先進的結果。在使用 ResNet-50 作為主干網絡時, 在 1-shot 設置下與之前的最佳結果相比,作者將 mIoU 得分提高了 2.6。此外,在使用 ResNet-101作為主干網絡時,作者方法實現了 1.8 mIoU(1-shot)和 2.2 mIoU(5-shot )的提升

表5 各模塊消融實驗

表5中指出,當僅使用 IPM 會導致 5.3 mIoU 的性能下降。然而,當添加 DSL 時,模型的性能在baseline上實現了 4.1 mIoU 的提升。作者認為這種現象是合理的,因為無法保證 IPM 中的可學習原型將在沒有 DSL 的情況下學習中間類別知識。同時,使用 QA 激活查詢特征圖可以進一步將模型性能提高 2.5 mIoU。這些結果清楚地驗證了作者提出的 QA 和 DSL 的有效性。

表6 ?中間原型Transformer有效性的消融研究? ? ? ? ? ? ? ?

在表6中,作者對比了僅使用support或者query提供類別信息時,和是否使用迭代方式提取信息時的模型的性能情況。可以看出,借助中間原型以迭代的方式從support和query中都獲取類型信息所取得的效果更為出色,也驗證了作者提出方法的有效性。

圖7 支持原型和中間原型分別的可視化比較

如圖7所示,作者將原本的支持原型可視化為橘色,學習到的中間原型可視化為藍色,查詢圖像原型可視化為粉色。可以看到,在特征空間中,中間原型比支持原型更接近查詢原型,因此驗證了作者的方法有效地緩解了類內多樣性問題并彌補了查詢和支持圖像之間的類別信息差距。

在文章中,作者關注到查詢和支持之間的類內多樣性,并引入中間原型來彌補它們之間的類別信息差距。核心思想是通過設計的中間原型挖掘Transformer并采取迭代的方式使用中間原型來聚合來自于支持圖像的確定性類型信息和查詢圖像的自適應的類別信息。令人驚訝的是,盡管它很簡單,但作者的方法在兩個小樣本語義分割基準數據集上大大優于以前的最新結果。為此,作者希望這項工作能夠激發未來的研究能夠更多地關注小樣本語義分割的類內多樣性問題。

#transformer~x5

目前基于Transformer結構的算法模型已經在計算機視覺(CV)領域展現出了巨大的影響力。他們在很多基礎的計算機視覺任務上都超過了之前的卷積神經網絡(CNN)算法模型,下面是筆者找到的最新的在不同基礎計算機視覺任務上的LeaderBoard榜單排名,通過LeaderBoard可以看到,基于Transformer算法模型在各類計算機視覺任務上的統治地位。

  • 圖像分類任務

首先是在ImageNet上的LeaderBoard,通過榜單可以看出,前五名當中,每個模型都使用了Transformer結構,而CNN結構只有部分使用,或者采用和Transformer相結合的方式。

圖像分類任務的LeaderBoard

  • 目標檢測任務

接下來是在COCO test-dev上的LeaderBoard,通過榜單可以看出,前五名當中,一半以上都是基于DETR這類算法結構進行延伸的。

目標檢測任務的LeaderBoard

  • 語義分割任務

最后是在ADE20K val上的LeaderBoard,通過榜單也可以看出,在榜單的前幾名中,Transformer結構依舊占據是當前的主力軍。

語義分割任務的LeaderBoard

雖然目前Transformer展現出了巨大的發展前景,但是現在的計算機視覺社區還并沒有完全掌握Vision Transformer的內部工作原理,也沒有掌握其決策(輸出的預測結果)的基礎,那對其可解釋性的需求就逐漸凸顯了出來。因為只有了解了這類模型是如何做出決策的,才不僅可以提高它們的性能,還可以建立對人工智能系統的信任。

所以本文的主要動機就是探索Vision Transformer的不同可解釋性方法,并根據不同算法的研究動機、結構類型以及應用場景進行分類,從而形成了一篇綜述文章。

刨析Vision Transformer

因為剛才提到,Vision Transformer的結構在各類基礎的計算機視覺任務中都取得了非常不錯的成績。所以之后計算機視覺社區涌現出了很多方法來增強它的可解釋性。本文我們主要以分類任務為主線,從Common Attribution MethodsAttention-based MethodsPruning-based MethodsInherently Explainable MethodsOther Tasks這五個方面中,挑選出最新以及經典的工作進行介紹。這里放一下論文中出現的思維導圖,大家可以根據自身感興趣的內容,進行更加細致的閱讀~

本文思維導圖

Common Attribution Methods

基于屬性方法的解釋通常的出發點是對模型的輸入特征如何一步一步得到最終輸出結果過程的解釋。這類方法主要用于衡量模型的預測結果和輸入特征之間的相關性。

在這些方法中,例如Grad-CAM以及Integrated Gradients算法是直接應用于了基于視覺Transformer的算法上。一些其他的方法像SHAP和Layer-Wise Relevance Propagation(LRP)已經被用來探索基于ViT的架構上了。但是由于SHAP這類方法到的計算成本非常大,所以最近的ViT Shapely算法被設計出來用于適配ViT的相關應用研究。

Attention-based Methods

Vision Transformer正是得益于其注意力機制使其擁有了強大的特征提取能力。而在基于注意力的可解釋性方法中,對注意力權重結果進行可視化則是一種非常有效的方法。本文對其中的幾種可視化技術進行介紹

  • Raw Attention:該方法顧名思義,就是對網絡模型中間層得到的注意力權重圖進行可視化,從而對模型的效果進行分析。
  • Attention Rollout:該技術通過對網絡的不同層中擴展注意力權重來跟蹤從輸入token到中間embedding之間的信息傳輸。
  • Attention Flow:該方法將注意力圖視為一個流量網絡,并使用最大流量算法計算從中間embedding到輸入token的最大流量值。
  • partialLRP:該方法是用于可視化Vision Transformer中的多頭注意力機制提出來的,同時還考慮了每個注意力頭的重要性。
  • Grad-SAM:該方法用于緩解僅依靠原始注意力矩陣來解釋模型預測的局限性,促使研究人員將梯度以用于原始的注意力權重中。
  • Beyond Intuition:該方法也是一種用于解釋注意力的方法,包括注意力感知和推理反饋兩個階段。

最后放一張不同可解釋性方法的注意力可視化圖,大家可以自行感受一下不同可視化方法的區別。

不同可視化方法的注意力圖對比

Pruning-based Methods

剪枝是一種非常有效的方法,被廣泛應用于優化transformer結構的效率和復雜性。剪枝方法通過對冗余或者沒用的信息進行刪減,從而降低模型的參數量和計算復雜度。雖然剪枝算法側重于提高模型的計算效率,但是該類算法依舊可以實現對模型的可解釋性。

本文中針對基于Vision-Transformer的剪枝方法,大體可以分成三大類:explicitly explainable(顯式可解釋)、implicitly explainable(隱式可解釋)、possibly explainable(可能可解釋)。

  • Explicitly Explainable
    在基于剪枝的方法當中,有幾類方法可以提供簡單而且更可解釋的模型。
  • IA-RED^2:該方法的目標是在算法模型的計算效率以及可解釋性之間實現一個最優的平衡。并且在這個過程當中,保持原有ViT算法模型的靈活性。
  • X-Pruner:該方法是一種用于剪枝顯著性單元的方法,通過創建一個可解釋性的感知掩碼來衡量每個可預測單元在預測特定類中的貢獻。? ? ?
  • Vision DiffMask:該剪枝方法包括在每個ViT層上加入門控機制,通過門控機制,可以實現在屏蔽輸入的同時保持模型的輸出。除此之外,該算法模型可以清晰地觸發剩余圖像中的子集,從而實現更好地對模型預測的理解。
  • Implicitly Explainable
    基于剪枝的方法當中,也有一些經典的方法可以被劃分為隱式的可解釋性模型類別中。
  • Dynamic ViT:該方法采用輕量級預測模塊,根據當前的特征去估計每個token的重要性程度。然后將該輕量級的模塊加入到ViT的不同層中,以分層的方式來修剪冗余的token。最重要的是,該方法通過逐步定位對分類貢獻最大的關鍵圖像部分來增強可解釋性。
  • Efficient Vision Transformer(EViT):該方法的核心思想是通過重組token的方式來加速EViT。通過計算注意力得分,EViT保留最相關的token,同時將不太相關的token融合到另外的token中。同時論文的作者為了評估EViT的可解釋性,對多個輸入圖像可視化了token的識別過程。
  • Possibly Explainable
    雖然這類方法最初并不是為了提高ViT的可解釋性,但是這類方法為進一步研究模型的可解釋性提供了很大的潛力。
  • Patch Slimming:通過自上而下的方法來專注圖像中的冗余patch來加速ViT。該算法選擇性的保留了關鍵補丁的能力來突出重要的視覺特征,從而增強可解釋性。
  • Hierarchical Visual Transformer(HVT):該方法的引入用于去增強ViT的可擴展性和性能。隨著模型深度的增加,序列長度逐漸減小。此外,通過將ViT塊劃分為多個階段,并在每個階段應用池化操作,顯著提高了計算效率。考慮到對模型最重要組成部分的逐漸集中,有機會探索其對增強可解釋性和可解釋性的潛在影響。

Inherently Explainable Methods

在不同的可解釋方法中,有一類方法主要是開發能夠內在地解釋算法模型,然而,這些模型通常難以達到與更復雜的黑盒模型相同的精度水平。因此,必須在可解釋性和性能之間考慮謹慎的平衡。接下來對一些經典的工作進行簡要的介紹。

  • ViT-CX:該方法針對ViT模型定制的基于掩碼的解釋方法。這種方法依賴patch embedding以及其對模型輸出的影響,而不是聚焦對它們的關注。該方法包括掩碼生成和掩碼聚合兩個階段,從而提供更有意義的顯著性圖。
  • ViT-NeT:該方法是一種新的神經樹解碼器,通過樹形結構和原型來描述決策過程。同時,該算法還可以對結果進行可視化解釋。
  • R-Cut:該方法是通過Relationship Weighted Out and Cut來增強ViT的可解釋性。該方法包括兩個模塊,分別是Relationship Weighted Out和Cut模塊。前者側重于從中間層提取特定類的信息,強調相關特征。后者執行細粒度的特征分解。通過對兩個模塊的集成,可以生成密集的特定于類的可解釋性映射。

Other Tasks

就如同在文章開頭提到的,除了分類之外,基于ViT的架構對其他CV任務的解釋性仍在探索中。有幾種專門針對其他任務提出的可解釋性方法,接下來就對相關領域的最新工作進行介紹~

  • eX-ViT:該算法是一種基于弱監督語義分割的新型可解釋視覺轉換器。此外,為了提高可解釋性,引入了屬性導向損失模塊,該模塊包含全局級屬性導向損失、局部級屬性可判別性損失和屬性多樣性損失三種損失。前者使用注意圖來創建可解釋的特征,后兩者則增強屬性學習。
  • DINO:該方法是一種簡單的自監督方法,并且是一種不帶標簽的自蒸餾方法。最終學習到的注意圖能夠有效地保留圖像的語義區域,從而實現可以解釋的目的。
  • Generic Attention-model:該方法是一種基于Transformer架構做預測的算法模型。該方法應用于三種最常用的架構,即純自注意、自注意與共同注意相結合和編碼器-解碼器注意。為了檢驗模型的解釋性,作者使用了視覺問答任務,然而,它也適用于其他CV任務,如目標檢測和圖像分割。
  • ATMAN:這是一種模態不可知的擾動方法,利用注意機制生成輸入相對于輸出預測的相關性圖。該方法試圖通過記憶效率注意操作來理解變形預測。
  • Concept-Transformer:該算法通過突出顯示用戶定義的高級概念的注意分數來生成模型輸出的解釋,從而確保可信性和可靠性。

未來展望

雖然目前基于Transformer架構的算法模型已經在各類計算機視覺任務上取得了非常出色的成績。但是目前來看,對于如何利用可解釋性方法的好處來促進模型調試和改進,以及提高模型的公平性和可靠性,特別是在ViT應用中,一直缺乏明顯的研究。

所以本文以圖像分類任務出發,對現有的基于Vision Transformer的可解釋性算法模型進行歸類整理,從而幫助人們更好的理解此類模型架構,希望可以對大家有所幫助。

#Transformer上進行遞歸

搬運工快熱死了 一早大廈沒空調了~~ 還是別人的內容來學習 ?勿怪啊

論文地址:https://arxiv.org/pdf/2111.05297.pdf

代碼和模型:https://github.com/szq0214/SReT

目前 vision transformer 在不同視覺任務上如分類、檢測等都展示出了強大的性能,但是其巨大的參數量和計算量阻礙了該模型進一步在實際場景中的應用。基于這個考慮,本文重點研究了如何在不增加額外參數量的前提下把模型的表達能力挖掘到極致,同時還要保證模型計算量在合理范圍內,從而可以在一些存儲容量小,計算能力弱的嵌入式設備上部署。

基于這個動機,Zhiqiang Shen、邢波等研究者提出了一個 SReT 模型,通過循環遞歸結構來強化每個 block 的特征表達能力,同時又提出使用多個局部 group self-attention 來近似 vanilla global self-attention,在顯著降低計算量 FLOPs 的同時,模型沒有精度的損失。

總結而言,本文主要有以下兩個創新點:

  1. 使用類似 RNN 里面的遞歸結構(recursive block)來構建 ViT 主體,參數量不漲的前提下提升模型表達能力;
  2. 使用 CNN 中 group-conv 類似的 group self-attention 來降低 FLOPs 的同時保持模型的高精度;

此外,本文還有其他一些小的改動:

  1. 網絡最前面使用三層連續卷積,卷積核為 3x3,結構直接使用了研究者之前 DSOD 里面的 stem 結構;
  2. Knowledge distillation 只使用了單獨的 soft label,而不是 DeiT 里面 hard 形式的 label 加 one-hot ground-truth,因為研究者認為 soft label 包含的信息更多,更有利于知識蒸餾;
  3. 使用可學習的 residual connection 來提升模型表達能力;

如下圖所示,本文所提出的模型在參數量(Params)和計算量(FLOPs)方面相比其他模型都有明顯的優勢:

下面我們來解讀這篇文章:

1.ViT 中的遞歸模塊

遞歸操作的基本組成模塊如下圖:

該模塊非常簡單明了,類似于 RNN 結構,將模塊當前 step 的輸出作為下個 step 的輸入重新輸進該模塊,從而增強模型特征表達能力。

研究者展示了將該設計直接應用在 DeiT 上的結果,如下所示:

可以看到在加入額外一次簡單遞歸操作之后就可以得到將近 2% 的精度提升。

當然具體到全局網絡結構層面還有不同的遞歸構建方法,如下圖:

其中 NLL 層(Non-linear Projection Layer)是用來保證每個遞歸模塊輸入輸出不完全一致。論文提出使用這個模塊的主要原因是發現在上述 Table 1 里面更多次數的遞歸操作并沒有進一步提升性能,說明網絡可能學到了一個比較簡單的狀態,而 NLL 層可以強制模型輸入輸出不一致從而緩解這種情況。同時,研究者從實驗結果發現上圖 (1) internal loop 相比 external loop 設計擁有更好的 accuracy-FLOPs 結果。

2. 分組的 Group Self-attention 模塊

如下圖所示,研究者提出了一種分組的 group self-attention 策略來降低模型的 FLOPs,同時保證 self-attention 的全局注意力,從而使得模型沒有明顯精度損失:

Group Self-attention 模塊具體形式如下:

Group self-attention 的缺點是只有局部區域會相互作用,研究者提出通過使用 Permutation 操作來近似全局 self-attention 的機制,同時通過 Inverse Permutation 來復原和保留 tokens 的次序信息,針對這個部分的消融實驗如下所示:

其中 P 表示加入 Permutation,I 表示加入 Inverse ?Permutation,-L 表示如果 group 數為 1,就不使用 P 和 I(比如模型最后一個 stage)。根據上述表格的結果,研究者最后采用了 [8, 2][4,1][1,1] 這種分組設計。?

3. 其他設計

可學習的殘差結構 (LRC):

研究者嘗試了上圖三種結構,圖(3)結果最佳。具體而言,研究者在每個模塊里面添加了 6 個額外參數(4+2,2 個在 NLL 層),這些參數會跟模型其他參數一起學習,從而使網絡擁有更強的表達能力,參數初始化都為 1,在訓練過程 6 個參數的數值變化情況如下所示:

Stem 結構組成:

如上表所示,Stem 由三個 3x3 的連續卷積組成,每個卷積 stride 為 2。

整體網絡結構:

研究者進一步去掉了 class token 和 distillation token,并且發現精度有少量提升。

消融實驗:

模型混合深度訓練:

研究者進一步發現分組遞歸設計還有一個好處就是:可以支持模型混合深度訓練,這種訓練方式可以大大降低深度網絡結構優化復雜度,研究者展示了 108 層不同模型結構優化過程的 landscape 可視化,如下圖所示,可以很明顯的看到混合深度結構優化過程困難程度顯著低于另外兩種結構。

最后,分組 group self-attention 算法 PyTorch 偽代碼如下:

#Searchformer

Transformer 強大的泛化能力再次得到證明!補齊Transformer規劃短板,田淵棟團隊的Searchformer火了

最近幾年,基于 Transformer 的架構在多種任務上都表現卓越,吸引了世界的矚目。使用這類架構搭配大量數據,得到的大型語言模型(LLM)等模型可以很好地泛化用于真實世界用例。

盡管有如此成功,但基于 Transformer 的架構和 LLM 依然難以處理規劃和推理任務。之前已有研究證明 LLM 難以應對多步規劃任務或高階推理任務。

為了提升 Transformer 的推理和規劃性能,近些年研究社區也提出了一些方法。一種最常見且有效的方法是模擬人類的思考過程:先生成中間「思維」,然后再輸出響應。比如思維鏈(CoT)提示法就是鼓勵模型預測中間步驟,進行按步驟的「思考」。思維樹(ToT)則使用了分支策略和評判方法,讓模型生成多個不同的思維路徑,然后從中選出最佳路徑。盡管這些技術通常是有效的,但也有研究表明,在很多案例中,這些方法會讓模型的性能下降,原因包括自我強制(self-enforcing)。

另一方面,在一個數據集上有效的技術可能無法很好地處理其它數據集,原因可能包括所涉及的推理類型發生了變化,比如從空間推理變成了數學推理或常識推理。

相較之下,傳統的符號式規劃和搜索技術卻能表現出很好的推理能力。此外,這些傳統方法計算得到的解決方案通常有形式上的保證,因為符號規劃算法通常遵循明確定義的基于規則的搜索過程。

為了讓 Transformer 具備復雜推理能力,Meta FAIR 田淵棟團隊近日提出了 Searchformer。

  • 論文標題:Beyond A?: Better Planning with Transformers via Search Dynamics Bootstrapping
  • 論文地址:https://arxiv.org/pdf/2402.14083.pdf

Searchformer 是一種 Transformer 模型,但針對迷宮導航和推箱子等多步規劃任務,它卻能計算出最優規劃并且所用搜索步驟數也能遠少于 A? 搜索等符號規劃算法。

為了做到這一點,該團隊提出了一種新方法:搜索動態引導(search dynamics bootstrapping)。該方法首先是訓練一個 Transformer 模型來模仿 A? 的搜索過程(如圖 1 所示,然后對其進行微調,使其能用更少的搜索步數找到最優規劃。

更詳細地說,第一步,訓練一個模仿 A? 搜索的 Transformer 模型。這里,該團隊的做法是針對隨機生成的規劃任務實例運行 A* 搜索。在執行 A? 時,該團隊會記錄執行的計算和最優規劃并將其整理成詞序列,即 token。這樣一來,所得到的訓練數據集就包含了 A? 的執行軌跡并編碼了有關 A? 本身的搜索動態的信息。然后,訓練一個 Transformer 模型,讓其能針對任意規劃任務沿最優規劃生成這些 token 序列。

第二步,使用專家迭代(expert iteration)方法進一步提升使用上述經過搜索增強的序列(包含 A? 的執行軌跡)訓練的 Searchformer。專家迭代方法可讓 Transformer 憑借更少的搜索步驟生成最優解。這個過程會得到一種神經規劃算法,其隱式地編碼在該 Transformer 的網絡權重之中,并且它有很高的概率以少于 A? 搜索的搜索步數找到最優規劃。比如說,在執行推箱子任務時,新模型能解答 93.7% 的測試任務,同時搜索步數比 A? 搜索平均少 26.8%。

該團隊表示:這為 Transformer 超越傳統符號規劃算法鋪平了道路。

實驗

為了更好地理解訓練數據和模型參數量對所得模型性能的影響,他們進行了一些消融研究。

他們使用了兩類數據集訓練模型:一種的 token 序列中只包含解(solution-only,其中只有任務描述和最終規劃);另一種則是搜索增強型序列(search-augmented,其中包含任務描述、搜索樹動態和最終規劃)。

實驗中,該團隊使用了 A? 搜索的一種確定性和非確定性變體來生成每個序列數據集。

迷宮導航

在第一個實驗中,該團隊訓練了一組編碼器 - 解碼器 Transformer 模型來預測 30×30 迷宮中的最優路徑。

圖 4 表明,通過預測中間計算步驟,可在數據量少時獲得更穩健的性能表現。

圖 5 給出了僅使用解訓練的模型的性能。

圖 6 展示了任務難度對每個模型的性能的影響。

整體而言,盡管當使用的訓練數據集足夠大和足夠多樣化時,僅使用解訓練的模型也能預測得到最優規劃,但當數據量少時,經過搜索增強的模型的表現明顯好得多,并且也能更好地擴展用于更困難的任務。

推箱子

為了測試能否在不同且更復雜的任務(具有不同的 token 化模式)上得到類似的結果,該團隊還生成了一個推箱子的規劃數據集進行測試。

圖 7 展示了每種模型針對每個測試任務生成正確規劃的概率。

可以看到,和上一個實驗一樣,通過使用執行軌跡進行訓練,搜索增強型模型的表現優于僅使用解訓練的模型。?

Searchformer:通過引導方法提升搜索動態

最后一個實驗,該團隊研究了搜索增強型模型可以如何迭代提升,從而憑借更少的搜索步數計算出最優規劃。這里的目標是在縮短搜索軌跡長度的同時依然得到最優解。

圖 8 表明,新提出的搜索動態引導方法能夠迭代式地縮短 Searchformer 模型生成的序列的長度。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/894980.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/894980.shtml
英文地址,請注明出處:http://en.pswp.cn/news/894980.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

c#對接deepseek 聊天AI接口

注意:不是免費 對接文檔:對話補全 | DeepSeek API Docs 注冊地址:DeepSeek 申請key 在線請求示例 apifox deepseek - deepseek

23.PPT:校攝影社團-攝影比賽作品【5】

目錄 NO12345? NO6 NO7/8/9/10? 單元格背景填充表格背景填充文本框背景填充幻燈片背景格式設置添加考生文件夾下的版式 NO12345 插入幻燈片和放入圖片?快速:插入→相冊→新建相冊→文件→圖片版式→相框形狀→調整邊框寬度左下角背景圖片:視圖→…

創新領先!珈和科技獲評省級企業技術中心

為充分發揮中小企業創新主體作用,提高自主創新、集成創新和引進消化吸收再創新能力,增強創新驅動發展的動力,做好專精特新“小巨人”企業的培育工作。 近日,湖北省經信廳對申報2024年湖北省中小企業技術中心的企業進行審核認定并…

Android車機DIY開發之軟件篇(十二)編譯Automotive OS錯誤(3)

Android車機DIY開發之軟件篇(十二)編譯Automotive OS錯誤(3) 問題 [ 85% 113538/132897] //hardware/interfaces/neuralnetworks/1.1/utils:neuralnetworks_utils_hal_1_1 clang src/Device.cpp [ 85% 113539/132897] //hardware/interfaces/neuralnetworks/1.1/utils:neural…

初次體驗Tauri和Sycamore (2)

原創作者:莊曉立(LIIGO) 原創時間:2025年2月8日(首次發布時間) 原創鏈接:https://blog.csdn.net/liigo/article/details/145520637 版權所有,轉載請注明出處。 關鍵詞:Sy…

iPhone 在華銷量大幅下挫

iPhone在喬布斯時代締造的神話在中國正逐漸走向沒落,擠牙膏式的升級方式類似于諾基亞的N70系列,毫無新意的創新能力,求穩著陸的經營理念,工藝和美學不再獨領風騷,甚至拍照領域和AI增強計算,折疊屏等技術領域…

vs封裝dll 給C#使用

一,vs創建控制臺應用 創建控制臺應用得好處時,我們可以自己測試接口,如果接口沒有問題,改成dll重新編譯一遍就可以。 二, 創建一個c 類,將所需提供得功能 封裝到類中。 這樣可以將 所有功能,進…

懸鏈線的方程及其推導過程

懸鏈線的方程及其推導過程 懸鏈線是描述理想鏈條或柔軟繩索在重力作用下的自然形態的數學曲線。其特征在于:如果將一根均勻、不可伸長的鏈條兩端懸掛在固定點上,鏈條所呈現的形狀就會遵循一種特殊的曲線,這個曲線就是懸鏈線。 懸鏈線的方程…

緊跟潮流,將 DeepSeek 集成到 VSCode

Visual Studio Code(簡稱 VSCode)是一款由微軟開發的免費開源代碼編輯器,自 2015 年發布以來,憑借其輕便、強大、且擁有豐富擴展生態的特點,迅速成為了全球開發者的首選工具。VSCode 支持多平臺操作系統,包…

算法基礎之八大排序

文章目錄 概要1. 冒泡排序(Bubble Sort)2. 選擇排序(Selection Sort)3. 插入排序(Insertion Sort)4. 希爾排序(Shell Sort)5. 歸并排序(Merge Sort)6. 快速排…

html 列動態布局

樣式說明: /* 列動態布局,列之間以空格填充 */ li {display: flex;/* flex-direction: column; */justify-content: space-between; }

(python)如何看自己安裝的包的版本

linux pip list | grep "numpy\|scipy\|tensorflow\|keras"windows環境下 pip list | findstr "numpy scipy tensorflow keras"輸出 numpy 1.13.1 scipy 0.19.1 tensorflow-cpu 2.4.0 tensorflow-estimator 2.4.0 tensorflow-gpu 2.4.0

從O(k*n)到O(1):如何用哈希表終結多層if判斷的性能困局

【前言】 ??本文將以哈希表重構實戰為核心,完整展示如何將傳統條件匹配邏輯(上千層if-else判斷)轉化為O(1)的哈希表高效實現。通過指紋驗證場景的代碼級解剖,您將深入理解: ??1.哈希函數設計如何規避沖突陷阱 ??2.鏈式尋址法的工程實現…

離線統信系統的python第三方庫批量安裝流程

一、關于UOS本機 操作系統&#xff1a;UOS&#xff08;基于Debian的Linux發行版&#xff09; CPU&#xff1a;海光x86 二、具體步驟 1、在聯網的電腦上用控制臺的pip命令批量下載指定版本的第三方庫 方法A cd <目標位置的絕對路徑> pip download -d . --platform many…

第 26 場 藍橋入門賽

3.電子舞龍【算法賽】 - 藍橋云課 問題描述 話說這年頭&#xff0c;連舞龍都得電子化&#xff01;這不&#xff0c;藍橋村的老程序員王大爺突發奇想&#xff0c;用LED燈帶和一堆傳感器鼓搗出了一條“電子舞龍”&#xff0c;它能根據程序指令在村里的廣場上“翩翩起舞”。 廣…

0012—數組

存取一組數據&#xff0c;使用數組。 數組是一組相同類型元素的集合。 要存儲1-10的數字&#xff0c;怎么存儲&#xff1f; C語言中給了數組的定義&#xff1a;一組相同類型元素的集合。 創建一個空間創建一組數&#xff1a; 一、數組的定義 int arr[10] {1,2,3,4,5,6,7,8,…

詳細教程 | 如何使用DolphinScheduler調度Flink實時任務

Apache DolphinScheduler 非常適用于實時數據處理場景&#xff0c;尤其是與 Apache Flink 的集成。DolphinScheduler 提供了豐富的功能&#xff0c;包括任務依賴管理、動態調度、實時監控和日志管理&#xff0c;能夠有效簡化 Flink 實時任務的管理和部署。通過 DolphinSchedule…

Redis Copilot:基于Redis為AI打造的副駕工具

我們最近發布了Redis Copilot&#xff0c;以幫助開發者更快地使用Redis構建應用。我們的使命是使應用程序快速運行&#xff0c;并簡化構建過程。為此&#xff0c;Redis Copilot作為您的AI助手&#xff0c;能夠讓您更迅速地完成與Redis相關的任務。您今天就可以在Redis Insight中…

了解傳輸層TCP協議

目錄 一、TCP協議段格式 二、TCP原理 1.確認應答 2.超時重傳 3.連接管理 建立連接 斷開連接 4.滑動窗口 5.流量控制 6.擁塞控制 7.延時應答 8.捎帶應答 9.面向字節流 10.TCP異常情況 TCP&#xff0c;即Transmission Control Protocol&#xff0c;傳輸控制協議。人如…

idea 如何使用deepseek 保姆級教程

1.安裝idea插件codegpt 2.注冊deepseek并生成apikey deepseek 開發平臺&#xff1a; DeepSeek??????? 3.在idea進行codegpt配置 打開idea的File->Settings->Tools->CodeGPT->Providers->Custom OpenAI Chat Completions的URL填寫 https://api.deepseek…