Skip to content

LLM 激活函数与 FFN 面试题

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

1. 标准 FFN 块的计算公式

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

FFN(x)=W2Act(W1x+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.044715x3)))

Swish(SiLU)

Swish(x)=xσ(x)=x1+ex

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

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

标准 GLU

GLU(x)=(xW1+b1)σ(xW2+b2)

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

SwiGLU(LLaMA 采用)

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

GeGLU

GeGLU(x)=(xW1)GeLU(xW2)

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

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

5. 参数量计算示例

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

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