批归一化(Batch Normalization)与层归一化(Layer Normalization)的区别与联系

在这里插入图片描述

这个写的特别好,可同步参考:https://zhuanlan.zhihu.com/p/19150825562

一、Batch normalization 理论与应用

1. 理论解释

Batch Normalization(批归一化)是一种用于深度学习的优化技术,由Sergey Ioffe和Christian Szegedy在2015年提出。它通过对每一层的输入进行归一化处理,加速训练并提升模型性能。

原理

  1. 归一化:
  • 对每个小批量数据(mini-batch)的每个特征维度进行归一化,使其均值为0,方差为1。
  • 公式为:
    x ^ i = x i − μ B σ B 2 + ϵ \hat{x}_i = \frac{x_i - \mu_B}{\sqrt{\sigma_B^2 + \epsilon}} x^i=σB2+ϵ xiμB
    其中, x i x_i xi是输入, μ B \mu_B μB是均值, σ B 2 \sigma_B^2 σB2是方差, ϵ \epsilon ϵ是防止除零的小常数。
  1. 缩放和平移:
  • 归一化后,通过可学习的参数 γ \gamma γ β \beta β进行缩放和平移,恢复数据的表达能力。
  • 公式为:
    y i = γ x ^ i + β y_i = \gamma \hat{x}_i + \beta yi=γx^i+β
    其中, y i y_i yi是输出, γ \gamma γ β \beta β是可学习参数。

作用

  1. 加速训练:
    • 归一化后的数据分布更稳定,减少了内部协变量偏移,允许使用更高的学习率,加快收敛。
  2. 防止梯度消失/爆炸:
    • 归一化使激活值保持在合理范围内,缓解了梯度消失或爆炸问题。
  3. 正则化效果:
    • 由于使用小批量数据的统计量,引入了噪声,起到轻微的正则化作用,减少过拟合。
  4. 减少对初始化的依赖:
    • 归一化使网络对参数初始化的敏感性降低,简化了调参过程。

实现

在训练时,计算每个小批量的均值和方差;在测试时,使用训练数据的移动平均均值和方差。
代码示例

import torch
import torch.nn as nn

# 定义一个带BatchNorm的层
batch_norm = nn.BatchNorm2d(num_features=64)

# 输入数据
input_data = torch.randn(32, 64, 128, 128)

# 前向传播
output = batch_norm(input_data)
总结
Batch Normalization通过对每层输入进行归一化,加速训练、防止梯度问题、提供正则化效果,并减少对初始化的依赖,是深度学习中的重要技术。

2. 数值例子

通过一个具体的数值例子来说明 Batch Normalization 的计算过程。

假设我们有一个 mini-batch,包含 3 个样本,每个样本有 2 个特征。数据如下:

X = [ 1 2 3 4 5 6 ] X = \begin{bmatrix} 1 & 2 \\ 3 & 4 \\ 5 & 6 \\ \end{bmatrix} X= 135246
其中:

  • 每一行是一个样本。
  • 每一列是一个特征(例如,特征 1 和特征 2)。

Batch Normalization 的计算步骤

  1. 计算每个特征的均值和方差

    Batch Normalization 是对每个特征分别进行归一化的。我们分别计算特征 1 和特征 2 的均值和方差。

  • 特征 1(第一列:1, 3, 5):
    • 均值: μ 1 = 1 + 3 + 5 3 = 3 \mu_1 = \frac{1 + 3 + 5}{3} = 3 μ1=31+3+5=3
    • 方差: σ 1 2 = ( 1 − 3 ) 2 + ( 3 − 3 ) 2 + ( 5 − 3 ) 2 3 = 4 + 0 + 4 3 = 8 3 \sigma_1^2 = \frac{(1-3)^2 + (3-3)^2 + (5-3)^2}{3} = \frac{4 + 0 + 4}{3} = \frac{8}{3} σ12=3(13)2+(33)2+(53)2=34+0+4=38
  • 特征 2(第二列:2, 4, 6):
    • 均值: μ 2 = 2 + 4 + 6 3 = 4 \mu_2 = \frac{2 + 4 + 6}{3} = 4 μ2=32+4+6=4
    • 方差: σ 2 2 = ( 2 − 4 ) 2 + ( 4 − 4 ) 2 + ( 6 − 4 ) 2 3 = 4 + 0 + 4 3 = 8 3 \sigma_2^2 = \frac{(2-4)^2 + (4-4)^2 + (6-4)^2}{3} = \frac{4 + 0 + 4}{3} = \frac{8}{3} σ22=3(24)2+(44)2+(64)2=34+0+4=38
  1. 归一化

使用均值和方差对每个特征进行归一化。归一化公式为:
x ^ i = x i − μ σ 2 + ϵ \hat{x}_i = \frac{x_i - \mu}{\sqrt{\sigma^2 + \epsilon}} x^i=σ2+ϵ xiμ
假设 ϵ = 0.0001 \epsilon = 0.0001 ϵ=0.0001(一个很小的常数,防止除零)。

  • 特征 1 的归一化:
    x ^ 1 = 1 − 3 8 3 + 0.0001 ≈ − 2 1.633 ≈ − 1.225 \hat{x}_1 = \frac{1 - 3}{\sqrt{\frac{8}{3} + 0.0001}} \approx \frac{-2}{1.633} \approx -1.225 x^1=38+0.0001 131.63321.225
    x ^ 2 = 3 − 3 8 3 + 0.0001 ≈ 0 1.633 ≈ 0 \hat{x}_2 = \frac{3 - 3}{\sqrt{\frac{8}{3} + 0.0001}} \approx \frac{0}{1.633} \approx 0 x^2=38+0.0001 331.63300
    x ^ 3 = 5 − 3 8 3 + 0.0001 ≈ 2 1.633 ≈ 1.225 \hat{x}_3 = \frac{5 - 3}{\sqrt{\frac{8}{3} + 0.0001}} \approx \frac{2}{1.633} \approx 1.225 x^3=38+0.0001 531.63321.225

  • 特征 2 的归一化:
    x ^ 1 = 2 − 4 8 3 + 0.0001 ≈ − 2 1.633 ≈ − 1.225 \hat{x}_1 = \frac{2 - 4}{\sqrt{\frac{8}{3} + 0.0001}} \approx \frac{-2}{1.633} \approx -1.225 x^1=38+0.0001 241.63321.225
    x ^ 2 = 4 − 4 8 3 + 0.0001 ≈ 0 1.633 ≈ 0 \hat{x}_2 = \frac{4 - 4}{\sqrt{\frac{8}{3} + 0.0001}} \approx \frac{0}{1.633} \approx 0 x^2=38+0.0001 441.63300
    x ^ 3 = 6 − 4 8 3 + 0.0001 ≈ 2 1.633 ≈ 1.225 \hat{x}_3 = \frac{6 - 4}{\sqrt{\frac{8}{3} + 0.0001}} \approx \frac{2}{1.633} \approx 1.225 x^3=38+0.0001 641.63321.225

归一化后的数据为:

X ^ = [ − 1.225 − 1.225 0 0 1.225 1.225 ] \hat{X} = \begin{bmatrix} -1.225 & -1.225 \\ 0 & 0 \\ 1.225 & 1.225 \\ \end{bmatrix} X^= 1.22501.2251.22501.225

  1. 缩放和平移

Batch Normalization 还会对归一化后的数据进行缩放和平移,引入可学习的参数 γ \gamma γ β \beta β。假设 γ = [ 1 , 1 ] \gamma = [1, 1] γ=[1,1] β = [ 0 , 0 ] \beta = [0, 0] β=[0,0](初始值),则输出为:

y i = γ ⋅ x ^ i + β y_i = \gamma \cdot \hat{x}_i + \beta yi=γx^i+β

计算后结果与归一化结果相同:

Y = [ − 1.225 − 1.225 0 0 1.225 1.225 ] Y = \begin{bmatrix} -1.225 & -1.225 \\ 0 & 0 \\ 1.225 & 1.225 \\ \end{bmatrix} Y= 1.22501.2251.22501.225

如果 γ = [ 2 , 2 ] \gamma = [2, 2] γ=[2,2] β = [ 1 , 1 ] \beta = [1, 1] β=[1,1],则输出为:

Y = [ − 1.225 × 2 + 1 − 1.225 × 2 + 1 0 × 2 + 1 0 × 2 + 1 1.225 × 2 + 1 1.225 × 2 + 1 ] = [ − 1.45 − 1.45 1 1 3.45 3.45 ] Y = \begin{bmatrix} -1.225 \times 2 + 1 & -1.225 \times 2 + 1 \\ 0 \times 2 + 1 & 0 \times 2 + 1 \\ 1.225 \times 2 + 1 & 1.225 \times 2 + 1 \\ \end{bmatrix} = \begin{bmatrix} -1.45 & -1.45 \\ 1 & 1 \\ 3.45 & 3.45 \\ \end{bmatrix} Y= 1.225×2+10×2+11.225×2+11.225×2+10×2+11.225×2+1 = 1.4513.451.4513.45

小结

  1. 归一化:将数据调整为均值为 0,方差为 1。
  2. 缩放和平移:通过 γ \gamma γ β \beta β 恢复数据的表达能力。
  3. 最终输出:归一化后的数据经过缩放和平移,得到最终的输出。
    通过这个数值例子,可以清楚地看到 Batch Normalization 的计算过程及其作用。

二、Layer normalization 理论与应用

1. 理论解释

Layer Normalization(层归一化)是另一种归一化技术,由 Jimmy Lei Ba 等人在 2016 年提出。它与 Batch Normalization(批归一化)的目标类似,都是为了加速训练并提高模型性能,但它们的归一化方式和应用场景有所不同。

Layer Normalization 的原理

