一句话定义
FFN 是 Transformer 每个层里注意力之后的子层:对每个 token 独立地做「升维 → 激活 → 降维」,不与其他位置交互。
结构
典型结构是两层线性变换加一个非线性激活:
- 第一层把维度扩展到中间维度,常见是原维度的 4 倍。
- 激活函数做非线性变换,常见 GeLU、SwiGLU。
- 第二层把维度压回原维度,便于残差相加。
因为它对每个位置独立计算,所以没有跨 token 的信息混合;跨位置的信息交换全部由 Attention 完成。
为什么它很重要
在多数 Transformer 中,FFN 的参数量占全模型的一半以上,甚至接近三分之二。注意力决定「看哪里」,FFN 则承担大量的特征变换和知识存储。很多模型容量扩展,本质上是在扩大 FFN 的中间维度。中间维度通常取 4 倍,是扩容时最常调整的超参数之一;越大容量越强,显存和计算也越高,因此它常被当作模型容量的旋钮。推理时它的权重读取也是显存带宽压力的一部分。
与其他结构的关系
- MoE 把单个 FFN 换成多个专家 FFN,再加一个路由网络,让每个 token 只经过少数专家。
- 一些高效架构用门控线性单元(GLU)变体替代普通两层结构,在相近参数量下提升效果。
- 并行化时 FFN 往往是显存和通信的主要压力来源。
用在哪里
- 理解 Transformer 参数量分布、模型扩容和推理显存时。
- MoE、GLU 等架构改动的起点;调 FFN 中间维度就是调模型容量。
常见误区
- FFN 不是「全连接分类头」,它在每一层内部都重复出现。
- FFN 不做位置混合,不要把它和注意力混为一谈。
- 参数量大不等于计算量同比例大:MoE 就是利用这个差异做稀疏激活。
相关概念
- Transformer:FFN 所属的主干结构。
- MoE:用多个专家替代单个 FFN。
- MHA:与 FFN 交替堆叠的注意力子层。