DeepLearning---层归一化(LayerNorm)与批量归一化(BatchNorm)的区别

虽然我们认为训练样本是独立同分布的,但是在实际训练过程中,我们会划分 batch 来提高训练效率,此时不同的 batch 之间可能不再是同分布,从而影响模型的训练效果。

深度学习模型往往都具有较多的层,网络越深越容易出现梯度消失和梯度爆炸的问题,导致模型不稳定,不容易收敛。

对于深层的模型,如果不做归一化可能会出现靠后的层有很多权重为零的神经元,起不到任何作用。这是因为经过太多的层后,由于梯度消失或爆炸的影响,某些神经元的量级差距过大,从而导致模型不得不尽可能的降低这些“离群”权重的影响,而设置很多权重非常小的神经元。

Batch_Normalzation

BN 层主要对一个 batch 进行归一化,即在 batch 的维度上计算均值和方差,从而对每个输入特征都得到其在整个 batch 数据上的均值和方差,然后进行归一化。这种方法可以保证从每个输入特征学习到的信息不丢失,同时保证数据之间的量级基本一致。

使用细节

BN 归一化依赖于 batch_size,batch 越大,则其计算的均值和方差越接近真实值,归一化效果越好。

BN 使用在激活函数之前。

优点

  1. BN 可以使各层的数据分布相对稳定,从而加快收敛速度
  2. 有一定的正则化效果,减弱模型参数对初始化的依赖。
  3. 允许使用饱和性激活,可以缓解梯度消失问题。

缺点

  1. Batch_size 过小时效果不好,甚至可能起反作用。
  2. 不适合以 RNN 为基础的动态网络或时序模型。因为 BN 会计算该层整个 batch 的均值和方差并保存,而 RNN 模型的输入是序列数据,其长度可能不一致,从而导致不同时间步的隐层看到的输入数据不同。

Layer Normalization

Layer Normalization 针对层进行归一化,及对于该层的所有神经元进行归一化,不依赖于 batch。

对每个训练样本,对其所有输入特征,在当前层上的所有神经元上求均值和反差,总共求得 batch_size 个均值和方差,然后进行归一化。

优点

不依赖于 batch 大小,可以适应差距较大的输入样本,因此适合于 RNN 类型的模型。

缺点

对所有的神经元进行归一化,也就是其求均值和方差时会将不同的输入特征放在一起处理,如果各个特征之间存在较大的差异,则可能会影响学习效果。

posted @ 2024-05-22 14:16  RubySIU  阅读(503)  评论(0编辑  收藏  举报