Layer Normalization 是对单个样本的所有特征进行归一化,而不是像 Batch Normalization 那样对整个 mini-batch 的每个特征进行归一化。具体步骤如下:

  1. 计算均值和方差:
  • 对于每个样本,计算其所有特征的均值和方差。
  • 假设输入为 ( x = [ x 1 , x 2 , … , x d ] (x = [x_1, x_2, \dots, x_d] (x=[x1,x2,,xd] d d d是特征维度),则:
    μ = 1 d ∑ i = 1 d x i \mu = \frac{1}{d} \sum_{i=1}^d x_i μ=d1i=1dxi
    σ 2 = 1 d ∑ i = 1 d ( x i − μ ) 2 \sigma^2 = \frac{1}{d} \sum_{i=1}^d (x_i - \mu)^2 σ2=d1i=1d(xiμ)2
  1. 归一化:
  • 使用均值和方差对每个特征进行归一化:
    x ^ i = x i − μ σ 2 + ϵ \hat{x}_i = \frac{x_i - \mu}{\sqrt{\sigma^2 + \epsilon}} x^i=σ2+ϵ xiμ
    其中, ϵ \epsilon ϵ 是一个很小的常数,用于防止除零。
  1. 缩放和平移:
  • 引入可学习的参数 γ \gamma γ β \beta β,对归一化后的数据进行缩放和平移:
    y i = γ x ^ i + β y_i = \gamma \hat{x}_i + \beta yi=γx^i+β

Layer Normalization 的特点

  1. 对单个样本操作:
    • Layer Normalization 是对每个样本的所有特征进行归一化,而不是对整个 mini-batch 的每个特征进行归一化。
  2. 适用于变长数据:
    • 由于不依赖于 mini-batch 的大小,Layer Normalization 更适合处理变长数据(如 NLP 中的序列数据)。
  3. 对 mini-batch 大小不敏感:
    • Layer Normalization 的性能不受 mini-batch 大小的影响,即使 batch size 为 1 也能正常工作。

2. 数值例子

通过一个包含多个样本的例子来详细说明 Layer Normalization 的计算过程。

假设我们有一个 mini-batch,包含 2 个样本,每个样本有 3 个特征。数据如下:

X = [ 2 4 6 1 3 5 ] X = \begin{bmatrix} 2 & 4 & 6 \\ 1 & 3 & 5 \\ \end{bmatrix} X=[214365]

其中:

  • 每一行是一个样本。
  • 每一列是一个特征(例如,特征 1、特征 2 和特征 3)。

Layer Normalization 的计算步骤

Layer Normalization 是对每个样本的所有特征进行归一化。因此,我们需要分别对每个样本计算均值和方差,然后进行归一化。

  1. 对第一个样本[2, 4, 6]的计算

    • 计算均值和方差:

      • 均值:
        μ 1 = 2 + 4 + 6 3 = 4 \mu_1 = \frac{2 + 4 + 6}{3} = 4 μ1=32+4+6=4
      • 方差:
        σ 1 2 = ( 2 − 4 ) 2 + ( 4 − 4 ) 2 + ( 6 − 4 ) 2 3 = 4 + 0 + 4 3 = 8 3 \sigma_1^2 = \frac{(2-4)^2 + (4-4)^2 + (6-4)^2}{3} = \frac{4 + 0 + 4}{3} = \frac{8}{3} σ12=3(24)2+(44)2+(64)2=34+0+4=38
    • 归一化:
      使用公式:
      x ^ i = x i − μ σ 2 + ϵ \hat{x}_i = \frac{x_i - \mu}{\sqrt{\sigma^2 + \epsilon}} x^i=σ2+ϵ xiμ
      假设 ϵ = 0.0001 \epsilon = 0.0001 ϵ=0.0001

    • 特征 1:

    x ^ 1 = 2 − 4 8 3 + 0.0001 ≈ − 2 1.633 ≈ − 1.225 \hat{x}_1 = \frac{2 - 4}{\sqrt{\frac{8}{3} + 0.0001}} \approx \frac{-2}{1.633} \approx -1.225 x^1=38+0.0001 241.63321.225

    • 特征 2:
      x ^ 2 = 4 − 4 8 3 + 0.0001 ≈ 0 1.633 ≈ 0 \hat{x}_2 = \frac{4 - 4}{\sqrt{\frac{8}{3} + 0.0001}} \approx \frac{0}{1.633} \approx 0 x^2=38+0.0001 441.63300
    • 特征 3:
      x ^ 3 = 6 − 4 8 3 + 0.0001 ≈ 2 1.633 ≈ 1.225 \hat{x}_3 = \frac{6 - 4}{\sqrt{\frac{8}{3} + 0.0001}} \approx \frac{2}{1.633} \approx 1.225 x^3=38+0.0001 641.63321.225

    归一化后的第一个样本:
    x ^ 1 = [ − 1.225 , 0 , 1.225 ] \hat{x}_1 = [-1.225, 0, 1.225] x^1=[1.225,0,1.225]

  2. 对第二个样本[1, 3, 5]的计算

    • 计算均值和方差:

      • 均值:
        μ 2 = 1 + 3 + 5 3 = 3 \mu_2 = \frac{1 + 3 + 5}{3} = 3 μ2=31+3+5=3
      • 方差:
        σ 2 2 = ( 1 − 3 ) 2 + ( 3 − 3 ) 2 + ( 5 − 3 ) 2 3 = 4 + 0 + 4 3 = 8 3 \sigma_2^2 = \frac{(1-3)^2 + (3-3)^2 + (5-3)^2}{3} = \frac{4 + 0 + 4}{3} = \frac{8}{3} σ22=3(13)2+(33)2+(53)2=34+0+4=38
    • 归一化:

    使用公式:

    x ^ i = x i − μ σ 2 + ϵ \hat{x}_i = \frac{x_i - \mu}{\sqrt{\sigma^2 + \epsilon}} x^i=σ2+ϵ xiμ

    • 特征 1:
      x ^ 1 = 1 − 3 8 3 + 0.0001 ≈ − 2 1.633 ≈ − 1.225 \hat{x}_1 = \frac{1 - 3}{\sqrt{\frac{8}{3} + 0.0001}} \approx \frac{-2}{1.633} \approx -1.225 x^1=38+0.0001 131.63321.225

    • 特征 2:
      x ^ 2 = 3 − 3 8 3 + 0.0001 ≈ 0 1.633 ≈ 0 \hat{x}_2 = \frac{3 - 3}{\sqrt{\frac{8}{3} + 0.0001}} \approx \frac{0}{1.633} \approx 0 x^2=38+0.0001 331.63300

    • 特征 3:
      x ^ 3 = 5 − 3 8 3 + 0.0001 ≈ 2 1.633 ≈ 1.225 \hat{x}_3 = \frac{5 - 3}{\sqrt{\frac{8}{3} + 0.0001}} \approx \frac{2}{1.633} \approx 1.225 x^3=38+0.0001 531.63321.225

      归一化后的第二个样本:
      x ^ 2 = [ − 1.225 , 0 , 1.225 ] \hat{x}_2 = [-1.225, 0, 1.225] x^2=[1.225,0,1.225]

  3. 归一化后的结果

    将所有样本的归一化结果组合起来:
    X ^ = [ − 1.225 0 1.225 − 1.225 0 1.225 ] \hat{X} = \begin{bmatrix} -1.225 & 0 & 1.225 \\ -1.225 & 0 & 1.225 \\ \end{bmatrix} X^=[1.2251.225001.2251.225]

  4. 缩放和平移
    Layer Normalization 还会对归一化后的数据进行缩放和平移,引入可学习的参数 γ \gamma γ β \beta β。假设 γ = [ 1 , 1 , 1 ] \gamma = [1, 1, 1] γ=[1,1,1] β = [ 0 , 0 , 0 ] \beta = [0, 0, 0] β=[0,0,0](初始值),则输出为:

    y i = γ ⋅ x ^ i + β y_i = \gamma \cdot \hat{x}_i + \beta yi=γx^i+β

    计算结果与归一化结果相同:

    Y = [ − 1.225 0 1.225 − 1.225 0 1.225 ] Y = \begin{bmatrix} -1.225 & 0 & 1.225 \\ -1.225 & 0 & 1.225 \\ \end{bmatrix} Y=[1.2251.225001.2251.225]

    如果 γ = [ 2 , 2 , 2 ] \gamma = [2, 2, 2] γ=[2,2,2] β = [ 1 , 1 , 1 ] \beta = [1, 1, 1] β=[1,1,1],则输出为:

    Y = [ − 1.225 × 2 + 1 0 × 2 + 1 1.225 × 2 + 1 − 1.225 × 2 + 1 0 × 2 + 1 1.225 × 2 + 1 ] = [ − 1.45 1 3.45 − 1.45 1 3.45 ] Y = \begin{bmatrix} -1.225 \times 2 + 1 & 0 \times 2 + 1 & 1.225 \times 2 + 1 \\ -1.225 \times 2 + 1 & 0 \times 2 + 1 & 1.225 \times 2 + 1 \\ \end{bmatrix} = \begin{bmatrix} -1.45 & 1 & 3.45 \\ -1.45 & 1 & 3.45 \\ \end{bmatrix} Y=[1.225×2+11.225×2+10×2+10×2+11.225×2+11.225×2+1]=[1.451.45113.453.45]


小结

  1. Layer Normalization 是对每个样本的所有特征进行归一化。
  2. 计算步骤包括:
    • 计算每个样本的均值和方差。
    • 归一化。
    • 缩放和平移。
  3. 与 Batch Normalization 不同,Layer Normalization 不依赖于 mini-batch,适合处理变长数据(如 NLP 中的序列数据)。

通过这个包含多个样本的例子,可以清楚地看到 Layer Normalization 的计算过程及其作用。

三、Layer Normalization 和 Batch Normalization 的区别

在这里插入图片描述
代码示例

以下是 PyTorch 中 Layer Normalization 的实现示例:

import torch
import torch.nn as nn

# 定义一个 LayerNorm 层
layer_norm = nn.LayerNorm(normalized_shape=64)  # normalized_shape 是特征维度

# 输入数据 (batch_size, sequence_length, feature_dim)
input_data = torch.randn(32, 10, 64)  # 假设 batch_size=32, sequence_length=10, feature_dim=64

# 前向传播
output = layer_norm(input_data)

总结

  1. Layer Normalization 是对单个样本的所有特征进行归一化,适用于变长数据(如 NLP 中的序列数据)。
  2. Batch Normalization 是对 mini-batch 中每个特征进行归一化,适合固定长度的数据(如图像)。
  3. 两者的主要区别在于归一化的维度和对 mini-batch 的依赖程度。选择哪种归一化方法取决于具体任务和数据特性。

四、《Transformers without Normalization》笔记

paper:https://arxiv.org/pdf/2503.10622

文章的核心思想是tanh代替了归一化层,这是因为作者做实验发现LN的输入输出曲线,很像tanh函数的“S”型曲线:
在这里插入图片描述
tanh(x) 函数可视化:
在这里插入图片描述

∼ O n e   p e r s o n   g o   f a s t e r ,   a   g r o u p   o f   p e o p l e   c a n   g o   f u r t h e r ∼ \sim_{One\ person\ go\ faster,\ a\ group\ of\ people\ can\ go\ further}\sim One person go faster, a group of people can go further

<think>好的,我现在要比较Batch Normalization(BN)Layer Normalization(LN)的区别、适用场景以及在深度学习中的对比。首先,我需要回忆这两种标准化方法的基本概念原理。 Batch Normalization是在2015年由Sergey IoffeChristian 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,如原始论文中的设计。 总结下来,BNLN的主要区别在于归一化的维度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
发出的红包

打赏作者

Thomas_Cai

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值