引言
在深度学习中,标准化技术(Normalization)是提高神经网络训练效率和性能的重要工具。其中,批标准化(Batch Normalization, BN)和层标准化(Layer Normalization, LN)是两种常用的标准化方法。它们在归一化的维度、适用场景和计算复杂度方面各有特色。本篇内容将对这两种标准化方法进行详细对比,并进一步介绍 PyTorch 中的 nn.Sequential 模块的使用方法,以便更高效地构建神经网络。
批标准化层(Batch Normalization)和层标准化层(Layer Normalization)的区别
3.1 归一化维度
1. 批标准化(BN)
-
操作对象:在一个批次的数据上进行归一化。
-
归一化方法:对输入数据的每个特征维度,计算该批次内所有样本在该维度上的均值和方差,进行归一化。
-
示例:对于形状为 (batch_size, num_features) 的输入数据,BN 对每个特征维度(num_features)上的 batch_size 个样本进行归一化。
-
核心思想:调整每一层的输入数据分布,使其均值为 0,标准差为 1。
处理流程如下:

2. 层标准化(LN)
-
操作对象:在单个样本的所有特征维度上进行归一化。
-
归一化方法:对每个样本的所有特征维度计算均值和方差,进行归一化。
-
示例:对于形状为 (batch_size, num_features) 的输入数据,LN 对每个样本的 num_features 个特征进行归一化。
-
核心思想:专注于单个样本的特征归一化,与批次无关。
处理流程如下:

- 缩放与偏移
无论是 BN 还是 LN,归一化之后会添加缩放和偏移操作,目的在于为模型提供更多调整灵活性,以适应不同任务和数据集。

3.2 应用场景
1. 批标准化(BN)
-
适用场景:卷积神经网络(CNN)和循环神经网络(RNN)。
-
优点:加速模型收敛,提高泛化能力。
-
局限性:对于变长序列(如 RNN 的变长句子),可能因样本长度不同而影响归一化效果。
2. 层标准化(LN)
-
适用场景:处理变长序列数据(如自然语言处理中的 RNN 模型)。
-
优点:不受序列长度影响,可在生成对抗网络(GAN)及 Transformer 架构中广泛应用。
3.3 计算复杂度
1. 批标准化(BN)
- 依赖批次大小:每个批次需要计算均值和方差,批次较小时可能导致不稳定。
2. 层标准化(LN)
- 依赖特征维度:计算复杂度较低,不受批次大小影响,计算结果更稳定。
nn.Sequential(*layers)的使用方法
- nn.Sequential 是 PyTorch 的顺序容器,用于顺序组合多个神经网络层。通过它,可以简洁地构建模型。
python
import torch.nn as nn
# 定义网络层
layers = []
layers.append(nn.Linear(input_dim, h_dim))
layers.append(nn.BatchNorm1d(h_dim))
layers.append(nn.SELU())
layers.append(nn.Linear(h_dim, output_dim))
# 创建顺序容器
model = nn.Sequential(*layers)
# 前向传播
output = model(input_data)