
前饋網絡Feed-Forward Network, FFN是 Transformer 每個層中與注意力并列的兩大核心組件之一負責對每個 token 的特征進行非線性變換與信息加工。注意力負責「token 之間的信息交流」FFN負責「每個 token 內部的信息加工」參數量占比Transformer 中70%~85% 的參數都在 FFN 里標準 FFN 約 70%SwiGLU 等門控變體可達 85%注意力只占小部分標準結構升維 → 非線性激活 → 降維的瓶頸結構通過擴大中間維度提升表達能力激活函數從 ReLU 演進到 GELU、SiLU、SwiGLU核心都是引入非線性讓模型能學習復雜模式一、FFN 是什么標準結構與偽代碼FFN 是作用在每個 token 獨立維度上的兩層全連接網絡對序列中的每個 token 做完全相同的變換不做 token 之間的信息交互。標準 FFN 結構原始 Transformer 論文中的 FFN 公式FFN(x)max?(0,xW1b1)W2b2 FFN(x) \max(0, xW_1 b_1)W_2 b_2FFN(x)max(0,xW1?b1?)W2?b2?拆解為三步升維第一層線性層把特征維度從d_model擴大到d_ff通常是 4 倍如 d_model512 → d_ff2048激活經過非線性激活函數原始論文用 ReLU現代大模型多用 GELU/SiLU降維第二層線性層把維度從d_ff壓縮回d_model對應偽代碼deffeed_forward(x,d_ff2048): x: [B, seq_len, d_model] return: [B, seq_len, d_model] # 第一步升維xlinear_1(x)# [B, seq_len, d_ff]# 第二步非線性激活xgelu(x)# 第三步降維回原維度xlinear_2(x)# [B, seq_len, d_model]returnx關鍵點FFN 對每個 token 獨立處理序列長度維度不發生任何計算token 之間沒有信息交換。這也是為什么 FFN 可以和注意力完美互補注意力負責「橫向」的 token 間交流FFN 負責「縱向」的單 token 特征深度加工。二、為什么需要 FFN注意力不夠嗎這是最高頻的疑問既然注意力這么強大為什么還要加 FFN答案是注意力本質上是在做“信息的選擇性搬運”無法對特征進行深度加工。FFN 引入的逐元素非線性變換才是模型表達能力的核心來源。1. 注意力的本質是“加權求和”缺乏特征加工能力自注意力的核心計算是用 Q 和 K 的相似度作為權重對 V 加權求和。雖然 Softmax 本身是非線性操作但這種非線性只作用于權重分配讓權重之和為 1并放大差異并不對特征向量本身做逐元素的非線性映射。因此注意力層本質上是在做“信息的選擇性搬運”——從其他 token 那里收集有用的信息但不對收集到的信息進行深度加工。如果 Transformer 只有注意力層無論疊多少層本質上都只是加權求和與殘差連接的組合表達能力上限很低無法擬合復雜的語義映射。2. FFN 引入逐元素非線性提升模型表達能力FFN 的核心價值就是引入逐元素非線性變換讓模型能擬合復雜的函數關系。沒有 FFN模型只能做線性的信息重組相當于“只會 rearrange 信息不會加工信息”有了 FFN模型能對每個位置的特征做復雜的非線性變換相當于“每個 token 都有一個獨立的思考單元”3. 一個直觀的類比注意力層就像全體會議——每個人把自己的信息分享給其他人大家互相交流更新各自的信息FFN 層就像會后自習——每個人開完會后自己獨立思考消化把剛聽到的信息進行深度加工、整理、內化Transformer 的每一層都是「先開會交流信息再各自消化思考」交替進行層層遞進最終形成對輸入的深度理解。三、為什么是「升維 → 激活 → 降維」的瓶頸結構FFN 最反直覺的設計就是先把維度擴大 4 倍再壓縮回去。為什么不直接用兩個相同維度的線性層1. 核心原因高維投影機制提升表達能力兩個相同維度的線性層d→d→d如果中間沒有激活函數等價于一個線性層因為線性變換的復合還是線性變換。即使中間有激活函數如果中間維度等于輸入維度非線性的“作用空間”也很有限。升維到 4 倍相當于在高維空間中做非線性變換再將結果投影回原空間——這個“高維投影”機制是 FFN 表達能力的核心。更大的中間維度給了非線性變換更廣闊的“工作空間”能容納更多的特征模式和知識。2. 為什么還要降維回去如果一直保持高維度計算量和參數量都會爆炸。升維只是為了在中間做非線性變換最終還是要把維度降回d_model才能和殘差連接、下一層的注意力對齊。3. 瓶頸結構的性價比「升維-激活-降維」的瓶頸結構本質是用較少的額外參數量換取大幅提升的非線性表達能力。參數量d_model × d_ff d_ff × d_model 2 × d_model × d_ff當 d_ff 4 × d_model 時FFN 參數量 8 × d_model2注意力參數量QKV 輸出投影4 × d_model2FFN 參數量是注意力的 2 倍這也是為什么 Transformer 大部分參數都在 FFN 里業界經驗d_ff 通常取 d_model 的 4 倍這是效果和算力的經驗最優解。也有研究用 8 倍、3 倍等不同比例4 倍是最常用的標準配置。四、常見激活函數對比激活函數是 FFN 的靈魂決定了非線性的形式。大模型發展過程中激活函數也在不斷演進。1. ReLURectified Linear Unit公式f(x) max(0, x)優點計算極簡單速度快緩解梯度消失問題缺點存在「神經元死亡」問題——輸入為負時梯度為 0部分神經元永遠不更新輸出不是零均值應用原始 Transformer 論文、早期 BERT 等模型使用2. GELUGaussian Error Linear Unit公式f(x) x × Φ(x)Φ(x) 是標準正態分布的累積分布函數優點平滑的非線性兼具正則化效果在預訓練中表現更穩定泛化能力更強缺點計算比 ReLU 略復雜但近似實現開銷已很低應用GPT 系列、BERT 后續版本、絕大多數現代大模型的標準配置3. SiLU / Swish公式f(x) x × σ(x)σ 是 Sigmoid 函數優點和 GELU 非常相似曲線接近計算更簡單更容易實現缺點和 GELU 差異不大各有優劣應用LLaMA 系列、部分開源大模型使用4. SwiGLU / GLU 變體結構把 FFN 的第一層拆成兩路一路做線性變換一路做門控兩者逐元素相乘后再降維??重要SwiGLU 的參數量是標準 FFN 的1.5 倍3 個權重矩陣 vs 2 個計算開銷的增加主要來自額外的線性投影而非激活函數本身。優點表達能力更強效果普遍優于標準 FFN門控機制能動態控制信息流動缺點參數量和計算量顯著增加應用LLaMA 2/3、PaLM、Qwen 等現代大模型廣泛使用是當前主流最優方案5. ReGLU / GeGLU分別是 ReLU GLU、GELU GLU 的組合屬于 GLU 家族的不同變體效果和適用場景各有側重。五、激活函數對比表激活函數計算復雜度表達能力訓練穩定性典型應用ReLU極低一般一般有死亡神經元早期 Transformer、BERT 原始版GELU中等較好好GPT 系列、BERT 改進版、通用大模型SiLU/Swish中等較好好LLaMA 系列、部分開源模型SwiGLU較高主要來自額外線性投影最好好LLaMA 2/3、PaLM、現代主流大模型GeGLU較高很好好部分大模型變體注SwiGLU 的計算復雜度“較高”是因為它使用了 3 個線性投影標準 FFN 只有 2 個而非激活函數本身復雜。SiLU 激活函數的計算開銷與 GELU 相近。六、FFN 的優缺點優點提供非線性是 Transformer 表達能力的核心來源沒有 FFN 模型退化為線性變換結構簡單兩層全連接 激活實現簡單易于優化計算高效可高度并行化GPU 上計算效率高靈活可調通過調整 d_ff 大小可以靈活控制模型容量和計算量缺點參數量大占模型總參數的 70%~85%是大模型顯存占用的主要來源計算開銷高推理時 FFN 的計算量占比很高是推理速度的瓶頸之一參數利用率低研究表明FFN 中大量神經元是稀疏激活的很多參數實際利用率不高FFN 與 KV Cache 的關系FFN 的計算量與序列長度無關逐 token 獨立而注意力的計算量與序列長度相關O(N2)。因此短序列 1KFFN 是主要計算瓶頸長序列 8K注意力逐漸成為主要瓶頸這也是 KV Cache 主要優化注意力緩存 K/V 避免重復計算而 FFN 無法通過緩存加速的原因。七、選型指南1. 激活函數選型場景推薦理由快速原型 / 極低算力ReLU計算極簡但注意神經元死亡問題通用小模型GELU當前最穩妥的選擇效果穩定與主流對齊中大型模型 / 追求 SOTASwiGLU當前業界主流最優方案效果收益顯著LLaMA 系生態對齊SiLU SwiGLU保持架構一致性便于復用開源權重2. d_ff 維度選型標準配置d_ff 4 × d_model業界經驗最優解無腦選這個基本不會錯輕量小模型可降到 2~3 倍犧牲少量效果換速度追求極致效果可升到 8 倍但收益遞減參數量和計算量會大幅增加3. FFN 變體選型標準 FFN通用場景實現簡單調試方便SwiGLU 等門控 FFN追求效果優先的大模型是當前主流選擇MoE混合專家超大規模模型把 FFN 拆成多個專家每次只激活部分用少量計算量換取超大參數量八、常見誤區澄清1. 誤區注意力是 Transformer 的核心FFN 只是配角事實FFN 才是參數量的大頭也是模型表達能力的核心來源。注意力負責信息流動FFN 負責信息加工兩者缺一不可同等重要。沒有 FFN 的 Transformer疊再多層也只是線性變換的組合無法逼近復雜函數。2. 誤區FFN 是在序列維度做計算事實FFN 完全在特征維度上作用對每個 token 獨立做相同的變換token 之間沒有信息交互。token 之間的信息交換完全由注意力層負責。3. 誤區激活函數影響不大隨便選就行事實激活函數的選擇對訓練穩定性、收斂速度、最終效果都有顯著影響。從 ReLU 到 GELU 再到 SwiGLU每一次激活函數的演進都帶來了可觀測的效果提升。一句話收束如果說注意力是 Transformer 的「交流系統」負責讓 token 之間互通信息那 FFN 就是 Transformer 的「加工系統」負責對每個 token 的信息做深度非線性變換。兩者交替堆疊、互相配合才構成了 Transformer 強大的表達能力。