跳到主要内容

激活与 FFN

FFN 三步结构与激活函数如何从 GELU 演进到 SwiGLU,以及它为何占 block 参数的三分之二

核心要点

  • FFN 占标准 block 参数 2/3, FLOPs ~2/3 (短序列下)
  • 标准 FFN:上投影 → 激活 → 下投影,两个矩阵
  • SwiGLU 三矩阵 + gating, Llama / PaLM / Qwen 全用
  • $h_{\text{ffn}} = 8h/3$ 不是拍脑袋:三矩阵保参数总量与 4× 等价
  • Shazeer 自己承认 SwiGLU 收益"归功于神的恩典"

名词定义

本篇共享名词在 5.1 总览 已定义 (FFN intermediate / GELU / SiLU / SwiGLU)。本篇内 "MLP" 与 "FFN" 同义,来自不同社区惯例:Transformer 论文用 FFN, Anthropic / mechanistic interp 用 MLP,指代同一部件。

名词定义
Gating (门控)SwiGLU 引入的机制:一支路径乘 $\sigma(W_{\text{gate}} \mathbf{x})$ 作为"开关",控制另一支路径的通过
Up projectionFFN 第一步,把 hidden 维 $h$ 投影到更大的 intermediate 维 $h_{\text{ffn}}$
Down projectionFFN 最后一步,把 $h_{\text{ffn}}$ 维投回 hidden 维 $h$

@tbl-ffn-glossary 本篇新引入名词

FFN 在 Transformer block 里干什么?

核心问题:一个 block 里 attention 和 FFN 两个子层,attention 让 token 之间互相看,FFN 在做什么?为什么不直接堆 attention?

FFN 是单 token 内部的非线性加工:每个位置独立地做"升维 → 非线性 → 降维",给 attention 之后的 hidden state 加上独立位置的表达力

三步:上投影 / 激活 / 下投影

标准 (pre-GLU) FFN 形式:

$$\begin{equation} \mathrm{FFN}(\mathbf{x}) = W_{\text{down}} \cdot \phi(W_{\text{up}} \mathbf{x}) \label{eq:ffn-standard} \end{equation}$$

形状:

  • $\mathbf{x} \in \mathbb{R}^h$ (单 token 的 hidden state)
  • $W_{\text{up}} \in \mathbb{R}^{h_{\text{ffn}} \times h}$:升到中间维 $h_{\text{ffn}}$ (典型 $4h$)
  • $\phi$:非线性激活 (ReLU / GELU / SiLU)
  • $W_{\text{down}} \in \mathbb{R}^{h \times h_{\text{ffn}}}$:降回 $h$

核心特征:FFN 每个位置独立做,不跨位置。Attention 是序列维上的混合 (token 间互看),FFN 是 hidden 维上的非线性混合 (单 token 内部加工)。两者交替,形成 Transformer 的"先看别人 → 再消化" 工作模式。

为什么必须先升维再降维?

直觉:FFN 不是简单的"过非线性",而是借助高维空间引入复杂的非线性变换。

  • 升到 $4h$ 维是把信号投到更大空间,让非线性能在更多维度上独立作用
  • 降回 $h$ 维让输出可以被加到 residual stream 上 (维度必须匹配)
  • 没有升维直接 $\phi(\mathbf{x})$ 表达力极弱

Anthropic Transformer Circuits 视角:FFN 的中间层是模型存储"知识 / 特征 / lookup table" 的地方,升维是为了有足够空间存储这些特征。

GELU:把 dropout 连续化的激活

核心问题:ReLU 这种简单激活在 CNN 时代主导,为什么 Transformer / GPT 系全改用 GELU?

GELU 设计动机是把 dropout 的随机门控"连续化",输入越大保留概率越高,全程可微,解决 ReLU 在负值区的"死亡神经元" 问题

GELU 数学

Hendrycks & Gimpel 2016[1] 给出 GELU 定义:

$$\begin{equation} \mathrm{GELU}(x) = x \cdot \Phi(x) \label{eq:ffn-gelu} \end{equation}$$

其中 $\Phi(x)$ 是标准正态分布 $\mathcal{N}(0, 1)$ 的 CDF:

