大小 池化层_Pooling 池化层

论坛 期权论坛 脚本     
已经匿名di用户   2022-5-29 19:26   921   0

Pooling 池化层

一.定义

pooling 是仿照人的视觉系统进行降维(降采样),用更高层的抽象表示图像特征。

二.作用

池化层对特征图进行压缩。1.使特征图变小,简化网络计算复杂度,减少下一层的参数和计算量,防止过拟合;2.进行特征压缩提取特征保留主要的特征保持某种不变性,包括平移、(旋转?)和尺度,尺度不变性也就是增大了感受野

另:关于池化层增大感受野问题。即这个0原来被16X16的表示,经过pooling后,可以用4X4的图表示了。

5fbc1f1046278e43cd897a20de2a1b4d.png

那我为了增大感受野,我一开始就用跟图像一样大的卷积核,那不就感受野更大了?

不行,因为卷积层越深模型的表征能力越强,即卷积次数越多越好,你用跟图像一样大的,得到了1X1的feature map,但是一下降维这么多,会导致很多重要信息丢失,你再进行卷积的时候效果就没那么好了。你说降维导致信息丢失,那即使第一次不降维到1X1到最后面也会降维到1X1或者很低的维度信息不一样丢失了吗?一次降维到1X1会导致一次性失信息太多了,之后的卷积的表征能力就没那么强了,而逐渐降维一次性丢失的信息没有那么多,所以以后每一次卷积表征能力相对一次性降维更强。

池化操作除了能够明显降低参数量外,还能够保持对平移、伸缩、旋转操作的不变性。平移不变性是指输出结果对输入的小量平移基本保持不变。例如输入为(1,5,3),最大池化将会取5,如果将输入右移一位得到(0,1,5),输出的结果仍为5。对伸缩的不变性(一般称为尺度不变性)可以这样理解,如果原先神经元在最大池化操作之后输出5,那么在经过伸缩(尺度变换)后,最大池化操作在该神经元上很大概率的输出仍然为5。因为神经元感受的是邻域输入的最大值,而并非某一个确定的值。旋转不变性,可见P226。多个过滤器学到不同旋转方向的???

三.种类

最常见的池化操作为最大池化和平均池化:

最大池化 Max Pooling

前向传播:选图像区域的最大值作为该区域池化后的值。

反向传播:梯度通过最大值的位置传播,其它位置梯度为0。

平均池化 Average Pooling(也称mean pooling)

前向传播:计算图像区域的平均值作为该区域池化后的值。

反向传播:梯度取均值后分给每个位置。

Global Pooling

“global pooling”就是pooling的滑窗size和整张feature map的size一样大。这样,每个 W×H×C 的feature map输入就会被转化为 1×1×C 输出。因此,其实也等同于每个位置权重都为 1/(W×H)的FC层操作。等同于输入tensor,输出vector。

“global pooling”在滑窗内的具体pooling方法可以是任意的,所以就会被细分为“global avg pooling”、“global max pooling”等。

4077e9a55c5f74ccc7ba055afa2b651b.png

对比:均值池化通过对领域内数值求平均来实现,能够抑制由于邻域大小受限造成估计值方差增大的现象,特点是对背景的保留效果更好。最大池化则通过取邻域内特征的最大值来实现,能够抑制网络参数误差造成估计均值偏移的现象,特点是能够更好的提取纹理信息。特殊的池化方式还包括对相邻重叠区域的池化以及空间金字塔池化。相邻重叠区域的池化,是采用比窗口宽度更小的步长,使得窗口在每次滑动时存在重叠的区域。空间金字塔池化主要考虑了多尺度信息的描述。例如同时计算1*1、2*2、4*4的矩阵的池化并将结果拼接在一起作为下一个网络层的输入。

四.反向传播

CNN网络中另外一个不可导的环节就是Pooling池化操作,因为Pooling操作使得feature map的尺寸变化,假如做2×2的池化,假设那么第k+1层的feature map有16个梯度,那么第k层就会有64个梯度,这使得梯度无法对位的进行传播下去。其实解决这个问题的思想也很简单,就是把1个像素的梯度传递给4个像素,但是需要保证传递的 loss(或者梯度)总和不变。根据这条原则,mean pooling和max pooling的反向传播也是不同的。

1、mean pooling

mean pooling的前向传播就是把一个patch中的值求取平均来做pooling,那么反向传播的过程也就是把某个元素的梯度等分为n份分配给前一层,这样就保证池化前后的梯度(残差)之和保持不变,还是比较理解的,图示如下 :

6576c8ce037874e792db8f18a37c1e13.png

mean pooling比较容易让人理解错的地方就是会简单的认为直接把梯度复制N遍之后直接反向传播回去,但是这样会造成loss之和变为原来的N倍,网络是会产生梯度爆炸的。

2、max pooling

max pooling也要满足梯度之和不变的原则,max pooling的前向传播是把patch中最大的值传递给后一层,而其他像素的值直接被舍弃掉。那么反向传播也就是把梯度直接传给前一层某一个像素,而其他像素不接受梯度,也就是为0。所以max pooling操作和mean pooling操作不同点在于需要记录下池化操作时到底哪个像素的值是最大,也就是max id,这个变量就是记录最大值所在位置的,因为在反向传播中要用到,那么假设前向传播和反向传播的过程就如下图所示 :

2db70e2227a2e221072b96af3d431d6a.png

五.输入输出分析

1fa8a4a308e1a4afa51caf1f38a091ff.png

b79d6e2a5c7aafd104481d9a24b73c36.png

六.参数计算量分析

池化层没有要学习的参数。

池化的计算量:

84eb15fe996e18f60257b232f211eeda.png

f1fd78a2493ce602439655e8c2efec83.png

(输出的角度来考虑,输出的feature map上每一个通道上的每一个点就对应着输入feature map同样通道的上的一个k * k 区域的 max ,sum或者avg池化操作,所以 pooling flops = BatchSize * Cout * Hout * Wout * k * k )

六.缺点

虽然pooling能够增大感受野,让卷积看到更多的信息,但是它在降维的过程中丢失了一些信息(因为毕竟它变小了嘛,只留下了它认为重要的信息),降低了分辨率。

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:81
帖子:4969
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP