人人都会AI编程

3.6 前馈神经网络(FFN)、层归一化、残差连接的作用

更新时间:2026-07-09

在第 3 章的前面几节中,我们拆解了 Transformer 最耀眼的创新——自注意力与多头机制,以及让模型感知序列次序的位置编码。但仅靠注意力层,还不足以解释为什么 Transformer 能被堆叠到上百层、参数量推到千亿级别(回顾 2.1 节的规模画像)。真正让深层网络“训得动、跑得稳、堆得高”的,是三个看似“配角”却不可或缺的组件:前馈神经网络(FFN)、层归一化(Layer Normalization)和残差连接(Residual Connection)。它们共同构成了 Transformer Block 的“骨架与循环系统”。


一、前馈神经网络(FFN):注意力之外的“本地精加工车间”

1. 结构形式

在 Transformer 的每一层中,注意力子层之后都跟着一个 FFN。它对序列中的每一个位置(Token)独立进行相同的运算,数学形式为:

$$\text{FFN}(x) = \text{activation}(xW_1 + b_1)W_2 + b_2$$

典型的隐藏层维度 $d_{ff}$ 是输入维度 $d_{model}$ 的 4 倍(如 512→2048),先把向量升维投影到高维空间,经过非线性激活后再降维回来。

2. 核心作用:引入非线性与复杂特征变换

自注意力本质上是输入的加权和(线性变换后再 Softmax),无论堆多少层纯注意力,整体上仍近似一个复杂的线性系统。FFN 通过引入逐元素的非线性激活函数(ReLU、GELU 或 SwiGLU),为模型注入高维非线性拟合能力,使其能够学习更复杂的函数映射。

实用类比:如果把注意力比作“开会讨论,整合各方信息”,FFN 就是会后“每个人回到自己工位,独立深度加工自己拿到的会议纪要”。

3. 参数规模的“隐形大户”

这里要呼应 2.1 节的关键认知:在一个标准 Transformer 中,FFN 通常贡献了约 2/3 的总参数量。因为 $W_1$ 和 $W_2$ 的维度是 $d_{model} \times 4d_{model}$ 和 $4d_{model} \times d_{model}$,参数量远大于注意力层的四个投影矩阵。后续 MoE 架构(6.5 节)正是盯上了 FFN 这个“参数大户”进行稀疏化改造——用多个专家网络替代单一 FFN,在保持总参数量巨大的同时降低每次前向计算的激活参数。

4. 激活函数的演进

  • ReLU:早期常用,简单但存在“神经元死亡”问题;
  • GELU:平滑版 ReLU,在 BERT、GPT-3 等模型中表现更稳;
  • SwiGLU:门控机制(结合 Swish 与 GLU),被 LLaMA、PaLM 等现代大模型广泛采用,能在同等参数量下获得更好的下游任务性能。

二、层归一化(Layer Normalization):平定数值“暴走”

1. 解决什么问题?

深度神经网络在训练时,每一层的输入分布会随着前层参数更新而剧烈变化,这种现象称为内部协变量偏移(Internal Covariate Shift)。在序列任务中,文本长度差异大、批次间统计量不稳定,会导致梯度信号忽大忽小,训练难以收敛。

2. 为什么不用 BatchNorm?

CV 领域常用的 BatchNorm 依赖批次维度(Batch Dimension)计算均值和方差。但 NLP 中:

  • 序列长度不一,填充(Padding)会污染统计量;
  • 大模型训练 batch size 极大,跨设备同步均值方差通信开销高;
  • 推理时若 batch size 为 1(单条请求),统计量极不稳定。

因此 Transformer 选择了层归一化(LayerNorm):对单个样本的同一层所有特征维度计算均值和方差,完全脱离 batch 维度。

3. Pre-Norm vs Post-Norm:现代大模型的关键取舍

原始 Transformer 论文采用 Post-Norm(子层运算后再归一化):
$$x_{out} = \text{LayerNorm}(x + \text{Sublayer}(x))$$

但当模型深度增加到 32 层、64 层甚至上百层时,Post-Norm 在训练初期容易出现梯度爆炸或训练不收敛。因此,从 GPT-3 到 LLaMA、Qwen 等现代大模型普遍改用 Pre-Norm
$$x_{out} = x + \text{Sublayer}(\text{LayerNorm}(x))$$

