BN其实就是把每个隐层神经元的激活输入分布从偏离均值为0方差为1的正态分布通过平移均值压缩或者扩大曲线尖锐程度,调整为均值为0方差为1的正态分布
当输入均值为0,方差为1时,当使用sigmoid激活函数时,绝大多数的输入都落到了[-2,2]的区间,而这一段是sigmoid函数接近于线性变换的区域,意味着x的小变化会导致非线性函数值较大的变化,也即是梯度变化较大,对应导数函数图中明显大于0的区域,就是梯度非饱和区。即经过BN后,目前大部分Activation的值落入非线性函数的线性区内,其对应的导数远离导数饱和区,这样来加速训练收敛过程
然后为了不让网络的表达能力下降,保证非线性的获得,它又对变换后的满足均值为0方差为1的x又进行了scale加上shift操作(y=scale*x+shift),这样就等价于将非线性函数的值从正中心周围的线性区往非线性区移动了一点
推理的过程中,我们得不到实例集合的均值和方差,因此,这里用从所有训练实例中获得的统计量来代替Mini-Batch里面m个训练实例获得的均值和方差统计量
BN的优点
提升了训练速度,收敛过程大大加快
增加分类效果,一种解释是这是类似于Dropout的,一种是自带了防止过拟合的正则化表达方式,所以不用Dropout也能达到相当的效果
调参过程也简单多了,对于初始化要求没那么高,而且可以使用大的学习率等
参考链接
深入理解Batch Normalization批标准化
批归一化(Batch Normalization)
视频链接
GoogLeNetv1 论文研读笔记