您的位置:首页 > 其它

pooling

2014-04-29 16:58 281 查看
一、概述

一般有convolution的地方也会有pooling

   虽然按照convolution的方法可以减小不少需要训练的网络参数,比如说96*96,100个Feature
Map的,采用8*8patch,也100个Feature
Map,则其需要训练的参数个数减小到了8×8×100=6400,大大的减小特征提取过程的困难。但是此时同样出现了一个问题,即它的输出向量的维数变得很大,本来完全连接的网络输出只有100维的,现在的网络输出为89*89*100=792100维,大大的变大了,这对后面的分类器的设计同样带来了困难,所以pooling方法就出现了。

  为什么pooling的方法可以工作呢?首先在前面的使用convolution时是利用了图像的stationarity特征,即不同部位的图像的统计特征是相同的,那么在使用convolution对图片中的某个局部部位计算时,得到的一个向量应该是对这个图像局部的一个特征,既然图像有stationarity特征,那么对这个得到的特征向量进行统计计算的话,所有的图像局部块应该也都能得到相似的结果。对convolution得到的结果进行统计计算过程就叫做pooling,由此可见pooling也是有效的。常见的pooling方法有max pooling和average pooling等。并且学习到的特征具有旋转不变性(这个原因暂时没能理解清楚)。

  从上面的介绍可以简单的知道,convolution是为了解决前面无监督特征提取学习计算复杂度的问题,而pooling方法是为了后面有监督特征分类器学习的,也是为了减小需要训练的系统参数(当然这是在普遍例子中的理解,也就是说我们采用无监督的方法提取目标的特征,而采用有监督的方法来训练分类器)。 


卷积层是对图像的一个邻域进行卷积得到图像的邻域特征,亚采样层就是使用pooling技术将小邻域内的特征点整合得到新的特征。

二、pooling分类

pooling的结果是使得特征减少,参数减少,但pooling的目的并不仅在于此。pooling目的是为了保持某种不变性(旋转、平移、伸缩等),常用的有mean-pooling,max-pooling和Stochastic-pooling三种。

mean-pooling,即对邻域内特征点只求平均;

max-pooling,即对邻域内特征点取最大。

根据相关理论,特征提取的误差主要来自两个方面:

(1)邻域大小受限造成的估计值方差增大;

(2)卷积层参数误差造成估计均值的偏移。

一般来说,mean-pooling能减小第一种误差,更多的保留图像的背景信息,max-pooling能减小第二种误差,更多的保留纹理信息。

maxpooling的matlab代码:featMap= blockproc(A,[2 2],@(x)max(max(x.data,[],1),[],2))

Stochastic-pooling则介于两者之间,通过对像素点按照数值大小赋予概率,再按照概率进行亚采样,在平均意义上,与mean-pooling近似,在局部意义上,则服从max-pooling的准则。

三、Stochastic-pooling

    stochastic pooling方法非常简单,只需对feature map中的元素按照其概率值大小随机选择,即元素值大的被选中的概率也大。而不像max-pooling那样,永远只取那个最大值元素。

  假设feature map中的pooling区域元素值如下:

   


  3*3大小的,元素值和sum=0+1.1+2.5+0.9+2.0+1.0+0+1.5+1.0=10

  方格中的元素同时除以sum后得到的矩阵元素为:

   


  每个元素值表示对应位置处值的概率,现在只需要按照该概率来随机选一个,方法是:将其看作是9个变量的多项式分布,然后对该多项式分布采样即可,theano中有直接的multinomial()来函数完成。当然也可以自己用01均匀分布来采样,将单位长度1按照那9个概率值分成9个区间(概率越大,覆盖的区域越长,每个区间对应一个位置),随机生成一个数后看它落在哪个区间。

  比如如果随机采样后的矩阵为:

   


  则这时候的poolng值为1.5

  使用stochastic pooling时(即test过程),其推理过程也很简单,对矩阵区域求加权平均即可。比如对上面的例子求值过程为为:

     0*0+1.1*0.11+2.5*0.25+0.9*0.09+2.0*0.2+1.0*0.1+0*0+1.5*0.15+1.0*0.1=1.625 说明此时对小矩形pooling后的结果为1.625.

  在反向传播求导时,只需保留前向传播已经记录被选中节点的位置的值,其它值都为0,这和max-pooling的反向传播非常类似。

  Stochastic pooling优点:

  方法简单;

  泛化能力更强;

  可用于卷积层(文章中是与Dropout和DropConnect对比的,说是Dropout和DropConnect不太适合于卷积层. 不过个人感觉这没什么可比性,因为它们在网络中所处理的结构不同);

  至于为什么stochastic pooling效果好,作者说该方法也是模型平均的一种,没怎么看懂。

  关于Stochastic Pooling的前向传播过程和推理过程的代码可参考(没包括bp过程,所以代码中pooling选择的位置没有保存下来)

LeCun的“Learning Mid-Level Features For Recognition”对前两种pooling方法有比较详细的分析对比,如果有需要可以看下这篇论文。

 参考资料:

 http://deeplearning.stanford.edu/wiki/index.php/UFLDL_Tutorial

 http://blog.csdn.net/maxiemei/article/details/17355047

http://www.cnblogs.com/tornadomeet/archive/2013/05/01/3053238.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  pooling