几乎所有的主流神经网络都会使用批量归一化,虽然这个思想早已出现,但是这个层的出现没多久。同事想要做很深的神经网络时,这更是一个不可避免的层。
现存问题
- 正向计算时是从底部向后传播,但计算梯度时是反向传播,越往底层越有可能造成梯度消失。
- 损失出现在最后,后面的层训练较快
- 数据在最底部
- 底部的层训练较慢
- 底部层一变化,所有都得跟着变
- 最后的那些层需要重新学习多次
- 导致收敛变慢
- 我们可以在学习底部层的时候避免变
化顶部层吗?
核心思想
之所以后面的参数会随着前面的参数不停变得原因是方差和均值在不同的层之间在不停地变化,我们可以通过固定住分布来增加数值的稳定性
- 固定小批量里面的均值和方差
μ B = 1 ∣ B ∣ ∑ i ∈ B x i \mu_B=\frac{1}{|B|}\sum\limits_{i\in B}x_i μB=∣B∣1