模型层 开放阅读

SwiGLU

Swish-Gated Linear Unit

概念 ID
swish-gated-linear-unit
更新时间
2026-05-29
来源数量
待补

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)))

关键性质:

性质ReLUGELUSwish/SiLU
非单调是(左侧有微小下降)是(x ≈ -1.28 处有极小值)
下界0无严格下界≈ -0.278(在 x ≈ -1.28)
上界
x→-∞ 极限000
x→+∞ 行为线性线性线性
在 0 处的导数不可微(导数为 0)≈ 0.50.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 有效?(理论直觉)

  1. 信息瓶颈视角:两个独立路径(Up 和 Gate)各自学习互补的表示,Hadamard 乘法强制它们”协商”——这比单路径 FFN 的表达能力更强。

  2. MoE 的连续近似:GLU 门控可以看作一种连续的、共享的专家路由——每个维度相当于一个”微专家”,门控值决定其”参与度”。

  3. 梯度流改善: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 倍,总计算量差异可控。


技术演进史

时间事件关键人物/机构
2017GLU(Gated Linear Unit)提出,用于 CNN 语言模型Dauphin et al., Facebook AI Research
2017Swish 激活函数通过 NAS 搜索发现,命名为 SwishRamachandran et al., Google Brain
2017GELU 激活函数提出Hendrycks & Gimpel
2020.02”GLU Variants Improve Transformer” 发布,系统对比 ReGLU、GEGLU、SwiGLU 等变体Noam Shazeer(Google),arXiv:2002.05202
2020~2022GLU 变体陆续被纳入模型,但主流 Transformer(GPT-3、BERT 等)仍用 ReLU/GELU
2023.02LLaMA 发布,全线采用 SwiGLU,引发行业跟进Meta AI
2023~2024Mistral、Qwen、DeepSeek、Gemma、Yi 等几乎所有新建开源 LLM 均采用 SwiGLU各厂商
2024~2025SwiGLU 成为 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 FFN24d = 16384~134.2M基线
GELU FFN24d = 16384~134.2M略优于 ReLU
ReGLU38/3·d ≈ 10923~134.2M明显优于 ReLU/GELU
GEGLU38/3·d ≈ 10923~134.2M更优
SwiGLU38/3·d ≈ 10923~134.2M最优 [Shazeer 2020]

注:训练 perplexity 为定性排序,具体数值取决于数据集和模型规模。Shazeer 2020 论文的实验基于 T5 架构。

计算开销对比

维度ReLU FFNSwiGLU FFN差异
FLOPs/层 (前向)2 × 2 × d × d_ff2 × 3 × d × d_ff’SwiGLU ≈ 2/3 的 d_ff → FLOPs 接近
显存(权重)2 × d × d_ff3 × d × d_ff’参数量设计为接近相等
Kernel 启动2 GEMM + 1 elementwise3 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 + Down3
等参数隐层比例d_ff / d_model≈ 8/3(实践中取整)
额外参数开销相比标准 FFN(同 d_ff)+50%(但通常缩小 d_ff 补偿)
收敛速度提升相比 ReLU FFN定性:显著(Shazeer 2020)
推理延迟增量相比 ReLU FFN(等参数时)定性:相近(GEMM 为主,逐元素操作占比小)
行业采用率2024 年新建 LLM 中使用比例估算 > 90%

供需与市场数据

算力影响

SwiGLU 本身不是独立产品,而是模型架构选择,但其影响体现在:

  1. 训练算力效率:等参数量下更好的 perplexity → 相同目标性能所需训练 FLOPs 更少(估算节省 5~15%,取决于对比基线)
  2. 推理成本:SwiGLU FFN 的 FLOPs 与标准 FFN 接近,但三矩阵需要更多显存带宽(权重加载),对 memory-bandwidth-bound 场景有微小影响
  3. Kernel 优化市场:vLLM、TensorRT-LLM、SGLang 等推理框架均针对 SwiGLU 做了融合算子优化

