Skip to content

LLM 激活函数与 FFN 面试题 ​

内容整理自学习笔记,仅供面试备考参考;不构成录用、培训或考试承诺。

1. 标准 FFN 块的计算公式 ​

Transformer 中标准 FFN 块包含两个线性变换和一个激活函数:

FFN(x)=W2⋅Act(W1⋅x+b1)+b2

其中 W₁ ∈ R^(d×4d),W₂ ∈ R^(4d×d),中间维度为标准隐藏维度的 4 倍。

2. 常见激活函数 ​

GeLU(Gaussian Error Linear Unit) ​

GeLU(x)=x⋅Φ(x)

其中 Φ(x) 为标准正态分布的累积分布函数。GeLU 可视为 ReLU 的平滑版本,在 BERT、GPT 系列中广泛应用。

近似计算:

GeLU(x)≈0.5x⋅(1+tanh⁡(2/π⋅(x+0.044715⋅x3)))

Swish(SiLU) ​

Swish(x)=x⋅σ(x)=x1+e−x

SiLU 即 β=1 时的 Swish;该形式被 PaLM 等模型采用。相比 ReLU 具有平滑、非单调的特性。

3. GLU(Gated Linear Unit)及其变体 ​

标准 GLU ​

GLU(x)=(x⋅W1+b1)⊗σ(x⋅W2+b2)

GLU 引入门控机制,将输入分为两条路径,一条进行线性变换,另一条通过 Sigmoid 门控。

SwiGLU(LLaMA 采用) ​

SwiGLU(x)=(x⋅W1)⊗SiLU(x⋅W2)
  • 使用 3 个可训练权重矩阵(而非 2 个)
  • 中间维度约为 4d × 2/3(而非 4d),参数量与标准 FFN 基本持平
  • 在 LLaMA 等模型中表现优于标准 FFN

GeGLU ​

GeGLU(x)=(x⋅W1)⊗GeLU(x⋅W2)

4. 各模型的激活函数选型 ​

模型FFN 类型激活函数
LLaMA / LLaMA2SwiGLUSiLU
GPT 系列标准 FFNGeLU
PaLMSwiGLUSwish (SiLU)
ChatGLMSwiGLUSiLU
BLOOM标准 FFNGeLU
BERT标准 FFNGeLU

5. 参数量计算示例 ​

以 LLaMA-7B(hidden_size=4096)为例:

标准 FFN 中间维度:4×4096=16384SwiGLU 中间维度:23×16384≈11008 (取 128 的倍数)11008/128=86