Batch Normalization 批归一化是什么? 有什么用?

有什么用?

批归一化(Batch Normalization,BatchNorm)是由Ioffe和Szegedy于2015年提出的,目前已被广泛应用在深度学习中,其目的是对神经网络中间层的输出进行标准化处理,使得中间层的输出更加稳定。

  1. 什么意思呢?
    就是这些专家认为啊,模型的收敛需要稳定的数据分布。

  2. 什么叫稳定的数据分布呢?
    以图像处理为例,我们一般会对图像进行预处理,做归一化操作,把[0, 255]之间的数值限制在[-1, 1]之间(均值为0,方差为1),这样数据分布波动就不算大。不然你时而输入为[0.1]时而输入为[255.]对算法来说很难去适应这种数据分布,也就很难收敛。

  3. 那再输入模型之前做一遍归一化就行了,为什么还要在神经网络中间层的数据进行归一化处理呢?
    其实对于浅层网络对输入数据做一遍归一化处理确实就可以了,模型的效果不错。但是对于深层网络,即使你的输入数据已经做过标准化的处理,但是对于那些比较靠后的层,随着参数的不断更新,其接受到的输入仍然是剧烈变化的,导致数值不稳定,难以收敛

所以,Batch Normalization 就是为提升深层网络中的数值稳定性所提出来的方法,能够使神经网络中间层的输出变得更加稳定,有以下三个优点:

  • 使学习快速进行(能够使用较大的学习率)
  • 降低模型对初始值的敏感性
  • 从一定程度上抑制过拟合

原理是什么,怎么计算?

BatchNorm主要思路是在训练时按mini-batch为单位,对神经元的数值进行归一化,使数据的分布满足均值为0,方差为1。分为以下四步:
Step 1: 计算mini-batch内样本均值:
在这里插入图片描述
Step 2: 计算mini-batch内样本方差:
在这里插入图片描述
Step 3: 计算标准化输出:
在这里插入图片描述
其中分母还要加一个‘ε’,它是一个很小的值,比如1e-7,主要是为了避免分母为0的情况。

Step 4: 平移和缩放:
在这里插入图片描述
因为,研究者认为如果强行地限制每一层的输出都是标准化的,可能会导致某些特征模式的丢失。所以,在标准化之后,BatchNorm就还会做一个缩放和平移。
其中γ和β这两个参数都是可学习的,可以赋初值,一般是(γ=1,β=0)

怎么用?

上面的参数更新都是只在训练过程中才会用到,在预测时,我们不会再计算输入样本的均值和方差,以及更新γ,β两个参数。

其实要这么做的原因很简单,比如现在有两个Batch数据传入到模型中,batch_size=4:

  • 其中Batch1=[A, B, C, D],经过BatchNorm得到[a1, b, c, d];
  • Batch2=[A, X, Y, Z],经过BatchNorm得到[a2, x, y, z];
  • 这样算出来,a1 ≠ a2。

而我们需要的效果是,同样的数据在预测时,它每一次传入模型,所得到的数据分布都应该是一样的。不然样本的预测结果就会变得不确定,这对预测过程来说是不合理的的,所以我们需要在训练过程中将大量样本的均值和方差存储下来,预测时不计算样本内的均值和方差,而是使用训练时保存值。

训练:滚动平均的方式,计算整个数据集上的均值和方差,并保存
在这里插入图片描述
测试:直接加载训练时保存的均值和方差

