站长提示:本文是前文《Transformer 为什么用 LayerNorm 而不用 BatchNorm?两者在训练和推理阶段的行为差异是什么?》的补充资料。
BN 在 batch 维度统计,padding 会污染均值和方差。大家的疑问是:padding 不是默认使用0的数值吗?怎么会污染均值和方差?
假设一个 batch 有 2 个样本,特征维度是 3,其中第二个样本被 padding 补齐:
样本1: [1, 2, 3]
样本2: [4, 0, 0] ← 后两位是 padding
BN 对每个特征维度跨 batch 统计:
方差同理,会把 0 当真实值算进去。
所以 padding 的 0 确实参与了均值和方差的计算,这就是“污染”。
1、0 不是“无影响”,而是一个具体数值
BN 的均值和方差是数值统计,不是“有值才算、没值跳过”。
2、不同 batch padding 数量不同
NLP 里 batch 内句子长度不一:
结果:
3、即使用 mask,也有问题
有人会说:“那我 mask 掉 padding 不就行了?”
理论上可以,但实际有代价:
而 LayerNorm 对每个样本自己归一化,padding 位置不参与其他样本的统计,天然不受影响。
严格来说:
所以之前说“padding 会污染 BN 统计量”是成立的,前提是标准 BN 实现、没有特殊 mask 处理。面试时如果被追问,可以补一句:
“严格说,如果实现上对 padding 做了 mask,可以减轻污染,但标准 BN 不这么做,而且 mask 后统计量仍不稳定。LN 则从设计上避免了这个问题。”
这样回答既准确,又显得你考虑过实现细节。
评论专区
评论加载中...登录后即可发表评论