$$\begin{equation} \Phi(x) = \frac{1}{\sqrt{2\pi}} \int_{-\infty}^{x} e^{-t^2/2} \, dt \label{eq:ffn-phi} \end{equation}$$

工程上常用 tanh 近似 (CDF 无解析形式,这条算得快):

$$\begin{equation} \mathrm{GELU}(x) \approx 0.5 x \left(1 + \tanh\left[\sqrt{2/\pi}(x + 0.044715 x^3)\right]\right) \label{eq:ffn-gelu-approx} \end{equation}$$

设计直觉

GELU = 输入 × 保留概率,保留概率随输入大小递增:

  • $x = +3$: $\Phi(x) \approx 0.998$,几乎全保留 ($\mathrm{GELU} \approx 2.99$)
  • $x = 0$: $\Phi(0) = 0.5$,半保留 ($\mathrm{GELU}(0) = 0$)
  • $x = -3$: $\Phi(x) \approx 0.001$,几乎全抑制 ($\mathrm{GELU} \approx -0.004$)
  • 平滑过渡,全程可微;保留小幅负值 (与 ReLU 截断不同)

GPT 系全沿用

模型激活函数
GPT-1 (2018)GELU (首用)
BERTGELU ("following OpenAI GPT")
GPT-2 / GPT-3GELU
GPT-J / GPT-NeoXGELU

@tbl-ffn-gelu-adoption GELU 在 GPT 系 + BERT 主导 2018-2022

GELU 这条线在 2022 年达到顶点,之后被 SwiGLU 接管。

SwiGLU:引入 gating, "归功于神的恩典"

核心问题:SwiGLU 跟 GELU 看起来差不多 (都是平滑过渡),凭什么 Llama / PaLM / Qwen 全线改用?性能提升多大?

SwiGLU 引入门控机制,实测在 T5 上 perplexity 改善 2.4%,是 2023 年后 LLM 的事实标准激活;但 Shazeer 论文自己承认没有理论解释这种收益

SiLU / Swish: SwiGLU 的基础激活

Ramachandran et al. 2017[2] 用神经架构搜索找出 Swish 激活:

$$\begin{equation} \mathrm{Swish}(x) = x \cdot \sigma(\beta x) \label{eq:ffn-swish} \end{equation}$$

其中 $\sigma$ 是 sigmoid。Swish-1 (β=1) = SiLU = $x \cdot \sigma(x)$,是同一函数的不同命名。

SwiGLU 完整定义

Shazeer 2020[3] 提出 SwiGLU:

$$\begin{equation} \mathrm{SwiGLU}(\mathbf{x}) = \mathrm{SiLU}(W_{\text{gate}} \mathbf{x}) \odot (W_{\text{up}} \mathbf{x}) \label{eq:ffn-swiglu} \end{equation}$$

与标准 FFN 的根本差别:三个矩阵,引入门控。完整 SwiGLU FFN:

$$\begin{equation} \mathrm{FFN}_{\text{SwiGLU}}(\mathbf{x}) = W_{\text{down}} \cdot \left[\mathrm{SiLU}(W_{\text{gate}} \mathbf{x}) \odot (W_{\text{up}} \mathbf{x})\right] \label{eq:ffn-swiglu-full} \end{equation}$$

Gating 的直觉

  • $\mathrm{SiLU}(W_{\text{gate}} \mathbf{x})$: "开关信号",对每个 intermediate 维度独立决定通过多少
  • $W_{\text{up}} \mathbf{x}$: "内容信号",表达实际特征
  • 两者逐元素相乘:内容被开关调制

门控机制让模型可以学"哪些维度被激活",比单一非线性 (GELU / ReLU) 更灵活。

Shazeer 2020 Table 1 实证

ActivationT5 perplexity
ReLU baseline1.677
GELU1.660
GEGLU1.633 (最佳)
SwiGLU1.636 (次佳)

@tbl-ffn-shazeer-ablation Shazeer 2020 Table 1: GLU 变体在 T5 上的 perplexity 实测

SwiGLU 改善约 2.4%,GEGLU (GELU 变种 GLU) 略好一点。

Shazeer 的诚实自白

论文结尾原文:

