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]$)
步骤如下:
计算 batch 均值:
\[\mu = \frac{1}{m} \sum_{i=1}^{m} z^{(i)}\]计算 batch 方差:
\[\sigma^2 = \frac{1}{m} \sum_{i=1}^{m} (z^{(i)} - \mu)^2\]归一化得到零均值、单位方差的 $\hat{z}^{(i)}$:
\[\hat{z}^{(i)} = \frac{z^{(i)} - \mu}{\sqrt{\sigma^2 + \varepsilon}}\]- 其中 $\varepsilon > 0$ 是一个极小常数(如 $10^{-8}$),防止除零。
缩放和平移(引入可学习参数) :
\[\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 进行授权