一文搞懂深度学习中的池化!

推荐直接网站在线阅读:aicoting.cn

在卷积神经网络(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 演示最大池化、平均池化和全局池化的操作。

scss 复制代码
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

分享是一种信仰,连接让成长更有温度。

我们下次不见不散!

相关推荐
山川行2 小时前
关于《项目C语言》专栏的总结
c语言·开发语言·数据结构·vscode·python·算法·visual studio code
yangSimaticTech2 小时前
整型数据的转换与比较并不简单
算法
老鼠只爱大米2 小时前
LeetCode经典算法面试题 #55:跳跃游戏(贪心法、动态规划、BFS等多种实现方案详解)
算法·leetcode·贪心算法·动态规划·bfs·java面试·跳跃游戏
2501_908329853 小时前
C++中的备忘录模式
开发语言·c++·算法
qq_416018723 小时前
C++与机器学习框架
开发语言·c++·算法
左左右右左右摇晃3 小时前
数据结构——红黑树
算法
CoovallyAIHub3 小时前
传感器数据相互矛盾时,无人机蜂群如何做出可靠的管道泄漏检测决策?
算法·架构·无人机
CoovallyAIHub3 小时前
Claude Code Review:多 Agent 自动审查 PR,代码产出翻倍后谁来把关?
算法·架构·github