- 其一,直觉上讲,将所有的x将其变化范围通过归一化从1-1000到一个相似的变化范围,这样可以加快学习速度
- 其二,在输入的分布不同的情况下,如图
第一个输入全是黑猫,其分布如其上图(左),其学到的决策边界可能是一条直线,用图右边的数据进行测试时就会得到一个预测不准确的结果,而实际上,对于图中的分布,我们想要学到的决策边界应该是如下图所示:
由于输入数据分布的偏好很容易导致学不到上图所示绿色的决策边界,这样的话当输入数据的分布发生改变(或者协方差移位Covariate Shift)时可能将要重新训练模型,所以,采用BatchNormalization 将每一层神经网络的输入保持相同的分布
- 其三,在神经网络训练的过程中,其分布也会逐渐发生偏移或者变动,收敛也将逐渐变慢,一般是整体分布逐渐往非线性函数的取值区间的上下限两端靠近(对于Sigmoid函数来说,意味着激活输入值WU+B是大的负值或正值),所以这导致反向传播时低层神经网络的梯度消失,这是训练深层神经网络收敛越来越慢的本质原因,而BN就是通过一定的规范化手段,把每层神经网络任意神经元这个输入值的分布强行拉回到均值为0方差为1的标准正态分布,其实就是把越来越偏的分布强制拉回比较标准的分布,这样使得激活输入值落在非线性函数对输入比较敏感的区域,这样输入的小变化就会导致损失函数较大的变化,意思是这样让梯度变大,避免梯度消失问题产生,而且梯度变大意味着学习收敛速度快,能大大加快训练速度。
- 其四,类似于Dropout的效果,可以防止过拟合
BatchNormalization的具体实现如下:
具体描述可参考: