Skip to content
🔗 分享本题
查看我的学习进度 →
💡 答案要点

Gate 机制的本质:让网络"选择性通"信息,而不是对所有输入一致地变换。

三种 FFN 方案对比:

1. 标准 FFN(ReLU/GeLU)—— 最早的方案
   Hidden = Activation(X @ W1) @ W2
   
   X: (batch, seq, d_model) → W1: (d_model, d_ff) → (batch, seq, d_ff)
                                ↓ ReLU/GeLU
                              → W2: (d_ff, d_model) → (batch, seq, d_model)
   
   问题:所有输入维度都受到同样的非线性变换
   没有"门"的概念,不能动态控制信息流

2. GLU(Gated Linear Unit)—— 引入门控概念
   Hidden = SiLU(X @ W_gate) ⊙ (X @ W_project) @ W_out
   
   X @ W_gate:  生成门的信号(sigmoid/silu 输出 0~1)
   X @ W_proj:  要过滤的信号
   ⊙: 逐元素相乘 —— 门为 0 则对应维度完全关闭
   
   好处:通道级选择性地激活
   注意:W_gate 和 W_proj 各需要一半 d_ff 的容量

3. SwiGLU(SiLU + GLU)—— 当前最优
   Hidden = SiLU(X @ W1) ⊙ (X @ W2) @ W3
   
   SiLU(x) = x · sigmoid(x)  (Softplus 的平滑版本)
   
   为什么 SwiGLU 通常比 GeLU-FFN 更好?
   ✓ 门控机制提供更强的非线性表达能力
   ✓ 通道级别的门控让重要特征不被淹没
   ✓ 相比 GeLU 有稍微更好的梯度流动
   ✗ 参数量增加约 50%(3 个矩阵 vs 2 个)
   ✗ 计算量基本相同(矩阵乘法主导)

参数量和计算量对比:

假设 d_model=4096, d_ff=11008(LLaMA-3 比例 d_ff≈2.67×d_model)

标准 GeLU-FFN:
  W1: 4096×11008 = 45.1M 参数
  W2: 11008×4096  = 45.1M 参数
  总计: 90.2M 参数

SwiGLU-FFN:
  W1 (gate): 4096×11008 = 45.1M 参数
  W2 (proj): 4096×11008 = 45.1M 参数
  W3 (out):  11008×4096 = 45.1M 参数
  总计: 135.3M 参数

相对增加: 50%
但实际训练中 SwiGLU 通常能达到更好的收敛和质量

现代 LLM 的 FFN 设计趋势:

| 模型            | FFN 激活    | d_ff/d_model | Gate?   |
|----------------|-----------|---------------|---------|
| GPT-2          | GELU      | 4.0           | No      |
| GPT-3          | GELU      | 4.0           | No      |
| LLaMA 1/2      | SwiGLU    | 2.67          | Yes     |
| LLaMA-3        | SwiGLU    | 2.67          | Yes     |
| Mistral 7B     | SwiGLU    | 2.67          | Yes     |
| Gemma 2        | SwiGLU    | 2.67          | Yes     |
| Yi系列         | SwiGLU    | 2.67          | Yes     |

趋势:SwiGLU 已成为 2024-2026 年几乎所有主流 LLM 的标准配置

追问:MoE 场景下 SwiGLU 用在哪儿?

MoE 中通常 SwiGLU 替换的是 FFN 内部的激活函数

Sparse MoE-FFN:
  For each token:
    experts_selected = router(x)  # Top-2
    output = Σ g_i × SwiGLU_Expert_i(x)

                   每个专家的 FFN 都用 SwiGLU

即 SwiGLU 替代的是标准 FFN 的激活函数,MoE 替换的是 FFN 的整体结构(单一路径 → 多路径选择)
两者作用在不同层面,可以同时组合

面试话术:

"标准 FFN 用单一激活函数(GeLU/ReLU)做非线性变换,所有输入通道同等对待。GLU 引入门控:先用一部分权重生成门信号(sigmoid/silu),再和另一部分投影结果逐元素相乘,实现通道级的选择性滤波。SwiGLU 是用 SiLU 作为激活的门控 GLU,是目前最流行的配置。它比 GeLU-FFN 多了约 50% 的参数,但因为门控让信息流动更有选择性,实际训练效果更好。几乎所有现代 LLM 都采用 SwiGLU。"

⭐ 面试加分项:

  • 能画出三种 FFN 的完整计算流程(含矩阵维度变化)
  • 理解 SiLU 相对于 Sigmoid/ReLU 的优势(非饱和区更大、过零点非零)
  • 知道 SwiGLU 的参数量是标准 FFN 的 1.5 倍,但计算量几乎不变
  • 能解释 MoE 和 SwiGLU 的关系(它们分别在结构层和激活函数层起作用)