在 Transformer 及其他处理序列数据的模型(如 RNN)中,几乎总是优先选择 Layer Normalization (LN) 而不是 Batch Normalization (BN)。 这主要是由文本/序列数据的天然特性以及模型训练的实际限制决定的。我们可以从输入张量(Tensor)的维度切入,深入理解其背后的原因。 在 Transformer 中,输入张量的维度通常是 : N (Batch Size):批次大小(包含多少个句子) L (Sequence Length):序列长度(每个句子包含多少个词/Token) D (Hidden Dimension):特征/隐藏层维度(每个词的词向量维度) 以下是为什么选择 LN 而不用 BN 的核心原因: 1. 应对变长序列(Variable Sequence Length) 这是最关键的原因。在自然语言处理中,一个 Batch 内的句子长度往往参差不齐,通常需要用 Padding(填充词,如 )将它们补齐到相同长度。 如果用 BN:BN 是在 Batch 维度(N)上进行归一化。 如果对每个位置计算均值和方差,对于较长的句子...