归一化的原理

BN:Batch Normaliztion 批量归一化
LN:Layer Normalization 层归一化

BN和LN的归一化公式都是减去均值,然后除以方差。在仿射变化之后,激活函数之前进行归一化。

BN是每Batch的数据进行归一化,每个Batch的数据是一个MxN的矩阵,对该矩阵的每个列向量进行归一化。BN需要进行一阶统计量和二阶统计量的计算,因此每个mini-batch的数据需要具有足够的统计量,从而满足同分布;BN不适用于RNN这种隐层时刻处于动态变化的网络。
LN是中间层的所有神经元进行归一化;如果把该层的神经元输入的数据构成一个向量,那么就是对该向量的每一个元素进行归一化。LN不需要要求mini-batch的数据同分布,因此可以用于小mini-batch、动态网络场景和RNN中。

逐层归一化提高训练效率的原因

  1. 更好的尺度不变性
    1. 高层的神经层由底层的数据输入而来,因此如果底层数据发生很小的变化,会导致高层的神经层发生巨大的变化。这种变化是数据输入分布发生变化,会导致神经网络进行重新训练。进行层归一化,无论底层的输入数据如何变化,高层的输入数据不会受到影响。
  2. 减少梯度消失
    1. 逐层归一化,不会使输入数据处于饱和区域,进而减小梯度消失发生的问题。

BN的特点

BN会降低模型的非线性拟合能力,但会增强模型的泛化能力,这是由于所有数据都变为均值为0,方差为1的数据分布。可以通过变换重构恢复数据的分布,其中恢复数据分布的参数可以通过学习获得。

BN与LN

BN转换是对单个神经元进行的,而LN是对一层的神经元进行相同的变换。

总结

神经网络本质是学习数据的分布,但是每一隐层参数的变化都会引起下一层输入数据分布发生变化,会导致神经网络每次迭代都会学习不同的数据分布,将会大大降低神经网络的泛化能力;因此可以采用归一化的操作,可以保持数据的尺度不变性。