常见的池化层
它实际上是
一种形式的降采样
。有多种不同形式的非线性池化函数,而其中“最大池化(Max pooling)”是最为常见的。它是将输入的图像划分为若干个矩形区域,对每个子区域输出最大值。直觉上,这种
机制能够有效地原因在于,在发现一个特征之后,它的精确位置远不及它和其他特征的相对位置的关系重要
。
池化层会不断地减小数据的空间大小,因此参数的数量和计算量也会下降,这在一定程度上也控制了过拟合
。通常来说,CNN的卷积层之间都会周期性地插入池化层。
池化的作用:
池化操作后的结果相比其输入缩小了。池化层的引入是仿照人的视觉系统对视觉输入对象进行降维和抽象。在卷积神经网络过去的工作中,研究者普遍认为池化层有如下三个功效:
1.
特征不变性
:池化操作是模型更加关注是否存在某些特征而不是特征具体的位置。其中不变形性包括,平移不变性、旋转不变性和尺度不变性。
平移不变性是指输出结果对输入对小量平移基本保持不变,例如,输入为(1, 5, 3), 最大池化将会取5,如果将输入右移一位得到(0, 1, 5),输出的结果仍将为5。对伸缩的不变形,如果原先的神经元在最大池化操作后输出5,那么经过伸缩(尺度变换)后,最大池化操作在该神经元上很大概率的输出仍是5.
2.
特征降维(下采样)
:池化相当于在空间范围内做了维度约减,从而使模型可以抽取更加广范围的特征。同时减小了下一层的输入大小,进而减少计算量和参数个数。
3.
在一定程度上防止过拟合
,更方便优化。
4.实现非线性(类似relu)。
5.扩大感受野。
常见的池化层
:
(1)最大池化、平均池化、全局平均池化、全局最大池化。
平均池化(average pooling):计算图像区域的
平均值
作为该区域池化后的值。
最大池化(max pooling):选图像区域的
最大值
作为该区域池化后的值。
(2)重叠池化(OverlappingPooling):
重叠池化就是,相邻池化窗口之间
有重叠区域
,此时一般
sizeX > stride
。
(3)空金字塔池化(Spatial Pyramid Pooling)
空间金字塔池化的思想源自 Spatial Pyramid Model,它将一个pooling变成了多个scale的pooling。用不同大小池化窗口作用于上层的卷积特征。也就是说 spatital pyramid pooling layer就是把前一卷积层的feature maps的每一个图片上进行了3个卷积操作,并把结果输出给全连接层。其中每一个pool操作可以看成是一个空间金字塔的一层。
这样做的好处是,空间金字塔池化可以把任意尺度的图像的卷积特征转化成相同维度,这不仅可以让CNN处理任意尺度的图像,还能避免cropping和warping操作,导致一些信息的丢失,具有非常重要的意义。
最大池化和平均池化的区别:
特征提取中误差主要来自两个方面:1)
邻域大小受限
造成的估计值
方差增大
;(2)卷积层参数误差造成估计
均值的偏移
。
一般来说,mean-pooling能减小第一种误差(
邻域大小受限
造成的估计值
方差增大
),更多的保留图像的背景信息,max-pooling能减小第二种误差(
卷积层参数误差
造成估计
均值的偏移
),更多的保留纹理信息。Stochastic-pooling则介于两者之间,通过对像素点按照数值大小赋予概率,再按照概率进行亚采样,在平均意义上,与mean-pooling近似,在局部意义上,则服从max-pooling的准则。
pytorch实现
torch.nn.functional.avg_pool2d(input, kernel_size, stride=None,
padding=0, ceil_mode=False, count_include_pad=True)
池化层的反向传播:
1. 平均池化
mean pooling的前向传播就是把一个patch中的值求取平均来做pooling,那么反向传播的过程也就是把某个元素的梯度等分为n份分配给前一层,这样就保证池化前后的梯度(残差)之和保持不变,还是比较理解的,图示如下
2. 最大池化
max pooling也要满足梯度之和不变的原则,max pooling的前向传播是把patch中最大的值传递给后一层,而其他像素的值直接被舍弃掉。那么反向传播也就是把梯度直接传给前一层某一个像素,而其他像素不接受梯度,也就是为0。所以max pooling操作和mean pooling操作不同点在于需要记录下池化操作时到底哪个像素的值是最大,也就是max id。源码中有一个max_idx_的变量,这个变量就是记录最大值所在位置的,因为在反向传播中要用到,那么假设前向传播和反向传播的过程就如图所示。
无论max pooling还是mean pooling,都没有需要学习的参数。因此,在卷积神经网络的训练中,Pooling层需要做的仅仅是将误差项传递到上一层,而没有梯度的计算。
(1)max pooling层:对于max pooling,下一层的误差项的值会原封不动的传递到上一层对应区块中的最大值所对应的神经元,而其他神经元的误差项的值都是0;
(2)mean pooling层:对于mean pooling,下一层的误差项的值会平均分配到上一层对应区块中的所有神经元。
常见的池化层它实际上是一种形式的降采样。有多种不同形式的非线性池化函数,而其中“最大池化(Max pooling)”是最为常见的。它是将输入的图像划分为若干个矩形区域,对每个子区域输出最大值。直觉上,这种机制能够有效地原因在于,在发现一个特征之后,它的精确位置远不及它和其他特征的相对位置的关系重要。池化层会不断地减小数据的空间大小,因此参数的数量和计算量也会下降,这在一定程度上也控制了过拟合。...
池化层
简述
池化层
的分类最大/均值池化中值池化组合池化Spatial Pyramid PoolingGlobal Average/Max Pooling参考文献
池化层
(Pooling Layer)是CNN中常见的一种操作,
池化层
通常也叫做子采样(subsampling)或降采样(Downsampling),在构建CNN网络时,往往是用在卷积层之后,通过
池化层
来降低卷积层输出的特征维度,在有效减少网络参数的同时还可以防止过拟合现象。
说到池化操作,就会想到我们经常用的池化操作,即最大池化(Max
max pooling是CNN当中的最大值池化操作,其实用法和卷积很类似
tf.nn.max_pool(value, ksize, strides, padding, name=None)
参数是四个,和卷积很类似:
第一个参数value:需要池化的输入,一般
池化层
接在卷积层后面,所以输入通常是feature map,依然是[batch, height, width, channels]这样的shape
第二个参数ksize:池化窗口的大小,取一个四维向量,一般是[1, height, width, 1],
卷积层是卷积神经网络的核心层之一。卷积操作是一种数学运算,它将输入的数据与一组卷积核进行卷积运算,得到输出的特征图。
卷积操作的主要思想是将卷积核的权重参数与输入数据的对应区域进行点乘运算,然后将所有点乘的结果相加得到一个输出值。通过对整个输入数据的不同区域进行卷积操作,可以得到输出的特征图。
卷积层的主要作用是提取输入数据中的特征。在卷积神经网络中,卷积层通常会多次堆叠,以提高网络的表达能力。
###
池化层
池化层
是卷积神经网络中的另一种常用层。池化操作是一种降维操作,它可以将输入数据的尺寸减小,从而减少后续层的计算量。
通常情况下,
池化层
会对输入数据的局部区域进行采样,然后将采样结果进行汇总得到一个输出值。常用的池化操作有最大池化、平均池化等。
池化操作的主要作用是减小输入数据的尺寸,从而降低网络的计算量,提高网络的计算效率。此外,池化操作还可以增强网络的鲁棒性,避免过拟合。
总之,卷积层和
池化层
是深度学习中常用的两种层,它们在图像处理、语音识别等领域具有重要的应用价值。