BatchNorm与LayerNorm

本文详细介绍了深度学习中的三种归一化技术:BatchNorm、LayerNorm和LocalResponseNorm。BatchNorm对每个神经元在批次维度上的输出进行归一化,而LayerNorm则是对整个层的所有神经元进行归一化。LocalResponseNorm则是一种局部响应归一化,用于神经网络的激活层。它们的主要区别在于归一化的范围和方式,BatchNorm沿批次维度,LayerNorm沿层维度。这些技术有助于优化网络训练,减少内部协变量位移并提高模型的泛化能力。

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

BatchNorm批量归一化:批量归一化是对一个中间层的单个神经元进行归一化操作。计算第l层网络中每个神经元在Batch大小为N的样本上输出的N个结果,计算每个神经元输出的N个结果的均值和方差,然后使用均值和方差来对这N个输出结果做归一化,所以归一化的维度是在Batch上进行的

LayerNorm层归一化:层归一化是对一个中间层的所有神经元进行归一化。计算第l层网络中的每个神经元在Batch中每个输入样本的输出,对于每个输入样本,计算所有神经元输出结果的均值和方差,使用均值和方差来归一化对于这个输入样本的输出结果,所以归一化的维度以在整个层上进行的

LocalResponseNorm局部响应归一化:

区别:层归一化和批量归一化整体上是十分类似的差别在于归一化的方法不同对于K个样本的一个Batch集合:

层归一化是对矩阵的每一列进行归一化(也就是在整个层上),批量归一化是对每一行进行归一化(也就是在整个Batch的每个维度上)。

BatchNorm和LayerNorm图解:

假设神经网络的某全连接层有M个神经元,输入Batch大小为N:

 

### Batch Normalization Layer Normalization 的区别 Batch Normalization (BN) 是一种用于加速深层网络训练的技术,通过减少内部协变量偏移来提高模型性能[^1]。具体来说,在每个 mini-batch 中对每一层神经元的输入进行标准化处理,使其均值接近于零,方差接近于一。 相比之下,Layer Normalization (LN) 则是在单一样本上操作,针对同一时间步下的特征维度做归一化。这意味着 LN 不依赖 batch size 或者数据分布的变化,因此更适合序列建模任务以及较小批次大小的情况[^5]。 #### 主要差异: - **作用范围不同** - BN 对整个 mini-batch 内的数据一起计算统计量并实施变换; - LN 只考虑当前样本内的各个通道/位置上的数值关系来进行调整。 - **适用场景有别** - 当批尺寸较大且稳定时,BN 能够提供更好的效果;但如果遇到动态变化较大的环境,则可能不如 LN 表现得那么稳健。 - 在自然语言处理领域中的 RNN/LSTM 结构里,由于其固有的长期依赖特性决定了每一步的状态更新都至关重要,所以采用 LN 更有利于保持这种稳定性。 ```python import torch.nn as nn # 定义带有BN层的简单卷积模块 class ConvBlockWithBN(nn.Module): def __init__(self, in_channels, out_channels): super(ConvBlockWithBN, self).__init__() self.conv = nn.Conv2d(in_channels, out_channels, kernel_size=3, padding=1) self.bn = nn.BatchNorm2d(out_channels) def forward(self, x): return F.relu(self.bn(self.conv(x))) # 使用LN的例子可以应用于Transformer架构中 from transformers import BertModel model = BertModel.from_pretrained('bert-base-uncased') for name,param in model.named_parameters(): if 'layer_norm' in name: print(f"{name}: {param.shape}") ``` #### 应用实例分析 对于图像识别任务而言,通常会优先选用 BN 来增强模型收敛速度泛化能力;而在文本生成、机器翻译等涉及长程记忆的任务中,LN 显示出了独特的优势,因为它能够更好地适应变长输入的特点,并有助于缓解梯度消失问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值