目标:系统掌握深度学习中核心归一化技术的设计动机、数学公式、计算流程与适用场景,建立"归一化工具箱"的完整认知。

前置要求:了解基本的神经网络概念(前向传播、反向传播)和线性代数基础(均值、方差、矩阵运算)。

归一化是深度学习中最成功的训练技巧之一——它加速收敛、稳定训练、允许使用更大的学习率。如果说激活函数为网络引入非线性,归一化则为网络的训练过程引入稳定性。本文按演进脉络系统梳理各类归一化技术,给出公式、计算流程、优缺点和记忆小贴士。


1. 归一化的动机(Why Normalization?)

  在深入具体技术之前,先理解"为什么需要归一化"。

1.1 Internal Covariate Shift 问题

原始定义(Ioffe & Szegedy, 2015):在训练过程中,由于前层参数的不断更新,每一层的输入分布不断发生变化——这种现象称为内部协变量偏移(Internal Covariate Shift, ICS)。

直觉:想象你在射箭,靶心每秒都在移动——即使你的技术在进步,命中率也很难提升。归一化的作用就是"固定靶心"——让每一层看到的输入分布保持相对稳定。

数值示例:假设一个隐藏层的输入 $x$ 在训练初期均值为 5、标准差为 3。经过几轮更新后,均值漂移到 20、标准差变为 10。这一层的权重需要不断"追赶"输入分布的变化,导致:

  • 学习率不能太大(否则追不上分布变化会发散)
  • 收敛速度变慢(大量梯度被浪费在适应分布漂移上)

1.2 归一化的核心思想

  对每一层的激活值做标准化(减均值、除标准差),使其分布稳定在均值为 0、方差为 1 附近,再通过可学习的缩放参数 $\gamma$ 和偏移参数 $\beta$ 恢复表达能力:

$$ \hat{x}_i = \frac{x_i - \mu}{\sqrt{\sigma^2 + \epsilon}}, \quad y_i = \gamma \hat{x}_i + \beta $$
  • $\mu$:均值
  • $\sigma^2$:方差
  • $\epsilon$:防止除零的小常数(通常 $10^{-5}$)
  • $\gamma, \beta$:可学习参数,当 $\gamma = \sigma$、$\beta = \mu$ 时,归一化可以"撤销"自己——保留了网络的表达能力

类比:标准化考试。不同科目的原始分数不可比(数学满分 150,英语满分 120)。归一化相当于把所有科目换算成标准分(均值 0,标准差 1),使得分数可比——但最终排名($\gamma, \beta$)仍然保留了科目的差异。

1.3 归一化的统一框架

  所有归一化技术都遵循同一个框架:在特定维度上计算均值和方差,对激活值做标准化。区别仅在于在哪些维度上计算统计量

假设激活张量形状为 $(N, C, H, W)$:

维度含义
$N$batch size(样本数)
$C$channel(通道数/特征数)
$H, W$空间尺寸(高、宽)

对于 Transformer,激活张量形状通常为 $(N, T, D)$:

维度含义
$N$batch size
$T$sequence length(序列长度)
$D$hidden dimension(隐藏维度)
flowchart LR
    Input["输入张量<br/>(N, C, H, W)"] --> Compute["沿特定维度<br/>计算 μ, σ²"]
    Compute --> Normalize["标准化<br/>x̂ = (x-μ)/√(σ²+ε)"]
    Normalize --> Scale["缩放平移<br/>y = γx̂ + β"]
    Scale --> Output["输出张量"]

2. Batch Normalization(BN)

2.1 核心思想

简介:沿 batch 维度计算统计量——对每个通道,跨所有样本和空间位置计算均值和方差。2015 年由 Ioffe & Szegedy 提出,是第一个被广泛采用的归一化技术,直接推动了深度学习的爆发式发展。

$$ \mu_c = \frac{1}{N \cdot H \cdot W}\sum_{i=1}^{N}\sum_{h,w} x_{i,c,h,w} $$$$ \sigma_c^2 = \frac{1}{N \cdot H \cdot W}\sum_{i=1}^{N}\sum_{h,w} (x_{i,c,h,w} - \mu_c)^2 $$$$ \hat{x}_{i,c,h,w} = \frac{x_{i,c,h,w} - \mu_c}{\sqrt{\sigma_c^2 + \epsilon}}, \quad y_{i,c,h,w} = \gamma_c \hat{x}_{i,c,h,w} + \beta_c $$

数值示例:假设 batch size = 2,通道数 = 1,空间尺寸 = 2×2:

