2.4 池化层:降采样与平移容忍


2.4 池化层:降采样与平移容忍

本节摘要:池化层用一小块窗口内的汇总值(最大或平均)代替整块区域,把特征图边长减半、元素压到四分之一,全程没有任何参数。它买来两样东西:后续计算量按平方级下降,以及对特征图上小幅位置抖动的容忍。本节用具体数字走一遍最大池化,解释"容忍"从哪来,并交代全局平均池化这个压轴变体。

一笔零参数的账

主车间到第二站,特征图还是 16×32×32。若直接进入更深的卷积,乘加次数会随通道数平方增长,账很快算不下去。池化的做法简单到近乎粗暴:在 2×2 的窗口里只保留一个数。最大池化保留窗口里最强的响应——"这一块有没有检测到目标";平均池化保留均值——"这一块整体强度如何"。窗口滑动的步幅通常等于窗宽(2×2 窗配步幅 2),相邻窗口不重叠,边长恰好减半。

先看一笔具体账:

import torch import torch.nn.functional as F x = torch.tensor([[[ [ 1., 2., 5., 6.], [ 3., 4., 7., 8.], [ 9., 10., 13., 14.], [11., 12., 15., 16.], ]]]) pooled = F.max_pool2d(x, kernel_size=2, stride=2) print(pooled[0, 0]) # tensor([[ 4., 8.], # [12., 16.]]) print("元素个数 16 变", pooled.numel()) # 4,压到四分之一

左上窗口的四个数 1、2、3、4,最大池化只留下 4;右上窗口留下 8。四个窗口四个胜者,一张 4×4 的图被压缩成 2×2。注意全程没有一个可学习参数——池化是纯机械汇总,训练时它没有梯度可学(只有路由),这正是它与卷积的本质区别。

学习目标

阅读完本节,你应当能够:

  1. 手算 2×2 步幅 2 的最大池化与平均池化结果;
  2. 解释最大池化的平移容忍来自"窗口内取最大"这一操作本身;
  3. 说出池化的三条局限,以及用步幅卷积替代它的取舍;
  4. 用全局平均池化把任意尺寸特征图压成定长向量,并说明它如何替全连接层省参数。

一、容忍从哪来

2.3 节留了个尾巴:卷积只保证平移等变——目标挪,特征图上的响应跟着挪。识别要的是不变:目标小幅挪动,结论最好别变。补上这一环的正是最大池化。响应只要还落在原来的 2×2 窗口里,窗口最大值就不变;哪怕窗口内其他像素全变,输出也纹丝不动。

x2 = x.clone() x2[0, 0, 0, 0] = 0.5 # 左上窗口的非最大值随便改 x2[0, 0, 2, 3] = 9.0 # 左下窗口的非最大值也改 print(torch.equal(F.max_pool2d(x, 2, 2), F.max_pool2d(x2, 2, 2))) # True

两处扰动都发生在窗口内部,输出与原图逐元素相等。这就是"容忍"的精确含义:不是看不见抖动,而是取最大的操作把窗口内的细节差异折叠掉了。代价同样清楚——窗口内目标的具体位置信息被抹掉,所以做精确定位的任务(第五章的目标检测)反而要小心滥用池化。

二、局限与替代

池化的三个局限常被拿来开批斗会。其一,它一视同仁地压缩所有通道,不分重要与否;其二,2 的倍数下采样绑死了网络设计,特征图尺寸只能沿着 32、16、8 这样走;其三,最大池化只传递最强响应,窗口内次强信息全部丢弃。于是有了一种替代方案:步幅卷积——把卷积自己的步幅设为 2(2.2 节的 half 配置 3/2/1),降采样的同时顺便做特征变换,下采样方式变成可学习的。现代新架构里两者都用:步幅卷积渐成主流,池化胜在零参数、实现便宜,推理端依旧常见。

第三种压轴变体叫全局平均池化:不再用小窗,直接对整张特征图求平均。无论输入进来的特征图是 7×7 还是 13×13,压完都只剩每通道一个数——512 个通道就得到 512 维向量。它一举解决了"全连接层必须固定输入尺寸"的枷锁,也让参数量骤减。

feat = torch.randn(1, 512, 7, 7) # 某深层网络的最后特征图 gap = F.adaptive_avg_pool2d(feat, 1) # 全局平均池化 print(tuple(gap.shape)) # (1, 512, 1, 1) flat_conv = feat.flatten(1) print("直接展平的维度:", flat_conv.shape[1]) # 25088 = 512×7×7 print("全局池化后的维度:", gap.flatten(1).shape[1]) # 512

同一张特征图,直接展平是 25,088 维,全局平均池化只要 512 维——2.5 节会算,这一剪刀下去,紧随其后的全连接层参数能从上千万砍到几万。ResNet 等机型正是靠它把分类头做轻的。

一道辨析题

场景:两层结构相同、参数相同的网络,甲在卷积后接最大池化,乙把池化换成步幅二的卷积。同批数据训练后,谁的精度上限更高、谁更省?答案分两半:上限大概率乙更高——下采样方式可学习,等价于多了一层可训练的变换;省的却是甲——零参数、零乘加、推理端行为确定。工业选择常反过来取决于部署约束:云端追极限选乙,端侧抠资源选甲。辨析的意义不在站队,而在看清"池化与步幅卷积是同一道工序的两种实现"。

追问三则

问:池化没有参数,那反向传播经过它时发生什么?答:梯度只路由不变换——最大池化把上游梯度原样交给窗口内"当初的最大值位置",其余位置拿零,所以它仍然参与训练,只是不占参数。问:既然步幅卷积能替代池化,池化还有存在价值吗?答:价值在便宜与稳定:零参数、无额外算力、行为确定,推理端与轻量网络里仍常见;对精度极限的追求者,步幅卷积是更优解。问:全局最大池化为什么不常用?答:整张图只留一个最强响应,信息太狠;全局平均保留"各通道整体强度",恰好是分类头需要的汇总口径。

巡检记录

  • 池化是汇总不是学习:零参数、零可学习权重,最大池化传递"有没有",平均池化传递"整体强度";
  • 容忍机制:窗口内取最大,天然折叠窗口内的位置抖动——等变卷积加池化,凑成识别需要的不变;
  • 替代方案:步幅卷积把下采样变成可学习操作,全局平均池化把任意尺寸压成定长;
  • 定位任务警告:需要精确位置的任务慎用池化,它抹掉的正是位置。

💡 关键直觉:池化像做摘要——摘要必然丢细节,但换来的是"换个措辞也能读懂"的鲁棒性。分类要摘要,定位要原文,用哪份取决于下游任务。

尺寸的压缩到这里到位了。下一工位把特征图摊平,让全连接层做最后一次全局表决。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U