为什么 Batch Normalization 放在全连接/卷积层的输出之后?

🔁 回顾神经网络层的组合结构:

通常一个网络的标准顺序是这样的:

Linear (或 Conv) → BatchNorm → Activation (比如 ReLU)

也就是说:

  1. 先进行线性变换(全连接或者卷积);

  2. 然后对输出做 BatchNorm;

  3. 最后经过非线性激活函数。


✅ 为什么不是在输入上做 BatchNorm?

这个问题的核心就在这里。

📌 全连接层公式:

y = Wx + b

如果你在 输入 x 上做 BatchNorm,那么你归一化的是输入特征,但神经网络的训练核心在于:

调整 W 和 b,使得输出 y 更容易被后续网络层处理。

而如果你在 输出 y 上做 BatchNorm,就可以直接控制 每个输出通道的均值和方差,这可以:

  • 减少内部协变量偏移(internal covariate shift);

  • 更快地收敛;

  • 更容易训练深层网络;

  • 并且配合 γ 和 β 参数,依然可以恢复表达能力。