简打卡
51.76M · 2026-03-28
在卷积神经网络(CNN)中,卷积层用于提取图像或特征图的局部模式,而池化(Pooling)是卷积之后常用的一种下采样操作。池化可以降低特征图尺寸、减少计算量,并增强模型对位置和噪声的鲁棒性。
下面从几个关键方面来介绍池化。
所有相关文档、源码示例、流程图与面试八股,我也将持续更新在AIHub,欢迎关注收藏!
池化的核心思想是对局部区域内的特征进行统计汇总,得到该区域的代表性数值。
通过这种方式,池化可以:
例如,对于一个 的特征图:
使用 最大池化,步幅为 2,输出为:
同样的 平均池化 输出为:
最大池化(Max Pooling):在窗口内取最大值,保留最显著特征,广泛应用于卷积神经网络。
平均池化(Average Pooling):在窗口内取平均值,平滑特征图,保留整体信息。
全局池化(Global Pooling):对整个特征图进行池化操作,例如 Global Max Pooling 取最大值,Global Average Pooling 取平均值。全局池化常用于替代全连接层,显著减少参数量。
在上面的矩阵例子中,Global Max Pooling 的结果是 8,Global Average Pooling 的结果是 3.25。
下面我们用 PyTorch 演示最大池化、平均池化和全局池化的操作。
import torch
import torch.nn.functional as F
# 构造 1x1x4x4 特征图
feature_map = torch.tensor([[[[1, 3, 2, 4],
[5, 6, 7, 8],
[2, 4, 1, 3],
[0, 1, 2, 4]]]], dtype=torch.float32)
print("输入特征图:")
print(feature_map[0,0])
# 1. 最大池化(2x2,stride=2)
max_pooled = F.max_pool2d(feature_map, kernel_size=2, stride=2)
print("n最大池化结果:")
print(max_pooled[0,0])
# 2. 平均池化(2x2,stride=2)
avg_pooled = F.avg_pool2d(feature_map, kernel_size=2, stride=2)
print("n平均池化结果:")
print(avg_pooled[0,0])
# 3. 全局最大池化(整个特征图)
global_max = F.adaptive_max_pool2d(feature_map, output_size=1)
print("n全局最大池化结果:")
print(global_max[0,0])
# 4. 全局平均池化(整个特征图)
global_avg = F.adaptive_avg_pool2d(feature_map, output_size=1)
print("n全局平均池化结果:")
print(global_avg[0,0])
运行结果为:
从结果可以看出最大池化保留了局部最显著特征,平均池化平滑了局部特征,全局池化提取了整体的代表值。
池化不仅降低了特征图尺寸,还帮助 CNN 形成分层特征表示:浅层池化保留低级特征,深层池化聚合高级语义。结合卷积操作,池化使网络能够学习到稳定、抽象的特征表示,并在图像、语音、文本等任务中表现出色。
总的来说,池化是卷积神经网络中不可或缺的一步,通过下采样、特征汇总和平移不变性提升了网络的效率与鲁棒性,是 CNN 构建层次化特征表示的重要手段。
推荐阅读
面试官:给我讲一下卷积吧!
一文搞懂卷积神经网络!
面试官:正则化都有哪些经典的方法?
面试官:你在训模型的时候经常使用的学习率策略有哪些?
面试官:深度学习中经典的优化算法都有哪些?
一文搞懂深度学习中的通用逼近定理!
一文搞懂深度学习中的表征学习理论!
一文搞懂深度学习中的信息论!
一文搞懂深度学习的反向传播与优化理论!
最新的文章都在公众号aicoting更新,别忘记关注哦!!!
作者:aicoting
分享是一种信仰,连接让成长更有温度。
我们下次不见不散!
Cursor 和 Claude Code:AI 编程的两种哲学
Day10 学习日志:用 LangChain 搭一套可落地的**制度 RAG**(检索 + 生成)
2026-03-28
2026-03-28