原论文:《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》
下图是过程。
我的理解是,BN做的事就是让网络自己去学习均值与方差,这是网络想要的均值和方差,就是参数和
。
BN通常在激活函数之前。 BN+PRelu,是常用的结构
然后是为什么。
我在吴恩达的视频里看到的是
第一个原因,本身归一化特征值x就可以是特征都在类似的范围里面,加速学习。比如有十个特征,有的特征是体重,范围可能是30-100,另一个特征可能是身高,范围只在1-2,需要特征归一化才方便网络学习,不然数值较小的特征会被忽略,而本身这个特征和其他特征一样重要。BN不仅对输入进行特征归一化,对后面每个隐藏层的输入都做特征归一化。具体是在网络的输出进入到激活函数之前进行BN。
第二个原因,BN可以让权重更能经受的住变化,或者说减少输入分布的偏移,