设想一间新餐厅的后厨:每位厨师面前都有一排调料瓶——盐、糖、辣椒、醋。训练神经网络就像训练厨师做菜:每个样本是一道菜,每个特征通道是一种调料的浓度刻度。为了让网络稳定工作,归一化(Normalization)层先给调料统一“量勺标准”:量盐的勺子和量糖的勺子必须是同一刻度。BatchNorm 的做法是眼观邻桌——把同一批菜里的同一瓶调料凑在一起算平均值;邻桌多、口味平均时很稳,可如果深夜厨房只剩两桌,一桌特辣一桌特甜,这个“平均值”就失去意义了。Group Normalization(GN)不依赖邻桌:它把一道菜自己的调料分成“鲜味组”“辛香组”“酸甜组”,在组内自行校准。Batch 不再是计算统计量的前提,我们终于能从容面对每张显卡只剩一两张训练图的检测、分割任务。这篇文章就从这间厨房出发,把 GN 的分组策略、数学公式、梯度特性和工程选型一次讲透。

岗位关联

对 AI 从业者而言,理解 GN 的“分组归一化”视角,是理解 BN/LN/IN 归一化家族的一把钥匙;在目标检测、图像分割等小批量场景中,它是决定训练能否稳定收敛的关键工程选择之一。

目录
  1. 可视化演示
  2. 归一化思想
  3. BN的困境
  4. 通道分组策略
  5. GN数学公式
  6. 梯度稳定性
  7. 统一归一化视角
  8. 密集预测实践
  9. 工程选型指南
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

通过BN/LN/IN/GN四种归一化方法对比、GN通道分组计算过程和Batch Size性能曲线三个模式,展示Group Normalization如何摆脱Batch依赖实现稳定归一化。

本节配有交互动效(进入视口后自动加载,约 3KB)。

四种归一化方法对比:不同维度统计量计算 BN沿N和C维度计算统计量依赖Batch Size GN将C分为G组在组内计算统计量不依赖Batch BN: (N,C) | LN: (C,H,W) | GN: (G,C/G,H,W) 小Batch下GN准确率85%显著优于BN的72%

归一化思想

厨房里有两把盐勺,一把一勺 1 克,一把一勺 10 克,厨师根本没法凭手感判断“一勺盐”是多少。神经网络也一样:每一层的特征分布如果忽高忽低,下一层就要不断重新适应上一层的变化,这就是内部协变量偏移(Internal Covariate Shift)。模型参数在更新时,上一层权重一动,下一层的输入分布就跟着漂移,训练自然又慢又不稳。

归一化的核心,就是给每个特征一个统一刻度:把分布中心拉回 0,把波动范围压到单位量级。它像把所有调料瓶口的量勺换成同一规格,让每一层网络都不必追着分布的漂移跑。这样一来,梯度更新时面对的输入尺度相对稳定,优化过程也更容易收敛。

统一量勺是基础,但接下来要问:这勺盐的“标准”该跟谁比?BatchNorm 选择看邻桌,这正是它后来陷入困境的起点。

x^=x−μσ2+ϵ\hat{x} = \frac{x - \mu}{\sqrt{\sigma^2 + \epsilon}}
这个公式是几乎所有归一化方法的“母公式”:先减均值、再除标准差、最后用一个小常数防止除零。
  1. 中心化减去均值 \(\mu\),把分布中心平移到 0,消除整体偏移对梯度的影响。
    x−μx - \mu
  2. 方差缩放除以标准差 \(\sqrt{\sigma^2 + \epsilon}\),把波动压到单位尺度,让不同特征的量纲可比。
    x−μσ2+ϵ\frac{x - \mu}{\sqrt{\sigma^2 + \epsilon}}
  3. 稳定保护\(\epsilon\) 是极小的正数,避免方差为 0 时出现除零错误,像厨房秤上那一点防卡底的海绵垫。
    σ2+ϵ\sqrt{\sigma^2 + \epsilon}

BN的困境

BatchNorm 的参考系是邻桌。对每一个通道,它把当前批次所有样本的同一通道空间像素全部拉在一起算均值、算方差。这就像把整桌客人的盐瓶都收上来称一遍,再定一个“标准勺”:如果桌上有 32 位客人,统计量当然平滑可信;但如果只有 2 位客人,均值就只看两人口味,一道特辣、一道特甜,统计结果立刻失真。

