Batch Normalization
目前在CV方面最主流的归一化方法为BN,BN的作用是为了解决梯度消失与梯度爆炸。BN作用是将参数拉回到激活函数比较敏感的区域。
归一化在计算过程中可以看到:
1.求数据均值
2.求数据方差
3.数据进行标准化
4.训练参数γ,β
5.输出y通过γ与β的线性变换得到新的值
按照样本,纵向地进行归一化,需要保存计算得到的均值和方差,用于inference,适用于batch-size较大,样本间分布较为集中的场景。
对于下图这种数据,类似传统的机器学习的数据,使用BN是非常合理的且效果不错。绿框是BN的范围
但是BN不大适用于RNN等序列数据
- 因为自然语言比较灵活,同一个位置的词在不同样本里出现的分布差异会很大,这和BN要求的分布集中有冲突,所以效果比较差。
- 另外自然语言处理句子的长度不是固定的,差别会很大。
Layer Normalization
在NLP中,一个字或者词会通过一个词嵌入矩阵来表示,这个矩阵的维度是多少你可以自行决定。在LN中,他处理的是每一个词嵌入矩阵中对应的特征来进行归一化。
听起来和上面说的好像没什么区别,但是在NLP的数据处理中,一个batch是好几句话组成的,一句话又通过好几个词嵌入矩阵构成。
总结
BN:不同样本,同一特征,归一化
LN:一句话,各个词嵌入的特征,归一化