量化参考

  • SwiGLU FFN 在 INT8/INT4 量化下表现稳定,无特殊敏感性(Swish 的平滑性有助于量化精度)
  • 这对边缘部署和推理芯片优化是正面信号

代表公司与资本映射

公司/机构角色SwiGLU 关联
Google原始发明者(Shazeer 论文);Gemma 采用学术贡献者 + 使用者
MetaLLaMA 将 SwiGLU 推向行业标准最大推动者
NVIDIATensorRT-LLM 中优化 SwiGLU 融合 kernel算子优化
vLLM / SGLang推理引擎中的 SwiGLU 算子优化开源推理栈
Mistral AIMistral/Mixtral 均采用 SwiGLU使用者
阿里巴巴(Qwen)Qwen 系列采用 SwiGLU使用者
DeepSeekDeepSeek 系列采用 SwiGLU使用者

注:SwiGLU 是架构层面的选择,不构成独立的商业壁垒。所有公司的模型均可使用。


投资逻辑

核心判断

SwiGLU 本身不是可投资标的,但作为 LLM 架构的”基础设施级”选择,其影响体现在:

  1. 模型效率趋势的缩影:SwiGLU 的广泛采用表明行业正朝着”相同算力做更多事”的方向演进。架构改进(含激活函数、注意力机制、MoE 等)与硬件升级共同推动 Scaling Law 效率提升。

  2. 对算力需求的影响

    • 短期:架构改进(含 SwiGLU)让相同性能目标需要的总训练 FLOPs 趋降 → 可能缓和对算力的增量需求
    • 中期:效率提升反而降低单次实验成本 → 鼓励更多实验 → 总算力需求可能上升(Jevons 悖论)
  3. 推理优化的竞争焦点:SwiGLU 的三矩阵结构对显存带宽有一定压力,这利好 HBM 容量/带宽更高的芯片(如 NVIDIA H100/H200/B200),也利好专注于 kernel 融合优化的推理框架公司。

  4. 可替代性信号:如果未来出现明显优于 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 分钟)

  1. 理解标准 Transformer FFN 的结构:FFN(x) = W₂ · ReLU(W₁x) + b
  2. 了解 ReLU、GELU、Swish 的函数形状和性质差异
  3. 阅读 Shazeer 2020 论文的 Section 3(GLU Variants)Table 1(实验结果)

进阶(2 小时)

  1. 手推 SwiGLU FFN 的前向和反向传播公式
  2. 理解等参数量约束下 d_ff = 8/3 · d_model 的推导
  3. 阅读 LLaMA 论文(Touvron et al., 2023),关注其 Section 2.1 对 SwiGLU 的描述
  4. 在 HuggingFace Transformers 中查看 LLaMA 的 LlamaMLP 实现(modeling_llama.py

深入(1 天)

  1. 实现自定义 SwiGLU FFN 并与 ReLU FFN 在小模型上做对比实验
  2. 研究推理框架(vLLM / TensorRT-LLM)中 SwiGLU 的融合 kernel 实现
  3. 阅读 Su (2024) 等后续工作对 GLU 变体的进一步探索
  4. 思考 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.pyLlamaMLPSwiGLU 的开源实现参考代码参考
各模型官方技术报告(Mistral, Qwen, DeepSeek, Gemma 等)验证行业采用情况[行业文献]

⚠️ 准确性声明:本页所有数学公式和架构描述基于 Shazeer 2020 原论文及广泛验证的公开信息。LLaMA-7B 的具体参数值来自社区对 Meta 公开模型的分析。由于检索受限(HTTP 403),部分行业采用数据为定性判断,已在文中标注。

source: 公开披露与公开资料整理 本页仅用于产业链学习、信息检索和研究辅助;不构成投资建议,不预测涨跌,不提供买卖、仓位或目标价建议。
完整概念页 复盘 13 节结构 公司投研页 沿产业链找到受益公司 投资课 把概念转成可跟踪模型