样本 1: [[1, 2], [3, 4]]    样本 2: [[5, 6], [7, 8]]

沿 N、H、W 维度计算(共 8 个值):

$$ \mu = \frac{1+2+3+4+5+6+7+8}{8} = 4.5 $$$$ \sigma^2 = \frac{(1-4.5)^2 + (2-4.5)^2 + \cdots + (8-4.5)^2}{8} = 5.25 $$$$ \hat{x}_{1,1,1,1} = \frac{1 - 4.5}{\sqrt{5.25}} = \frac{-3.5}{2.291} = -1.528 $$

2.2 训练与推理的差异

  BatchNorm 在训练和推理时行为不同——这是它最独特也最容易出错的地方。

训练时:使用当前 mini-batch 的统计量($\mu_{\text{batch}}$, $\sigma^2_{\text{batch}}$),同时用指数移动平均(EMA)更新全局统计量:

$$ \mu_{\text{running}} \leftarrow (1 - \alpha) \cdot \mu_{\text{running}} + \alpha \cdot \mu_{\text{batch}} $$

其中动量 $\alpha$ 通常取 0.1。

推理时:使用训练期间积累的全局统计量($\mu_{\text{running}}$, $\sigma^2_{\text{running}}$),不再依赖 batch——推理时 batch size 可能为 1。

代码示例(PyTorch):

import torch.nn as nn

# 训练时:model.train(),使用 batch 统计量
# 推理时:model.eval(),使用 running 统计量
bn = nn.BatchNorm2d(num_features=64)  # 64 个通道

# 前向传播
output = bn(input_tensor)  # 自动根据 train/eval 模式切换

类比:班级考试。训练时用每次小测验(mini-batch)的平均分来标准化分数;推理时用整个学期的累积平均分(running statistics)来标准化——因为考试时只有你一个人(batch size = 1),没法算"班级平均"。

记忆小贴士:BN = “Batch Normalization”——沿 batch 维度归一化。训练用 batch 统计量,推理用全局统计量。

2.3 优势

  • 加速收敛:允许使用更大的学习率(通常 10 倍以上)
  • 稳定训练:减少梯度爆炸/消失
  • 轻度正则化:每个样本的归一化受同一 batch 中其他样本影响,引入了随机性

2.4 致命缺陷

  • 依赖 batch size:batch size 太小时(如 1~2),统计量噪声大,归一化效果退化甚至崩溃
  • 训练/推理不一致:训练和推理使用不同的统计量,可能导致行为差异
  • 不适合序列模型:RNN/Transformer 中不同序列长度的统计量不具可比性
  • 不适合分布式训练:跨设备同步统计量带来通信开销

2.5 适用场景

CNN 的默认归一化(ResNet、VGG、EfficientNet 等)。batch size ≥ 16 时效果最好。

  BatchNorm 依赖 batch size,在序列模型和小 batch 场景下失效。LayerNorm 的出现解决了这一问题——它对每个样本独立归一化,不依赖 batch 中的其他样本。


3. Layer Normalization(LN)

3.1 核心思想

简介:沿 特征维度计算统计量——对每个样本,跨所有特征计算均值和方差。2016 年由 Ba et al. 提出,专为 RNN 设计,后来成为 Transformer 的标配。

对于形状为 $(N, D)$ 的激活张量($D$ 为特征维度):

$$ \mu_i = \frac{1}{D}\sum_{d=1}^{D} x_{i,d}, \quad \sigma_i^2 = \frac{1}{D}\sum_{d=1}^{D} (x_{i,d} - \mu_i)^2 $$$$ \hat{x}_{i,d} = \frac{x_{i,d} - \mu_i}{\sqrt{\sigma_i^2 + \epsilon}}, \quad y_{i,d} = \gamma_d \hat{x}_{i,d} + \beta_d $$

数值示例:假设一个样本的特征向量为 $[1, 2, 3, 4]$:

$$ \mu = \frac{1+2+3+4}{4} = 2.5, \quad \sigma^2 = \frac{(1-2.5)^2 + (2-2.5)^2 + (3-2.5)^2 + (4-2.5)^2}{4} = 1.25 $$$$ \hat{x} = \left[\frac{1-2.5}{\sqrt{1.25}}, \frac{2-2.5}{\sqrt{1.25}}, \frac{3-2.5}{\sqrt{1.25}}, \frac{4-2.5}{\sqrt{1.25}}\right] = [-1.342, -0.447, 0.447, 1.342] $$

3.2 与 BatchNorm 的关键区别

