目录
Max Pooling是什么
Max Pooling的作用
作用1:invariance(不变性)
作用2:增大感受野
听说pooling层可以消失
还是可以用pooling的
参考链接
在卷积后还会有一个 pooling 的操作。
max pooling 的操作如下图所示:整个图片被不重叠的分割成若干个同样大小的小块(pooling size)。每个小块内只取最大的数字,再舍弃其他节点后,保持原有的平面结构得出 output。
注意区分max pooling(最大值池化)和卷积核的操作区别:池化作用于图像中不重合的区域(这与卷积操作不同)
这个图中,原来是4*4的图片。优于不会重合,所以filter的大小和步长stride是相等的,为2.
粉色区域最大值为6,得到的该区域结果是6,绿色是8,黄色是3,紫色是4.
有一个动图:
PS:发现其实是有重叠池化的(overlapping pooling)相邻池化窗口之间会有重叠区域,此时filter的大小sizeX>stride步长。
invariance(不变性),这种不变性包括translation(平移)不变性,rotation(旋转)不变性,scale(尺度)不变性。
(1)translation平移
图中左边两个大图,表示数字1,但是两个的位置不同,上者经过向右平移得到下者。经过池化后,得到了相同的结果。
(2)rotation
左边大图表示的是汉字“一”(姑且这么理解吧,明白就行)。经过两次池化得到了相同的结果。
(3)scale
左边大图表示的是数字0,经过两次池化得到了相同的结果。
再举一个例子:
考虑黄色区域中黑色的形状-----“横折”。经过2*2的filter之后,得到了3*3的output;
经过3*3的最大池化后,都得到了1*1的output 为3.
可以看出,“横折”这个形状,在经过池化后得到的结果是相同的,这就减小下一层输入大小,减小计算量和参数个数,降维(减小feature map的尺寸)。
可能跟作用1的结论有些因果关系。
首先它第一个作用是降低feature map的尺寸,减少需要训练的参数;其次,因为有缩小的作用,所以之前的4个像素点,现在压缩成1个。那么,相当于我透过这1个点,就可以看到前面的4个点,这不就是把当前map的感受野一下子放大了嘛(参考)
因为我们可以用步长大于1的卷积来替代。
害,我觉得这肯定是要付出时间代价的emmmm,参数也多。
有人做了实验。
上图是3个CNN的结构模型:①Strided-CNN-C直接使用的conv. + ReLU; ② ConvPool-CNN-C使用了max-pooling,大小为2;③All-CNN-C未使用max-pooling,使用的是步长为2的卷积。
结果如下:
嗯,错误率降低了。
Springenberg J T, Dosovitskiy A, Brox T, et al. Striving for Simplicity: The AllConvolutional Net[J]. Eprint Arxiv, 2014.
因为pooling相对于带步长的卷积操作,毕竟减少了计算量,所以对于很多需要concat/add featuremap通道的小模型,pooling仍然可以以小搏大。比如下面的shufflenet的block。
Zhang X, Zhou X, Lin M, et al. ShuffleNet: An Extremely EfficientConvolutional Neural Network for Mobile Devices[J]. 2017.