来源:2015年的论文《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》阐述了BN算法
一.何为internal covariate shift?
在神经网络的训练过程中(SGD下降算法),由于前一层的参数在变化,后一层的输入的分布同时会发生变化,因此我们需要降低学习率并且选择合适的初始化参数,并且由于梯度消失(弥散)带来的训练会变慢,这种问题称之为internal covariate shift。
二.何为Batch Normalization?
1.BN算法的advantage:
(1)可以适应更大的learning rate并且不必care参数的初始化;
(2)一定程度上起到regularization的作用,可以代替dropout的作用;
(3)BN本身是一个归一化的网络层,加速训练速度。
2.BN算法:
(1)algri1:
image.png
(2)algori2:
image.png
3.BN算法的interpretation:
(1)训练过程:
采用的batch的GSD算法,其中表示输入的mini-batch的均值,
表示输入的mini-batch的方差,
表示normalization后的输入值。BN变换置于activation function之前,是一个如同激活函数层一样的层,并且BN变换是针对每一个神经元而言。
其中表示变换重构:原因在于单纯的normalization会使得前一层学习到的特征破坏,因此引入
和
两个可学习参数。
(2)测试过程:
每一个神经元对应的均值采用所有batch的的均值,对应的方差采用所有batch的
的均值。
因此预测阶段BN变换为:
4.BN在卷积神经网络的使用:
根据卷积网络的参数共享,针对每一个feature map进行BN变换,而不是针对每一个神经元。
5.几个常见问题:
BN到底为什么可以加速收敛:
image.png
如图,右上角未经过BN变换,左下角经过BN变换,显然经过变换的更容易快速找到一个穿过数据的超平面进行分割(任意的初始值)。个人理解最主要的点在于normalization解决梯度弥散,位于0附近的值,对于sigmoid函数来说,梯度值更大,收敛速度更快。










网友评论