特性BatchNormLayerNorm
统计量维度跨 batch(N, H, W)跨特征(D)
依赖 batch size是(batch 小则退化)否(每个样本独立计算)
训练/推理一致性不一致(需 running stats)一致(训练推理相同)
适合序列模型不适合适合

类比:个人标准化 vs 班级标准化。BatchNorm 用班级平均分标准化你的成绩(依赖班级);LayerNorm 用你自己的各科平均分标准化你的成绩(只依赖自己)。

记忆小贴士:LN = “Layer Normalization”——沿 layer(特征层)维度归一化。每个样本自己算均值方差,不依赖 batch。

3.3 为什么 Transformer 选择 LayerNorm

  1. 不依赖 batch size:Transformer 推理时 batch size 可能为 1
  2. 序列长度可变:LayerNorm 对每个 token 独立归一化,不受序列长度影响
  3. 训练推理一致:不需要维护 running statistics

3.4 Pre-Norm vs Post-Norm

  LayerNorm 在 Transformer 中的位置有两种设计:

Post-Norm(原始 Transformer):$\text{LN}(x + \text{Sublayer}(x))$

Pre-Norm(GPT-2、现代 LLM):$x + \text{Sublayer}(\text{LN}(x))$

Pre-Norm 训练更稳定(梯度流更顺畅),但最终性能上限可能略低于精心调参的 Post-Norm。现代大语言模型几乎都采用 Pre-Norm。

import torch.nn as nn

# Post-Norm(原始 Transformer)
# output = LayerNorm(x + Attention(x))

# Pre-Norm(GPT-2、LLaMA 等)
# output = x + Attention(LayerNorm(x))

ln = nn.LayerNorm(normalized_shape=768)  # 隐藏维度 768
output = ln(input_tensor)

适用场景:Transformer 架构的默认归一化(BERT、GPT、LLaMA 等)、RNN/LSTM。

  LayerNorm 对所有特征做统一归一化,但在图像生成任务中,我们需要更细粒度的控制——每个通道独立归一化,以去除图像的风格信息。


4. Instance Normalization(IN)

4.1 核心思想

简介:沿 空间维度计算统计量——对每个样本的每个通道,独立计算均值和方差。2016 年由 Ulyanov et al. 提出,专为风格迁移设计。

对于形状为 $(N, C, H, W)$ 的激活张量:

$$ \mu_{i,c} = \frac{1}{H \cdot W}\sum_{h,w} x_{i,c,h,w}, \quad \sigma_{i,c}^2 = \frac{1}{H \cdot W}\sum_{h,w} (x_{i,c,h,w} - \mu_{i,c})^2 $$$$ \hat{x}_{i,c,h,w} = \frac{x_{i,c,h,w} - \mu_{i,c}}{\sqrt{\sigma_{i,c}^2 + \epsilon}} $$

直觉:InstanceNorm 相当于 batch size = 1 的 BatchNorm(但每个通道独立)。它去除了每个样本每个通道的风格信息(均值和方差代表了图像的对比度和亮度),只保留内容信息。

类比:照片调色。每张照片的每个颜色通道(R、G、B)独立做亮度和对比度归一化——相当于把所有照片的"色调"统一,只保留"内容"差异。

记忆小贴士:IN = “Instance Normalization”——每个 instance(样本 × 通道)独立归一化。风格迁移的标配。

4.2 与 BatchNorm 的区别

BatchNorm 跨所有样本计算统计量(同一通道的所有样本共享均值方差);InstanceNorm 每个样本独立计算(同一个样本的同一个通道,单独算均值方差)。

BatchNorm:     所有样本的通道 c → 一个 μ, σ²
InstanceNorm:  每个样本的通道 c → 各自独立的 μ, σ²

4.3 适用场景

图像风格迁移(AdaIN、CycleGAN 等)。在风格迁移任务中,InstanceNorm 的效果显著优于 BatchNorm——因为它能有效去除图像的风格信息(均值和方差),只保留内容结构。

  InstanceNorm 每个通道独立归一化,完全不利用通道间的关系。在目标检测等任务中,batch size 受限且通道间存在语义关联——GroupNorm 在两者之间找到了平衡。


5. Group Normalization(GN)

5.1 核心思想

简介:将通道分成若干,在每组内沿通道和空间维度计算统计量。2018 年由 Wu & He 提出,作为 BatchNorm 在小 batch 场景下的替代方案。

将 $C$ 个通道分成 $G$ 组,每组 $C/G$ 个通道:

