上一篇关于batch normalization的文章我们写了BN的基本思想和做法。一言以蔽之,BN就是把输出在batch中做平均,数目为样本数;而LN是对一层layer中的输出做平均,数目为layer的节点数。
之所以要LN而非BN有三层原因。第一层是,当batch很小的时候,batch无法代表全局样本的分布,所以此时做平均就走偏了。第二层是,如果模型是一个动态的layer,比如RNN,那么有些数据可能有30个序列,有些数据有10个序列,那么在一个batch里,数据的序列数不同、layer数也不同,那么做batch norm的样本数目也不一样,所以BN也有偏,这一层其实跟第一层差不多;第三层是LN会在一个layer中形成一个方差为1,均值为0的分布,可以认为这是一个人为创造的embedding,使它具备了一些不那么稀疏的优良性质,这可能是transformer里用了LN的原因。而对于图像处理而言,LN会打破embedding的自身性质,因为像CNN提出来的特征,它自身的embedding可能包含了结构信息;在NLP中,embedding本身就是人为创造的,再引入LN操作问题也不大。