动手学深度学习|池化层(Pooling)超详细讲解:为什么需要池化?最大池化和平均池化怎么理解?

张开发
2026/4/18 14:51:29 15 分钟阅读

分享文章

动手学深度学习|池化层(Pooling)超详细讲解:为什么需要池化?最大池化和平均池化怎么理解?
前言在卷积神经网络中除了卷积层之外还有一个非常经典的结构——池化层Pooling Layer。很多同学第一次学到这里时都会有几个疑问池化层到底是干什么的为什么卷积完之后还要再池化一次最大池化和平均池化有什么区别池化层有没有参数要学习现在还有必要用池化层吗这篇文章就来把这些问题一次性讲清楚。一、什么是池化层池化层可以理解为一种下采样操作。它不会像卷积层那样去学习复杂特征而是把输入特征图按一个小窗口划分然后从每个窗口中提取一个“代表值”从而让特征图的尺寸变小。最常见的两种池化方式是最大池化Max Pooling平均池化Average Pooling池化层的核心作用就是降低特征图尺寸减少计算量保留主要特征增强一定程度的平移不变性二、为什么需要池化层1. 降低计算复杂度如果特征图尺寸一直很大后面的计算量会越来越夸张。例如一张图像经过卷积之后假设输出是28×28×64如果不做下采样后面每一层都要处理这么大的特征图计算和显存压力都会很大。池化层可以把它压缩成14×14×64这样后续计算就轻很多。2. 提取更稳健的特征卷积层提取到的特征可能会因为目标位置稍微移动一点点而发生变化。池化层相当于做了一个局部汇总只要某个局部区域里“重要特征还在”即使位置略微变化池化之后的结果也可能差不多。所以它能够提升模型对小范围平移、抖动、噪声的鲁棒性。3. 防止过拟合池化后特征图尺寸减小参数规模间接减少模型复杂度下降有助于缓解过拟合。三、最大池化怎么理解最大池化的规则非常简单最大池化的直观理解最大池化本质上是在问这个局部区域里最强的特征响应是什么所以它更适合保留边缘、纹理、局部显著信息。这也是为什么在很多经典 CNN 中最大池化非常常见。四、平均池化怎么理解平均池化的规则是在一个局部窗口中取平均值作为输出。平均池化的直观理解平均池化更像是在做一个局部平滑不强调“最强响应”更关注“整体平均情况”所以它保留的信息更柔和但有时会削弱最显著的特征。五、最大池化和平均池化有什么区别1. 最大池化特点更突出局部最强特征对边缘、纹理、显著响应更敏感在图像任务中更常用2. 平均池化特点更强调整体区域统计信息输出更平滑常用于网络末端的全局特征汇总一句话总结最大池化保留最强特征平均池化保留整体趋势六、池化层的窗口、步幅和输出尺寸池化层和卷积层一样也有几个关键超参数池化窗口大小kernel size步幅stride填充padding可选输出尺寸计算公式七、池化层有没有可学习参数没有。这一点非常重要。卷积层有卷积核参数需要通过训练学习但池化层只是按固定规则操作最大池化取最大值平均池化取平均值所以池化层本身没有需要训练的参数。这也意味着池化层计算简单、速度快。八、池化是对每个通道分别做的吗九、PyTorch 中如何实现池化层在 PyTorch 中池化层通常放在torch.nn模块中。1. 最大池化import torch from torch import nn pool nn.MaxPool2d(kernel_size2, stride2) x torch.tensor([[[[1., 3., 2., 4.], [5., 6., 1., 2.], [7., 2., 8., 3.], [1., 4., 2., 0.]]]]) y pool(x) print(y)输出结果tensor([[[[6., 4.], [7., 8.]]]])2. 平均池化import torch from torch import nn pool nn.AvgPool2d(kernel_size2, stride2) x torch.tensor([[[[1., 3., 2., 4.], [5., 6., 1., 2.], [7., 2., 8., 3.], [1., 4., 2., 0.]]]]) y pool(x) print(y)输出结果tensor([[[[3.7500, 2.2500], [3.5000, 3.2500]]]])十、全局平均池化是什么除了普通池化还有一个很常见的概念叫全局平均池化Global Average Pooling, GAP它的做法是对每个通道的整个空间区域直接求平均最后每个通道只留下一个数。为什么全局平均池化重要在很多现代网络中它可以替代传统的大型全连接层参数更少不容易过拟合更适合分类任务最后的特征汇总比如 ResNet 的后半部分就常用这种思想。十一、池化层的缺点虽然池化层很经典但它也不是完美的。1. 会丢失信息池化本质上是在压缩数据压缩就会带来信息损失。2. 位置信息变弱特别是做多次池化以后特征图越来越小精细定位能力会下降。3. 对检测、分割任务不一定友好对于目标检测、语义分割这类需要较强空间定位能力的任务过强的池化可能损害性能。所以在一些现代网络中会用步幅卷积代替池化空洞卷积保留分辨率FPN 等多尺度结构增强定位能力十二、池化层和步幅卷积有什么区别很多同学学到后面会发现既然池化也是下采样那为什么不用步幅卷积直接代替这是个很好的问题。池化层没有可学习参数规则固定更简单直接步幅卷积有可学习参数既能提特征也能下采样表达能力更强所以现代网络中确实经常会看到少用传统池化多用 stride2 的卷积做下采样但池化层作为经典模块依然非常值得理解。十三、一个非常形象的理解方式你可以把卷积层和池化层理解成卷积层负责“找特征”池化层负责“压缩特征”卷积层像是在图片里寻找边缘、纹理、形状池化层像是在对这些特征做摘要留下最核心的信息。所以它们经常搭配出现卷积 → 激活 → 池化 → 卷积 → 激活 → 池化这就是经典 CNN 的基本套路。十四、总结这节关于池化层最核心的内容可以记住下面几点1. 池化层的本质池化层是一种下采样方法用于压缩特征图。2. 常见类型最大池化取局部最大值平均池化取局部平均值3. 主要作用降低计算量缩小特征图尺寸保留关键信息提高一定的平移鲁棒性4. 参数特点池化层没有可学习参数。5. 使用方式池化通常对每个通道单独操作不改变通道数只改变空间尺寸。6. 现代网络中的变化虽然传统 CNN 大量使用池化层但在一些现代模型中也常常用步幅卷积来替代部分池化操作。十五、结尾池化层本身不复杂但它在卷积神经网络发展历史中非常重要。如果说卷积层负责“看见”局部模式那么池化层负责“把重要信息留下来”。理解了池化层你对 CNN 的整体结构就会更清晰。下一篇可以继续写LeNetAlexNetVGGNiN因为这些经典网络里都会频繁用到池化层正好可以无缝衔接下去。

更多文章