LayerNorm(Layer Normalization)和BatchNorm(Batch Normalization)是深度学习中常用的正则化技术,它们的作用是在神经网络训练过程中提升模型的收敛速度和稳定性,从而加快训练并提高模型的泛化能力。它们的区别主要体现在应用的层级和计算方式上:
- 作用层级不同:
- BatchNorm: Batch Normalization 是对每个批次中的每一层进行归一化处理。具体来说,对于每个批次(mini-batch)中的每个特征通道,BatchNorm 都会计算其均值和方差,并对该批次中的每个样本进行归一化。这样做可以减少内部协变量偏移(Internal Covariate Shift),从而加速网络的训练收敛速度。
- LayerNorm: Layer Normalization 则是对每个样本的每一层进行归一化处理。具体来说,对于每个样本,在每一层中的特征通道上计算均值和方差,并对该样本在每一层中的所有特征进行归一化。这种归一化方式更适合应对循环神经网络(RNN)等结构,因为它不依赖于批次中的其他样本,更加稳定。
- 计算方式不同:
- BatchNorm: 在 BatchNorm 中,均值和方差是在每个批次上计算的,因此它依赖于批次中的所有样本。BatchNorm 会维护每个特征通道的均值和方差,然后用来归一化每个样本中的每个特征。
- LayerNorm: 在 LayerNorm 中,均值和方差是在每个样本上计算的,因此它独立于批次。LayerNorm 计算每个样本的每个特征通道的均值和方差,并用这些统计量来归一化该样本在每一层上的所有特征。
综上所述,BatchNorm 和 LayerNorm 在归一化的层级和计算方式上有所不同,这使它们在应用场景和效果上也有所区别。通常来说,BatchNorm 更适用于卷积神经网络(CNN)等结构,而 LayerNorm 更适用于循环神经网络(RNN)等结构。
Batch Normalization (BatchNorm)
BatchNorm 是在每个批次中对每一层进行归一化处理的技术。
公式:
对于一个特征通道 kkk,BatchNorm 的计算如下:
- 计算批次中所有样本的均值 μB\mu_BμB 和方差 σB2\sigma_B^2σB2:μB=1m∑i=1mxi(k)\mu_B = \frac{1}{m} \sum_{i=1}^{m} x_i^{(k)}μB=m1∑i=1mxi(k)
σB2=1m∑i=1m(xi(k)−μB)2\sigma_B^2 = \frac{1}{m} \sum_{i=1}^{m} (x_i^{(k)} - \mu_B)^2σB2=m1∑i=1m(xi(k)−μB)2 - 归一化每个特征 xi(k)x_i^{(k)}xi(k):x^i(k)=xi(k)−μBσB2+ϵ\hat{x}_i^{(k)} = \frac{x_i^{(k)} - \mu_B}{\sqrt{\sigma_B^2 + \epsilon}}x^i(k)=σB2+ϵxi(k)−μB