Global Average Pooling 为什么常用于 CNN 分类头?
简化版
Global Average Pooling(GAP)把每个通道的 H×W 响应取平均,得到 C 维向量。它几乎不增加参数、降低过拟合并允许可变空间尺寸,但会丢失精确位置信息,不适合依赖布局细节的任务。
详细版
-
GAP 常放在最后卷积层与线性分类器之间,将
[N,C,H,W]变成[N,C]。 -
相比 Flatten 后接全连接层,GAP 不让参数量随 H、W 增长。
-
平均操作鼓励每个通道成为分布式类别证据,也使经典 CAM 可以直接使用分类权重。
-
GAP 不是完全无参数的分类头,后续
C×K线性层仍有参数。 -
空间平均会稀释小目标响应,可用 attention pooling、GeM 或保留多尺度特征。
完整版教学
一、用结构约束替代庞大全连接层
早期 CNN 将卷积张量展平后接多个全连接层,参数和过拟合风险往往集中在分类头。
GAP 直接汇总每个通道,让模型把通道当成某类证据。
这一设计把空间维从参数依赖中移除,所以同一网络可接受不同分辨率,只要前面的卷积结构允许。
代价是分类头看不到响应出现在哪个位置。
二、底层机制与关键公式
第 c 个输出就是该通道全部位置的算术平均。
反向传播时,来自该输出的梯度平均分给 H×W 个位置,促使证据在目标区域内更广泛地出现。
若最后接 K 类线性层,类别 logit 是通道均值的加权和;交换求和顺序后,权重可以投影回特征图,这正是 CAM 的数学来源。
g_c = (1 / (H*W)) * sum_h sum_w A[c,h,w]
logit_k = sum_c W[k,c] * g_c + b_k
三、带数字的推演
输入特征为 [32,512,7,7],GAP 输出 [32,512]。
若直接 Flatten 后连到 1000 类,需要 512×7×7×1000≈2509万 个权重;GAP 后线性层仅需 512×1000=51.2万,约少 49 倍。
四、方案对比与选择
| 方案/场景 | 机制或优势 | 主要代价 |
|---|---|---|
| Flatten + FC | 保留位置组合 | 参数随 H×W 激增 |
| GAP | 每通道取均值 | 轻量、位置细节丢失 |
| Global Max Pool | 每通道取最大值 | 突出最强证据但梯度稀疏 |
五、实际执行流程
[N,C,H,W] -> 每个通道聚合 H×W -> [N,C]
[N,C] -> 线性分类器 C×K -> [N,K] logits
六、边界条件与工程代价
小目标只占 49 个位置中的 1 个时,峰值 10 经 GAP 后只贡献约 0.204,容易被背景稀释。
此时更高分辨率特征、加权池化或检测架构更合适。
“支持任意尺寸”仍受最小下采样倍数、显存和位置相关模块约束;不能据此宣称任意形状输入都等价。
记忆钩子:GAP 的核心是“一个通道压成一个数”:参数从与
C×H×W相关降到只与 C 相关,但位置被平均掉。
七、常见误区与追问
-
误区:GAP 后分类头完全没有参数。 GAP 本身无参数,但后续线性分类器通常仍有
C×K权重。 -
追问:GAP 为什么有助于 CAM? 类别线性权重可直接加权具有空间布局的最后特征图。
-
误区:GAP 总比全连接层好。 依赖物体相对位置或细粒度布局时,平均会损失关键信息。
-
追问:GAP 与平均池化层有什么区别? 运算相同,Global 表示核覆盖完整空间尺寸。
-
追问:小目标为何容易受损? 少量高响应会被大量背景位置平均稀释。
八、加强记忆
GAP 的核心是“一个通道压成一个数”:参数从与 C×H×W 相关降到只与 C 相关,但位置被平均掉。
面试时用 512×7×7 的参数量对比,优势和代价都会很清楚。