卷机神经网络学习笔记-Batch Normalization的理解以及为什么会有用
原论文:《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》
下图是过程。
我的理解是,BN做的事就是让网络自己去学习均值与方差,这是网络想要的均值和方差,就是参数和
。
BN通常在**函数之前。 BN+PRelu,是常用的结构
然后是为什么。
我在吴恩达的视频里看到的是
第一个原因,本身归一化特征值x就可以是特征都在类似的范围里面,加速学习。比如有十个特征,有的特征是体重,范围可能是30-100,另一个特征可能是身高,范围只在1-2,需要特征归一化才方便网络学习,不然数值较小的特征会被忽略,而本身这个特征和其他特征一样重要。BN不仅对输入进行特征归一化,对后面每个隐藏层的输入都做特征归一化。具体是在网络的输出进入到**函数之前进行BN。
第二个原因,BN可以让权重更能经受的住变化,或者说减少输入分布的偏移,也是主要作用。让前面的网络层便宜的少一点,后面的层更好的学习。使输入层的分布改变less,因为均值和方差被和
限制了。一定程度上削弱前层的作用。每个网络层要更独立了一点。
第三个原因,有轻微正则化的作用,可以认为是副作用。因为BN是在mini-batch上做的,不是全部的数据,所以均值和方差会有一点噪音。给隐藏单元加噪音,使后面的隐藏单元不过分依赖某个神经单元