BN & LN
BN和LN都是常用的归一化方法,它们的目的也都是使某一层的输出能够落在**函数比较敏感的区间内,使得梯度变大,训练速度加快,从而也能缓解梯度消失的情况。
BN是在batch这个维度上去做归一化,它使用的是一个batch中的全部数据,在相同的维度上计算均值和方差。也就是说,如果现在有一个BL的数据,我们就需要分别计算L个均值和方差。
LN是在层这个维度上去做归一化,它只使用单个样本进行计算,也就是说对于BL的数据,我们需要计算B个均值和方差。
借用网上的图进行说明:
为什么在NLP任务中更多会使用LN,而在CV任务中更多使用BN?
因为NLP任务更多是关于文本的数据,而对文本数据来说,同一句话之间的联系比多句话相同位置上的数据之间的联系会更紧密一些,如果使用BN的话,会破坏一个句子间的语义关系。所以LN会更合适一些。