先确定“对哪些维度求统计量”,再讨论归一化。序列使用 $x\in\mathbb R^{B\times T\times C}$;图像使用 $x\in\mathbb R^{N\times C\times H\times W}$。C 始终表示通道或特征维,不能同时拿它表示 H×W。
Normalization 可改变优化条件与特征尺度;“消除逐层分布变化”是一种历史解释,不是所有方法效果的充分解释。均值归零、方差缩放也不是将每个值放进 [0,1]。
$$ y=\gamma\odot\frac{x-\mu}{\sqrt{\sigma^2+\epsilon}}+\beta. $$
μ、σ² 是指定轴上的均值和方差;ε 防止除零;γ、β 为可学习仿射参数(若启用)。标准化后再做仿射变换,让模型选择有用的尺度与偏置,并不意味着前一步无意义。
对序列的每个通道 c,在 B、T 两个轴上计算统计量:
$$ \mu_c=\frac1{BT}\sum_{b,t}x_{btc},\qquad \sigma_c^2=\frac1{BT}\sum_{b,t}(x_{btc}-\mu_c)^2. $$
图像版本对每个通道跨 N、H、W 统计。训练通常用当前 batch 并更新 running statistics;推理通常用 running statistics。更新形式为 $m_{run}\leftarrow(1-\eta)m_{run}+\eta m_{batch}$;方差估计是否使用无偏修正取决于实现阶段。小 batch、padding 或分布变化会影响统计量。
Transformer 常对每个样本、每个 token 的 C 个特征独立归一化:
$$ \mu_{bt}=\frac1C\sum_c x_{btc},\qquad \sigma^2_{bt}=\frac1C\sum_c(x_{btc}-\mu_{bt})^2. $$
γ、β 常为 C 维。实际统计轴由 normalized_shape 决定;它不依赖其他样本。
对每张图像 n、每个通道 c,跨 H、W 统计:
$$ \mu_{nc}=\frac1{HW}\sum_{h,w}x_{nchw},\quad \sigma^2_{nc}=\frac1{HW}\sum_{h,w}(x_{nchw}-\mu_{nc})^2. $$
启用 affine 时 γ、β 为每通道参数。PyTorch InstanceNorm2d 默认不启用 affine,也不追踪 running statistics;默认训练、推理都用输入统计量。不能把图像通道直接等同于文本 token。官方说明
每张图像将 C 个通道划分为 G 组,每组同时跨组内通道与 H、W 计算:
$$ \mu_{ng}=\frac1{(C/G)HW}\sum_{c\in g,h,w}x_{nchw},\quad \sigma^2_{ng}=\frac1{(C/G)HW}\sum_{c\in g,h,w}(x_{nchw}-\mu_{ng})^2. $$