"We offer no explanation as to why these architectures seem to work; we attribute their success, as all else, to divine benevolence."

作者直接承认:我也不知道为什么有用,归功于神的恩典。这条 honest disclosure 在深度学习论文里少见,也说明 SwiGLU 的优势是经验得出的,缺乏严谨理论。

工业全面采用

模型FFN 激活
PaLM (2022)SwiGLU (首批大规模)
LLaMA 1 / 2 / 3SwiGLU
Qwen 2 / 2.5 / 3SwiGLU
DeepSeek-V3SwiGLU
Gemma / Mistral / PhiSwiGLU

@tbl-ffn-swiglu-adoption 2023 年后 LLM 全线 SwiGLU

$h_{\text{ffn}} = 8h/3$ 怎么来的?

核心问题:SwiGLU 引入第三个矩阵,FFN 参数从 $2 \cdot h \cdot h_{\text{ffn}}$$3 \cdot h \cdot h_{\text{ffn}}$,多了 50%。Llama 实际用 $h_{\text{ffn}} \approx 8h/3$ 而非 $4h$,这个数字怎么来的?

为保持 SwiGLU FFN 参数与标准 4× FFN 相当,把 $h_{\text{ffn}}$ 缩到 8h/3,这是 SwiGLU 三矩阵补偿参数膨胀的设计

简单推导

标准 4× FFN 参数:$2 \cdot h \cdot 4h = 8h^2$

SwiGLU FFN 三矩阵参数:$3 \cdot h \cdot h_{\text{ffn}}$

要相等:

$$\begin{equation} 3 \cdot h \cdot h_{\text{ffn}} = 8h^2 \implies h_{\text{ffn}} = \frac{8h}{3} \approx 2.667h \label{eq:ffn-8over3} \end{equation}$$

Shazeer 原文表述等价:"将 $d_{\text{ff}}$ 缩减 2/3",即 $h_{\text{ffn}} = (2/3) \cdot 4h = 8h/3$

Llama 实际值:multiple_of 对齐

Llama 实际不直接用 $\lceil 8h/3 \rceil$,而是为了 GPU 友好向上对齐到 256 的倍数:

hidden_dim = 256 * ceil(4 * h * 2/3 / 256)

实际比例略高于 $8/3$:

模型$h$$h_{\text{ffn}}$比例
Llama 7B4096110082.686
Llama 13B5120138242.700
Llama 33B6656179202.692
Llama 65B8192220162.686

@tbl-ffn-llama-h-ffn Llama 1 实际 $h_{\text{ffn}}$ (multiple_of=256 对齐,略高于 8/3)

FFN 占模型多少参数和计算?

核心问题:一个 Transformer block 里 attention 和 FFN 谁更"重"?实测占多少参数,多少 FLOPs?

FFN 在标准 Transformer 里占 block 参数的 2/3,训练 FLOPs 也约 2/3。直觉上 FFN 比 attention 更重要 (从计算占比角度),但实际行为分工不同。

参数占比:代数恒等式

单 block 参数 (无 GLU,标准 4×):

部件参数
Attention ($W_Q, W_K, W_V, W_O$)$4h^2$
FFN ($W_{\text{up}}, W_{\text{down}}$)$2 \cdot h \cdot 4h = 8h^2$
Block 总$12h^2$

@tbl-ffn-block-params 标准 Transformer block 参数分布

FFN 占 $8/12 = 2/3$, attention 占 $4/12 = 1/3$。与 $h$ 无关,是结构性恒等。

GPT-3 175B 实测验证

GPT-3 175B 配置 (96 层,$h = 12288$):

  • Attention 参数 ≈ 58B
  • FFN 参数 ≈ 116B
  • FFN 占 66.7%,与代数恒等式一致

FLOPs 占比

单 token 前向 FLOPs:

部件FLOPs
FFN (4× 标准)$16 h^2$
Attention (Q/K/V 投影 + 输出投影)$8 h^2$
Attention (QK 内积 + softmax × V)$4 T h$ ($T$ = 序列长度)

短序列 $T \ll h$ 时,FFN : Attention ≈ 2 : 1, FFN 主导。