即:先归一化,再进入注意力/FFN,最后做残差相加。Pre-Norm 把每层输出的方差更稳定地控制在 1 附近,让百层堆叠成为可能。

4. RMSNorm:进一步简化

LLaMA、Qwen2 等模型还采用了 RMSNorm(Root Mean Square Layer Normalization),去掉了 LayerNorm 中的均值中心化(re-centering)操作,只保留按均方根缩放。实践表明,在 Transformer 中均值项并非必要,去掉后训练速度更快且稳定性不减。


三、残差连接(Residual Connection / Skip Connection):梯度“高速公路”

1. 从 ResNet 到 Transformer

残差连接最初来自计算机视觉的 ResNet,核心思想极其简单:让子层的输出加上子层的输入
$$output = x + \text{Sublayer}(x)$$

2. 核心作用一:缓解梯度消失

在反向传播时,如果没有捷径,梯度必须逐层连乘地回传。当网络很深时,小于 1 的梯度连乘会指数级衰减,导致底层参数几乎得不到更新(梯度消失)。残差连接提供了一条梯度高速公路,让梯度可以直接跳过若干层回传,从而支持数十层乃至上百层的堆叠——这正是大模型“规模”在深度维度的物理基础。

3. 核心作用二:保护已学信息

残差连接让网络可以很容易地学习恒等映射(Identity Mapping)。如果某一层发现自己没什么可学的,它可以把权重推向零,让输出近似等于输入。这意味着:

  • 深层网络不会比浅层网络更差(至少可以退化为浅层);
  • 模型可以逐层叠加能力,而不是每一层都必须重写表示。

实用类比:残差连接就像城市中的高架桥。地面道路(主网络)堵车或施工时,车辆(梯度/信息)仍可通过高架桥快速通行,保证整个交通系统不会因为某一段地面路而瘫痪。


四、三者的协同:一个 Transformer Block 的完整流水线

把三者放在一起,一个现代大模型(Pre-Norm 架构)的典型 Block 运行如下:

  1. 输入 $x$ 先经过 RMSNorm/LayerNorm 平定数值范围;
  2. 进入 Multi-Head Self-Attention,进行全局信息整合;
  3. 残差连接:注意力输出与原始输入相加;
  4. 再次经过 RMSNorm/LayerNorm
  5. 进入 FFN 进行非线性特征变换;
  6. 残差连接:FFN 输出与前一步结果相加;
  7. 输出至下一层。

这套组合拳的效果是:注意力负责“全局沟通”,FFN 负责“本地精加工”,LayerNorm 负责“数值稳定”,残差连接负责“深度可达”。缺少任何一个,现代大模型都无法从 6 层的 BERT-Base 扩展到 96 层的 GPT-3 或上百层的 Dense/MoE 大模型。


五、与后续章节的衔接

理解了这三个组件,你就能明白第 4 章(预训练)中为什么能稳定进行混合精度训练(FP16/BF16)——LayerNorm 的数值稳定作用在一定程度上缓冲了低精度计算的溢出风险;也能理解为什么梯度裁剪(Gradient Clipping) 常与这些结构配合使用(4.5 节)。

同时,这也为 6.5 节的 MoE(混合专家模型) 埋下伏笔:MoE 的核心操作正是把标准 FFN 替换为“稀疏激活的多专家 FFN”,而 LayerNorm 和残差连接的设计让这种替换可以在不破坏训练稳定性的前提下进行。


六、小结

| 组件 | 核心功能 | 工程意义 |
|------|----------|----------|
| FFN | 逐位置非线性变换 | 提升模型容量,占约 2/3 参数,MoE 的主要改造对象 |
| LayerNorm/RMSNorm | 单样本内特征归一化 | 稳定前向/反向数值,支撑 Pre-Norm 深网络架构 |
| 残差连接 | 跳跃相加,保留原始信号 | 打通梯度回传,允许网络深度扩展到百层以上 |

这三个组件没有自注意力那样“颠覆性”的光环,却是 Transformer 从一篇论文变成一个可靠工业基础设施的工程基石。当你在下一次读到某模型的技术报告,看到“Pre-RMSNorm + SwiGLU FFN + Residual”时,你就知道它正在享受这三者带来的深度与稳定性红利。