BN(BatchNormalization) 与 LN(LayerNormerlization)的主要区别在于数据处理的维度不同,在NLP中,假设输入shape为(batch_size, seq_len,embedding_dim),则BN的处理维度为“seq_len”, LN的处理维度为“embedding_dim”。
对于BN,会在输入序列每一个位置上,切片出seq_len 个(batch_size, embedding_dim)形状的张量,然后“以列方向的形式”,计算batch_size维度上每一列的出的均值与方差,然后做减均值除方差操作。可以看出BN是对输入序列的每个位置进行转换,但在NLP中,batch中各输入序列长短不一,对单个位置进行特征规范化丧失了意义。 且BN受batch_size取值大小的影响。在NLP中使用更多的是LN,如BERT使用的就是LN。
NLP中,LN一般是对“embedding_dim”做特征规范化处理,对于输入序列,会切片出batch_size个(seq_len, embedding_dim)形状的张量,然后“以行方向的形式”,计算每一行的均值与方差。可以看出LN是作用在所有特征上的,不受batch_size与输入序列位置的影响。因此LN更适合应用与NLP问题中。 ?
参考资料
- NLP中 batch normalization与 layer normalization
- BatchNorm1D
- LayerNorm
|