GPT-3 175B ($h = 12288, T = 2048$) 实测 FFN : Attention $\approx 1.85 : 1$, FFN 占约 65%。

Hoffmann et al. 2022 (Chinchilla) Appendix F 指出典型 LLM 训练中 FFN 贡献约 2/3 训练 FLOPs,与上述代数一致。

含义:FFN 是大模型的主要"重量"

  • 工程优化重点:FFN 矩阵乘的 kernel (cutlass / cuBLAS / Triton) 是性能瓶颈,不是 attention
  • 内存:FFN 中间激活 $h_{\text{ffn}} \cdot T \cdot B$ 很大,是 activation checkpointing 的重点
  • 量化 / 稀疏 / 剪枝:优化 FFN 收益远大于优化 attention

MoE:把 FFN 替换成稀疏专家

核心问题:既然 FFN 占了 2/3 参数和计算,能不能让它更"稀疏" 只激活一部分?

Mixture of Experts (MoE) 把单一 FFN 替换成 $N$ 个并行 expert FFN + 路由 (router),每个 token 只激活其中 $k$ 个 (top-k routing,通常 $k = 1$$2$),用稀疏激活换"参数大 / 计算小"

本章不展开 MoE 细节 (路由算法 / 负载均衡 / EP 通信),全部归 interconnect/05-LLM并行通信/08-专家并行:

  • DeepSeek-V3: 671B 总参数,37B 激活 (256 expert, top-8 + 1 shared)
  • Mixtral 8×7B: 47B 总参数,13B 激活 (8 expert, top-2)
  • Qwen3-MoE 系列

点到为止:MoE 是 FFN 的延伸,数据流和位置不变 (仍是 attention 之后),只是 FFN 内部稀疏化。

Takeaway

知识点核心结论
FFN 角色单 token 内非线性加工,与 attention 跨 token 混合互补
三步结构上投影 $W_{\text{up}}$ → 激活 → 下投影 $W_{\text{down}}$
标准比例$h_{\text{ffn}} = 4h$ (Vaswani 经验值,无理论)
GELU 定义$x \cdot \Phi(x)$, GPT-1 至 GPT-3 / BERT 全用
GELU 直觉把 dropout 连续化,输入越大保留概率越高
SiLU = Swish-1$x \cdot \sigma(x)$
SwiGLU 定义$\mathrm{SiLU}(W_{\text{gate}} \mathbf{x}) \odot (W_{\text{up}} \mathbf{x})$,三矩阵门控
Shazeer 实测T5 上 perplexity 改善 2.4% (1.677 → 1.636)
SwiGLU 现状2023 后 Llama / PaLM / Qwen / DeepSeek / Gemma / Mistral / Phi 全线
$8h/3$ 来源三矩阵保参数总量与 4× 等价:$3 h \cdot 8h/3 = 8h^2$
参数占比 (代数恒等)FFN 占 block 2/3, attention 占 1/3
FLOPs 占比短序列下 FFN : Attention ≈ 2 : 1, FFN 约 2/3 训练 FLOPs
MoEFFN 替换为稀疏 expert,详见专家并行章

开放问题

  • SwiGLU 为什么有用:Shazeer 自己承认无理论,业界 ablation 实测有效但缺机制解释;mechanistic interp 是否能给出答案仍开放
  • $h_{\text{ffn}}$ 的最优比例是否真的是 $\sim 8h/3$:业界默认沿用,但是否在大模型上真的最优,还无系统研究
  • 激活函数演化是否到终点:2023 后 SwiGLU 一统江湖,是否有下一代激活?GeGLU 实测略好但没人换
  • MoE 是否会取代 dense FFN:DeepSeek 路线给 MoE 巨大动力,但部署复杂;是否所有大模型最终都走 MoE 还开放

延伸阅读

参考资料

  1. Hendrycks, Gimpel. Gaussian Error Linear Units (GELU). 2016. https://arxiv.org/abs/1606.08415
  2. Ramachandran et al. Searching for Activation Functions (Swish/SiLU). 2017. https://arxiv.org/abs/1710.05941
  3. Shazeer. GLU Variants Improve Transformer. 2020. https://arxiv.org/abs/2002.05202