课程0基础Agent开发课 / LLM基础 / 残差连接与LayerNorm-深层网络稳定训练的秘密
— 11 min read

残差连接与LayerNorm-深层网络稳定训练的秘密

> **[进阶选读]** 本文适合想深入理解 LLM 内部机制的读者。了解深层网络如何保持稳定训练的底层机制。路径 A 的读者可以跳过。

残差连接与 LayerNorm:深层网络稳定训练的秘密

[进阶选读] 本文适合想深入理解 LLM 内部机制的读者。了解深层网络如何保持稳定训练的底层机制。路径 A 的读者可以跳过。


[进阶选读] 本篇讲解 Transformer 内部稳定训练的工程机制,属于模型架构细节。如果你的目标是应用开发(路径 A),可以跳过本篇,不影响后续学习。

GPT-4 拥有据传超过 100 层的 Transformer 层叠。DeepSeek V3 有 61 层。就连"小模型" LLaMA-7B 也有 32 层。

为什么可以叠这么多层?叠深了不会把信号搞乱吗?

背后有两个看起来简单、却极为关键的设计:残差连接(Residual Connection)和 层归一化(Layer Normalization,LayerNorm)。


1.1 问题根源:深层网络为什么难训练

1.1.1 深层的必要性与其代价

为什么需要深层网络?每一层 Transformer 都在对 token 表示做一次精炼——浅层捕捉表面语法特征,深层提炼抽象语义。LLM 之所以能理解复杂的语言和逻辑关系,依赖于这种多层次的信息提炼。没有足够的深度,模型无法学到高级的语言理解能力。

残差连接梯度流对比
图 6.18:有无残差连接的梯度流对比——残差跳跃连接为深层网络建立梯度高速公路

但深度带来了一个数学上的根本问题:梯度消失。

1.1.2 梯度消失与梯度爆炸

神经网络的训练靠反向传播(Backpropagation,从输出层向输入层逐层计算梯度、更新参数的过程)——通过计算损失对每个参数的梯度,来决定参数如何调整。

梯度从输出层往输入层逐层传递。每经过一层,梯度值要乘以该层的参数矩阵(以及激活函数的导数)。如果每层的梯度系数略小于 1,经过 50 层之后,梯度就变成一个极小的数,接近于零——梯度消失,靠近输入的层完全得不到更新信号,学不到东西。

反之,如果每层的梯度系数略大于 1,经过 50 层,梯度就变成一个天文数字——梯度爆炸,参数更新剧烈,训练直接崩溃。

类比接力赛传话:一条消息从最后一个人往第一个人传,每次传递都有一点失真。20 个人之后,第一个人收到的消息已经面目全非,甚至完全空白。

这个问题在 2015 年之前极大地限制了网络深度——超过 20 层的网络几乎无法有效训练。

1.1.3 数值不稳定问题

更深的层数还带来另一个问题:随着前向传播的进行,各层的激活值(Activation,神经元经过激活函数后的输出值)量级可能差异悬殊。有的层输出值在 0.001 数量级,有的层输出值在 1000 数量级,这种不一致会导致训练极不稳定。


1.2 解决方案一:残差连接

1.2.1 核心思想

残差连接(Residual Connection)由 He Kaiming 等人在 2015 年的 ResNet 论文中提出,后来被 Transformer 全面采用。

核心思路只有一行公式:

非程序员可跳过代码,重点看文字说明

code
输出 = 输入 + F(输入)

其中 F(输入) 是某一层的变换操作(比如一个注意力模块,或者一个前馈网络)。

不用残差连接时,一层的输出完全依赖变换结果。用了残差连接后,输出 = 变换结果 + 原始输入。原始输入通过一条"捷径"(Shortcut)绕过变换,直接加到输出里。

1.2.2 直觉类比:在原有基础上微调

想象学一门新技能:

  • 没有残差连接的学习:每次都从空白开始重新学,上一层学到的内容在传到下一层时可能完全被覆盖。
  • 有残差连接的学习:每一层只学"在现有基础上需要补充什么",积累式地增强,不破坏已有能力。

