Contents

Batch Normalization 与 Layer Normalization

Normalization公式如下 $$ y=\frac{x-E[x]}{\sqrt{Var[x]+\epsilon}} \star \gamma + \beta $$

1.Batch Normalization 与 Layer Normalization

../images/Normalization-1.jpg

主要区别:

Normalization方向不同,BN是一种“列缩放”,LN是一种“行缩放”

BN处理的对象是一批样本,是对这一批样本的同一维度做归一化。BN的目的是让每一层的分布稳定下来。

LN处理的对象是单个样本,是对当个样本的所有维度特征做归一化。在NLP中,LN一般用在第三维度,即[batch_size, seq_len, emb_dims]中的emb_dims,一般是词向量的维度。

2.为何要做Norm

本质上是对一批不太标准的数据统一到指定的格式。

一方面,激活函数由一定的饱和性,网络深度增加,每层特征分布会逐项偏向输出区间的两端靠近,可能会导致梯度消失。

另一方面,机器学习领域由很重要的假设:IID(即独立同分布)。归一化可以避免数据分布不同对模型的影响

3.为何NLP中用LN多,CV中用BN多?

NLP中的LN是对每个词的embedding做Norm,BN是对batch中相同位置词的embedding词做norm

  1. BN对同一位置的词做归一化,破坏了一句话中每个词的联系。
  2. LN有助于得到一个空间,BN不具备这样的功能。
  3. BN对batch_size比较敏感。
  4. 存在padding问题,长度不一致BN会有问题。

4.NLP与CV任务差别:

CV数据是客观存在的,像素本身已经包含了“信息”。

NLP数据从embedding开始的,这个embedding是学出来的,不是客观存在的。通过LN得到的embedding是以原点为中心,1为标准差,越往外越稀疏的球体空间。

3.参考

  1. https://zhuanlan.zhihu.com/p/74516930
  2. https://zhuanlan.zhihu.com/p/113233908
  3. https://blog.csdn.net/HUSTHY/article/details/106665809