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),部分行业采用数据为定性判断,已在文中标注。