更形象地说,残差连接是一条"加法高速公路":信息流有两条路,一条经过复杂变换,一条直接"高速通行"不做任何处理,最后两路相加。

1.2.3 为什么能解决梯度消失

反向传播时,梯度经过加法节点的规则是:两条路径的梯度直接相加

即使变换路径 F 的梯度消失为零,"高速公路"那条路径的梯度是 1(梯度原样传回),整体梯度不会消失。

非程序员可跳过代码,重点看文字说明

python
# 反向传播时,对输入的梯度:
d_output / d_input = d_F(input) / d_input + 1
#                                           ↑
#                           这个 "+1" 确保梯度永远不会消失为零

有了这个 "+1",即使网络有 100 层,梯度也能从最后一层顺畅地流回第一层,每一层都能收到足够的更新信号。


1.3 解决方案二:层归一化(LayerNorm)

1.3.1 BatchNorm 在 LLM 中为什么不适用

在图像处理领域,Batch Normalization 是标准配置。为什么 LLM 不用 BatchNorm,而要发明 LayerNorm?

BatchNorm 的工作方式:在一个批次中,对同一个特征维度上的所有样本做归一化。这要求批次中的所有样本是可比较的,且批次足够大(否则统计量不准确)。

LLM 有两个特性使 BatchNorm 无法工作:第一,文本序列长度不同,不同样本在对应位置上的激活值并不"可比";第二,在推理(生成)阶段,通常一次只处理一个序列(batch size = 1),BatchNorm 在批次大小为 1 时完全失效。

LayerNorm 的工作方式:对每个样本独立地在特征维度上做归一化,与批次大小无关,与序列长度无关,完美适配 LLM 的特性。

1.3.2 为什么需要归一化

即使有了残差连接,深层网络中还存在数值量级不一致的问题。想象经过 32 层的残差叠加,每层都往输入上"加了一点东西",累积下来,第 32 层的激活值可能比第 1 层大几十倍。这种量级漂移会让后续层的计算严重不稳定。

归一化(Normalization)的作用就是把每一层的输出"拉回"到一个合理的数值范围,消除量级漂移。

1.3.3 Layer Norm vs Batch Norm

归一化有多种方式,最重要的区分是沿哪个维度归一化

批归一化(Batch Normalization,BatchNorm):对每个特征维度,在一个批次(Batch)内的所有样本上做归一化。

层归一化(Layer Normalization,LayerNorm):对每个样本,在该样本的所有特征维度上做归一化。

类比:

  • BatchNorm:比较班里同学的某门课成绩,按科目算班级平均分,每个学生的该科成绩都减去班级平均分。
  • LayerNorm:比较一个学生所有科目的成绩,按个人算个人的平均分,该学生每科成绩都减去自己的总平均。

LLM 为什么选择 LayerNorm 而非 BatchNorm

问题 BatchNorm 的困难 LayerNorm 的表现
变长序列 每个样本长度不同,跨样本归一化难以实现 在每个 Token 的特征维度内归一化,长度无关
批次大小 小批次时统计量不准确,效果差 和批次大小无关,单条样本也能工作
自回归推理 推理时批次为 1,BatchNorm 完全失效 推理时正常工作
分布式训练 多卡时需要同步统计量,通信开销大 每个样本独立,无需跨设备通信

结论:LLM 的自回归特性(逐 Token 生成)、变长序列、超大规模分布式训练,让 LayerNorm 成为唯一合理的选择。

1.3.4 Pre-LN vs Post-LN

LayerNorm 在 Transformer 层里放在哪个位置?历史上有两种方案:

Post-LN(原始 Transformer 论文的方案):

code
输出 = LayerNorm(输入 + F(输入))

先做残差加法,再做 LayerNorm。

Pre-LN(GPT-2 以后的主流方案):

code
输出 = 输入 + F(LayerNorm(输入))

先对输入做 LayerNorm,再送进变换函数,最后做残差加法。

Pre-LN 的关键优势:训练更稳定,不容易出现梯度爆炸

