目录

概念

两种主要池化方式

最大池化

平均池化

尺寸变化过程

池化优点

总结


概念

池化(Pooling),用于减小卷积神经网络(CNN)或其他类型神经网络的特征图(Feature Map)的尺寸,从而减少计算量、降低模型复杂性并提高模型的鲁棒性。

池化操作通过对输入特征图的局部区域进行汇聚(或聚合)来实现尺寸的缩小。具体而言,池化操作将输入特征图的每个局部区域(通常是非重叠的)映射到一个输出值,这个输出值可以是局部区域中的最大值(最大池化)或平均值(平均池化)。池化操作通常包括两个主要参数:池化窗口大小(池化核大小)和步幅(stride)。

两种主要池化方式

最常见的池化操作是最大池化(Max Pooling)和平均池化(Average Pooling)。

  • 最大池化通过选择局部区域中的最大值作为输出值,从而保留最显著的特征。
  • 平均池化则是取局部区域内数值的平均值作为输出值,以获得整体特征的平均表示。

这两种池化操作都可以在网络中引入平移不变性,即对于输入特征的小偏移,池化操作的输出保持不变。

最大池化

池化过程类似于卷积过程,如上图所示,表示的就是对一个 4X4 feature map邻域内的值,用一个 2X2 的filter,步长为2进行‘扫描’,选择最大值输出到下一层,这叫做 Max Pooling。

max pooling常用的 S=2,f=2 的效果:特征图高度、宽度减半,通道数不变。

平均池化

如上图所示,表示的就是对一个 4X4 feature map邻域内的值,用一个 2X2 的filter,步长为2进行‘扫描’,计算平均值输出到下一层,这叫做 Mean Pooling。

尺寸变化过程

import torch
import torch.nn as nn

input_features = torch.randn(1, 1, 28, 28)  # 输入特征图大小为 28x28
max_pool = nn.MaxPool2d(kernel_size=2, stride=2)  # 池化窗口大小为 2x2,步幅为 2
# avg_pool = nn.AvgPool2d(kernel_size=2, stride=2)  # 池化窗口大小为 2x2,步幅为 2
output = max_pool(input_features)
print(output.size())

当将一个 1x1x28x28 的输入特征图应用最大池化操作时,可以通过使用池化窗口大小为 2x2 和步幅为 2 来实现输出尺寸为 torch.Size([1, 1, 14, 14]) 的特征图。

这是因为最大池化操作的池化窗口大小为 2x2,即在每个窗口中选择一个最大值作为输出值。同时,步幅为 2 表示在应用池化操作时,每次移动窗口的位置距离为 2。

首先,对于输入特征图的高度和宽度,由于池化窗口大小为 2x2,每次移动的步幅也为 2,因此高度和宽度都会减半。这将导致输出特征图的高度和宽度分别为原来的一半。

其次,由于输入特征图的通道数为 1,所以输出特征图的通道数也是 1,保持不变。

因此,最终的输出特征图的大小为 torch.Size([1, 1, 14, 14])。

池化优点

池化操作具有以下几个优点:

  1. 特征降维:池化操作可以减小特征图的尺寸,从而降低计算复杂性。通过池化,可以将输入数据的空间维度减小,保留主要特征信息,减少模型中的参数数量和计算量。

  2. 平移不变性:池化操作具有平移不变性的特点。即输入特征的小偏移或平移,即输入特征的小偏移不会对池化操作的输出产生显著影响,增加模型的泛化能力。通过引入池化操作,可以使模型对于目标在图像中的位置变化具有鲁棒性,提高模型的泛化能力。

  3. 特征提取:池化操作可以从局部区域中提取最显著的特征。最大池化操作选取局部区域内的最大值作为输出,保留了图像中最突出、最重要的特征。平均池化操作则通过取平均值来获得局部区域的整体特征。这些池化操作有助于提取图像中的纹理、形状、边缘等重要特征,为后续的分类、检测和分割任务提供有用的信息。

  4. 控制过拟合:池化操作也可以在一定程度上控制过拟合。通过减小特征图的尺寸,池化可以减少模型中的参数数量,并降低模型的复杂度。这有助于防止模型过度拟合训练数据,提高模型的泛化能力。

总结

需要注意的是,池化操作会减少特征图的细节信息,因此在某些情况下可能会导致信息丢失。在最新的研究中,有些模型在某些层次上已经开始避免使用池化操作,而是采用卷积操作来进行降维和尺寸缩减。这些新的方法通常被称为"strided convolutions"(步幅卷积)或"convolutional stride"(卷积步幅),它们在一定程度上取代了传统的池化操作。这些新方法的目标是通过卷积操作同时实现特征提取和尺寸缩减的效果,以避免信息丢失。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