学习‘Batch Normalization原理与实战- 知乎’的笔记
总结:
Batch Normalization是为了解决Internal Covariate Shift(内部协变量变换)而提出的一种方法,相对于传统方法白化而言
(1)计算量更小
(2)保留了节点上的输入数据的表达力。
正文:
1.什么是Internal Covariate Shift?
Batch Normalization的原论文作者给了Internal Covariate Shift一个较规范的定义:在深层网络训练的过程中,由于网络中参数变化而引起内部结点数据分布发生变化的这一过程被称作Internal Covariate Shift。
2.Internal Covariate Shift会带来什么问题?
(1)上层网络需要不停调整来适应输入数据分布的变化,导致网络学习速度的降低
(2)网络的训练过程容易陷入梯度饱和区,减缓网络收敛速度
3.如何减缓Internal Covariate Shift?
ICS产生的原因是由于参数更新带来的网络中每一层输入值分布的改变,并且随着网络层数的加深而变得更加严重,因此我们可以通过固定每一层网络输入值的分布来对减缓ICS问题。
(1)白化(Whitening)
1.白化作用:对输入数据分布进行变换,进而达到以下两个目的:
1)使得输入特征分布具有相同的均值与方差。
2)去除特征之间的相关性
2.白化主要是PCA白化与ZCA白化:
PCA白化保证了所有特征分布均值为0,方差为1。
ZCA白化则保证了所有特征分布均值为0,方差相同。
(2)Batch Normalization
解决白化存在的问题:
1)白化过程计算成本太高;
2)减弱了网络节点中每一层输入数据表达能力
解决手段:
解决问题1):对每个特征进行独立的normalization。
解决问题2):BN引入了两个可学习(learnable)的参数gamma 与beta 。引入的目的是为了恢复数据本身的表达能力。
4.Batch Normalization的优势?
(1)BN使得网络中每层输入数据的分布相对稳定,加速模型学习速度
(2)BN使得模型对网络中的参数不那么敏感,简化调参过程,使得网络学习更加稳定
(3)BN允许网络使用饱和性激活函数(例如sigmoid,tanh等),缓解梯度消失问题
让激活函数的输入数据落在梯度非饱和区
(4)BN具有一定的正则化效果
在Batch Normalization中,由于我们使用mini-batch的均值与方差作为对整体训练样本均值与方差的估计,尽管每一个batch中的数据都是从总体样本中抽样得到,但不同mini-batch的均值与方差会有所不同,这就为网络的学习过程
中增加了随机噪音,与Dropout通过关闭神经元给网络训练带来噪音类似,在一定程度上对模型起到了正则化的效果。