原文地址:https://blog.csdn.net/CVSvsvsvsvs/article/details/90477062
池化層作用機理
我們以最簡單的最常用的max pooling最大池化層為例,對池化層作用機理進行探究。其他池化層的作用機理也大致適用這一機理,在這里就不加入討論。
我們以最簡單的最常用的max pooling最大池化層為例,對池化層作用機理進行探究。其他池化層的作用機理也大致適用這一機理,在這里就不加入討論。
圖片和以下部分內容來自 CS231n
從上面左圖可以看到,使用了pool操作其實就是降低圖片的空間尺寸。右圖使用一個 2 × 2的 池化核(filter),以2為步長(stride),對圖片進行max pooling,那么會圖片就會尺寸就會減小一半。需要注意,這里是因為 stride = 2,所以圖片尺寸才會減少一半的。
CS231n又對池化進行了量化的闡述:
CS231n又對池化進行了量化的闡述:
上圖表示的意思就是:
給定一個圖片的三個維度的尺寸, 即【Channel, Height, Width】,以及給定兩個超參數池化核尺寸 【F × F】,池化步長【S】,就可以計算池化后的圖片尺寸,見上圖公式。
池化核這個filter是不需要保留參數的,不同於conv filter, 每一個pooling filter就是一個固定的函數,比如max pooling,就是取這個filter覆蓋區域像素的最大值而已。所以我們在計算卷積層數的時候,不計入池化層。
對於pooling 層,我們通常不需要使用 padding。這是由於采用pooling通常是為了減少一半的圖片尺寸,我們使用 kernel size = 2 * 2,以及stride = 2的池化核。就可以在不padding 的情況下,將尺寸變為一半。
池化核這個filter是不需要保留參數的,不同於conv filter, 每一個pooling filter就是一個固定的函數,比如max pooling,就是取這個filter覆蓋區域像素的最大值而已。所以我們在計算卷積層數的時候,不計入池化層。
對於pooling 層,我們通常不需要使用 padding。這是由於采用pooling通常是為了減少一半的圖片尺寸,我們使用 kernel size = 2 * 2,以及stride = 2的池化核。就可以在不padding 的情況下,將尺寸變為一半。
CS231n還介紹了另外一種常見的池化核, 其步長為 2,kernel size = 3 * 3, 叫做覆蓋池化層,其含義也就是在前后兩次的濾波窗口之間有一個像素的重疊。該池化核在AlexNet中得到了應用,見ImageNet Classification with Deep Convolutional
Neural Networks
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(破壞性的)。這很容易理解,增大池化核,將損失更多的圖片像素信息。
看到這里,你可能會有兩個疑問:
看到這里,你可能會有兩個疑問:
為什么可以降低圖片空間尺寸呢?
為什么要降低圖片的空間尺寸呢?
為什么要降低圖片的空間尺寸呢?
這兩個問題,其實是觸及了池化技術的本質:在盡可能保留圖片空間信息的前提下,降低圖片的尺寸,增大卷積核感受野,提取高層特征,同時減少網絡參數量,預防過擬合。
先來探討第一個問題。
先來探討第一個問題。
為什么可以降低圖片空間尺寸?
這個問題很簡單,等比例縮小圖片,圖片的主體內容丟失不多,具有平移,旋轉,尺度的不變性,簡單來說就是圖片的主體內容依舊保存着原來大部分的空間信息。
為什么要降低圖片的尺寸?
我們知道在卷積神經網絡中,如果特征抽取后最終輸出特征圖尺寸太大,將會導致輸出結果的特征太多,計算量劇增的同時,將其輸入到一個分類器(通常是全連接層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。
————————————————
版權聲明:本文為CSDN博主「qyhyzard」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/CVSvsvsvsvs/article/details/90477062