扩展 - BN 和 LN 的区别
1 课程概览
本课讲解 BN 和 LN 的区别(面试题)。BN(Batch Normalization)批量归一化,针对同一特征不同样本,竖着算,用于图片。LN(Layer Normalization)层规范化,针对一个样本的不同特征,横着算,用于文本。公式一样,但计算方向不同。
2 核心概念与定义
- BN(Batch Normalization):批量归一化,竖着算,针对同一特征不同样本,用于图片。
- LN(Layer Normalization):层规范化,横着算,针对一个样本的不同特征,用于文本。
3 模型与算法详解
数据表格示例
| 特征1 | 特征2 | 特征3 | 特征4 | |
|---|---|---|---|---|
| 样本1 | 1 | 2 | 3 | 4 |
| 样本2 | 3 | 4 | 5 | 6 |
| 样本3 | 4 | 5 | 6 | 7 |
BN vs LN
| 类型 | 计算方向 | 针对对象 | 适用 |
|---|---|---|---|
| BN(批量归一化) | 竖着算 | 同一特征,不同样本 | 图片 |
| LN(层规范化) | 横着算 | 一个样本,不同特征 | 文本 |
BN(批量归一化)
竖着算,针对同一特征不同样本。
- 计算方向:竖着(一列一列)
- 针对对象:同一特征,不同样本
- 适用场景:图片
LN(层规范化)
横着算,针对一个样本的不同特征。
- 计算方向:横着(一行一行)
- 针对对象:一个样本,不同特征
- 适用场景:文本
面试话术
面试时不能只说"一个横着一个竖着",要具体说明。
BN 话术:
- 批量归一化
- 针对同一个特征,不同样本进行规范化
- 一般用于处理图片
LN 话术:
- 层规范化(规范化层)
- 针对一个样本的不同特征进行处理
- 一般用于处理文本
4 数学原理与推导
BN 和 LN 公式相同
$$y = \gamma \cdot \frac{x - \mu}{\sqrt{\sigma^2 + \epsilon}} + \beta$$
区别在于计算方向
BN(竖着算): $$\mu_{j} = \frac{1}{N} \sum_{i=1}^{N} x_{ij}$$ 对第 $j$ 个特征,计算所有 $N$ 个样本的均值。
LN(横着算): $$\mu_{i} = \frac{1}{d} \sum_{j=1}^{d} x_{ij}$$ 对第 $i$ 个样本,计算所有 $d$ 个特征的均值。
5 代码示例
import torch
import torch.nn as nn
def compare_bn_ln():
"""比较 BN 和 LN 的区别"""
# 创建输入数据 (batch=3, features=4)
x = torch.tensor([
[1.0, 2.0, 3.0, 4.0],
[3.0, 4.0, 5.0, 6.0],
[4.0, 5.0, 6.0, 7.0]
])
print("原始数据:")
print(x)
# BN: 竖着算(针对同一特征不同样本)
bn = nn.BatchNorm1d(4) # 4 个特征
bn_output = bn(x)
print(f"\nBN 输出(竖着算):")
print(bn_output)
# LN: 横着算(针对一个样本不同特征)
ln = nn.LayerNorm(4) # 4 个特征
ln_output = ln(x)
print(f"\nLN 输出(横着算):")
print(ln_output)
# 验证计算方向
print(f"\nBN 对每列(特征)计算均值:")
print(f" 原始每列均值: {x.mean(dim=0)}")
print(f"\nLN 对每行(样本)计算均值:")
print(f" 原始每行均值: {x.mean(dim=1)}")
if __name__ == "__main__":
compare_bn_ln()
代码说明
| 代码 | 说明 |
|---|---|
nn.BatchNorm1d(4) | BN,4 个特征,竖着算 |
nn.LayerNorm(4) | LN,4 个特征,横着算 |
x.mean(dim=0) | 对每列(特征)计算均值(BN 方向) |
x.mean(dim=1) | 对每行(样本)计算均值(LN 方向) |
6 重难点与易错提醒
- ❗重点:BN 竖着算,LN 横着算。
- ❗重点:BN 用于图片,LN 用于文本。
- ⚠️易错:面试时不能只说"一个横着一个竖着",要具体说明。
- 💡深入理解:BN 针对同一特征不同样本,LN 针对一个样本不同特征。
7 课堂问答精选
Q1:BN 和 LN 的区别是什么?
A:BN(批量归一化)竖着算,针对同一特征不同样本,用于图片;LN(层规范化)横着算,针对一个样本的不同特征,用于文本。公式一样,但计算方向不同。
Q2:BN 适用于什么场景?
A:BN 适用于处理图片。针对同一个特征,不同样本进行规范化。
Q3:LN 适用于什么场景?
A:LN 适用于处理文本。针对一个样本的不同特征进行处理。
Q4:面试时如何回答 BN 和 LN 的区别?
A:不能只说"一个横着一个竖着"。要说:BN 是批量归一化,针对同一个特征不同样本进行规范化,一般用于处理图片;LN 是层规范化,针对一个样本的不同特征进行处理,一般用于处理文本。
8 本课小结
- BN:竖着算,同一特征不同样本,用于图片。
- LN:横着算,一个样本不同特征,用于文本。
- 公式一样,计算方向不同。
- 面试要具体说明,不能只说"一个横着一个竖着"。
9 延伸思考
- 为什么 LN 适用于文本,BN 适用于图片?
- 在 Transformer 中为什么用 LN 而不是 BN?