文章

28 归一化网络的激活函数(Normalizing activations in a network)

28 归一化网络的激活函数(Normalizing activations in a network)

1. 动机:为什么需要归一化?

  • 在训练浅层模型(如 Logistic 回归)时,对输入特征 $x$ 进行归一化(减均值、除标准差)能显著加速收敛。

    • 原因:使损失函数的等高线更“圆”,优化路径更直接。
  • 在深度神经网络中,每一层的输入实际上是前一层的激活输出(如 $a^{[l-1]}$ 或 $z^{[l-1]}$)。
  • 随着网络加深,内部协变量偏移(Internal Covariate Shift) 问题出现:

    • 每一层的输入分布会随着前层参数更新而不断变化,导致训练不稳定、收敛慢。
  • 核心思想:不仅归一化输入 $x$,还对每一隐藏层的中间激活值进行归一化,从而稳定训练过程。

2. Batch Normalization 的核心操作

  Batch Norm 并非直接归一化激活值 $a^{[l]}$,而是归一化线性输出 $z^{[l]}$(即激活函数前的值):

实践中通常对 $z^{[l]}$ 归一化,而非 $a^{[l]}$。

给定一个 mini-batch 中第 $l$ 层的 $m$ 个样本的 $z$ 值:

\[z^{(1)}, z^{(2)}, \dots, z^{(m)} \in \mathbb{R}^{n^{[l]}}\]

  (为简化,省略层索引 $[l]$)

步骤如下:

  1. 计算 batch 均值

    \[\mu = \frac{1}{m} \sum_{i=1}^{m} z^{(i)}\]
  2. 计算 batch 方差

    \[\sigma^2 = \frac{1}{m} \sum_{i=1}^{m} (z^{(i)} - \mu)^2\]
  3. 归一化得到零均值、单位方差的 $\hat{z}^{(i)}$

    \[\hat{z}^{(i)} = \frac{z^{(i)} - \mu}{\sqrt{\sigma^2 + \varepsilon}}\]
    • 其中 $\varepsilon > 0$ 是一个极小常数(如 $10^{-8}$),防止除零。
  4. 缩放和平移(引入可学习参数)

    \[\tilde{z}^{(i)} = \gamma \hat{z}^{(i)} + \beta\]
    • $\gamma$ 和 $\beta$ 是可学习参数,维度与 $z^{(i)}$ 相同。
    • 初始时通常设 $\gamma = 1$, $\beta = 0$,此时 $\tilde{z}^{(i)} \approx \hat{z}^{(i)}$。

✅ 最终将 $\tilde{z}^{(i)}$ 送入激活函数:

\[a^{(i)} = g(\tilde{z}^{(i)})\]

其中 $g(\cdot)$ 是激活函数(如 ReLU、sigmoid 等)。


3. 为什么需要 $\gamma$ $\beta$

  • 如果强制所有层的输入都是均值 0、方差 1,可能会限制模型表达能力

    • 例如:sigmoid 函数在 0 附近近似线性,若所有输入都集中在 0,就无法利用其非线性特性。
  • $\gamma$ 和 $\beta$ 允许网络自主决定每一层的最佳均值和方差

    • 若最优就是原始 $z^{(i)}$,则可通过设置:

      \[\gamma = \sqrt{\sigma^2 + \varepsilon}, \quad \beta = \mu\]

      使得 $\tilde{z}^{(i)} = z^{(i)}$,即 BN 变成恒等变换。

    • 若需要其他分布,也可通过梯度下降自动学习。

🔑 关键洞见:BN 不是“强制标准化”,而是“提供标准化选项”,由网络自行决定是否使用。


4. Batch Norm 的优势

  • 加速训练:减少 Internal Covariate Shift,使梯度更稳定。
  • 降低对初始化的敏感性
  • 允许使用更高的学习率
  • 具有轻微正则化效果(因使用 mini-batch 统计量引入噪声),但不能替代 Dropout。
  • 使超参数选择更鲁棒,扩大有效超参范围。

5. 实现细节补充(虽未在字幕中详述,但重要)

  • 训练 vs 推理(Inference)不同

    • 训练时:用当前 mini-batch 的 $\mu, \sigma^2$。
    • 推理时:需使用训练过程中统计的全局均值和方差(通常用指数移动平均估计)。
  • BN 通常放在哪里?

    • 标准做法:Linear → BN → Activation
    • 即:$z = Wx + b$ → BN($z$) → $a = g(\text{BN}(z))$

6. 总结公式(单层 BN 流程)

  对第 $l$ 层,在一个 mini-batch 上:

\[\begin{aligned} \mu^{[l]} &= \frac{1}{m} \sum_{i=1}^{m} z^{[l](i)} \\ \sigma^{2[l]} &= \frac{1}{m} \sum_{i=1}^{m} \left( z^{[l](i)} - \mu^{[l]} \right)^2 \\ \hat{z}^{[l](i)} &= \frac{z^{[l](i)} - \mu^{[l]}}{\sqrt{\sigma^{2[l]} + \varepsilon}} \\ \tilde{z}^{[l](i)} &= \gamma^{[l]} \odot \hat{z}^{[l](i)} + \beta^{[l]} \\ a^{[l](i)} &= g\left( \tilde{z}^{[l](i)} \right) \end{aligned}\]

  其中 $\odot$ 表示逐元素相乘(因 $\gamma, \hat{z}$ 为向量)。


✅ 学习要点回顾

概念说明
归一化对象$z^{[l]}$(线性输出),非 $a^{[l]}$
可学习参数$\gamma$(缩放)、$\beta$(平移)
目的稳定隐藏层输入分布,加速训练,提升泛化
灵活性网络可选择是否“取消”归一化(通过 $\gamma, \beta$)
适用性几乎所有现代深度网络的标准组件(CNN、Transformer 等)
本文由作者按照 CC BY 4.0 进行授权