Batch Normalization vs Layer Normalization 对比详解

训练优化Batch Normalization vs Layer…openstarry.com

Batch Normalization vs Layer Normalization 对比详解

归一化是深度学习训练中的关键技巧,它通过稳定中间层的输入分布来加速训练。但 Batch Normalization 和 Layer Normalization 的归一化方向完全不同,适用场景也截然不同。

为什么需要归一化?

深度神经网络训练中有一个经典问题:内部协变量偏移(Internal Covariate Shift)。随着训练进行,每一层的输入分布不断变化,导致:

归一化的核心目标:让每一层的输入保持稳定的分布(均值接近 0,方差接近 1)。

归一化前:
  Layer 1 输出:均值=50,方差=100  ← 分布偏移大
  Layer 2 输入:均值=50,方差=100  ← 下一层要适应
  Layer 2 输出:均值=200,方差=500 ← 分布又变了

归一化后:
  Layer 1 输出:归一化 → 均值=0,方差=1
  Layer 2 输入:均值=0,方差=1    ← 稳定分布
  Layer 2 输出:归一化 → 均值=0,方差=1  ← 依然稳定

Batch Normalization (BN)

BN 沿 batch 维度进行归一化,对每个特征独立处理。

计算方式

假设一个 batch 有 m 个样本,每个样本有 d 个特征。BN 对每个特征 j 独立计算:

# 对每个特征 j(j = 1 到 d)
# 1. 计算 batch 均值
μ_j = (1/m) * Σ(x_ij)  # 对 batch 中所有样本取均值

# 2. 计算 batch 方差
σ²_j = (1/m) * Σ(x_ij - μ_j)²

# 3. 归一化
x̂_ij = (x_ij - μ_j) / √(σ²_j + ε)

# 4. 缩放和平移(可学习参数)
y_ij = γ_j * x̂_ij + β_j

直觉理解

Batch: [样本1, 样本2, 样本3, 样本4]

对于特征 "身高":
  样本1 身高=170, 样本2 身高=165, 样本3 身高=180, 样本4 身高=175
  batch 均值=172.5, batch 标准差=5.59
  归一化后:[-0.45, -1.34, 1.34, 0.45]

对于特征 "体重":
  样本1 体重=65, 样本2 体重=70, 样本3 体重=80, 样本4 体重=75
  batch 均值=72.5, batch 标准差=5.59
  归一化后:[-1.34, -0.45, 1.34, 0.45]

关键:每个特征独立归一化,但使用相同的 γ 和 β

Layer Normalization (LN)

LN 沿 特征维度进行归一化,对每个样本独立处理。

计算方式

# 对每个样本 i(i = 1 到 m)
# 1. 计算该样本所有特征的均值
μ_i = (1/d) * Σ(x_ij)  # 对样本的所有特征取均值

# 2. 计算该样本所有特征的方差
σ²_i = (1/d) * Σ(x_ij - μ_i)²

# 3. 归一化
x̂_ij = (x_ij - μ_i) / √(σ²_i + ε)

# 4. 缩放和平移
y_ij = γ_j * x̂_ij + β_j

直觉理解

样本1 的特征向量: [身高=170, 体重=65, 年龄=25]
样本均值 = (170+65+25)/3 = 86.67
样本标准差 = 62.36
归一化后: [1.34, -0.35, -0.99]

样本2 的特征向量: [身高=165, 体重=70, 年龄=30]
样本均值 = (165+70+30)/3 = 88.33
样本标准差 = 55.27
归一化后: [1.39, -0.33, -1.06]

关键:每个样本独立归一化,与 batch 无关

BN vs LN 核心区别

特性 Batch Normalization Layer Normalization
归一化方向跨 batch(每个特征)跨特征(每个样本)
依赖 batch size
训练与推理一致否(需 running stats)
适合的架构CNNTransformer、RNN
小 batch 效果不稳定稳定
序列数据不合适非常适合

为什么 Transformer 用 LN 而不用 BN?

三个核心原因:

1. 序列长度不一致

Transformer 处理的序列长度不同。BN 需要对每个位置独立计算统计量,但不同位置的统计量不具可比性。LN 对每个 token 独立归一化,天然适配变长序列。

2. 自回归生成时 batch=1

GPT 等模型在推理时逐 token 生成,batch size=1。BN 在 batch=1 时退化为仅做缩放,失去归一化效果。LN 不受影响。

3. 训练推理一致性

BN 需要维护 running mean 和 running variance,在训练和推理时行为不同。LN 训练和推理时计算方式完全一致,更简洁可靠。


Pre-Norm vs Post-Norm

在 Transformer 中,LN 的放置位置也有讲究:

Post-Norm(原始 Transformer):
  output = LayerNorm(x + Sublayer(x))
  问题:深层网络训练不稳定,需要 warmup

Pre-Norm(GPT-2 及之后的主流选择):
  output = x + Sublayer(LayerNorm(x))
  优势:训练更稳定,无需 warmup,收敛更快

实际使用建议


总结

BN 和 LN 的本质区别在于归一化的"方向"不同。理解这个差异,就能明白为什么 Transformer 选择了 LN:它不依赖 batch,天然适配变长序列和自回归生成。在实际项目中,根据模型架构选择合适的归一化方法,是训练优化的基本功。

以 AI 之力,筑未来之境

现在注册,立即免费获赠 200 次大模型调用权益

免费注册 →