批量归一化(Batch Normalization,BN)方法有效规避了这些复杂参数对网络训练产生的影响,在加速训练收敛的同时也提升了网络的泛化能力。
神经网络训练的本质是学习数据的分布,如果训练数据和测试数据分布不同的话,学习的泛华能力大大降低。因此需要在训练开始前对数据所有输入数据进行归一化处理。
然而随着网络训练的进行, 每个隐藏层参数变化会使得后一层的输入发生变化,从而使得每一批训练数据的分布发生变化,致使网络在每一次迭代中都需要拟合不同的数据,增大模型的复杂度和过拟合的风险。
批量归一化是针对每一批数据,网络的每一层输入之前增加归一化处理。归一化可以看做是每一层的输入和上一层的输出之间加入了一个新的计算层,对数据的分布进行额外的约束,从而增强了模型的泛华能力。
但是批归一化同时也降低了模型的拟合能力。归一化后的数据分布被强制为均值为0,标准差为1。以sigmod函数为例,批量归一化后处于函数的变化区域。破坏了数据原始的特征。为了恢复原始的数据分布,具体引入了变换重构以及可学习参数。对于一般的网络,不采用批量归一化操作时,这两个参数高度依赖前面网络学习到的连接权重(对应复杂的非线性)。而在批量归一化操作中,γ和β变成了该层的学习参数,仅用两个参数就可以恢复最优的输入数据分布,与之前网络层的参数解耦,从而更加有利于优化的过程,提高模型的泛化能力。
随着网络层数的增加,激活函数的输入值的整体分布逐渐往激活函数的取值区间上下靠近,从而导致在反向传播是低层神经网络的梯度消失。通过批归一化,使得越来越偏的分布拉倒0附近,使得梯度变大,加快了学习收敛速度,避免了梯度消失。