🔁 回顾神经网络层的组合结构:
通常一个网络的标准顺序是这样的:
Linear (或 Conv) → BatchNorm → Activation (比如 ReLU)
也就是说:
-
先进行线性变换(全连接或者卷积);
-
然后对输出做 BatchNorm;
-
最后经过非线性激活函数。
✅ 为什么不是在输入上做 BatchNorm?
这个问题的核心就在这里。
📌 全连接层公式:
y = Wx + b
如果你在 输入 x 上做 BatchNorm,那么你归一化的是输入特征,但神经网络的训练核心在于:
调整 W 和 b,使得输出 y 更容易被后续网络层处理。
而如果你在 输出 y 上做 BatchNorm,就可以直接控制 每个输出通道的均值和方差,这可以:
-
减少内部协变量偏移(internal covariate shift);
-
更快地收敛;
-
更容易训练深层网络;
-
并且配合 γ 和 β 参数,依然可以恢复表达能力。