SwiGLU(Swish-Gated Linear Unit)
3 秒看懂
SwiGLU 是一種帶門控機制的啟用函式,用於替代 Transformer 前饋網路(FFN)中的 ReLU/GELU。核心思想:用 Swish 啟用作為”門”,對輸入做逐元素乘法篩選資訊,再線性投影輸出。它讓 FFN 的引數量從 2 個矩陣變為 3 個矩陣,但通過縮小隱層維度(通常取 8/3 × d_model)保持總引數量基本不變。當前絕大多數主流開源 LLM(LLaMA 系列、Mistral、Qwen、DeepSeek 等)均已採用 SwiGLU 作為預設 FFN 啟用。
3 分鐘產業解釋
為什麼這件事重要?
Transformer 的前饋網路(FFN)佔模型總引數的 約 2/3,是決定模型”知識容量”的核心模組。FFN 裡選什麼啟用函式,直接決定了:
- 訓練收斂速度:更好的啟用函式 → 更快收斂 → 節省算力成本
- 最終效能上限:相同引數量下,啟用函式質量決定 perplexity
- 工程相容性:是否容易在現有 GPU/TPU 上高效實現
SwiGLU 由 Google 研究員 Noam Shazeer 在 2020 年提出(arXiv:2002.05202),通過系統性對比實驗,發現在相同引數預算下,SwiGLU 在語言建模任務上顯著優於 ReLU 和 GELU。這篇論文雖然技術不復雜,但影響極為深遠——自 2023 年 LLaMA 釋出後,SwiGLU 幾乎成為所有新建大型模型的”標配”。
產業影響鏈條
啟用函式改進 → 同參數量下模型更聰明 → 降低訓練總成本 → 加速大型模型民主化
↓
SwiGLU 成為行業事實標準
↓
晶片廠商最佳化 SwiGLU 運算元(融合 kernel)
15 分鐘專家深入
1. SwiGLU 的精確數學定義
給定輸入向量 x ∈ ℝ^{d_model},標準 Transformer FFN 為:
FFN(x) = W₂ · σ(W₁x + b₁) + b₂
其中 σ 是啟用函式(ReLU、GELU 等),W₁ ∈ ℝ^{d_ff × d_model},W₂ ∈ ℝ^{d_model × d_ff}。
GLU 家族(Dauphin et al., 2017)引入門控,將 FFN 改為:
GLU(x) = (σ_gate(xW_gate)) ⊙ (xW_up)
FFN_GLU(x) = ((σ_gate(xW₁)) ⊙ (xW₃)) W₂
其中 ⊙ 為逐元素乘法(Hadamard product),σ_gate 是門控路徑的啟用函式。
SwiGLU 將 σ_gate 指定為 Swish/SiLU:
Swish(x) = x · sigmoid(x) (β=1 的特殊情況)
因此:
FFN_SwiGLU(x) = (Swish(xW₁) ⊙ xW₃) W₂
關鍵變化:FFN 從 2 個權重矩陣變為 3 個(W₁、W₃、W₂)。
2. 隱層維度的調整
標準 FFN(2 矩陣)引數量:
P_std = 2 × d_model × d_ff
SwiGLU FFN(3 矩陣)引數量:
P_swiglu = 3 × d_model × d_ff'
為使 P_swiglu ≈ P_std,令:
3 × d_model × d_ff' = 2 × d_model × d_ff
→ d_ff' = (2/3) × d_ff
當標準 FFN 取 d_ff = 4 × d_model 時:
d_ff' = (2/3) × 4 × d_model = 8/3 × d_model ≈ 2.667 × d_model
實踐中的取整:LLaMA 系列通常將 d_ff 取整到 256 的倍數(或適配 GPU tensor core 的對齊要求),例如 LLaMA-7B 的 d_model=4096,d_ff=11008(≈ 2.687 × 4096,向上取整到 256 倍數)。
3. Swish/SiLU 啟用函式特性
Swish(x) = x · sigmoid(x) = x / (1 + e^{-x})
Swish'(x) = sigmoid(x) + x · sigmoid(x) · (1 - sigmoid(x))
= sigmoid(x) · (1 + x · (1 - sigmoid(x)))
關鍵性質:
| 性質 | ReLU | GELU | Swish/SiLU |
|---|---|---|---|
| 非單調 | 否 | 是(左側有微小下降) | 是(x ≈ -1.28 處有極小值) |
| 下界 | 0 | 無嚴格下界 | ≈ -0.278(在 x ≈ -1.28) |
| 上界 | 無 | 無 | 無 |
| x→-∞ 極限 | 0 | 0 | 0 |
| x→+∞ 行為 | 線性 | 線性 | 線性 |
| 在 0 處的導數 | 不可微(導數為 0) | ≈ 0.5 | 0.5 |
| 是否可微 | 否(0 點) | 是 | 是 |
| 是否平滑 | 否 | 是 | 是 |
Swish 的”非單調”特性被認為是其有效性的關鍵——允許門控路徑輸出負值,從而主動”關閉”某些特徵通道,而非簡單地”通過或截斷”。
技術原理(最深)
門控 FFN 的資訊流機制
輸入 x ∈ ℝ^{d_model}
/ \
/ \
xW₁ (Gate Proj) xW₃ (Up Proj)
∈ ℝ^{d_ff} ∈ ℝ^{d_ff}
| |
Swish(·) |
(非線性變換) |
| |
+--- ⊙ (Hadamard) ------+
| |
↓ ↓
z ∈ ℝ^{d_ff} (門控後的隱表示)
|
zW₂ (Down Proj)
∈ ℝ^{d_model}
|
輸出 y
直覺理解:
- W₁ 路徑(Gate):學習”哪些維度/特徵在當前上下文中有用”,Swish 平滑地控制開/關/中間狀態
- W₃ 路徑(Up):學習”將輸入變換到隱層空間的表示”
- ⊙ 操作:門控乘法實現軟特徵選擇——不是 0/1 硬門,而是連續值軟門
- W₂ 路徑(Down):將篩選後的隱表示投影回 d_model 空間
與 ReLU FFN 對比:ReLU 的硬截斷(負值置零)相當於一個不可微的硬門,梯度在負半軸完全消失。SwiGLU 的門控允許資訊的精細調控。
為什麼門控 FFN 有效?(理論直覺)
-
資訊瓶頸視角:兩個獨立路徑(Up 和 Gate)各自學習互補的表示,Hadamard 乘法強制它們”協商”——這比單路徑 FFN 的表達能力更強。
-
MoE 的連續近似:GLU 門控可以看作一種連續的、共享的專家路由——每個維度相當於一個”微專家”,門控值決定其”參與度”。
-
梯度流改善:Swish 的光滑性(無不可微點)+ 門控乘法的梯度分流,理論上有利於深層網路的訓練穩定性。
引數版面配置(以 LLaMA-7B 為例的實際值)
d_model = 4096
d_ff = 11008 (≈ 8/3 × 4096,取整到 256 的倍數)
n_layers = 32
W₁ (gate_proj): 4096 × 11008 → 每層約 45.1M 引數
W₃ (up_proj) : 4096 × 11008 → 每層約 45.1M 引數
W₂ (down_proj): 11008 × 4096 → 每層約 45.1M 引數
FFN 總計/層 : ≈ 135.3M 引數
FFN 總計(全模型): ≈ 4.33B 引數(佔 6.7B 總參的 ~65%)
注:以上為 LLaMA 架構的典型值。具體數字來自 Meta 釋出的 LLaMA 模型卡與社群逆向。
融合計算的工程實現
在實際 GPU kernel 中,SwiGLU 的三矩陣操作通常被融合為一個或兩個 CUDA kernel:
高效實現:
1. 融合 GEMM: 同時計算 xW₁ 和 xW₃(可拼接為一個 [d_model → 2×d_ff] 的大矩陣乘法)
2. 融合逐元素操作: Swish(gate) ⊙ up(一個 kernel 完成 Swish + Hadamard)
3. 下投影 GEMM: zW₂
vs. Naive 實現需要 3 次獨立 GEMM + 2 次逐元素操作
融合後,SwiGLU 相比 ReLU FFN 的額外開銷主要在:多一個 W₃ 矩陣的視訊記憶體和計算。但由於 d_ff 縮小到 8/3 倍,總計算量差異可控。
技術演進史
| 時間 | 事件 | 關鍵人物/機構 |
|---|---|---|
| 2017 | GLU(Gated Linear Unit)提出,用於 CNN 語言模型 | Dauphin et al., Facebook AI Research |
| 2017 | Swish 啟用函式通過 NAS 搜尋發現,命名為 Swish | Ramachandran et al., Google Brain |
| 2017 | GELU 啟用函式提出 | Hendrycks & Gimpel |
| 2020.02 | ”GLU Variants Improve Transformer” 釋出,系統對比 ReGLU、GEGLU、SwiGLU 等變體 | Noam Shazeer(Google),arXiv:2002.05202 |
| 2020~2022 | GLU 變體陸續被納入模型,但主流 Transformer(GPT-3、BERT 等)仍用 ReLU/GELU | — |
| 2023.02 | LLaMA 釋出,全線採用 SwiGLU,引發行業跟進 | Meta AI |
| 2023~2024 | Mistral、Qwen、DeepSeek、Gemma、Yi 等幾乎所有新建開源 LLM 均採用 SwiGLU | 各廠商 |
| 2024~2025 | SwiGLU 成為 LLM FFN 的事實標準;部分研究探索其變體(如 Squared ReLU 替代方案) | — |
關鍵轉折點
Shazeer 2020 論文的實驗結論(定性總結):
- 在相同引數量下,SwiGLU 在多個 NLP 基準上一致性優於 ReLU 和 GELU
- GEGLU(GELU 作為門控)也有不錯表現,但 SwiGLU 整體更優
- ReGLU(ReLU 作為門控)優於標準 ReLU FFN,但弱於 SwiGLU
該論文的影響力曲線呈”延遲爆發”——發表時關注有限,直到 2023 年 LLaMA 將其作為預設選擇後才被廣泛採納。
技術路線對比
FFN 啟用函式對比(量化)
| 啟用方案 | 矩陣數 | d_ff 取值(等引數時) | 引數量/層 (d=4096) | 是否門控 | 是否平滑 | 訓練 perplexity(相對) |
|---|---|---|---|---|---|---|
| ReLU FFN | 2 | 4d = 16384 | ~134.2M | 否 | 否 | 基線 |
| GELU FFN | 2 | 4d = 16384 | ~134.2M | 否 | 是 | 略優於 ReLU |
| ReGLU | 3 | 8/3·d ≈ 10923 | ~134.2M | 是 | 否 | 明顯優於 ReLU/GELU |
| GEGLU | 3 | 8/3·d ≈ 10923 | ~134.2M | 是 | 是 | 更優 |
| SwiGLU | 3 | 8/3·d ≈ 10923 | ~134.2M | 是 | 是 | 最優 [Shazeer 2020] |
注:訓練 perplexity 為定性排序,具體數值取決於資料集和模型規模。Shazeer 2020 論文的實驗基於 T5 架構。
計算開銷對比
| 維度 | ReLU FFN | SwiGLU FFN | 差異 |
|---|---|---|---|
| FLOPs/層 (前向) | 2 × 2 × d × d_ff | 2 × 3 × d × d_ff’ | SwiGLU ≈ 2/3 的 d_ff → FLOPs 接近 |
| 視訊記憶體(權重) | 2 × d × d_ff | 3 × d × d_ff’ | 引數量設計為接近相等 |
| Kernel 啟動 | 2 GEMM + 1 elementwise | 3 GEMM + 1~2 elementwise | 融合後差異縮小 |
| 量化友好度 | 高 | 高 | 無本質差異 |
上下游
上游(SwiGLU 依賴什麼)
[PyTorch/JAX 基礎架構]
↓
[矩陣乘法 kernel(cuBLAS/CUTLASS)]
↓
[Swish/SiLU 逐元素運算元]
↓
[Hadamard 逐元素乘法運算元]
↓
[FlashAttention 等 Transformer 基礎元件] ← 與 SwiGLU 正交但共存
下游(SwiGLU 被誰使用)
SwiGLU FFN
├── LLaMA 1/2/3 系列(Meta)
├── Mistral / Mixtral(Mistral AI)
├── Qwen 系列(阿里)
├── DeepSeek 系列
├── Gemma(Google)
├── Yi 系列(零一萬物)
├── InternLM(上海AI Lab)
├── Phi 系列(Microsoft)
├── [幾乎所有 2023 年後新建開源 LLM]
└── ...
關鍵指標
| 指標 | 說明 | 典型值/範圍 |
|---|---|---|
| 門控啟用函式 | Swish(x) = x · sigmoid(x) | β=1(SiLU 為標準選擇) |
| FFN 矩陣數 | Up + Gate + Down | 3 |
| 等引數隱層比例 | d_ff / d_model | ≈ 8/3(實踐中取整) |
| 額外引數開銷 | 相比標準 FFN(同 d_ff) | +50%(但通常縮小 d_ff 補償) |
| 收斂速度提升 | 相比 ReLU FFN | 定性:顯著(Shazeer 2020) |
| 推論延遲增量 | 相比 ReLU FFN(等引數時) | 定性:相近(GEMM 為主,逐元素操作佔比小) |
| 行業採用率 | 2024 年新建 LLM 中使用比例 | 估算 > 90% |
供需與市場資料
算力影響
SwiGLU 本身不是獨立產品,而是模型架構選擇,但其影響體現在:
- 訓練算力效率:等引數量下更好的 perplexity → 相同目標效能所需訓練 FLOPs 更少(估算節省 5~15%,取決於對比基線)
- 推論成本:SwiGLU FFN 的 FLOPs 與標準 FFN 接近,但三矩陣需要更多視訊記憶體頻寬(權重載入),對 memory-bandwidth-bound 場景有微小影響
- Kernel 最佳化市場:vLLM、TensorRT-LLM、SGLang 等推論架構均針對 SwiGLU 做了融合運算元最佳化
量化參考
- SwiGLU FFN 在 INT8/INT4 量化下表現穩定,無特殊敏感性(Swish 的平滑性有助於量化精度)
- 這對邊緣部署和推論晶片最佳化是正面訊號
代表公司與資本對映
| 公司/機構 | 角色 | SwiGLU 關聯 |
|---|---|---|
| 原始發明者(Shazeer 論文);Gemma 採用 | 學術貢獻者 + 使用者 | |
| Meta | LLaMA 將 SwiGLU 推向行業標準 | 最大推動者 |
| NVIDIA | TensorRT-LLM 中最佳化 SwiGLU 融合 kernel | 運算元最佳化 |
| vLLM / SGLang | 推論引擎中的 SwiGLU 運算元最佳化 | 開源推論棧 |
| Mistral AI | Mistral/Mixtral 均採用 SwiGLU | 使用者 |
| 阿里巴巴(Qwen) | Qwen 系列採用 SwiGLU | 使用者 |
| DeepSeek | DeepSeek 系列採用 SwiGLU | 使用者 |
注:SwiGLU 是架構層面的選擇,不構成獨立的商業壁壘。所有公司的模型均可使用。
投資邏輯
核心判斷
SwiGLU 本身不是可投資標的,但作為 LLM 架構的”基礎設施級”選擇,其影響體現在:
-
模型效率趨勢的縮影:SwiGLU 的廣泛採用表明行業正朝著”相同算力做更多事”的方向演進。架構改進(含啟用函式、注意力機制、MoE 等)與硬體升級共同推動 Scaling Law 效率提升。
-
對算力需求的影響:
- 短期:架構改進(含 SwiGLU)讓相同效能目標需要的總訓練 FLOPs 趨降 → 可能緩和對算力的增量需求
- 中期:效率提升反而降低單次實驗成本 → 鼓勵更多實驗 → 總算力需求可能上升(Jevons 悖論)
-
推論最佳化的競爭焦點:SwiGLU 的三矩陣結構對視訊記憶體頻寬有一定壓力,這利好 HBM 容量/頻寬更高的晶片(如 NVIDIA H100/H200/B200),也利好專注於 kernel 融合最佳化的推論架構公司。
-
可替代性訊號:如果未來出現明顯優於 SwiGLU 的啟用函式,將反映架構探索仍在快速迭代,對”算力是唯一壁壘”的敘事構成修正。
常見誤讀糾偏
誤讀 1:“SwiGLU 是一種全新的啟用函式”
糾偏:SwiGLU 不是單一啟用函式,而是啟用函式(Swish)+ 門控機制(GLU)+ FFN 架構重設計的組合方案。單獨的 Swish 啟用(SiLU)早已存在,GLU 門控也早已有之。Shazeer 的貢獻在於:① 系統性地將各類啟用函式代入門控 FFN 架構進行對比;② 發現 Swish 作為門控時效果最優;③ 給出了等引數量下的隱層維度調整方案(8/3 倍)。
誤讀 2:“SwiGLU 讓模型引數增加了 50%”
糾偏:如果固定 d_ff 不變,三矩陣確實比兩矩陣多 50% 引數。但實際使用中 d_ff 會相應縮小(從 4d 降到 ≈ 8/3·d),使總引數量基本持平。這是 SwiGLU 設計的核心要點之一——“等引數量下的效能提升”,而非”更多引數換來更好效果”。
誤讀 3:“SwiGLU 對所有任務都有提升”
糾偏:Shazeer 2020 的實驗主要基於語言建模(T5 架構)。SwiGLU 在語言任務上的優勢已被廣泛驗證,但在其他模態(視覺、語音)或非 Transformer 架構中的優勢,目前缺乏同等深度的系統性驗證。部分視覺模型(如 ViT 變體)仍使用 GELU。
誤讀 4:“Swish = SiLU,二者完全相同”
糾偏:嚴格說,Swish 的一般形式是 x · sigmoid(βx),其中 β 是可學習或固定的超引數。當 β=1 時,Swish 等價於 SiLU(Sigmoid Linear Unit)。在 SwiGLU 中,使用的是 β=1 的 Swish,即 SiLU。但 SiLU 作為一個獨立的運算元名稱,在 PyTorch 中以 torch.nn.SiLU 實現,功能等價。實際語境中二者常互換使用,但技術上 Swish 是更一般的概念。
學習路徑
入門(30 分鐘)
- 理解標準 Transformer FFN 的結構:
FFN(x) = W₂ · ReLU(W₁x) + b - 瞭解 ReLU、GELU、Swish 的函式形狀和性質差異
- 閱讀 Shazeer 2020 論文的 Section 3(GLU Variants) 和 Table 1(實驗結果)
進階(2 小時)
- 手推 SwiGLU FFN 的前向和反向傳播公式
- 理解等引數量約束下 d_ff = 8/3 · d_model 的推導
- 閱讀 LLaMA 論文(Touvron et al., 2023),關注其 Section 2.1 對 SwiGLU 的描述
- 在 HuggingFace Transformers 中檢視 LLaMA 的
LlamaMLP實現(modeling_llama.py)
深入(1 天)
- 實現自定義 SwiGLU FFN 並與 ReLU FFN 在小模型上做對比實驗
- 研究推論架構(vLLM / TensorRT-LLM)中 SwiGLU 的融合 kernel 實現
- 閱讀 Su (2024) 等後續工作對 GLU 變體的進一步探索
- 思考 SwiGLU 與 MoE 的關係——門控路由 vs. 門控 FFN 的概念對照
一句話總結
SwiGLU 用 Swish 平滑門控替代 ReLU 硬截斷,以三矩陣結構 + 8/3 倍隱層設計,在不增加引數量的前提下顯著提升 Transformer FFN 的表達能力,已成為 2023 年後新建大語言模型的事實標準。
延伸閱讀與來源
| 來源 | 說明 | 標註 |
|---|---|---|
| Shazeer, “GLU Variants Improve Transformer”, arXiv:2002.05202 (2020) | SwiGLU 的原始論文 | 核心文獻 |
| Dauphin et al., “Language Modeling with Gated Convolutional Networks” (2017) | GLU 的原始提出 | 上游文獻 |
| Ramachandran et al., “Searching for Activation Functions” (2017) | Swish 啟用函式的發現 | 上游文獻 |
| Touvron et al., “LLaMA: Open and Efficient Foundation Language Models” (2023) | LLaMA 採用 SwiGLU 的里程碑 | 行業採用標誌 |
HuggingFace Transformers 原始碼 modeling_llama.py → LlamaMLP | SwiGLU 的開源實現參考 | 程式碼參考 |
| 各模型官方技術報告(Mistral, Qwen, DeepSeek, Gemma 等) | 驗證行業採用情況 | [行業文獻] |
⚠️ 準確性宣告:本頁所有數學公式和架構描述基於 Shazeer 2020 原論文及廣泛驗證的公開資訊。LLaMA-7B 的具體引數值來自社群對 Meta 公開模型的分析。由於檢索受限(HTTP 403),部分行業採用資料為定性判斷,已在文中標註。