这就是 Batch 依赖:网络把稳定性押在了批次大小的运气上。更麻烦的是,BN 训练时用的是批次统计量,推理时却用缓存的 running mean / running var,二者天然存在缝隙。小批次训练时,这条缝隙还会被统计噪声进一步放大。

深夜厨房只剩两桌时,邻桌标准就不可靠了。GN 决定不再看邻桌:它把自己这盘菜的调料按风味分组,组内自行校准。

μbatch=1N×H×W∑n=1N∑h=1H∑w=1Wxn,c,h,w,σbatch2=1N×H×W∑n=1N∑h=1H∑w=1W(xn,c,h,w−μbatch)2\mu_{\text{batch}} = \frac{1}{N \times H \times W}\sum_{n=1}^{N}\sum_{h=1}^{H}\sum_{w=1}^{W} x_{n,c,h,w}, \quad\sigma_{\text{batch}}^2 = \frac{1}{N \times H \times W}\sum_{n=1}^{N}\sum_{h=1}^{H}\sum_{w=1}^{W} (x_{n,c,h,w} - \mu_{\text{batch}})^2
对每个通道 \(c\),BN 都把 \(N\) 个样本的 \(N \times H \times W\) 个像素当作一个统计集合,batch 越小,集合越容易被单个样本左右。
  1. 固定通道BN 每次只处理一个通道 \(c\),每个通道都有自己独立的统计量。
    c∈{1,2,…,C}c \in \{1, 2, \dots, C\}
  2. 跨批次求均值把 \(N\) 个样本该通道的所有空间像素一起平均。
    μbatch=1N×H×W∑n=1N∑h,wxn,c,h,w\mu_{\text{batch}} = \frac{1}{N \times H \times W}\sum_{n=1}^{N}\sum_{h,w} x_{n,c,h,w}
  3. 跨批次求方差每个像素与均值的偏差平方再取平均,得到波动大小。
    σbatch2=1N×H×W∑n=1N∑h,w(xn,c,h,w−μbatch)2\sigma_{\text{batch}}^2 = \frac{1}{N \times H \times W}\sum_{n=1}^{N}\sum_{h,w}(x_{n,c,h,w} - \mu_{\text{batch}})^2
  4. 小批次放大噪声\(N\) 从 32 降到 2,均值和方差几乎由一两个样本决定,统计噪声剧烈上升。
    N→2,σbatch↑N \rightarrow 2,\quad \sigma_{\text{batch}} \uparrow

通道分组策略

把调料按“风味族”整理是一种直觉:酱油、味噌、蚝油归入鲜味组;辣椒、花椒、姜归入辛香组;醋、柠檬汁归入酸甜组。每组内部的食材有相似的作用,在组内统一刻度显然比跨桌对比更合理。GN 的“组”正是这样:它是一个样本内部的通道子集。

具体做法是:把 \(C\) 个通道按顺序平均切成 \(G\) 组,每组包含 \(C/G\) 个通道。组内这些通道连同它们各自的 \(H \times W\) 像素,共同构成一个统计集合。所有统计都在单个样本内部完成,完全不触碰同批次的其他样本。

菜还是那道菜,调料还是那排调料,只是师傅把调味分成了几个更懂行的组合,每个组合自成标准。下一步,就是在这个组里正式算出均值与方差。

Si={k∣⌊kC/G⌋=⌊iC/G⌋}S_i = \left\{ k \mid \left\lfloor \frac{k}{C/G} \right\rfloor = \left\lfloor \frac{i}{C/G} \right\rfloor \right\}
\(S_i\) 表示像素 \(i\) 所在的分组:用通道索引除以组内通道数再取整,得到组号;组号相同的通道全部归入一组。
  1. 确定组内通道数先把通道总数 \(C\) 除以组数 \(G\),得到每组包含的通道数量。
    CG\frac{C}{G}
  2. 映射组号每个通道索引除以组内通道数后向下取整,就得到该通道所属的组号。
    ⌊kC/G⌋\left\lfloor \frac{k}{C/G} \right\rfloor
  3. 构造同组集合组号相等的所有通道放在一起,组成统计集合 \(S_i\),且不包含其他样本的任何元素。
    Si={k∣kG=iG}S_i = \{k \mid k_G = i_G\}

