BN是由Google于2015年提出,论文是《Batch Normalization_ Accelerating Deep Network Training by Reducing Internal Covariate Shift》。
1 作用
1将输入值或卷积网络的张量进行类似标准化的操作,将其放缩到合适的范围,加快训练速度。
2另一方面使得每一层可以尽量面对同一特征分布的输入值,减少变化带来的不确定性。
BN可以防止学习过程中梯度消失,这一点论文中有阐述,作者说可以如果使用sigmod激活函数的时候,如果不用BN的话,会让反向传播的过程中梯度消失(当输出值较大或较小时,sigmod函数就会进入饱和区域,导致其导数几乎为零),但是可以通过使用Relu激活函数来解决,那就意味着BN主要还是让数据分布变为一致。

2 流程
假设某一批次的数据为2个2行2列2深度的张量,BN的过程如下:
第一步:
计算每一层深度的均值和方差:
第二步:
对每一层设置2个参数,γ和β。假设第1深度γ=2、β=3;第2深度γ=5、β=8。(γ,β是神经网络需要学习的参数)
缩放和移位是算法比较关键,因为它提供了更多的灵活性。
计算公式:
