归一化通常用于解决神经网络中梯度爆炸或消失的问题,通过使用转换将特征的所有值映射到[0,1]范围内来工作,这使得所有值都处于相同的比例或分布中。简单来说,归一化规范了神经网络的输入并加快训练速度。
归一化的两种类型
主要有两种类型的归一化技术,即:
- 批量归一化
- 层归一化
批量归一化(Batch Normalization)
对于任何隐藏层,我们通过非线性激活传递输入以获得输出。对于特定层中的每个神经元,我们可以强制预激活具有零均值和单位标准偏差。这可以通过从小批量的每个输入特征中减去平均值并除以标准差来实现。
然而,强制所有预激活为零并且所有批次的单位标准差可能过于严格。所以波动分布可以让网络更好地学习。
为了解决这个问题,批量归一化引入了两个参数:比例因子gamma(γ)和偏移量beta(β),两者均为可学习的参数。
需要注意的是,在批量归一化中,我们使用批量统计,当前小批量对应的均值和标准差。然而,当批量较小时,样本均值和样本标准差不足以代表实际分布,网络将无法学到任何有意义的东西。
层归一化(Layer Normalization)
层归一化(Layer Normalization)由研究人员Jimmy Lei Ba、Jamie Ryan Kiros和Geoffrey E.Hinton提出。在层归一化中,特定层中的所有神经元实际上在给定输入的所有特征上具有相同的分布。
对所有特征进行归一化,但对特定层的每个输入进行归一化,消除了对批次的依赖。这使得层归一化非常适合序列模型,例如流行的Transformer和递归神经网络(RNN)。
批量归一化和层归一化的主要区别
1.批量归一化在小批量中独立地归一化每个特征。层归一化跨所有特征独立地归一化批处理中的每个输入。
2.由于批量归一化取决于批量大小,因此它对小批量无效。层归一化与批量大小无关,因此它也可以应用于较小尺寸的批量。
3.批量归一化需要在训练和推理时进行不同的处理。由于层归一化是沿着特定层的输入长度完成的,因此可以在训练和推理时间使用同一组操作。