GN数学公式

分组定了,数学就水到渠成。对特征图里的任意一个元素 \(x_i\),先找到它所属的组 \(S_i\),组内共有 \(m = (C/G) \times H \times W\) 个元素。GN 在组内求均值和方差,然后做标准化;最后再通过可学习的仿射参数 \(\gamma, \beta\) 恢复表达能力——就像师傅把标准味道定好,又允许每位厨师保留一点点个人微调。

GN 没有拉整桌进来,也没有把整道菜一锅端:它切出了 \(G\) 个风味组,每组一碗调羹,精准自洽。那么反向传播时,这碗调羹的“调味指令”又是怎么回传的?

μi=1m∑k∈Sixk,σi2=1m∑k∈Si(xk−μi)2\mu_i = \frac{1}{m}\sum_{k \in S_i} x_k, \qquad\sigma_i^2 = \frac{1}{m}\sum_{k \in S_i}(x_k - \mu_i)^2
x^i=xi−μiσi2+ϵ⋅γc+βc\hat{x}_i = \frac{x_i - \mu_i}{\sqrt{\sigma_i^2 + \epsilon}} \cdot \gamma_c + \beta_c
GN 的核心就是“组内统计”:均值和方差都只来自当前样本、当前通道组,既不依赖批次,也不需要跨样本通信。
  1. 组内均值对当前样本的当前组求和并平均,跨样本信息完全被排除。
    μi=1m∑k∈Sixk\mu_i = \frac{1}{m}\sum_{k \in S_i} x_k
  2. 组内方差每个元素与组均值的偏差平方再取平均,描述组内的离散程度。
    σi2=1m∑k∈Si(xk−μi)2\sigma_i^2 = \frac{1}{m}\sum_{k \in S_i}(x_k - \mu_i)^2
  3. 归一化减去组均值、除以组标准差,使组内输出接近零均值、单位方差。
    x^i=xi−μiσi2+ϵ\hat{x}_i = \frac{x_i - \mu_i}{\sqrt{\sigma_i^2 + \epsilon}}
  4. 仿射变换每个通道独立使用可学习的 \(\gamma_c, \beta_c\),让网络按需恢复特征的量级和偏移。
    yi=γcx^i+βcy_i = \gamma_c \hat{x}_i + \beta_c

梯度稳定性

反向传播就像师傅把“调味指令”回传给下手:改一勺盐,酱料是否要跟着动?如果统计量来自邻桌,邻桌一抖,你的梯度也跟着抖。GN 的统计只来自本桌本组,小批次带来的邻桌噪声根本进不了梯度,这是它在小 batch 训练下更稳的深层原因。

梯度公式并不需要死记,但它的结构值得理解。对归一化层求导,结果可以拆成三项:直接缩放、均值修正、方差修正。中间的求和全部发生在 \(S_i\) 内部,所以梯度天然与批次维度解耦。

没有邻桌参量,回传指令就守住了自己的小灶台,不会被别的厨师手抖误伤。而 GN 之所以能和 BN、LN、IN 放在同一张地图上比较,是因为它们都在做同一件事:选定一个统计范围。

∂L∂xi=1σi2+ϵ(∂L∂x^i−1m∑j∈Si∂L∂x^j−x^im∑j∈Si∂L∂x^jx^j)\frac{\partial L}{\partial x_i} = \frac{1}{\sqrt{\sigma_i^2 + \epsilon}}\left( \frac{\partial L}{\partial \hat{x}_i} - \frac{1}{m}\sum_{j \in S_i}\frac{\partial L}{\partial \hat{x}_j} - \frac{\hat{x}_i}{m}\sum_{j \in S_i}\frac{\partial L}{\partial \hat{x}_j}\hat{x}_j \right)
这个公式可理解为:归一化层的反向传播等于“外层缩放 ×(直接梯度 − 均值修正 − 方差修正)”,每一修正项都只对当前组内元素求和。
  1. 直接缩放最外层的 \(1/\sqrt{\sigma_i^2 + \epsilon}\) 是归一化除法的原路返回,负责量纲还原。
    1σi2+ϵ\frac{1}{\sqrt{\sigma_i^2 + \epsilon}}
  2. 均值修正减去组内梯度的均值,消除整体平移对梯度的污染。
    −1m∑j∈Si∂L∂x^j-\frac{1}{m}\sum_{j \in S_i}\frac{\partial L}{\partial \hat{x}_j}
  3. 方差修正扣除由方差伸缩带来的高阶项,保证梯度方向不被特征波动扭曲。
    −x^im∑j∈Si∂L∂x^jx^j-\frac{\hat{x}_i}{m}\sum_{j \in S_i}\frac{\partial L}{\partial \hat{x}_j}\hat{x}_j
  4. 组内求和两个求和都只在 \(S_i\) 上进行,\(j \in S_i\) 意味着绝不触碰其他样本。
    j∈Sij \in S_i

