BN和LN理解

批量归一化(Batch Normalization, BN)和层归一化(Layer Normalization, LN)是两种常用的深度学习正则化技术。BN通过对每个批次的数据在同一维度上进行归一化来加速训练并缓解梯度消失问题,但当batch_size小或在RNN中使用时效果会减弱。相反,LN对每个样本的所有特征进行归一化,适合于序列数据如RNN,但在某些情况下可能无法准确模拟全样本统计特性。这两种方法各有优缺点,选择使用哪种取决于具体任务和数据特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

BN

在这里插入图片描述

针对一个batch_size中同一维度的样本在做处理。比如上图,有x1,x2,…,xR个样本,这些样本的第一个维度描述的是体重,第二个维度描述的身高,BN在所有样本的的每一个特征(比如体重维度、身高维度)上进行归一化,
BN的优点:第一个优点可以解决内部协变量偏移,第二个优点就是缓解了梯度饱和问题(如果使用sigmoid函数的话),加快收敛。
BN的缺点:第一个缺点batch_size较小的时候,效果很差,因为BN就是用batch_size中样本的均值和方差去模拟全部样本的均值和方差,这个假设在样本很少的情况下确实是不合理的。第二个缺点就是BN在RNN中效果比较差。因为RNN的输入是动态的,就会出现如下图的情况:
在这里插入图片描述
比如一个batch_size中的样本前9个都是5个单词,最后一个样本20个单词,那么前五个单词的均值和方差都可以通过这10个样本模拟出来,而从第6个到第20个单词的均值和方差就只能利用最后一个样本计算,这就回到了第一个缺点上。

LN

理解:对同一个样本的所有单词进行缩放。
在这里插入图片描述

看下面这张图,比如有下面两个样本,BN做的就是用“台”和“今”、“词”和“天”、“深”和“天”…做均值方差,而LN则是对“今天天气真好”这句话做均值和方差。

<think>嗯,用户想比较批量归一化层归一化的原理与应用,还特别提到了需要对比图解释。这应该是深度学习领域的研究者或工程师,可能正在设计模型架构或者调试模型性能。 用户的问题很专业,说明ta对归一化技术有一定了解,但需要更直观的对比。之前系统指令要求生成相关问题,我得确保问题能引导用户深入理解两种技术的适用场景。 首先回忆两种归一化的核心差异:BN按特征维度跨样本归一化,LN按样本维度跨特征归一化。这个根本区别导致它们在应用场景上分道扬镳。 关于对比图,虽然文字回复无法直接展示图片,但可以用ASCII字符模拟矩阵操作示意图。需要突出BN的(batch, feature)维度LN的(sample, feature)维度差异。在解释部分要强调BN对batch size的依赖问题,以及LN在RNN/Transformer中的优势。 用户可能隐含的真实需求是解决实际训练中的不收敛问题。所以应用场景部分要具体说明:比如BN适合CV的卷积层,LN适合NLP的序列数据。还得提醒BN在batch size较小时的表现缺陷,这点在实际部署时很容易踩坑。 引用标识要注意规范。虽然示例引用了[^1],但当前回复没有直接引用来源,可以保留这个格式以备后续补充引用。最后生成的问题要覆盖原理差异、实现细节选型指导三个层面,这样用户后续探索更有针对性。 对了,数学公式必须严格按系统指令:行内公式用$...$,独立公式用$$...$$。比如LN的均值计算公式就得用独立公式呈现,毕竟涉及分式排版。</think>以下是对批量归一化(Batch Normalization)与层归一化(Layer Normalization)的对比分析与原理图解: --- ### **对比示意图** ``` ┌───────────────────┬───────────────────┐ │ Batch Norm │ Layer Norm │ │ (横向归一化) │ (纵向归一化) │ ├───────────────────┼───────────────────┤ │ 样本1: [x₁,x₂] │ 样本1: [x₁,x₂] │ │ 样本2: [y₁,y₂] │ 样本2: [y₁,y₂] │ │ │ │ │ 计算维度: │ 计算维度: │ │ - 按特征维度统计 │ - 按样本维度统计 │ │ μ₁ = (x₁+y₁)/2 │ μ¹ = (x₁+x₂)/2 │ │ σ₁² = Var(x₁,y₁)│ σ¹² = Var(x₁,x₂)│ └───────────────────┴───────────────────┘ ``` --- ### **核心原理对比** 1. **批量归一化 (BN)** - **归一化维度**:对每个特征通道,跨**同一批次的所有样本**计算统计量 $$ \mu_c = \frac{1}{B}\sum_{i=1}^B x_{i,c}, \quad \sigma_c^2 = \frac{1}{B}\sum_{i=1}^B (x_{i,c} - \mu_c)^2 $$ 其中 $B$=批次大小, $c$=通道索引 - **适用场景**:CNN(固定特征维度),要求**较大批次尺寸**(Batch Size > 16) - **优势**:缓解内部协变量偏移,加速卷积网络训练[^1] - **缺陷**:对小批次敏感,RNN/Transformer中难以应用 2. **层归一化 (LN)** - **归一化维度**:对每个**独立样本**,跨其**所有特征通道**计算统计量 $$ \mu_i = \frac{1}{d}\sum_{c=1}^d x_{i,c}, \quad \sigma_i^2 = \frac{1}{d}\sum_{c=1}^d (x_{i,c} - \mu_i)^2 $$ 其中 $d$=特征维度, $i$=样本索引 - **适用场景**:RNN/Transformer(变长序列),小批次或单样本推理 - **优势**:与批次大小无关,对序列模型友好[^2] - **缺陷**:CNN中效果弱于BN --- ### **关键差异总结** | **特性** | Batch Normalization | Layer Normalization | |--------------------|----------------------------|--------------------------| | 统计量计算维度 | 跨样本(同一特征通道) | 跨特征(同一样本) | | 批次大小依赖性 | 高度依赖(小批次时性能骤降)| 几乎无关 | | 训练/推理一致性 | 需存储运行均值 | 无需额外存储 | | 适用架构 | CNN | RNN/Transformer | | 处理变长数据 | 困难(需填充对齐) | 天然支持 | --- ### **典型应用场景** - **BN**:ResNet、VGG等卷积网络(图像分类/目标检测) ```python # PyTorch 实现 nn.BatchNorm2d(num_features) ``` - **LN**:BERT、GPT等Transformer模型(NLP任务),LSTM ```python # Transformer 中的LN nn.LayerNorm(normalized_shape=[d_model]) ``` --- ### **选择建议** 1. **CNN架构** ➔ 优先选择BN(加速收敛且提升精度) 2. **RNN/Transformer** ➔ 必须使用LN(避免序列长度影响) 3. **小批次训练** ➔ LN更稳定(如强化学习场景) 4. **模型微调** ➔ 固定BN的运行均值/方差(避免分布偏移)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值