深度学习中的Batch normalization

批规范化(Batch normalization)是深度学习中经常见到的一种训练trick,指在采用梯度下降法训练DNN时,对网络层中每个mini-batch的数据进行归一化,使其均值变为0,方差变为1,其主要作用是缓解DNN训练中的梯度消失/爆炸现象,加快模型的训练速度。 
下面是作者原论文中的算法介绍: 
深度学习中的Batch normalization

关于BN的两点理解: 
1.为什么它能缓解DNN训练中的梯度消失/爆炸现象? 
关于梯度消失的一个简单例子是0.930≈0.040.930≈0.04,而BN通过归范化各层的输入数据使得原本会减小的data value的scale变大,这样反向求出的梯度scale应该也会相应增大。 
2.为什么在normalize后还有一个scale and shift操作? 
就像上面算法注释解释的,仅是简单的对网络层输入作归一化可能会改变原本的输入表示,而加入scale and shift操作,让归一化操作有机会通过对参数γ,βγ,β 的学习将其变回去,不改变输入表示。

关于BN的具体介绍和讨论,可以看知乎上的两个问题 
1.深度学习中 Batch Normalization为什么效果好? 
2.请问batch_normalization做了normalization后为什么要变回来?