視覺 Transformer

前饋 MLP 區塊(feedforward MLP block)

前饋 MLP 區塊是每個 Transformer 區塊兩個子層中的第二個,它是在注意力讓某個詞元蒐集完脈絡之後、對該詞元各自進行轉換的地方。如果注意力是詞元之間的對話,那 MLP 就是每個詞元回家、私下思索自己聽到了什麼。它對每個位置一視同仁且獨立地套用——同一個小小的兩層網路,用同一組權重跑在第 5 號圖塊與第 50 號圖塊上——這正是它被稱為「逐位置(position-wise)」的原因。

它的結構刻意地簡單:一個把詞元從維度 D 擴張到更寬的隱藏維度(通常是 4 倍 D)的線性層、一個逐元素的非線性(ViT 用 GELU,是 ReLU 的平滑近親)、以及第二個把它投影回 D 的線性層。所以在 ViT-Base 裡一個 768 維的詞元被抬升到 3072 維、過 GELU、再壓回 768。這種「先擴張再收縮」的形狀,給了非線性一個在更高維空間裡施展、然後再重新壓縮的空間。

它實際貢獻了什麼?貢獻了注意力做不到的兩件事。第一是非線性:撇開權重不談,注意力本質上是對值的線性組合,所以少了 MLP,一疊注意力層會塌縮成單一個線性映射;GELU 是讓網路成為通用函數逼近器的重要關鍵。第二是通道混合與記憶:注意力跨詞元混合資訊、卻對特徵通道處理得頗為一致,而 MLP 則在每個詞元內部重新組合各特徵通道,它的權重被廣泛認為儲存了 Transformer 大部分的事實「知識」。

它也是大多數參數與一大部分計算所在之處:在 4 倍擴張下,兩個 MLP 矩陣所含的參數大約是注意力投影的兩倍。因此 MLP 是效率工作的首要目標——專家混合(mixture-of-experts)把單一個 MLP 換成許多個、稀疏地啟動其中少數,而隱藏層擴張比則是用容量換速度的標準旋鈕。

把它叫做「那個 MLP」略有誤導——它只有一個隱藏層(兩個線性映射)。它逐詞元的獨立性正是重點所在:任何跨詞元的推理都必須已經在注意力子層裡發生過了,因為 MLP 根本看不到其他詞元。

又称
FFNfeed-forward networkMLP block前饋網路position-wise feedforward