1. 介绍一下 FFN 块计算公式?

前馈神经网络(Feed-Forward Network,FFN)块是 Transformer 模型中的核心组成部分,其计算公式如下:

FFN ( x ) = f ( x W 1 + b 1 ) W 2 + b 2 \text{FFN}(x) = f(xW_1 + b_1)W_2 + b_2 FFN(x)=f(xW1+b1)W2+b2

其中:

  • x x x 是输入向量
  • W 1 W_1 W1 W 2 W_2 W2 是可训练权重矩阵
  • b 1 b_1 b1 b 2 b_2 b2 是偏置项
  • f f f是非线性激活函数(如 ReLU、GeLU 或 Swish)

补充说明
在典型实现中,中间层的维度会扩展到 (4h)(其中 (h) 是隐藏层维度),然后再投影回原始维度。这种"扩展-压缩"的设计增加了模型的表达能力。

2. 介绍一下 GeLU 计算公式?

高斯误差线性单元(Gaussian Error Linear Unit,GeLU)激活函数的计算公式为:

GeLU ( x ) ≈ 0.5 x ( 1 + tanh ⁡ ( 2 π ( x + 0.044715 x 3 ) ) ) \text{GeLU}(x) \approx 0.5x\left(1 + \tanh\left(\sqrt{\frac{2}{\pi}}(x + 0.044715x^3)\right)\right) GeLU(x)0.5x(1+tanh(π2 (x+0.044715x3)))

补充说明
GeLU 通过将输入与标准正态分布的累积分布函数相乘来实现随机正则化效果,被广泛应用于 BERT、GPT 等现代 Transformer 模型中。

3. 介绍一下 Swish 计算公式?

Swish 激活函数的计算公式为:

Swish β ( x ) = x ⋅ σ ( β x ) \text{Swish}_{\beta}(x) = x \cdot \sigma(\beta x) Swishβ(x)=xσ(βx)

其中 σ \sigma σ 是 sigmoid 函数, β \beta β是可学习或固定的参数(通常默认为 1)。

补充说明
Swish 是 Google 提出的激活函数,实验证明在许多任务上优于 ReLU。当 β = 1 \beta = 1 β=1时,也称为 SiLU 激活函数。

4. 介绍一下使用 GLU 线性门控单元的 FFN 块计算公式?

门控线性单元(Gated Linear Units,GLU)的 FFN 变体计算公式为:

GLU ( x ) = σ ( x W + b ) ⊗ x V \text{GLU}(x) = \sigma(xW + b) \otimes xV GLU(x)=σ(xW+b)xV
FFN GLU = ( f ( x W 1 ) ⊗ x V ) W 2 \text{FFN}_{\text{GLU}} = (f(xW_1) \otimes xV)W_2 FFNGLU=(f(xW1)xV)W2

其中 ⊗ \otimes 表示逐元素乘法。

补充说明
GLU 引入了门控机制,可以让模型学习到更复杂的信息流动模式。原始 GLU 使用 sigmoid 作为门控函数。

5. 介绍一下使用 GeLU 的 GLU 块计算公式?

将 GeLU 与 GLU 结合得到的 GeGLU 计算公式为:

GeGLU ( x ) = GeLU ( x W ) ⊗ x V \text{GeGLU}(x) = \text{GeLU}(xW) \otimes xV GeGLU(x)=GeLU(xW)xV

补充说明
GeGLU 结合了 GeLU 的平滑特性和 GLU 的门控机制,在 PaLM 等大型模型中被证明非常有效。

6. 介绍一下使用 Swish 的 GLU 块计算公式?

将 Swish 与 GLU 结合得到的 SwiGLU 计算公式为:

SwiGLU = Swish β ( x W ) ⊗ x V \text{SwiGLU} = \text{Swish}_{\beta}(xW) \otimes xV SwiGLU=Swishβ(xW)xV

参数数量对比

  • 标准 FFN:2 个可训练权重矩阵,中间维度为 4 h 4h 4h
  • GLU 变体:3 个可训练权重矩阵,中间维度为 4 h × 2 3 \frac{4h \times 2}{3} 34h×2

补充说明
SwiGLU 在 LLaMA 等现代大语言模型中广泛使用,虽然需要更多的参数,但通常能带来更好的性能表现。中间维度的调整是为了保持与标准 FFN 相近的总参数量。

面试额外补充要点

  1. 门控机制的优势:GLU 变体通过门控机制可以更好地控制信息流,减少梯度消失问题
  2. 计算效率权衡:虽然 GLU 变体需要更多参数,但实际计算效率可能更高(更好的收敛性)
  3. 实践选择:现代大模型(如 LLaMA、PaLM)多采用 SwiGLU 或 GeGLU
  4. 维度设计:中间维度为 4 h × 2 3 \frac{4h \times 2}{3} 34h×2 是为了保持总参数量与标准 FFN 大致相当
  5. 激活函数选择:不同激活函数适合不同任务,GeLU 和 Swish 在大模型中表现优异源于其平滑性和更好的梯度特性

7. 各LLMS 都使用哪种激活函数?

在这里插入图片描述
4h=44096=16384
2/3
4h=10022->11008
11008/128=86
在这里插入图片描述

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