
目录一、前言二、什么是池化三、为什么需要池化四、池化层在CNN中的位置五、最大池化Max Pooling六、最大池化计算过程七、最大池化为什么有效八、平均池化Average Pooling九、平均池化计算示例十、最大池化与平均池化对比十一、池化尺寸计算十二、Stride 对池化的影响十三、什么是全局池化十四、全局池化的优势十五、池化的本质十六、使用Numpy实现最大池化十七、使用PyTorch实现池化十八、平均池化实现十九、现代CNN为什么减少使用池化二十、面试高频问题什么是池化最大池化和平均池化区别为什么需要池化池化层有参数吗Global Average Pooling作用是什么为什么现代网络减少使用池化二十一、总结在学习卷积神经网络CNN时经常会看到这样的网络结构Conv ↓ ReLU ↓ Pooling ↓ Conv ↓ ReLU ↓ Pooling很多同学刚接触 CNN 时都会产生疑问什么是池化 为什么卷积后还要池化 池化会不会丢失信息 最大池化和平均池化有什么区别 现代网络为什么越来越少使用池化事实上池化Pooling 是CNN中最经典的下采样技术从LeNet AlexNet VGG到现代视觉网络。池化都发挥过重要作用。本文将系统讲解什么是池化 池化为什么存在 最大池化 平均池化 全局池化 池化尺寸计算 池化代码实现 池化优缺点二、什么是池化池化Pooling是一种特征压缩 降维 下采样技术。其作用是减少特征图尺寸 保留重要特征 降低计算量简单来说卷积负责发现特征 池化负责压缩特征例如输入特征图1 3 2 4 5 6 8 2 1 4 7 9 2 3 5 8经过池化后6 8 4 9尺寸明显变小。三、为什么需要池化假设输入图片224 × 224经过多层卷积后224 × 224 × 64特征图数量很多。如果继续卷积计算量巨大因此需要压缩特征图作用降低内存占用 减少计算量 降低过拟合风险四、池化层在CNN中的位置典型结构工作流程提取特征 ↓ 压缩特征 ↓ 继续提取更高级特征五、最大池化Max Pooling最常见的池化方式最大池化规则取窗口中的最大值输入1 3 5 6最大值6输出6六、最大池化计算过程输入矩阵1 3 2 4 5 6 8 2 1 4 7 9 2 3 5 8池化窗口2 × 2第一次覆盖1 3 5 6取最大值6第二次覆盖2 4 8 2结果8继续计算最终输出6 8 4 9七、最大池化为什么有效因为图像中的关键特征 往往表现为强响应例如边缘特征0.1 0.2 8.7 0.3显然8.7 最重要最大池化能够保留最显著特征因此边缘 纹理 轮廓能够被更好地保留下来。八、平均池化Average Pooling另一种经典池化Average Pooling规则取平均值输入1 3 5 7结果(1357)/4 4输出4九、平均池化计算示例输入1 3 2 4 5 6 8 2 1 4 7 9 2 3 5 8窗口2×2第一块1 3 5 6平均值(1356)/4 3.75最终输出3.75 4 2.5 7.25十、最大池化与平均池化对比对比项最大池化平均池化计算方式取最大值取平均值保留特征强特征整体特征抗噪能力强一般应用场景CNN主流早期网络通常Max Pooling 使用更多十一、池化尺寸计算假设输入4 × 4池化窗口2 × 2步长2输出尺寸Output (Input - PoolSize) / Stride 1计算(4-2)/2 1 2结果2 × 2十二、Stride 对池化的影响Stride表示池化窗口移动步长例如Stride1窗口重叠。Stride2窗口不重叠。示意步长越大输出尺寸越小十三、什么是全局池化现代CNN经常使用Global Average Pooling简称GAP作用整个特征图求平均例如1 2 3 4输出(1234)/4 2.5十四、全局池化的优势传统CNN卷积 ↓ 全连接层参数很多。例如512×7×7展开后25088个神经元参数巨大。而Global Pooling直接变成512个值。优势参数更少 更不容易过拟合十五、池化的本质很多人认为池化只是缩小图片实际上池化是一种信息压缩保留重要特征舍弃冗余细节类似于看缩略图 依然知道图片内容虽然细节减少但主体信息保留十六、使用Numpy实现最大池化import numpy as np feature_map np.array([ [1,3,2,4], [5,6,8,2], [1,4,7,9], [2,3,5,8] ]) result np.zeros((2,2)) for i in range(2): for j in range(2): region feature_map[ i*2:i*22, j*2:j*22 ] result[i,j] np.max(region) print(result)输出[[6. 8.] [4. 9.]]十七、使用PyTorch实现池化最大池化import torch import torch.nn as nn pool nn.MaxPool2d( kernel_size2, stride2 ) x torch.randn( 1, 3, 32, 32 ) y pool(x) print(y.shape)输出torch.Size([1,3,16,16])尺寸减半。十八、平均池化实现avg_pool nn.AvgPool2d( kernel_size2, stride2 ) y avg_pool(x) print(y.shape)结果torch.Size([1,3,16,16])与最大池化尺寸相同。区别仅在于计算方式不同十九、现代CNN为什么减少使用池化近年来ResNet EfficientNet Vision Transformer越来越少使用传统池化。原因卷积步长Stride 也能完成下采样例如nn.Conv2d( 64, 128, kernel_size3, stride2 )直接完成卷积 同时完成降采样效果更好。二十、面试高频问题什么是池化对特征图进行下采样压缩最大池化和平均池化区别最大池化取最大值 平均池化取平均值为什么需要池化降低计算量 减少过拟合 压缩特征池化层有参数吗没有 属于无参数层Global Average Pooling作用是什么替代全连接层 减少参数量为什么现代网络减少使用池化Stride卷积能够同时完成 特征提取和降采样二十一、总结池化层是卷积神经网络中的经典组件。其核心作用压缩特征图 ↓ 保留重要信息 ↓ 减少计算量 ↓ 提升模型泛化能力常见池化方式最大池化Max Pooling ↓ 平均池化Average Pooling ↓ 全局平均池化GAP在CNN的发展历程中卷积 ↓ 池化 ↓ 深层卷积 ↓ 残差网络 ↓ 视觉Transformer池化一直扮演着重要角色。可以说卷积负责发现特征而池化负责压缩特征。掌握池化原理不仅能够理解 CNN 的整体架构更能够理解现代计算机视觉模型为何能够在有限计算资源下处理海量图像数据。