池化(pooling)主要是在用于图像处理的卷积神经网络中,但随着深层神经网络的发展,池化相关技术在其他领域,其他结构的神经网络中也越来越受关注。
池化操作可以看做只取用某一个区域的关键特征,忽略其他特征。

池化的作用

1、pooling的结果是使得特征减少,参数减少,但pooling的目的并不仅在于此。
2、pooling目的是为了保持某种不变性(旋转、平移、伸缩等)。

池化的概念

根据相关理论,特征提取的误差主要来自两个方面:
1、邻域大小受限造成的估计值方差增大。
2、卷积层参数误差造成估计均值的偏移。

常用的有mean-pooling,max-pooling和stochastic-pooling三种。

  • mean-pooling:取邻域内特征点平均值,能减小第一种误差(邻域大小受限造成的估计值方差增大),更多的保留图像的背景信息。
  • max-pooling:取邻域内特征点最大的值,能减小第二种误差(卷积层参数误差造成估计均值的偏移),更多的保留纹理信息。
  • stochastic-pooling:对feature map中的元素按照其概率值大小随机选择,即元素值大的被选中的概率也大,介于上面两者之间,通过对像素点按照数值大小赋予概率,再按照概率进行亚采样,在平均意义上,与mean-pooling近似,在局部意义上,则服从max-pooling的准则。

池化操作便是前向传播,下面是最大池化的一个示意图:

java池化技术 使用 池化操作的含义_java池化技术 使用

反向传播

原则:把1个像素扩展开,将梯度传递给多个像素,但是需要保证传递的loss(或者梯度)总和不变。

平均池化

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

java池化技术 使用 池化操作的含义_java池化技术 使用_02


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

最大池化

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

java池化技术 使用 池化操作的含义_pooling_03


java池化技术 使用 池化操作的含义_java池化技术 使用_04