$$ \mu_{i,g} = \frac{1}{(C/G) \cdot H \cdot W}\sum_{c \in \text{group}_g}\sum_{h,w} x_{i,c,h,w} $$$$ \sigma_{i,g}^2 = \frac{1}{(C/G) \cdot H \cdot W}\sum_{c \in \text{group}_g}\sum_{h,w} (x_{i,c,h,w} - \mu_{i,g})^2 $$

直觉:GroupNorm 是 InstanceNorm 和 LayerNorm 的"插值"——

  • 当 $G = C$(每组 1 个通道)时,退化为 InstanceNorm
  • 当 $G = 1$(所有通道一组)时,退化为 LayerNorm(CNN 版)

数值示例:假设通道数 $C = 4$,分组数 $G = 2$:

组 0: 通道 0, 通道 1 → 共享 μ₀, σ₀²
组 1: 通道 2, 通道 3 → 共享 μ₁, σ₁²

类比:小组讨论。BatchNorm 是全班一起算平均分;LayerNorm 是每个人自己算各科平均分;GroupNorm 是分成小组,组内算平均分。

记忆小贴士:GN = “Group Normalization”——把通道分成 group,组内归一化。$G = 1$ 是 LayerNorm,$G = C$ 是 InstanceNorm。

5.2 与 BatchNorm 的关键优势

特性BatchNormGroupNorm
依赖 batch size
batch size = 1 时崩溃正常工作
检测任务需要大 batch小 batch 也稳定
训练/推理一致性不一致一致

5.3 适用场景

目标检测(Detectron2 默认)、实例分割等 batch size 受限的视觉任务。Facebook 的 Mask R-CNN、FAIR 等模型使用 GroupNorm 替代 BatchNorm。

  以上归一化技术都包含"减均值"步骤。RMSNorm 质疑了这一步的必要性——实验证明,缩放不变性才是归一化成功的关键。


6. RMSNorm(Root Mean Square Normalization)

6.1 核心思想

简介:LayerNorm 的简化版本——去掉均值中心化,只用均方根(RMS)做归一化。2019 年由 Zhang & Sennrich 提出,成为现代大语言模型(LLaMA、Gemma、Qwen 等)的标配。

$$ \text{RMS}(x) = \sqrt{\frac{1}{D}\sum_{i=1}^{D} x_i^2} $$$$ \hat{x}_i = \frac{x_i}{\text{RMS}(x)} \cdot \gamma_i $$

注意:RMSNorm 没有减均值,也没有偏移参数 $\beta$

与 LayerNorm 的对比

步骤LayerNormRMSNorm
减均值$x_i - \mu$
除标准差/RMS$\div \sqrt{\sigma^2 + \epsilon}$$\div \text{RMS}(x)$
缩放参数$\gamma$
偏移参数$\beta$

数值示例:假设特征向量为 $[1, 2, 3, 4]$:

$$ \text{RMS} = \sqrt{\frac{1^2 + 2^2 + 3^2 + 4^2}{4}} = \sqrt{\frac{30}{4}} = \sqrt{7.5} = 2.739 $$$$ \hat{x} = \left[\frac{1}{2.739}, \frac{2}{2.739}, \frac{3}{2.739}, \frac{4}{2.739}\right] = [0.365, 0.730, 1.095, 1.461] $$

对比 LayerNorm 的结果 $[-1.342, -0.447, 0.447, 1.342]$——RMSNorm 不中心化,保留了原始的相对大小关系。

6.2 为什么去掉均值中心化

Zhang & Sennrich 的实验发现:LayerNorm 的成功主要归功于缩放不变性(除以 RMS),而非平移不变性(减均值)。去掉均值中心化后:

  • 计算更快:省去一次均值计算和减法操作
  • 效果相当:在多数任务上与 LayerNorm 持平
  • 更适合大规模:在 LLM 中节省的计算量累积起来非常可观

类比:简化版标准化考试。LayerNorm 先把所有分数减去平均分再除以标准差;RMSNorm 直接除以"均方根分数"——省去了减均值的步骤,效果几乎一样。

记忆小贴士:RMSNorm = “Root Mean Square Normalization”——只用 RMS 做归一化,不减均值。现代 LLM 的标配。

6.3 代码实现

import torch

class RMSNorm(torch.nn.Module):
    def __init__(self, dim, eps=1e-6):
        super().__init__()
        self.eps = eps
        self.weight = torch.nn.Parameter(torch.ones(dim))

    def forward(self, x):
        rms = torch.sqrt(torch.mean(x ** 2, dim=-1, keepdim=True) + self.eps)
        return x / rms * self.weight

