✨ 复制成功!

以文会友,打造好学人设!

📋 已复制到剪贴板:

FFN 在 Transformer 中的作用是什么?为什么中间维度通常放大 4 倍?

创建时间:2026-09-15 更新时间:2026-09-16 阅读次数:1481 次 分类:模型架构与Transformer

1、FFN 在 Transformer 中的作用

标准 FFN(Position-wise Feed-Forward Network)公式:

FFN(x) = W_2 · activation(W_1 · x + b_1) + b_2
  • 输入 d_model
  • 中间维度 d_ff
  • 输出回到 d_model
  • 对每个位置独立作用(position-wise),所以叫 Position-wise FFN

它在 Transformer 里的作用,可以从几个角度理解:

(1)提供非线性变换

Attention 本身是加权求和,本质是线性操作(softmax 是非线性,但主要做归一化,不是特征变换)。

  • 如果没有 FFN,整个 Transformer 基本是线性 + softmax。
  • FFN 里的激活函数(ReLU、GELU、SwiGLU)提供非线性。
  • 非线性是深度网络表达复杂函数的前提。

(2)做特征变换和升维再降维

  • Attention 负责混合信息:让 token 之间交换信息。
  • FFN 负责变换信息:对每个 token 的表示做非线性映射。
  • 先升到高维,再降回原维度,相当于在高维空间做特征组合。

分工可以这样理解:

  • Attention:token 之间“通信”。
  • FFN:每个 token 内部“计算”。

(3)存储知识

这是近年研究的重要发现。

  • FFN 的参数量通常占 Transformer 的 2/3。
  • 有研究认为 FFN 是模型的键值记忆(key-value memory)。
  • 中间层的神经元可能对应特定知识或模式。
  • 所以 FFN 不只是“加工”,还承担知识存储功能。

(4)增加模型容量

  • Attention 负责关系建模,容量有限。
  • FFN 提供大量参数,增加模型容量。
  • 去掉 FFN,模型效果会大幅下降。

(5)逐位置独立,不引入位置间依赖

  • FFN 对每个位置用同一组参数,独立计算。
  • 不混合 token 信息,混合交给 Attention。
  • 这样分工清晰,也便于并行。

一句话:Attention 负责 token 间信息交换,FFN 负责逐 token 的非线性特征变换和知识存储。

2、为什么中间维度通常放大 4 倍

标准 Transformer 里:

d_ff = 4 · d_model

比如:

  • 原始 Transformer:d_model = 512,d_ff = 2048。
  • BERT-base:d_model = 768,d_ff = 3072。
  • GPT-3:d_model = 12288,d_ff = 49152。

为什么是 4 倍?原因有几层:

(1)经验规律,不是理论推导

  • 4 倍是原始论文的选择,后来被广泛沿用。
  • 它不是数学上唯一最优,而是实验上效果好、工程上方便。
  • 类似 CNN 里的经验设计,没有严格证明。

(2)升维提供更大的特征空间

  • 先升到高维,让模型在高维空间做非线性组合。
  • 再降回原维度,相当于学习一个低秩或稀疏的高维表示。
  • 高维中间层能表达更复杂的特征交互。

(3)参数量和计算量的平衡

FFN 参数量:

2 · d_model · d_ff
  • d_ff = 4 · d_model 时,FFN 参数量约 8 · d_model²。
  • Attention 参数量约 4 · d_model²。
  • 两者量级相当,FFN 略多,整体平衡。

如果 d_ff 太小:

  • 非线性表达能力不足。
  • 模型容量不够。

如果 d_ff 太大:

  • 参数量和计算量爆炸。
  • 收益递减。

4 倍是效果和成本的折中。

(4)和 Attention 的计算量匹配

  • Attention 计算量:O(n² · d_model)
  • FFN 计算量:O(n · d_model · d_ff)
  • 当 d_ff = 4 · d_model,短序列时 FFN 和 Attention 计算量量级相当。
  • 这样两者不会一方成为明显瓶颈。

(5)不是所有模型都严格 4 倍

现代模型有变化:

  • PaLM:d_ff = 4 · d_model。
  • LLaMA:用 SwiGLU,d_ff 约 8/3 · d_model,因为 SwiGLU 有三个矩阵,参数量要平衡。
  • MoE:每个专家可以更小,总参数量靠专家数堆。
  • 一些模型:用 d_ff = 2 · d_model 或 6 · d_model,看实验。

