【深度学习】对batch Normalization(批归一化)的理解

Batch Normalization:Accelerating Deep Network Training by  Reducing Internal Covariate Shift

 

关于BN的好处:

 1. 最主要的是减少梯度消失,加快收敛速度。

 2.  允许使用更大的学习率,不需要drop out,减少L2正则,防止过拟合。

阅读paper的难点主要在两个:

1.为什么通过归一化,减少内部斜变量转移就可以减少梯度消失,加快收敛速度呢?

2.归一化后又引入了两个新的参数 gamma与beta,而这两个参数最极端的情况是把分布拉回到原分布,这是为啥?

 

对于第一个问题,大神们发现内部斜变量转移(也就是激活值随着参数的变化分布发生变化)会使得输出层的分布趋近激活函数的非线性饱和区域,如sigmoid函数的两端,这样会使得梯度趋于0,从而无法训练网络,LeCun在文章Gradient based learning applied to document recognition中提出过如果输入数据白化可加速网络训练。于是BN的提出者就想出能不能将每一层的激活值归一化,将他们拉回到均值为0,方差为1的分布区域,这样大部分数据都从梯度趋近于0的区域变换至激活函数中梯度较大的区域,从而加快收敛速度。

对于第二个问题,因为归一化后会影响原始网络输出层的表达能力,因此引入两个参数进行调整,而这两个参数是网络自己学习的,因为在归一化后大部分数据都集中分布在激活函数中间的线性区域,但对于深层网络来说多层线性激活等价于一层没有意义,因此需要在非线性和梯度较大这两个点之间做个权衡,人为设定可能不合适,因此由网络自行学习去衡量激活值的位置。

你可能感兴趣的:(深度学习)