摘要: 長久以來,卷積神經網絡(CNN)憑借其精心設計的歸納偏置(inductive biases),無可爭議地統治著計算機視覺領域。然而,一篇名為《An Image is Worth 16x16 Words》的論文徹底改變了這一格局,它所提出的 Vision Transformer (ViT) 模型,成功地將源于自然語言處理(NLP)領域的 Transformer 架構直接應用于圖像識別,并取得了驚人的成果。本文旨在深度剖析 ViT 的核心原理、架構設計及其深遠影響,闡明它是如何挑戰傳統,并為視覺任務提供一個全新的、具有強大擴展性的解決方案。
今天我先給大家帶來原理講解與入門教學,明天會詳細剖析VIT背后深層的原理與代碼實現
第一章:背景——CNN的王朝與Transformer的崛起
要理解 ViT 的革命性,我們必須首先回顧它所挑戰的CNN王朝。
1.1 CNN的基石:生物的視覺皮層
CNN 的設計哲學源于對生物視覺皮層的模仿。其核心在于兩大歸納偏置:
局部性 (Locality):假設圖像中鄰近的像素點具有強相關性。通過小尺寸的卷積核(Kernel),CNN 能夠有效地從局部區域提取邊緣、紋理等基礎特征。
平移不變性 (Translation Invariance):無論一只貓出現在圖像的哪個位置,它仍然是一只貓。通過權重共享(Weight Sharing)的卷積操作和池化(Pooling)操作,CNN 能夠識別出在空間上平移的相同特征。
這種分層、由局部到全局的特征提取范式,使得 CNN 在處理圖像時極為高效且強大,成為了過去十年計算機視覺領域的黃金標準。
1.2 NLP的革命:自注意力機制的全局視野
與此同時,在自然語言處理領域,Transformer 架構憑借其核心的自注意力機制 (Self-Attention) 顛覆了循環神經網絡 (RNN) 的主導地位。自注意力的核心思想是,在處理一個序列(如一個句子)時,序列中的每個元素(單詞)都可以直接與其他所有元素計算相關性,從而動態地捕捉長距離依賴關系。這種對全局上下文的直接建模能力,正是處理復雜語言現象的關鍵。
1.3 跨界的融合
ViT 的誕生源于一個大膽的設想:我們能否拋棄 CNN 為圖像“量身定制”的歸納偏置,直接將 Transformer 強大的全局建模能力應用于視覺任務?大白話解釋:一張圖像,是否可以被當作一個“句子”來閱讀?
第二章:ViT架構深度解析
ViT 的架構回答了上述問題。它通過一系列巧妙的設計,將二維的圖像數據轉換為了 Transformer 所能處理的一維序列數據。
2.1 圖像的序列化:從像素網格到“視覺詞元”
ViT的第一步,是將輸入的二維圖像(例如 224×224×3)分割成一系列固定大小的不重疊的圖像塊(Patches)。例如,如果每個Patch的大小是 16×16,那么一張 224×224 的圖像就會被切分成 (224/16)×(224/16)=14×14=196 個Patches。
類比NLP: 這一步就像將一個段落拆分成一個個獨立的單詞。每個Patch就是圖像世界里的一個“視覺單詞”。
原始的Patch是二維的(16×16×3),而Transformer的輸入需要是一維的向量序列。因此,ViT會將每個Patch展平(Flatten)成一個長向量(16×16×3=768),然后通過一個標準的可訓練線性投影層(Linear Projection Layer)將其映射到一個固定的維度 D(例如768)。這個輸出的向量就被稱為Patch Embedding。
類比NLP: 這完全等同于NLP中的詞嵌入(Word Embedding)過程,將每個單詞映射到一個高維的語義向量空間中。
2.2 注入空間與全局信息
標準的Transformer模型是置換不變的(Permutation-Invariant),也就是說,打亂輸入序列的順序不會影響最終結果。這在處理語言時是個問題(“我愛你”和“你愛我”含義不同),在處理圖像時同樣是致命的(打亂圖像塊會讓圖像失去空間結構)。
為了解決這個問題,ViT為每一個Patch Embedding都加上一個可學習的位置編碼(Position Embedding)。這個編碼向量告訴模型每個Patch的原始位置信息(例如,這是第1行第3列的Patch)。
借鑒NLP模型BERT的設計,ViT在所有Patch Embeddings序列的開頭,額外添加一個特殊的可學習的分類令牌([CLS] Token)。這個Token不代表任何具體的圖像塊,它的作用是在經過Transformer Encoder之后,作為一個“全局信息聚合器”,其最終的輸出狀態將代表整張圖像的語義信息,用于最終的分類任務。
至此,我們已經成功地將一張圖像轉換成了一個Transformer可以理解的向量序列(Sequence of Embeddings)。
2.3 核心:Transformer 編碼器
轉換后的向量序列被送入一個標準的Transformer Encoder。這個Encoder由多個相同的層堆疊而成,每一層都包含兩個核心子模塊:
1. 多頭自注意力機制(Multi-Head Self-Attention, MHSA)
這是ViT的核心。對于序列中的每一個Patch(包括[CLS] Token),自注意力機制會計算它與所有其他Patches之間的注意力分數(Attention Score)。
工作原理簡述: 每個Patch向量會生成三個不同的向量:查詢(Query)、鍵(Key)和值(Value)。
用某個Patch的Query向量,去和所有Patches的Key向量進行點積計算,得出相似度分數。這些分數經過Softmax歸一化后,成為權重。
用這些權重去加權求和所有Patches的Value向量,得到該Patch在當前層的新表示。
意義: 這個過程允許每個Patch“環顧四周”,根據內容相關性,動態地從其他所有Patch中聚合信息。一個草地上的Patch可能會更“關注”天空的Patch(確定背景),而一個眼睛的Patch會高度關注另一個眼睛的Patch(捕捉對稱性)。這就是ViT實現全局感受野的方式。
多頭(Multi-Head): 將這個過程并行執行多次(例如12個頭),每個“頭”學習一種不同的關系模式(比如一個頭關注紋理,另一個頭關注輪廓),最后將所有頭的結果拼接起來,增強了模型的表達能力。
2. 前饋網絡(Feed-Forward Network, FFN)
在自注意力之后,每個Patch的新表示會獨立地通過一個簡單的全連接前饋網絡(通常由兩個線性層和一個激活函數組成)。這一步可以看作是對自注意力聚合來的信息進行進一步的非線性變換和提煉。
在每個子模塊(MHSA和FFN)之后,都會使用殘差連接(Residual Connection)和層歸一化(Layer Normalization)來保證訓練的穩定性和效率。
當序列通過所有Encoder層后,我們只取出[CLS] Token對應的最終輸出向量,因為它已經聚合了整張圖的全局信息。這個向量最后被送入一個簡單的多層感知機(MLP Head),并最終通過了這個Softmax層輸出各個類別的預測概率。
第三章:ViT的優勢與挑戰
3.1 優勢
可擴展性 (Excellent Scalability):ViT 的性能會隨著模型規模和數據量的增加而穩定提升。當在超大規模數據集(如 Google 內部的 JFT-300M)上進行預訓練時,ViT 的性能超越了當時最頂尖的 CNN 模型。
更少的歸納偏置:ViT 不依賴于 CNN 的局部性假設。理論上,它能從數據中學習到比硬編碼的卷積結構更通用、更強大的視覺模式。例如,它可以學會關注圖像中不連續但語義相關的區域。
3.2 挑戰
數據需求(Data-Hungry):ViT 的靈活性是一把雙刃劍。由于缺乏 CNN 的歸納偏置作為“先驗知識”,ViT 需要從零開始學習所有的視覺模式。因此,在中小規模的數據集(如 ImageNet-1k)上從頭訓練時,其性能通常不如同等規模的 CNN。它對大規模預訓練的依賴性極強。
計算成本:自注意力機制的計算復雜度與輸入序列長度的平方成正比。這意味著對于高分辨率圖像(會產生更多的 Patches),ViT 的計算和內存開銷會急劇增加。
第四章:影響與展望
ViT 的出現不僅僅是模型列表中的一個新成員,它更像是一場思想的解放。它證明了注意力機制是構建視覺模型的一種普適且強大的機制。
它的成功催生了計算機視覺領域的研究熱潮,后續工作層出不窮:
Swin Transformer 重新引入了局部注意力和層級化結構,使得 Transformer 在通用視覺任務上更高效、更強大,成為了新的基準模型。
Data-efficient ViT (DeiT) 通過知識蒸餾等技術,顯著降低了 ViT 對大規模預訓練數據的依賴。
Masked Autoencoders (MAE) 提出了一種高效的自監督預訓練范式,進一步釋放了 ViT 的潛力。
結論
Vision Transformer 標志著計算機視覺領域一個新紀元的開啟。它打破了卷積的“神話”,證明了源自語言處理的 Transformer 架構同樣能在視覺世界大放異彩。雖然它并非沒有缺點,但它所開辟的道路——將圖像視為可被全局理解的序列——已經并正在深刻地重塑著我們對視覺智能的認知。未來的視覺模型,很可能會是 Transformer 思想與卷積思想的深度融合,而 ViT,無疑是這場偉大變革的奠基者。