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 是在每个批次中对每一层进行归一化处理的技术。
公式:
对于一个特征通道 k k k,BatchNorm 的计算如下:
- 计算批次中所有样本的均值 μ B \mu_B μB 和方差 σ B 2 \sigma_B^2 σB2: μ B = 1 m ∑ i = 1 m x i ( k ) \mu_B = \frac{1}{m} \sum_{i=1}^{m} x_i^{(k)} μB=m1∑i=1mxi(k)
σ B 2 = 1 m ∑ i = 1 m ( x i ( 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 - 归一化每个特征 x i ( k ) x_i^{(k)} xi(k): x ^ i ( k ) = x i ( k ) − μ B σ B 2 + ϵ \hat{x}_i^{(k)} = \frac{x_i^{(k)} - \mu_B}{\sqrt{\sigma_B^2 + \epsilon}} x^i(k)=σB2+ϵxi(k)−μB
- 应用缩放和偏移(Scale and Shift)变换: y i ( k ) = γ ( k ) x ^ i ( k ) + β ( k ) y_i^{(k)} = \gamma^{(k)} \hat{x}_i^{(k)} + \beta^{(k)} yi(k)=γ(k)x^i(k)+β(k)其中, γ ( k ) \gamma^{(k)} γ(k) 和 β ( k ) \beta^{(k)} β(k) 是可学习的参数, ϵ \epsilon ϵ 是一个很小的数,避免除以零。
举例说明:
假设有一个批次(mini-batch)包含 4 个样本,每个样本的特征向量 x i x_i xi 是一个长度为 3 的向量(3个特征通道)。则对于第一个特征通道 k = 1 k = 1 k=1,BatchNorm 的计算步骤如下:
- 计算均值 μ B \mu_B μB 和方差 σ B 2 \sigma_B^2 σB2: μ B = 1 4 ∑ i = 1 4 x i ( 1 ) \mu_B = \frac{1}{4} \sum_{i=1}^{4} x_i^{(1)} μB=41∑i=14xi(1)
σ B 2 = 1 4 ∑ i = 1 4 ( x i ( 1 ) − μ B ) 2 \sigma_B^2 = \frac{1}{4} \sum_{i=1}^{4} (x_i^{(1)} - \mu_B)^2 σB2=41∑i=14(xi(1)−μB)2 - 归一化每个特征 x i ( 1 ) x_i^{(1)} xi(1): x ^ i ( 1 ) = x i ( 1 ) − μ B σ B 2 + ϵ \hat{x}_i^{(1)} = \frac{x_i^{(1)} - \mu_B}{\sqrt{\sigma_B^2 + \epsilon}} x^i(1)=σB2+ϵxi(1)−μB
- 缩放和偏移: y i ( 1 ) = γ ( 1 ) x ^ i ( 1 ) + β ( 1 ) y_i^{(1)} = \gamma^{(1)} \hat{x}_i^{(1)} + \beta^{(1)} yi(1)=γ(1)x^i(1)+β(1)
这样,对于每个特征通道 k k k,都会进行类似的计算。
Layer Normalization (LayerNorm)
LayerNorm 是在每个样本的每一层进行归一化处理的技术。
公式:
对于一个样本 x i x_i xi,LayerNorm 的计算如下:
- 计算该样本的均值 μ L \mu_L μL 和方差 σ L 2 \sigma_L^2 σL2: μ L = 1 d ∑ k = 1 d x i ( k ) \mu_L = \frac{1}{d} \sum_{k=1}^{d} x_i^{(k)} μL=d1∑k=1dxi(k)
σ L 2 = 1 d ∑ k = 1 d ( x i ( k ) − μ L ) 2 \sigma_L^2 = \frac{1}{d} \sum_{k=1}^{d} (x_i^{(k)} - \mu_L)^2 σL2=d1∑k=1d(xi(k)−μL)2 - 归一化每个特征通道 x i ( k ) x_i^{(k)} xi(k): x ^ i ( k ) = x i ( k ) − μ L σ L 2 + ϵ \hat{x}_i^{(k)} = \frac{x_i^{(k)} - \mu_L}{\sqrt{\sigma_L^2 + \epsilon}} x^i(k)=σL2+ϵxi(k)−μL
- 应用缩放和偏移(Scale and Shift)变换: y i ( k ) = γ ( k ) x ^ i ( k ) + β ( k ) y_i^{(k)} = \gamma^{(k)} \hat{x}_i^{(k)} + \beta^{(k)} yi(k)=γ(k)x^i(k)+β(k)其中, γ ( k ) \gamma^{(k)} γ(k) 和 β ( k ) \beta^{(k)} β(k) 是可学习的参数, ϵ \epsilon ϵ 是一个很小的数,避免除以零。
举例说明:
假设一个样本 x i x_i xi 是一个长度为 3 的向量(3个特征通道),则 LayerNorm 的计算步骤如下:
- 计算均值 μ L \mu_L μL 和方差 σ L 2 \sigma_L^2 σL2: μ L = 1 3 ∑ k = 1 3 x i ( k ) \mu_L = \frac{1}{3} \sum_{k=1}^{3} x_i^{(k)} μL=31∑k=13xi(k)
σ L 2 = 1 3 ∑ k = 1 3 ( x i ( k ) − μ L ) 2 \sigma_L^2 = \frac{1}{3} \sum_{k=1}^{3} (x_i^{(k)} - \mu_L)^2 σL2=31∑k=13(xi(k)−μL)2 - 归一化每个特征通道 x i ( k ) x_i^{(k)} xi(k): x ^ i ( k ) = x i ( k ) − μ L σ L 2 + ϵ \hat{x}_i^{(k)} = \frac{x_i^{(k)} - \mu_L}{\sqrt{\sigma_L^2 + \epsilon}} x^i(k)=σL2+ϵxi(k)−μL
- 缩放和偏移: y i ( k ) = γ ( k ) x ^ i ( k ) + β ( k ) y_i^{(k)} = \gamma^{(k)} \hat{x}_i^{(k)} + \beta^{(k)} yi(k)=γ(k)x^i(k)+β(k)
LayerNorm 对每个样本在每一层上进行归一化,不依赖于批次中其他样本,这是与 BatchNorm 不同的关键点。