Max 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步長。
Max Pooling的作用
作用1:invariance(不變性)
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的尺寸)。
作用2:增大感受野
可能跟作用1的結論有些因果關系。
首先它第一個作用是降低feature map的尺寸,減少需要訓練的參數;其次,因為有縮小的作用,所以之前的4個像素點,現在壓縮成1個。那么,相當於我透過這1個點,就可以看到前面的4個點,這不就是把當前map的感受野一下子放大了
聽說pooling層可以消失
因為我們可以用步長大於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的
因為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.
參考鏈接
https://www.jianshu.com/p/c3ba4ca849d3
https://blog.csdn.net/jiachen0212/article/details/78548667
https://www.cnblogs.com/ying-chease/p/8658351.html
https://www.sohu.com/a/160924449_651893
https://www.cnblogs.com/guoyaohua/p/8674228.html
https://blog.csdn.net/dulingtingzi/article/details/79848625
https://blog.csdn.net/u010402786/article/details/51541465
https://blog.csdn.net/weixin_41513917/article/details/102514739