为什么Transformer要用LayerNorm?
来源:知乎
文章仅作学术分享,著作权归属原作者,侵删
深海(阿里巴巴算法工程师)回答:
Batch Normalization 也是可以用的,但为什么不用,我们来分析一下问题。
我们回到RNN,RNN其实也能够使用Batch Normalization ,但它为什么不用?是因为变长吗,变长序列我们也是能够padding到同一个长度进行训练的,至于为什么不用,是因为BN对一个Batch中对应位置的分量进行归一化,这就存在一定的问题,因为一个Batch中对应位置的分量不一定有意义,它可能是padding的结果。
实际上LSTM训练的时候我们会把一个batch中的序列按照长度降序,长度短的计算完了就不带它继续计算了,相当于batch size缩小了,batch size越小,BN的意义也就越小了。
在Transformer中也是一样的,比如我们用绝对位置编码的BERT,把序列长度都padding或者裁剪到512,那么不存在变长问题,也不存在LSTM中batch缩小的问题,那么为什么不用BN而是用LN呢?我的理解是因为虽然序列长度一致了,但是好多embedding是没有意义的,有意义的embedding不应该和它们的分布一致,如果BN会导致有意义的embedding损失信息,所以embedding你就自己和自己归一化吧。
所以,可以用BN,但是可能LN更合适。
有想法欢迎讨论。
补充一下,Normalization 的作用很明显,把数据拉回标准正态分布,因为神经网络的Block大部分都是矩阵运算,一个向量经过矩阵运算后值会越来越大,为了网络的稳定性,我们需要及时把值拉回正态分布。
叶兀(爱丁堡大学 人工智能硕士)回答:
这个问题看起来很简单,但是却非常有价值。很多人现在并不关心。
我们要先看一下,不管在哪个维度上做noramlization,本质都是为了让数据在这个维度上归一化,因为在训练过程中,上一层传递下去的值千奇百怪,什么样子的分布都有。
BatchNorm就是通过对batch size这个维度归一化来让分布稳定下来。
LayerNorm则是通过对Hidden size这个维度归一化来让某层的分布稳定。
BN取的是不同样本的同一个特征,而LN取的是同一个样本的不同特征。
在BN和LN都能使用的场景中,BN的效果一般优于LN,原因是基于不同数据,同一特征得到的归一化特征更不容易损失信息。
但是有些场景是不能使用BN的,例如batchsize较小或者在RNN中,这时候可以选择使用LN,LN得到的模型更稳定且起到正则化的作用。LN能应用到小批量和RNN中是因为LN的归一化统计量的计算是和batchsize没有关系的。
SwitchableNorm是将BN、LN、IN结合,赋予权重,让网络自己去学习归一化层应该使用什么方法。
额外补充一点吧。对于NLP任务来说,我们希望的是每句话内分布一致,即hidden size维度,所以LN可以做到;batch的分布norm没有什么意义。
——The End——