所以 4 倍是经典默认值,不是铁律。

(6)和激活函数有关

  • ReLU/GELU:通常 4 倍。
  • SwiGLU/GLU 变体:因为多了一个门控矩阵,d_ff 会调小,常见 8/3 倍。
  • 目的是保持总参数量和计算量相近。

3、一句话总结

FFN 负责逐 token 的非线性变换和知识存储,和 Attention 的 token 间信息交换分工。中间维度放大 4 倍是经验默认值,目的是提供足够大的特征空间和模型容量,同时平衡参数量、计算量和 Attention 的开销。现代模型用 SwiGLU 时会调整到约 8/3 倍。

4、这道面试题的质量点评

优点

  • 聚焦明确:两问都围绕 FFN,逻辑连贯。
  • 区分度好:
    • 初级:能说“提供非线性”。
    • 中级:能说“Attention 混合,FFN 变换”,以及参数量平衡。
    • 高级:能说知识存储、SwiGLU 的 8/3 倍、和 Attention 计算量匹配。
  • 贴近实践:FFN 占参数量 2/3,是模型设计和优化的重点。
  • 有追问空间:可以追问知识存储、SwiGLU、MoE、FFN 剪枝。

缺点

  • “4 倍”容易背:标准答案就是“经验值 + 平衡”,候选人可能只答这一句。
  • 缺少场景:没问“你实际调过 d_ff 吗?影响如何?”
  • 没覆盖 SwiGLU:这是现代模型主流,题目没提,需要追问。
  • 知识存储偏研究:如果面试官不追问,候选人可能答不到。

总体评价

质量:中上偏上。 适合作为 Transformer 基础题,能区分“只知道 FFN 是两层全连接”和“理解 FFN 作用与设计取舍”的人。建议追问:

  • “FFN 和 Attention 的分工是什么?”
  • “SwiGLU 为什么用 8/3 倍?”
  • “FFN 是知识存储吗?有什么证据?”
  • “d_ff 调大调小会怎样?”

5、怎么回答才是最好的

回答原则

  • 先给分工:Attention 混合,FFN 变换。
  • 说清作用:非线性、特征变换、知识存储、增加容量。
  • 解释 4 倍:经验值、特征空间、参数量平衡、计算量匹配。
  • 主动提变体:SwiGLU 的 8/3 倍、MoE。
  • 结合实践:说“我们调过 d_ff,影响如何”。

推荐回答结构

“FFN 的作用可以从分工理解:Attention 负责 token 之间的信息交换,FFN 负责每个 token 内部的非线性变换。Attention 基本是线性加权,FFN 提供非线性,是深度网络表达能力的关键。”

“另外,FFN 参数量占 Transformer 的 2/3,有研究认为它承担知识存储功能,类似键值记忆。去掉 FFN,模型效果会大幅下降。”

“中间维度放大 4 倍,主要是经验默认值。先升到高维做非线性组合,再降回原维度,提供更大的特征空间和模型容量。同时 4 倍能让 FFN 参数量和 Attention 量级相当,计算量也匹配,是效果和成本的折中。”

“不过 4 倍不是铁律。LLaMA 用 SwiGLU,因为多了一个门控矩阵,d_ff 调到约 8/3 倍,保持参数量相近。MoE 则是把 FFN 拆成多个专家,每个专家可以更小。”

“我们实际调过 d_ff,太大收益递减还费显存,太小效果明显下降,4 倍左右是合理起点。”

加分点

  • 提到 Attention 混合 vs FFN 变换、知识存储、参数量 2/3。
  • 提到 参数量平衡、计算量匹配、SwiGLU 8/3 倍。
  • 提到 MoE、FFN 剪枝。
  • 结合真实调参经验。

减分点

  • 只说“提供非线性”,不展开。
  • 只说“4 倍是经验值”,不解释为什么。
  • 不知道 SwiGLU 的 8/3 倍。
  • 说“4 倍是理论最优”。

📌 面试天下网:一款服务于上班族的口袋书,让大家在地铁里/公交上可以学习大模型技术!
📌 网站公告:【悬赏 200 元/篇】寻找“大模型面试战场”的一手回忆录
📌 网站公告:【大模型/Agent面试陪练1V1指导】正式启动......

评论专区

评论加载中...