✨ 复制成功!

以文会友,打造好学人设!

📋 已复制到剪贴板:

【补充资料】关于 padding 污染均值和方差的问题

创建时间:2026-09-15 更新时间:2026-09-16 阅读次数:1490 次 分类:模型架构与Transformer

站长提示:本文是前文《Transformer 为什么用 LayerNorm 而不用 BatchNorm?两者在训练和推理阶段的行为差异是什么?》的补充资料。

BN 在 batch 维度统计,padding 会污染均值和方差。大家的疑问是:padding 不是默认使用0的数值吗?怎么会污染均值和方差?

一、先看 BN 到底怎么算

假设一个 batch 有 2 个样本,特征维度是 3,其中第二个样本被 padding 补齐:

样本1: [1, 2, 3]
样本2: [4, 0, 0]   ← 后两位是 padding

BN 对每个特征维度跨 batch 统计:

  • 特征维度 0:(1 + 4) / 2 = 2.5
  • 特征维度 1:(2 + 0) / 2 = 1.0
  • 特征维度 2:(3 + 0) / 2 = 1.5

方差同理,会把 0 当真实值算进去。

所以 padding 的 0 确实参与了均值和方差的计算,这就是“污染”。

二、为什么 0 会污染

1、0 不是“无影响”,而是一个具体数值

BN 的均值和方差是数值统计,不是“有值才算、没值跳过”。

  • padding 位置填 0,BN 就把它当成真实激活值 0。
  • 真实激活值通常不是 0,所以 0 会把均值拉低、方差拉大。
  • padding 越多,统计量偏得越厉害。

2、不同 batch padding 数量不同

NLP 里 batch 内句子长度不一:

  • 有的 batch 短句多,padding 多
  • 有的 batch 长句多,padding 少

结果:

  • 每个 batch 的 BN 统计量波动很大
  • 训练不稳定,效果下降

3、即使用 mask,也有问题

有人会说:“那我 mask 掉 padding 不就行了?”

理论上可以,但实际有代价:

  • BN 的标准实现不直接支持按 mask 统计,需要改代码。
  • 即使 mask,不同样本的有效长度不同,统计量仍然不稳定。
  • 推理时逐 token 生成,batch 内长度差异更大,问题更严重。

而 LayerNorm 对每个样本自己归一化,padding 位置不参与其他样本的统计,天然不受影响。

三、更准确的说法

严格来说:

  • padding 用 0,确实会进入 BN 的统计,污染均值和方差。
  • 如果实现上做了 mask,可以缓解,但会引入复杂度和新的不稳定性。
  • LayerNorm 不跨样本统计,所以根本不存在这个问题。

所以之前说“padding 会污染 BN 统计量”是成立的,前提是标准 BN 实现、没有特殊 mask 处理。面试时如果被追问,可以补一句:

“严格说,如果实现上对 padding 做了 mask,可以减轻污染,但标准 BN 不这么做,而且 mask 后统计量仍不稳定。LN 则从设计上避免了这个问题。”

这样回答既准确,又显得你考虑过实现细节。


📌 面试天下网:一款服务于大一新生的口袋书,让大家在无聊的公共课上可以学习大模型技术!
📌 网站公告:【悬赏 200 元/篇】寻找“大模型面试战场”的一手回忆录
📌 网站公告:【大模型/Agent面试陪练1V1指导】正式启动......

评论专区

评论加载中...