(Batch Normalization)批标准化算法理解

批标准化

1.概念

batch normalization,就是“批规范化”,即为了克服神经网络层数加深,收敛速度变慢,常常导致梯度消失(vanishing gradient problem)或梯度爆炸(gradient explore),通过引入批标准化来规范某些层或者所有层的输入,从而固定每层输入信号的均值与方差。

2.方法

批标准化: 一般用在非线性映射(**函数)之前,对 x=Wu+b 做规范化,使结果(输出信号各个维度)的均值为0,方差为1 。让每一层的输入有一个稳定的分布会有利于网络的训练。
BN算法在网络中的应用
传统的神经网络,只是在将样本x输入输入层之前对x进行标准化处理(减均值,除标准差),以降低样本间的差异性。BN是在此基础上,不仅仅只对输入层的输入数据x进行标准化,还对每个隐藏层的输入进行标准化。如下图
(Batch Normalization)批标准化算法理解
标准化后的x乘以权值矩阵Wh1加上偏置bh1得到第一层的输入Wh1x+bh1,经过**函数得到h1=ReLU(Wh1x+bh1),然而加入BN后, h1的计算流程如虚线框所示:
1. 矩阵x先经过Wh1的线性变换后得到s1(注:因为减去batch的平均值μB后,b的作用会被抵消掉,所提没必要加入b了)

将s1再减去batch的平均值μB,并除以batch的标准差σB2+ϵ−−−−−√得到s2. ϵ是为了避免除数为0时所使用的微小正数。
其中

μB=1mi=0mWh1xi

σB2=1mi=0m(Wh1xiμB)2

(注:由于这样做后s2基本会被限制在正态分布下,使得网络的表达能力下降。为解决该问题,引入两个新的参数:γ,β. γ和β是在训练时网络自己学习得到的。)

将s2乘以γ调整数值大小,再加上β增加偏移后得到s3
s3经过**函数后得到h1
需要注意的是,上述的计算方法用于在训练过程中。在测试时,所使用的μ和σ2是整个训练集的均值μp和方差σp2. 整个训练集的均值μp和方差σp2的值通常是在训练的同时用移动平均法来计算的.

3.优缺点

批标准化通过规范化让**函数分布在线性区间,结果就是加大了梯度,让模型更大胆的进行梯度下降,其优点如下:

  • 加大探索补偿,加快收敛速度
  • 更容易跳出局部最小
  • 破坏原来的数据分布,一定程度上缓解过拟合

4.示例

待续……

参考:
1.http://blog.****.net/hjimce/article/details/50866313
2. http://blog.****.net/whitesilence/article/details/75667002
3. https://www.zhihu.com/question/38102762
4. 《TensorFlow 技术解析与实战》李嘉璇著
5.《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》
6. 《Spatial Transformer Networks》