BatchNorm 与 LayerNorm:原理、实现与应用对比
Batch Normalization (批归一化) 和 Layer Normalization (层归一化) 是深度学习中两种核心的归一化技术,它们解决了神经网络训练中的内部协变量偏移问题,大幅提升了模型训练的稳定性和收敛速度。
一、核心原理对比
1. BatchNorm (批归一化)
graph LR
A[输入数据] --> B[计算批次均值μ_B]
A --> C[计算批次方差σ²_B]
B --> D[归一化 x̂=(x-μ_B)/√(σ²_B+ε)]
C --> D
D --> E[缩放平移 y=γx̂+β]
核心特点:
- 归一化维度:特征通道维度 ©
- 依赖数据:当前mini-batch
- 数学表达:
μ_B = 1/m * Σx_i (m=batch size) σ²_B = 1/m * Σ(x_i - μ_B)² x̂_i = (x_i - μ_B) / √(σ²_B + ε) y_i = γ * x̂_i + β (可学习参数)
2. LayerNorm (层归一化)
graph LR
A[输入数据] --> B[计算样本均值μ_L]
A --> C[计算样本方差σ²_L]
B --> D[归一化 x̂=(x-μ_L)/√(σ²_L+ε)]
C --> D
D --> E[缩放平移 y=γx̂+β]
核心特点:
- 归一化维度:特征维度 (H,W)
- 依赖数据:单个样本
- 数学表达:
μ_L = 1/D * Σx_i (D=特征维度数) σ²_L = 1/D * Σ(x_i - μ_L)² x̂_i = (x_i - μ_L) / √(σ²_L + ε) y_i = γ * x̂_i + β (可学习参数)
二、关键技术特性对比
| 特性 | BatchNorm | LayerNorm |
|---|---|---|
| 归一化维度 | 批内相同特征通道 (N, H, W) | 单个样本所有特征 (C, H, W) |
| batch size依赖 | 强依赖 (建议≥32) | 无依赖 (支持batch size=1) |
| 训练/推理差异 | 需维护移动平均 | 行为一致 |
| 内存消耗 | 高 (存储批次统计量) | 低 |
| 时序数据支持 | 差 | 优 (RNN/Transformer) |
| 分布式训练 | 需同步批次统计量 | 无需同步 |
三、PyTorch实现代码
BatchNorm实现
import torch
import torch.nn as nn
class CustomBatchNorm1d(nn.Module):
def __init__(self, num_features, eps=1e-5, momentum=0.1):
super().__init__()
self.gamma = nn.Parameter(torch.ones(num_features))
self.beta = nn.Parameter(torch.zeros(num_features))
self.eps = eps
self.momentum = momentum
self.register_buffer('running_mean', torch.zeros(num_features))
self.register_buffer('running_var', torch.ones(num_features))
def forward(self, x):
if self.training:
# 训练模式:计算当前batch统计量
mean = x.mean(dim=0)
var = x.var(dim=0, unbiased=False)
# 更新全局统计量
self.running_mean = (1 - self.momentum) * self.running_mean + self.momentum * mean
self.running_var = (

最低0.47元/天 解锁文章
4万+

被折叠的 条评论
为什么被折叠?



