云计算百科
云计算领域专业知识百科平台

深度学习-卷积神经网络CNN-批量归一化 BatchNorm

为什么需要批量规范化层呢?

让我们来回顾一下训练神经网络时出现的一些实际挑战:

  • 首先,数据预处理的方式通常会对最终结果产生巨大影响。 回想一下我们应用多层感知机来预测房价的例子。使用真实数据时,我们的第一步是标准化输入特征,使其平均值为0,方差为1。 直观地说,这种标准化可以很好地与我们的优化器配合使用,因为它可以将参数的量级进行统一。

  • 第二,对于典型的多层感知机或卷积神经网络,当我们训练时,中间层中的变量(例如,多层感知机中的仿射变换输出)可能具有更广的变化范围:不论是沿着从输入到输出的层,跨同一层中的单元,或是随着时间的推移,模型参数的随着训练更新变幻莫测。 批量规范化的发明者非正式地假设,这些变量分布中的这种偏移可能会阻碍网络的收敛。 直观地说,我们可能会猜想,如果一个层的可变值是另一层的100倍,这可能需要对学习率进行补偿调整。

  • 第三,更深层的网络很复杂,容易过拟合。 这意味着正则化变得更加重要。

批量规范化应用于单个可选层(也可以应用到所有层),其原理如下:

在每次训练迭代中,我们首先规范化输入,即通过减去其均值并除以其标准差,其中两者均基于当前小批量处理。 接下来,我们应用比例系数和比例偏移。 正是由于这个基于批量统计的标准化,才有了批量规范化的名称。

  • BatchNorm 在 一个 batch 的同一通道 内做归一化

  • LayerNorm 在 每条样本的 所有通道/特征 内做归一化

作用:把输入分布强行压成 零均值、单位方差,减轻 Internal Covariate Shift 内部协变量偏移,使优化曲面更平滑,从而让梯度更稳定、训练更快、更易收敛到较优的泛化解。

计算例子

下面用 3×4 的 RGB 小批次张量举例,并给出计算过程与差异对照:

数据形状约定:设输入 x 形状为 (B, C, H, W) = (2, 3, 2, 2):

  • 2 张图片

  • 3 个通道 (R, G, B)

  • 每通道 2×2 像素

  • 把每张图片展平后,张量变成:

    batch0-0
    R: [[1, 3], [5, 7]] → 4 个标量 1 3 5 7
    G: [[2, 4], [6, 8]] → 2 4 6 8
    B: [[0, 2], [4, 6]] → 0 2 4 6

    batch0-1
    R: [[2, 4], [6, 8]]
    G: [[3, 5], [7, 9]]
    B: [[1, 3], [5, 7]]

    BatchNorm 的计算:BN是在同一个batch中不同样本之间的同一位置的神经元之间进行归一化。

    • 归一化维度:在 (B, H, W) 三个维度上求均值/方差,每个通道一组统计量。

    • 以 R 通道为例: 共有 2×2×2 = 8 个像素值:{1, 3, 5, 7, 2, 4, 6, 8}

      • μ_R = (1+3+5+7+2+4+6+8)/8 = 4.5

      • σ²_R = 平均((x−4.5)²) = 5.25

    • 归一化后每个像素先做 (x−μ)/√(σ²+ε),再进行 γ·x + β 的仿射。 G、B 通道同理,各自独立拥有一组 μ、σ、γ、β。

    • 参数:每个通道一对 (γ, β),共 3×2 = 6 个可学习标量。

    • 推理阶段:用滑动平均保存的全局 μ、σ,不再依赖 batch。

    LayerNorm 的计算:LN是在同一个样本中不同神经元之间进行归一化。

    • 归一化维度:在 (C, H, W) 三个维度上求均值/方差,每条样本一组统计量。

    • 以 batch-0 为例: 把 3×2×2 = 12 个数拉成一条向量: {1, 3, 5, 7, 2, 4, 6, 8, 0, 2, 4, 6}

      • μ = 4.0

      • σ² = 平均((x−4)²) = 5.0

    • 归一化后再用 该样本独有 的 γ、β 做仿射。 batch-1 同理,用 batch-1 自己的 12 个数重新算 μ、σ。

    • 参数:每条样本一对 (γ, β),可共享或不共享,与 BatchNorm 不同。

    为什么有效?

    • 输入:手写数字灰度图,只保留 2 个像素 → 输入 x 形状 (batch, 2)。

    • 网络:2 层线性 y = W₂ ReLU(W₁x)。

    • 任务:二分类 0/1,用 Sigmoid + BCE 损失。

    • 假设 batch = 4,像素值如下(故意把范围拉大):

      x = [[200, 190],
      [10, 5],
      [180, 170],
      [8, 4]]

    • 真实标签 y = [0,  1,  0,  1]

    没有归一化时(裸网络)

    • 第一层输出 z₁ = W₁x,假设 W₁ 随机初始化后, z₁ 的均值≈180,方差≈6000。

    • 经过 ReLU 后,大多数值落在 0 或 >100 的区间 → 梯度在反向传播时: – 很大值那一端 → 梯度爆炸; – 很多 0 → 梯度消失。 结果:Loss 震荡剧烈,训练 10 个 epoch 仍降不下来。

    加上 BatchNorm(放在第一层之后):

  • 计算 batch 内每个通道的均值 μ、方差 σ²:

    • μ₁ = (200+10+180+8)/4 = 99.5

    • μ₂ = (190+5+170+4)/4 = 92.25

  • 归一化:

    • ẑ₁ = (z₁ − μ₁)/√(σ₁²+ε)

    • ẑ₂ = (z₂ − μ₂)/√(σ₂²+ε)

  • 现在所有值缩放到 ≈[-1,1] 区间。

  • 再乘可学习 γ、β 做仿射,保持表达能力。

  • 效果:

    • 第一层输出方差≈1,ReLU 后的分布不再极端。

    • 反向传播时梯度大小稳定,loss 单调下降,3 个 epoch 就收敛。

  • 加上 LayerNorm(放在第一层之后)

    • 对每条样本的所有特征一起算 μ、σ²:

      • 样本 0:μ = (200+190)/2 = 195

      • 样本 1:μ = (10+5)/2 = 7.5

      • …………

    • 每条样本内部做 (x−μ)/σ,再 γ、β。

      • 效果:

        • 即使 batch 大小变成 1 也能用(LN 不依赖 batch)。

        • 输入尺度被拉齐,梯度同样稳定,收敛速度与 BN 相近。

    比较点

    BatchNorm

    LayerNorm

    归一化范围

    跨 batch 的同一通道

    单条样本 内的全部特征

    均值/方差维度

    (B, H, W)

    (C, H, W)

    依赖 batch 大小

    是(推理时用滑动平均)

    典型场景

    CNN、大 batch

    RNN、Transformer、小 batch

    参数量

    每通道一对 γβ

    每层/每样本一对 γβ

    因此:

    • 在 CNN 里用 BatchNorm,你会看到“所有图片的 R 通道一起归一化”;

    • 在 Transformer 里用 LayerNorm,你会看到“每个 token 的所有维一起归一化”。

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 深度学习-卷积神经网络CNN-批量归一化 BatchNorm
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!