所有归一化方法本质都做同一件事:把数据按某个维度”拉平”到标准分布,让每层输入的分布稳定下来。区别仅在于沿着张量的哪个维度算均值方差。掌握这把”万能钥匙”即可看穿 BN/LN/IN/GN/adaLN-Zero 的全部演化。

为什么需要归一化

不同特征量级差异巨大时,梯度被大特征主导,小特征几乎学不到,训练慢甚至不收敛。深层网络中每层输入分布会跟着前层参数变化(Internal Covariate Shift),后层不断追赶前层。

通用流程两步:

第二步保留模型表达能力——直接强行 0 均值 1 方差会丢信息,让模型自己学缩放与偏移。

万能钥匙:算均值方差的维度

CNN 张量 [N, C, H, W];Transformer 张量 [N, L, D]。所有方法的差异就是对哪些维度做归约。

方法算均值方差的维度得到几个 (μ, σ)依赖 batch size
BNN + H + W(每通道独立)C 个✅ 强依赖
LN(CNN)C + H + WN 个❌ 不依赖
LN(Transformer)DN×L 个❌ 不依赖
INH + W(每样本每通道独立)N×C 个❌ 不依赖
GNC/G + H + W(每样本每组独立)N×G 个❌ 不依赖

主流方法详解

Batch Normalization (BN, 2015)

沿 batch + 空间维度归一,每通道一个 μ/σ。

  • ✅ 加速收敛,允许更大学习率,自带噪声正则
  • ❌ 对 batch size 极度敏感(< 8 性能暴跌);训练(当前 batch)/推理(滑动平均)行为不一致;不适合变长序列

适用:大 batch 的 CNN(图像分类/检测/分割)。

Layer Normalization (LN, 2016)

沿特征维度归一,每个样本(甚至每个位置)一个 μ/σ。

  • ✅ 与 batch size 无关;训练/推理同一公式;天然适合变长序列
  • ❌ 大 batch CNN 上略逊于 BN

适用:所有 Transformer、RNN、生成模型、小 batch 任务。

Instance Normalization (IN, 2016)

每样本每通道独立,沿空间维度归一。

为什么适合风格迁移:图像内容主要存在于通道的均值/方差中,IN 去掉这部分等价于”剥离内容、保留风格”。

适用:CycleGAN、Neural Style Transfer、早期图像生成。

Group Normalization (GN, 2018)

把 C 个通道分成 G 组(默认 G=32),组内做 IN。介于 BN 与 IN 之间。

  • ✅ 完全与 batch size 无关;小 batch 也稳
  • ❌ 大 batch 略逊于 BN;需要选 G

适用:目标检测、实例分割、3D 卷积、视频理解等显存占用大的小 batch 任务。

Adaptive Normalization(条件归一化)

γβ 不再是固定参数,而由条件信号动态生成。代表 AdaIN

直接用风格特征 c 的统计量调制内容特征 x

适用:条件 GAN、StyleGAN、条件扩散模型早期版本。

adaLN-Zero(2022,现代扩散模型标配)

在 adaLN 基础上额外引入残差缩放 α(c)且 α 零初始化

为什么有效:

  • 训练初期 α=0,整个模块输出 0,残差块退化为恒等映射,深层稳定
  • 模型按需学习”何时应该改变特征”
  • 极简但极有效,已被 SD3 / Flux / Sora 等 SOTA 全面采用

选型速查

场景推荐
CNN,大 batchBN
CNN,小 batchGN
Transformer / RNN / NLPLN
风格迁移IN / AdaIN
现代扩散模型 / DiTadaLN-Zero

常见误区

  • 位置:归一化放在激活之前

    x = nn.Linear(128, 256)(x)
    x = nn.LayerNorm(256)(x)
    x = nn.GELU()(x)        # 正确
  • 不是越多越好:网络输出层不要加归一化

  • BN 的滑动平均:训练/推理差距大 90% 出在这里。验证集上不要让 BN 进入训练模式(会污染滑动平均)

  • 优先 LN:除非有强理由,现代项目优先 LN,配合 AdamW 表现极佳

一句话本质

归一化的全部价值是稳定每层的输入分布,让深层网络的训练成为可能。所有方法的差别只在于”沿哪个维度做”和”是否引入条件”。