统一归一化视角

把归一化的统计范围画成一张地图,四兄弟各占一格:BN 把同一通道跨全部样本的空间像素当一组;LN 把单个样本的所有通道当一组;IN 把单个样本的单个通道当一组;GN 则取中间粒度——单样本内的通道子组就是一组。GN 的分组数 \(G\) 就是一个“粒度旋钮”,拧到最粗是 LN,拧到最细是 IN。

这种统一视角的好处是:你不再需要把四种方法当成四个孤立算法,而是理解它们共享同一个母公式,只是统计集合的边界不同。选哪种归一化,本质上就是选“跟谁一起算均值方差”。

同一把量勺,你可以对着全桌量、整盘量、单瓶量,也可以按风味组量。GN 就是那把“可调刻度盘”。这么灵活的统计方式,在哪些任务里最能大显身手?

统计维度={N×H×W,BNC×H×W,LNH×W,INCG×H×W,GN\text{统计维度} =\begin{cases}N \times H \times W, & \text{BN}\\C \times H \times W, & \text{LN}\\H \times W, & \text{IN}\\\dfrac{C}{G} \times H \times W, & \text{GN}\end{cases}
四种主流归一化的差异,全部浓缩在“统计范围”这四个格子中:BN 跨样本、LN 整样本、IN 单通道、GN 通道子组。
  1. BN 统计范围把批次维度 \(N\) 拉进来,同通道跨样本统计。
    N×H×WN \times H \times W
  2. LN 统计范围把单个样本的所有通道拼成一个统计集合。
    C×H×WC \times H \times W
  3. IN 统计范围每个通道独立统计,组粒度最细。
    H×WH \times W
  4. GN 统计范围通道子组加空间像素,\(G\) 控制统计粒度的粗细。
    CG×H×W\frac{C}{G} \times H \times W

密集预测实践

目标检测、图像分割这类密集预测任务,相当于做多层千层酥:每张图都是精细立体的工序,占显存极大,GPU 一次只能放下一两张“烤盘”。于是每卡 batch size 常常只有 1 到 2,BN 的统计量只剩下一两个样本支撑,自然摇摇欲坠。

GN 的价值在这里被彻底释放:它不关心 batch 是 2 还是 32,统计量永远来自单样本内部。以 Mask R-CNN 为代表的检测模型在 COCO 上训练时,每卡 2 张图的情况下,把 backbone 和检测头里的 BN 换成 GN,收敛明显更稳,mAP 也更高;而 BN 只有把每卡 batch 拉大到 8 左右,才能和 GN 打平。

千层酥工作台常常只有一两盘,邻桌参照彻底失效。那么日常工程里,到底该怎么选归一化方法?

Bmax⁡≈⌊MGPUMsample⌋B_{\max} \approx \left\lfloor \frac{M_{\text{GPU}}}{M_{\text{sample}}} \right\rfloor
\(B_{\max}\) 是单卡能放下的最大图像数:GPU 显存除以单张样本占用的显存,这正是密集预测任务 batch 小的数学根源。
  1. 单样本显存输入分辨率越高、特征图越大,单张图像占用的显存越大。
    MsampleM_{\text{sample}}
  2. GPU 总显存硬件上限决定了分子大小。
    MGPUM_{\text{GPU}}
  3. 取整除法两块相除后向下取整,得到最多能放入的样本数。
    ⌊MGPUMsample⌋\left\lfloor \frac{M_{\text{GPU}}}{M_{\text{sample}}} \right\rfloor
  4. 推知 BN 弱点\(B_{\max}\) 越小,BN 的批次统计越不可靠,GN 的优势越明显。
    Bmax⁡≤2B_{\max} \le 2

工程选型指南

选归一化就像选厨房秤:批量大的食堂用 BN 这台大克秤,深夜小灶用 GN 便携秤,分子料理再用 LN/IN 精密勺。没有绝对的“最好”,只有“合身”。

工程经验可以归纳为几条:如果每卡 batch size ≥ 16,BN 通常足够用,且它的 CUDA 实现和预训练生态更成熟;如果每卡 batch ≤ 8,或者做目标检测、实例分割、医学图像分割这类高分辨率密集预测,优先考虑 GN;NLP 和序列模型习惯用 LN;图像生成、风格迁移类任务则常用 IN。GN 的超参数主要就是 \(G\),默认 32,通道数较小时可以用 8 或 16。

Batch 依赖不是诅咒,而是需要你在正确的场景里选对合适的量勺。理解了 GN 的分组哲学,你就能在 BN、LN、IN 之间自由切换,而不是死记某个网络的默认配置。

Ngroup=(CG)×H×WN_{\text{group}} = \left(\frac{C}{G}\right) \times H \times W
这是 GN 组内元素总数公式:\(G\) 必须能整除通道数 \(C\),否则无法均匀分组;组内元素太少会让统计量失去意义。
  1. 通道子组大小\(G\) 除 \(C\),得到每个分组的通道数量。
    CG\frac{C}{G}
  2. 空间像素每个通道包含 \(H \times W\) 个像素,它们也进入统计集合。
    H×WH \times W
  3. 总元素数两者相乘,就是组内参与均值、方差计算的全部元素数量。
    Ngroup=CG×H×WN_{\text{group}} = \frac{C}{G} \times H \times W
  4. 整除约束调参第一步是保证 \(G\) 整除 \(C\),否则分组无法均匀完成。
    C mod G=0C \bmod G = 0

AI 应用场景

目标检测小批次训练

阶段:训练优化与归一化层选择

解决的问题:检测网络输入分辨率高,显卡显存有限,每卡只能放 1~2 张图。传统 BN 的批次统计量只由一两个样本决定,训练噪声大、收敛慢。GN 将统计范围锁定在样本内通道组,小批次下依然稳定。

具体案例:在 COCO 上训练 Mask R-CNN 时,每 GPU 仅 2 张图片,把 backbone 与检测头中的 BN 替换为 GN,训练曲线更平滑,最终 mAP 相比 BN 明显提升;这是计算机视觉工程中“小 batch 大模型”场景的标准解法之一。

医学图像分割与单样本推理

阶段:模型训练与部署推理

解决的问题:医学影像分割任务中,单张 3D 体积数据极大,batch size 常被压到 1~2;同时推理时要求输出可复现、不依赖全局统计。GN 与批次无关,训练和推理行为一致,天然适配这种场景。

具体案例:在病理切片或 CT 影像分割模型中,使用 GN 替代 BN,即便 batch=1 也能稳定训练;在增量学习或小样本微调时,新增样本不必凑满一个批次即可继续更新,部署阶段也无需维护 running statistics。

Python 演示

python31 行
import numpy as np  def group_norm(x, gamma, beta, G=2, eps=1e-5):    N, C, H, W = x.shape    x = x.reshape(N, G, -1)    mean = x.mean(axis=2, keepdims=True)    variance = x.var(axis=2, keepdims=True)    x_hat = (x - mean) / np.sqrt(variance + eps)    x_hat = x_hat.reshape(N, C, H, W)    return gamma.reshape(1, C, 1, 1) * x_hat + beta.reshape(1, C, 1, 1)  def batch_norm(x, gamma, beta, eps=1e-5):    N, C, H, W = x.shape    mean = x.mean(axis=(0, 2, 3), keepdims=True)    variance = x.var(axis=(0, 2, 3), keepdims=True)    x_hat = (x - mean) / np.sqrt(variance + eps)    return gamma.reshape(1, C, 1, 1) * x_hat + beta.reshape(1, C, 1, 1)  np.random.seed(42)x = np.random.randn(4, 8, 6, 6) * 2.0 + 1.5gamma = np.ones(8)beta = np.zeros(8) y_gn = group_norm(x, gamma, beta, G=4)y_bn = batch_norm(x, gamma, beta)print("GN 输出均值:", round(float(y_gn.mean()), 6), "标准差:", round(float(y_gn.std()), 6))print("BN 输出均值:", round(float(y_bn.mean()), 6), "标准差:", round(float(y_bn.std()), 6))print("GN 在 batch 较小时仍能保持组内统计稳定")
目的:用 NumPy 从零实现 GN 和 BN 的前向计算,直观对比两者的统计范围差异。
  1. x.reshape(N, G, -1)把通道和空间像素重排成“样本 × 组 × 组内元素”,GN 的统计集合就此形成。
  2. mean = x.mean(axis=2, keepdims=True)只对组内元素求均值,完全不跨样本。
  3. x.var(axis=2, keepdims=True)组内方差同样只在当前样本内计算。
  4. gamma.reshape(1, C, 1, 1)可学习仿射参数按通道对齐,保留每个通道的表达力。
  5. batch_norm` 中 `mean(axis=(0, 2, 3))BN 则沿样本和空间维度统计,正是“看邻桌”的数学写法。

常见误区

误区BN 统计时用了一整批样本,GN 只用单个样本内的数据,数据量少了,效果肯定更差。

正解GN 的统计量虽然来自单个样本,但它稳定且确定;BN 在小批次下统计量方差极大,引入的噪声反而损害训练。密集预测任务中 batch=2 时,GN 的收敛和最终精度都明显优于 BN。只有在 batch 足够大时,BN 的“更多数据”才真正转化为优势。

为何常见:直觉上“样本越多统计越准”没有错,但忽略了小批次下统计量本身会剧烈抖动这一关键前提。

误区G 越大,每组通道越少,归一化看起来越“精细”,所以 G 应该尽量取大。

正解G=C 时 GN 退化为 InstanceNorm,只统计单个通道,丢掉通道间相关性;G=1 时又近似 LayerNorm,把全部通道混在一起。组内元素过少会导致均值和方差失去统计意义,因此 G 需要与通道数、空间分辨率相匹配,默认 32 是一个稳妥起点。

为何常见:把“粒度细”和“效果好”划等号,忽略了归一化统计本身也需要足够多的样本来估计。

误区GN 和 BN 一样,训练时算什么,推理时也应该用缓存的历史均值方差。

正解GN 的统计量完全来自当前样本的当前通道组,推理时逐样本计算即可,不需要任何 running mean 或 running var。这也是 GN 比 BN 部署更简单、行为更确定的原因之一。

为何常见:人们习惯了 BN 训练与推理两套状态,默认所有归一化层都需要历史统计量。

误区既然 GN 在小批次下这么强,那所有网络都应该把 BN 换成 GN。

正解大批量分类任务中,BN 的批次统计更稳定,还附带隐式正则化效果,且工业界预训练模型和推理优化高度依赖 BN 生态。GN 是应对小批次、高分辨率密集预测的利器,两者场景互补。

为何常见:把局部优势泛化为全局真理,忽略了任务类型、硬件条件和工程生态的综合约束。

误区归一化只是把数据变成零均值单位方差,为什么还要留 \(\gamma, \beta\)?

正解如果没有仿射变换,网络每一层的特征都被强制固定在标准正态分布上,表达能力会受限;\(\gamma, \beta\) 按通道可学习,相当于给师傅一个“调完标准后保留个人微调”的旋钮。

为何常见:只看到归一化的标准化步骤,没注意到大多数归一化层中的仿射设计。

面试题

Q1. GN 在训练时统计哪个范围内的均值与方差?

单选题 · easy

  • A.当前样本内一组通道← 正确答案
  • B.批次内全部样本同通道
  • C.全部通道拼成一组
  • D.单个通道空间区域

答案:A。GN 的分组范围是“单个样本内的通道子组”,统计量不跨样本。B 是 BN,C 接近 LN,D 是 IN。可以把 GN 理解为在单道菜的若干风味族内各自校准味道。

Q2. 归一化公式中的 \(\epsilon\) 主要作用是?

单选题 · easy

  • A.防止方差为零时除零← 正确答案
  • B.提升模型的收敛速度
  • C.增加特征的通道数量
  • D.让归一化后均值缩小

答案:A。\(\epsilon\) 是极小的正常数,加在方差项上避免除零,保证数值稳定。它不是超参数搜索的重点,也不改变分布的均值,类似厨房秤上防止卡死的一层软垫。

Q3. 与 BN 相比,GN 的哪些说法正确?

多选题 · mid

  • A.统计量仅来自当前样本← 正确答案
  • B.推理无需运行统计量← 正确答案
  • C.小批次下统计更稳定← 正确答案
  • D.需要维护全局均值方差

答案:ABC。GN 的均值和方差在单个样本的通道组内计算,不依赖批次,因此推理不需要 running statistics,小批次下也更稳定。D 是 BN 的特征,GN 恰恰不需要维护全局统计量。

Q4. 若 \(C=64\),\(G=16\),每个 GN 分组包含几个通道?

单选题 · mid

  • A.2 个
  • B.4 个← 正确答案
  • C.8 个
  • D.16 个

答案:B。组内通道数等于 \(C/G=64/16=4\)。每个分组再用这 4 个通道的全部空间像素计算均值和方差,就像每个风味组有 4 种调料共用一个标准勺。

Q5. 关于 GN 反向传播公式,下列理解正确的是?

多选题 · hard

  • A.第一项是归一化梯度缩放← 正确答案
  • B.第二项用于修正组均值← 正确答案
  • C.第三项用于修正方差影响← 正确答案
  • D.梯度需要跨批次累加

答案:ABC。GN 反向传播可拆为直接缩放、均值修正、方差修正三项,所有求和都在本组 \(S_i\) 内完成,根本不涉及批次维度。D 描述的是跨样本通信,与 GN 完全相反。

Q6. 当 \(G=C\) 时,GN 退化为以下哪种方法?

单选题 · mid

  • A.BatchNorm
  • B.LayerNorm
  • C.InstanceNorm← 正确答案
  • D.无归一化

答案:C。\(G=C\) 意味着每个通道独自成组,统计范围是单样本单通道的空间像素,这正是 InstanceNorm 的定义。\(G=1\) 时则更像 LayerNorm。

Q7. 目标检测训练常出现小批次的主要原因是?

单选题 · easy

  • A.输入分辨率高且显存大← 正确答案
  • B.数据标注数量太多
  • C.模型必须实时在线推理
  • D.检测任务不能批量训练

答案:A。高分辨率图像和大量特征图占满显存,单卡只能放进 1~2 张样本,batch size 被迫做小。这正是 BN 失效、GN 派上用场的典型场景。

Q8. 哪种归一化的统计范围包含批次维度?

单选题 · hard

  • A.BN 使用 \(N \times H \times W\)← 正确答案
  • B.LN 使用 \(C \times H \times W\)
  • C.IN 使用 \(H \times W\)
  • D.GN 使用 \(C/G \times H \times W\)

答案:A。只有 BN 把批次大小 \(N\) 纳入统计范围,因此它对 batch size 敏感;LN、IN、GN 都在单样本内部计算,天然不依赖批次。

Q9. GN 的超参数 \(G\) 调优经验正确的是?

多选题 · mid

  • A.默认可取 \(G=32\)← 正确答案
  • B.需要能整除通道数← 正确答案
  • C.组内元素不能过少← 正确答案
  • D.G 越大效果必然越好

答案:ABC。GN 默认组数为 32,且 \(G\) 必须整除通道数,否则无法均匀分组;组内元素太少会使均值方差失去意义。D 的错误在于过大的 \(G\) 会退化为 InstanceNorm,未必更优。

Q10. 下列哪种情况最适合用 GN 替换 BN?

单选题 · hard

  • A.大批量图片分类任务
  • B.每卡 1~2 张图的检测任务← 正确答案
  • C.CIFAR 大 Batch 训练
  • D.已训练好的 BN 模型推理

答案:B。每卡仅 1~2 张图时,BN 的批次统计严重失真,GN 因单样本统计而稳定。大批量分类任务中 BN 本身已足够成熟,而已经训好的 BN 模型不必改用 GN。