原因:Post-LN 中,训练初期各层参数随机,F(输入) 的值可能很大,残差加法后量级可能突然变大,LayerNorm 来不及"救场"。Pre-LN 先归一化再变换,每一层的输入量级都是受控的,整个训练过程平稳得多。

代价是 Pre-LN 在层数较浅时效果略低于 Post-LN(有一点表达能力的损失),但在大模型(数十层以上)场景下,稳定性远比那一点点效果更重要。

这就是为什么 GPT 系列、LLaMA、Qwen、DeepSeek 全部采用 Pre-LN。


1.4 两者在 Transformer 层中的位置

一个标准的 Transformer 层由两个子层组成:自注意力(Self-Attention)和前馈网络(FFN,Feed-Forward Network)。残差连接和 LayerNorm 围绕这两个子层各出现一次。

输入 x

LayerNorm

自注意力
Self-Attention

+

中间表示

LayerNorm

前馈网络
FFN

+

输出

完整的数据流(Pre-LN 方案):

  1. 输入 x 进入 LayerNorm,得到归一化后的表示
  2. 归一化表示进入自注意力模块,产生注意力输出
  3. 注意力输出与原始输入 x 相加(第一个残差连接)
  4. 相加结果再次进入 LayerNorm,得到新的归一化表示
  5. 归一化表示进入前馈网络,产生 FFN 输出
  6. FFN 输出与步骤 3 的结果相加(第二个残差连接)
  7. 得到这一层的最终输出,传入下一层

每一层都是这个结构,堆叠 32 层、61 层乃至更多层,就构成了完整的 LLM。


1.5 完整对比表格

维度 无残差连接 有残差连接
梯度流动 经过每层乘法,可能消失为零 加法高速公路保证梯度至少为 1
可训练深度 实践中难以超过 20 层 轻松支持 100+ 层
层的学习目标 从零学完整变换 只需学"修正量"(残差)
初始化行为 随机初始化影响大 初始时 F≈0,等于恒等映射,训练稳定启动
维度 BatchNorm LayerNorm
归一化维度 跨样本,每个特征 跨特征,每个样本
变长序列 困难 天然支持
小批次/批次为 1 效果差/失效 正常工作
推理阶段 需要存储训练期统计量 即时计算,无需存储
LLM 适用性 不适用 标准选择

1.6 对开发者的实际意义

为什么这些机制让 LLM 可以做到 96 层

没有残差连接和 LayerNorm,把 Transformer 叠到 10 层以上,训练就会因为梯度问题彻底崩溃。现代大模型动辄 32-96 层,完全依赖这两个机制作为基础保障。

微调时的注意事项

做 LoRA(Low-Rank Adaptation,低秩适应,一种只训练少量参数就能微调大模型的高效方法)等参数高效微调时,理解残差结构有助于选择注入位置。LoRA 通常注入在注意力层的投影矩阵上,其效果等价于在残差分支 F 上叠加一个低秩修正——和残差连接的哲学完全一致:在原有基础上微调,不破坏已学到的能力。

观察训练稳定性

训练大模型时,监控各层激活值的统计量(均值、方差)是常规操作。如果某层的激活值突然膨胀或崩溃,是 LayerNorm 出现问题的信号,往往意味着学习率过大或数据异常。

选择模型时

市面上所有主流 LLM(GPT、LLaMA、Qwen、DeepSeek、Claude)都采用 Pre-LN + 残差连接。这个设计已经是不需要考虑的行业标准,差异主要体现在层数、隐藏层维度等超参数上。


1.7 小结

两个机制分工明确:

  • 残差连接通过加法高速公路,保证梯度在数十乃至上百层间自由流动,让深层训练成为可能
  • LayerNorm 在每一层入口处控制激活值量级,消除数值漂移,保障训练全程的数值稳定性
  • Pre-LN 方案(先 LayerNorm 再变换)是当前大模型的标准,比原始 Post-LN 更稳定
  • 两者共同构成 Transformer 每一层的"脚手架",让堆叠数十层成为日常操作

下一篇将介绍 MoE(混合专家架构)——DeepSeek 用来在保持高性能的同时大幅降低计算成本的核心技术。

本页目录