深度学习进阶文档深度页
BatchNorm 与 LayerNorm 总览
两者公式相似但统计轴、运行状态和使用场景不同。
学习目标
- 比较统计范围
- 区分运行状态
- 按架构选择
为什么需要这个概念
输入标准化与网络内部归一化不是一回事。
- 避免错误互换 BN/LN
- 理解模型模式
学习前需要掌握
均值方差内容待补充
背景与问题
输入标准化与网络内部归一化不是一回事。
概念定义
归一化层控制中间特征尺度并通过 γ/β恢复表达能力。
直观理解
关键不是名字,而是“哪些元素一起算均值方差”。
核心原理
BN 跨 batch/空间按通道;LN 在单样本尾部维。
选择由形状、batch 大小和架构假设决定。
数学表达
核心公式
集合 S 的选择决定方法。
变量含义
S参与统计的元素集合
计算步骤
- 1BN1d 需换轴
- 2LN(64) 直接尾维
代码对应位置
示例 1BatchNorm 与 LayerNorm 总览 · PyTorch 示例:验证BatchNorm 与 LayerNorm 总览的输入、计算和输出。
变量解释
| 变量 | 含义 |
|---|---|
S | 参与统计的元素集合 |
完整数值示例
BN vs LN
已知条件
- x [8,20,64]
- 1
BN1d 需换轴
- 2
LN(64) 直接尾维
两者输出形状相同但统计不同
处理前后对比
计算与实现步骤
- 1
识别 shape
- 2
确定统计轴
- 3
选择层
- 4
检查 train/eval
- 5
小 batch 验证
代码实现
示例 1
BatchNorm 与 LayerNorm 总览 · PyTorch 示例
BatchNorm 与 LayerNorm 总览 · PyTorch 示例
PyTorch
example_01.py用途:验证BatchNorm 与 LayerNorm 总览的输入、计算和输出。
x=torch.randn(8,20,64)
ln=nn.LayerNorm(64)
bn=nn.BatchNorm1d(64)
y_ln=ln(x)
y_bn=bn(x.transpose(1,2)).transpose(1,2)代码解析
解析始终位于完整代码下方,并按实际代码段逐项对应。
输入数据与任务
验证BatchNorm 与 LayerNorm 总览的输入、计算和输出。
Step 1 · 1–5 行
LN 直接尾维
x=torch.randn(8,20,64)
ln=nn.LayerNorm(64)
bn=nn.BatchNorm1d(64)
y_ln=ln(x)
y_bn=bn(x.transpose(1,2)).transpose(1,2)预期输出或运行结果
两者均 [8,20,64]。
常见错误 · 3 条
- 输入标准化混同
- 统计轴错
- no_grad 当 eval
实际应用
- CNN/Transformer
常见错误
输入标准化混同
统计轴错
no_grad 当 eval
文档来源
14_归一化方法_BatchNorm与LayerNorm原始文档
学习资料/deeplearning/14_归一化方法_BatchNorm与LayerNorm.md- §1 区别
- §2 公式
- §14 对比
常见问题
哪种总更先进?
没有,取决于架构和统计假设。
使用归一化可省输入预处理吗?
不能。
推荐学习资料
暂未收录相关资料
参考库不会生成虚假资源或无效外部链接。