<think>好的,我现在要比较Batch Normalization(BN)和Layer Normalization(LN)的区别、适用场景以及在深度学习中的对比。首先,我需要回忆这两种标准化方法的基本概念和原理。 Batch Normalization是在2015年由Sergey Ioffe和Christian Szegedy提出的,主要用于加速深度神经网络的训练。它的核心思想是对每个小批量(mini-batch)的数据进行标准化处理,即对每个神经元的输入进行归一化,使其均值接近0,方差接近1。这样可以减少内部协变量偏移(Internal Covariate Shift),从而加快训练速度,并允许使用更高的学习率。BN通常在卷积神经网络(CNN)中应用广泛,特别是在图像处理任务中,比如ResNet等模型就大量使用了BN层[^1]。不过,BN的一个缺点是当batch size较小时,效果会变差,因为均值和方差的估计不准确。比如,在训练TurboAE时,需要非常大的batch size(超过500)才能有效平均噪声影响。 接下来是Layer Normalization,由Jimmy Lei Ba等人在2016年提出。与BN不同,LN是对同一层内所有神经元的输出进行标准化,即对每个样本的所有特征进行归一化。这种方法不依赖于batch size的大小,因此在batch size较小或动态变化的情况下表现更好。LN在循环神经网络(RNN)和Transformer模型中应用较多,比如在自然语言处理任务中,由于序列长度可变,使用LN可以更好地处理不同长度的输入。例如,DeepDR-Transformer模块在处理眼底图像分类任务时,可能使用了类似LN的结构来保持稳定性[^2]。 两者的主要区别在于归一化的维度不同。BN在batch维度和特征维度上进行归一化,而LN是在特征维度和层维度上进行。因此,BN的效果受batch size影响较大,而LN则不受此限制。此外,BN在训练和推理时的行为不同,需要维护移动平均的均值和方差,而LN在训练和推理时计算方式一致,不需要额外参数。 适用场景方面,BN适合固定深度的模型和较大的batch size,比如图像分类任务中的CNN。LN则适合变长序列或小batch size的情况,如NLP中的Transformer或RNN。此外,在强化学习或生成对抗网络(GAN)中,由于batch size可能不稳定,LN也更适合。 需要进一步验证的是,LN是否真的在Transformer中被广泛使用,以及BN在batch size较小时的具体表现。根据引用[1],TurboAE需要大batch size才能有效,这说明BN对batch size敏感,而LN可能更适合小batch场景。同时,引用[2]提到的DeepDR-Transformer使用了全局平均池化和全连接层,可能未明确提到LN,但Transformer架构通常使用LN,如原始论文中的设计。 总结下来,BN和LN的主要区别在于归一化的维度和对batch size的依赖,适用场景则根据模型类型和任务需求来选择。</think>### Batch Normalization vs Layer Normalization: 区别与适用场景 #### 1. **核心区别** - **Batch Normalization (BN)** 对每个神经元的输入按 **批次维度** 进行标准化。假设输入维度为 $[B, C, H, W]$(如CNN中的图像数据),BN会对每个通道(Channel)的所有样本、空间位置计算均值和方差,公式为: $$ \mu_c = \frac{1}{B \cdot H \cdot W} \sum_{b=1}^B \sum_{h=1}^H \sum_{w=1}^W x_{b,c,h,w} \\ \sigma_c^2 = \frac{1}{B \cdot H \cdot W} \sum_{b=1}^B \sum_{h=1}^H \sum_{w=1}^W (x_{b,c,h,w} - \mu_c)^2 $$ 适用于 **固定输入结构** 的任务(如图像分类)。 - **Layer Normalization (LN)** 对每个样本的所有神经元输出按 **特征维度** 进行标准化。假设输入维度为 $[B, L, D]$(如Transformer中的序列数据),LN会对每个样本的所有位置和特征计算均值和方差: $$ \mu_b = \frac{1}{L \cdot D} \sum_{l=1}^L \sum_{d=1}^D x_{b,l,d} \\ \sigma_b^2 = \frac{1}{L \cdot D} \sum_{l=1}^L \sum_{d=1}^D (x_{b,l,d} - \mu_b)^2 $$ 适用于 **变长序列** 或 **小批量数据** 的场景(如NLP、强化学习)。 --- #### 2. **适用场景对比** | **特性** | **Batch Normalization** | **Layer Normalization** | |------------------------|--------------------------------------|--------------------------------------| | **数据依赖** | 依赖批次统计,需要较大batch size | 单样本统计,与batch size无关 | | **任务类型** | 图像处理(CNN)、固定输入长度的任务 | NLP(Transformer)、RNN、强化学习 | | **训练稳定性** | 对batch size敏感,小批次效果下降 | 对batch size鲁棒 | | **推理行为** | 使用移动平均统计量 | 直接计算当前样本统计量 | --- #### 3. **性能影响** - **BN的优势与局限** 在图像任务中显著加速收敛,但受限于batch size。例如,在TurboAE训练中,batch size需大于500才能有效平均噪声影响。 - **LN的优势与局限** 更适合动态输入或小batch场景。例如,Transformer通过LN处理变长序列,而DeepDR-Transformer在医学图像分类中可能依赖类似结构[^2]。 --- #### 4. **代码示例对比** ```python # Batch Normalization (PyTorch) import torch.nn as nn bn = nn.BatchNorm2d(num_features=64) # 用于CNN # Layer Normalization (PyTorch) ln = nn.LayerNorm(normalized_shape=512) # 用于Transformer ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值