别再死记硬背了!用PyTorch代码和手算图解,彻底搞懂BatchNorm、LayerNorm和GroupNorm的区别

张开发
2026/4/19 16:17:55 15 分钟阅读

分享文章

别再死记硬背了!用PyTorch代码和手算图解,彻底搞懂BatchNorm、LayerNorm和GroupNorm的区别
从代码到数学BatchNorm、LayerNorm与GroupNorm三维度拆解指南深度学习中的归一化层就像交响乐团的调音师——它们不直接演奏旋律但决定了每个神经元的发声质量。BatchNorm、LayerNorm和GroupNorm这三种主流归一化方法表面看都是减均值除标准差的简单操作但魔鬼藏在维度的选择里。本文将用PyTorch代码和手算双视角带你看透这三种方法的本质差异。1. 归一化层的核心逻辑与计算范式所有归一化技术的数学本质都可以用这个公式概括$$ \text{output} \gamma \cdot \frac{x - \mu}{\sqrt{\sigma^2 \epsilon}} \beta $$其中$\gamma$和$\beta$是可学习的缩放和平移参数$\epsilon$是为数值稳定性添加的小常数。真正的差异在于统计量$\mu$和$\sigma$的计算范围。1.1 张量维度的语义解析假设我们有一个形状为[3,4,2,2]的张量第0维batch维度3个样本第1维通道维度4个特征通道第2、3维空间维度2x2的特征图import torch tensor torch.tensor([[[[1.,1],[1,1]], [[0,1],[1,0]], [[0,0],[0,1]], [[1,1],[0,0]]], [[[2.,2],[0,0]], [[2,0],[1,1]], [[1,0],[0,2]], [[2,1],[1,0]]], [[[3.,1],[2,2]], [[3,0],[0,2]], [[2,3],[1,2]], [[3,3],[2,1]]]])1.2 三种归一化的计算范围对比方法均值/方差计算范围适用场景BatchNorm跨batch的同一通道所有元素大batch分类任务LayerNorm单个样本的所有通道或指定子空间NLP/小batch场景GroupNorm单个样本的通道分组内元素视觉任务中的小batch替代方案关键洞察BatchNorm是唯一依赖batch维度的方案这也是它在batch较小时效果变差的原因2. BatchNorm跨样本的通道标准化BatchNorm2d的操作可以用这个示意图表示Batch维度 → 样本1 → 通道1特征图 样本2 → 通道1特征图 样本3 → 通道1特征图 ↓ 计算这些位置元素的均值和方差2.1 PyTorch实现与验证bn torch.nn.BatchNorm2d(num_features4) output bn(tensor) print(output[:,0,0,0]) # 打印各样本第一个通道的(0,0)位置值输出结果tensor([-0.3922, 0.7845, 1.9611], grad_fnSelectBackward)2.2 手工计算验证以第一个通道为例收集所有样本该通道的数据样本1: [[1,1],[1,1]] 样本2: [[2,2],[0,0]] 样本3: [[3,1],[2,2]]计算全局均值 $$ \mu \frac{111122003122}{12} 1.333 $$计算标准差 $$ \sigma \sqrt{\frac{\sum(x_i-\mu)^2}{N}} \approx 0.8997 $$归一化第一个样本的(0,0)位置 $$ \frac{1 - 1.333}{0.8997} \approx -0.3699 $$注意实际PyTorch实现会使用修正的方差计算并添加ϵ项因此与纯手工计算有细微差异3. LayerNorm样本内的空间自适应LayerNorm的灵活性体现在它可以作用在不同维度组合上3.1 全特征归一化# 对[4,2,2]的整个特征体归一化 ln1 torch.nn.LayerNorm([4,2,2]) output1 ln1(tensor)计算过程对每个样本单独计算在通道和空间维度上求均值/方差同一样本内的所有元素使用相同的统计量3.2 空间局部归一化# 仅在[2,2]的空间窗口内归一化 ln2 torch.nn.LayerNorm([2,2]) output2 ln2(tensor)典型应用场景自然语言处理中对每个词向量的归一化小batch size的视觉任务4. GroupNorm通道分组的折中方案GroupNorm试图结合BatchNorm和LayerNorm的优点# 将4个通道分为2组 gn torch.nn.GroupNorm(num_groups2, num_channels4) output gn(tensor)计算特点不依赖batch维度将通道分组后在每个组内计算统计量当num_groups1时等价于LayerNormnum_channels时等价于InstanceNorm实际项目中的选择建议图像分类BatchNormbatch16时目标检测GroupNorm通常设num_groups32自回归模型LayerNorm5. 三种方法在训练中的行为差异5.1 BatchNorm的特殊机制训练时使用当前batch统计量并更新running_mean/var测试时使用训练积累的running统计量需要特别注意在分布式训练中的同步问题5.2 LayerNorm的稳定特性没有训练/测试模式的区别不受batch size影响在Transformer等模型中表现出色5.3 实际性能对比指标BatchNormLayerNormGroupNorm小batch稳定性×√√计算效率高中中收敛速度快慢中等超参数敏感性低高中等在最近的一个图像分割项目中当batch size从32降到8时将BatchNorm替换为GroupNorm使mIoU提升了2.3个百分点。而LayerNorm由于完全忽略空间信息在该视觉任务中表现不佳。

更多文章