6.4 适用场景

现代大语言模型的默认归一化(LLaMA、Gemma、Qwen、Mistral 等)。在参数量达到数十亿的模型中,RMSNorm 节省的计算开销不可忽视。

  以上归一化技术都作用于激活值。还有一些技术选择归一化权重本身——从不同角度约束网络的表达能力。


7. 其他归一化技术

7.1 Weight Normalization(WeightNorm)

简介:不归一化激活值,而是归一化权重向量。将权重分解为方向和幅度两部分:

$$ w = g \cdot \frac{v}{\|v\|} $$

其中 $v$ 是权重方向(可学习),$g$ 是标量幅度(可学习)。

记忆小贴士:WeightNorm = 对 weight 做归一化——把权重拆成"方向"和"大小"分开学习。

适用场景:强化学习、生成模型等对训练稳定性要求高的任务。效果通常不如 BatchNorm/LayerNorm,但实现简单。

7.2 Spectral Normalization(SpectralNorm)

简介:通过限制权重矩阵的谱范数(最大奇异值)来控制 Lipschitz 常数。核心公式:

$$ W_{\text{SN}} = \frac{W}{\sigma(W)} $$

其中 $\sigma(W)$ 是 $W$ 的最大奇异值(通过幂迭代法近似计算)。

类比:限制放大倍数。SpectralNorm 相当于给每一层装了一个"音量限制器"——不管输入信号多大,输出的放大倍数(Lipschitz 常数)不超过 1。

记忆小贴士:SpectralNorm = 归一化权重的谱范数(最大奇异值)——限制每一层的"放大能力"。

适用场景:GAN 的判别器(WGAN-GP、SN-GAN),确保判别器是 1-Lipschitz 函数。

7.3 Switchable Normalization(SN)

简介:自动学习 BatchNorm、InstanceNorm、LayerNorm 的加权组合。网络自己决定每层该用哪种归一化。

$$ y = \hat{w}_{\text{IN}} \cdot \text{IN}(x) + \hat{w}_{\text{LN}} \cdot \text{LN}(x) + \hat{w}_{\text{BN}} \cdot \text{BN}(x) $$

其中 $\hat{w}$ 是归一化后的权重(softmax)。

适用场景:不确定该用哪种归一化时的"自动选择"方案。


8. 归一化技术选择指南

场景推荐归一化核心原因记忆关键词
CNN(大 batch)BatchNorm经验验证最充分跨 batch 统计
CNN(小 batch / 检测)GroupNorm不依赖 batch size组内统计
Transformer / LLMRMSNorm计算高效,现代标配只用 RMS
Transformer(通用)LayerNorm经典方案,兼容性好跨特征统计
风格迁移InstanceNorm去除风格信息单样本单通道
GAN 判别器SpectralNorm控制 Lipschitz 常数最大奇异值
强化学习LayerNorm / WeightNorm训练稳定性跨特征 / 权重分解
不确定时GroupNorm无超参数依赖(除 G)万金油

9. 归一化技术演进脉络

flowchart TD
    BN["BatchNorm<br/>2015"] --> LN["LayerNorm<br/>2016"]
    BN --> IN["InstanceNorm<br/>2016"]
    LN --> GN["GroupNorm<br/>2018"]
    IN --> GN
    LN --> RMSNorm["RMSNorm<br/>2019"]
    BN --> WN["WeightNorm<br/>2016"]
    SN["SpectralNorm<br/>2018"]

归一化技术对比示意图

从上图可以看出,归一化技术的发展遵循一条清晰的脉络:

  1. BatchNorm 开创期(2015):第一个被广泛采用的归一化技术,解决了深层网络训练难的问题
  2. 任务特化期(2016):LayerNorm 为序列模型设计,InstanceNorm 为风格迁移设计
  3. 通用化期(2018):GroupNorm 统一了 InstanceNorm 和 LayerNorm,消除 batch size 依赖
  4. 效率优化期(2019 至今):RMSNorm 去掉冗余的均值中心化,成为 LLM 标配

理解了这条演进脉络,就掌握了归一化技术设计的核心哲学:在统计量计算的粒度(跨 batch vs 跨特征 vs 跨通道)和计算效率之间寻找最佳平衡点


延伸阅读:关于 Pre-Norm vs Post-Norm 对 Transformer 训练稳定性影响的详细分析,可参考 大语言模型训练机制全解·第一篇 的相关章节。