深度學習 | 深入解析CNN pooling 池化層原理及其作用

池化層作用機理

我們以最簡單的最常用的max pooling最大池化層爲例,對池化層作用機理進行探究。其他池化層的作用機理也大致適用這一機理,在這裏就不加入討論。
在這裏插入圖片描述

圖片和以下部分內容來自 CS231n

從上面左圖可以看到,使用了pool操作其實就是降低圖片的空間尺寸。右圖使用一個 2 × 2的 池化核(filter),以2爲步長(stride),對圖片進行max pooling,那麼會圖片就會尺寸就會減小一半。需要注意,這裏是因爲 stride = 2,所以圖片尺寸纔會減少一半的。

CS231n又對池化進行了量化的闡述:
在這裏插入圖片描述
上圖表示的意思就是:

  1. 給定一個圖片的三個維度的尺寸, 即【Channel, Height, Width】,以及給定兩個超參數池化核尺寸 【F × F】,池化步長【S】,就可以計算池化後的圖片尺寸,見上圖公式。
  2. 池化核這個filter是不需要保留參數的,不同於conv filter, 每一個pooling filter就是一個固定的函數,比如max pooling,就是取這個filter覆蓋區域像素的最大值而已。所以我們在計算卷積層數的時候,不計入池化層。
  3. 對於pooling 層,我們通常不需要使用 padding。這是由於採用pooling通常是爲了減少一半的圖片尺寸,我們使用 kernel size = 2 * 2,以及stride = 2的池化核。就可以在不padding 的情況下,將尺寸變爲一半。

CS231n還介紹了另外一種常見的池化核, 其步長爲 2,kernel size = 3 * 3, 叫做覆蓋池化層,其含義也就是在前後兩次的濾波窗口之間有一個像素的重疊。該池化核在AlexNet中得到了應用,見ImageNet Classification with Deep Convolutional
Neural Networks

It is worth noting that there are only two commonly seen variations of the max pooling layer found in practice:A pooling layer with F=3,S=2 (also called overlapping pooling), and more commonly F=2,S=2.

Pooling sizes with larger receptive fields are too destructive.

CS231n 同時也告誡我們,使用大尺寸的池化核去增大感受野是destructive(破壞性的)。這很容易理解,增大池化核,將損失更多的圖片像素信息。

看到這裏,你可能會有兩個疑問:

  • 爲什麼可以降低圖片空間尺寸呢?
  • 爲什麼要降低圖片的空間尺寸呢?

這兩個問題,其實是觸及了池化技術的本質:在儘可能保留圖片空間信息的前提下,降低圖片的尺寸,增大卷積核感受野,提取高層特徵,同時減少網絡參數量,預防過擬合。
先來探討第一個問題。

  1. 爲什麼可以降低圖片空間尺寸?
    在這裏插入圖片描述
    這個問題很簡單,等比例縮小圖片,圖片的主體內容丟失不多,具有平移,旋轉,尺度的不變性,簡單來說就是圖片的主體內容依舊保存着原來大部分的空間信息。

  2. 爲什麼要降低圖片的尺寸?
    我們知道在卷積神經網絡中,如果特徵抽取後最終輸出特徵圖尺寸太大,將會導致輸出結果的特徵太多,計算量劇增的同時,將其輸入到一個分類器(通常是全連接層Full Connected layer),很容易就會導致過擬合。就像機器學習一樣,特徵過多的話,我們可能會考慮降維(如PCA)來減少特徵,增強擬合能力。
    簡單來說:降低尺寸,有助於減少計算量以及特徵數量,保留主要特徵,增大卷積核感受野,防止過擬合。
    但我們在做卷積的時候,讓conv 層的步長stride = 2同樣也可以起到降低尺寸的目的啊,爲什麼需要pooling 層來降低尺寸,這就回到了上文的:池化層不需要保留參數。它採用一個固定的函數進行像素運算,如max pooling filter中採用了max函數,是不需要保留參數的,所以減少了網絡的參數量。
    增大感受野是怎麼回事,我們知道在實際訓練中,我們的卷積核一般就是比較小的,如3 * 3,這些卷積核本質就是在特徵圖上進行濾波窗口計算並滑動。如果要保持卷積核大小不變,同時增大卷積核覆蓋區域(感受野增大,便於提取高層語義),那麼就可以對圖片尺寸進行下采樣。
    當然增大感受野也有其他方式,如膨脹卷積運算,在保證特徵圖尺寸不變的情況下,可以增大卷積核的感受野。

不過值得一提的是:在像素信息較爲敏感的一些視覺任務中(如分割,檢測),一般是較少使用pooling操作來下采樣的,通常使用插值(如雙線性插值等)或者stride=2的卷積層來進行下采樣,儘可能的保留像素信息,這也是pooling操作的缺點,不過使用pooling也有其優點,就有無參數的好處。

如果你追求更加理論和硬核的pooling解釋的話,我推薦你去看一下LeCun在10年ICML的論文:A Theoretical Analysis of Feature Pooling in Visual Recognition

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章