3.6 Batch Norm 为什么奏效?(Why does Batch Norm work?)
Last updated
Last updated
和输入层的输入特征进行归一化,从而改变Cost function的形状,使得每一次梯度下降都可以更快的接近函数的最小值点,从而加速模型训练过程的原理有相同的道理,只是Batch Norm是将各个隐藏层的激活函数的激活值进行的归一化,并调整到另外的分布
Batch Norm 可以使权重比网络更滞后或者更深层
假设第一训练样本的集合中的猫均是黑猫,而第二个训练样本集合中的猫是各种颜色的猫。如果将第二个训练样本直接输入到用第一个训练样本集合训练出的模型进行分类判别,在很大程度上无法保证能够得到很好的判别结果
因为训练样本不具有一般性(即不是所有的猫都是黑猫),第一个训练集合中均是黑猫,而第二个训练集合中各色猫均有,虽然都是猫,但是很大程度上样本的分布情况是不同的,无法保证模型可以仅仅通过黑色猫的样本就可以完美的找到完整的决策边界
这种训练样本(黑猫)和测试样本(猫)分布的变化称之为covariate shift。如下图所示:
深度神经网络中,covariate shift会导致模型预测效果变差,重新训练的模型各隐藏层的和均产生偏移、变化。而Batch Norm的作用恰恰是减小covariate shift的影响,让模型变得更加健壮,鲁棒性更强
使用深层神经网络,使用Batch Norm,该模型对花猫的识别能力应该也是不错
网络的目的是通过不断的训练,最后输出一个更加接近于真实值的,以第2个隐藏层为输入来看:
对于后面的神经网络,是以第二层隐层的输出值作为输入特征的,通过前向传播得到最终的,但是网络还有前面两层,由于训练过程,参数是不断变化的,对于后面的网络,的值也是处于不断变化之中,所以就有了Covariate shift的问题
如果对使用了Batch Norm,即使其值不断的变化,其均值和方差却会保持。Batch Norm的作用是限制前层的参数更新导致对后面网络数值分布程度的影响,使得输入后层的数值变得更加稳定。Batch Norm减少了各层之间的耦合性,让各层更加独立,实现自我训练学习的效果。如果输入发生covariate shift,Batch Norm的作用是对个隐藏层输出进行均值和方差的归一化处理,让更加稳定,使得原来的模型也有不错的表现
Batch Norm 削弱了前层参数与后层参数之间的联系,使得网络的每层都可以自己进行学习,相对其他层有一定的独立性,有助于加速整个网络的学习
和Dropout相似,其在每个隐藏层的激活值上加入了一些噪声,(Dropout以一定的概率给神经元乘上0或者1)。Batch Norm 也有轻微的正则化效果
如果使用Batch Norm ,使用大的Mini-batch如256,相比使用小的Mini-batch如64,会引入更少的噪声,会减少正则化的效果
Batch Norm的正则化效果比较微弱,正则化不是Batch Norm的主要功能
使用Mini-batch梯度下降,每次计算均值和偏差都是在一个Mini-batch上进行计算,而不是在整个数据样集上。这样在均值和偏差上带来一些比较小的噪声。那么用均值和偏差计算得到的也将会加入一定的噪声