【37】池化層講解(Pooling layers)


池化層(Pooling layers)

除了卷積層,卷積網絡也經常使用池化層來縮減模型的大小,提高計算速度,同時提高所提取特征的魯棒性,我們來看一下。

 

先舉一個池化層的例子,然后我們再討論池化層的必要性。假如輸入是一個4×4矩陣,用到的池化類型是最大池化(max pooling)。執行最大池化的樹池是一個2×2矩陣。執行過程非常簡單,把4×4的輸入拆分成不同的區域,我把這個區域用不同顏色來標記。對於2×2的輸出,輸出的每個元素都是其對應顏色區域中的最大元素值。

左上區域的最大值是9,右上區域的最大元素值是2,左下區域的最大值是6,右下區域的最大值是3。為了計算出右側這4個元素值,我們需要對輸入矩陣的2×2區域做最大值運算。這就像是應用了一個規模為2的過濾器,因為我們選用的是2×2區域,步幅是2,這些就是最大池化的超參數。

因為我們使用的過濾器為2×2,最后輸出是9。然后向右移動2個步幅,計算出最大值2。然后是第二行,向下移動2步得到最大值6。最后向右移動3步,得到最大值3。這是一個2×2矩陣,即f=2,步幅是2,即s=2。

 

這是對最大池化功能的直觀理解,你可以把這個4×4輸入看作是某些特征的集合,也許不是。你可以把這個4×4區域看作是某些特征的集合,也就是神經網絡中某一層的非激活值集合。

數字大意味着可能探測到了某些特定的特征,左上象限具有的特征可能是一個垂直邊緣,一只眼睛,或是大家害怕遇到的CAP特征。顯然左上象限中存在這個特征,這個特征可能是一只貓眼探測器。然而,右上象限並不存在這個特征。最大化操作的功能就是只要在任何一個象限內提取到某個特征,它都會保留在最大化的池化輸出里。所以最大化運算的實際作用就是,如果在過濾器中提取到某個特征,那么保留其最大值。如果沒有提取到這個特征,可能在右上象限中不存在這個特征,那么其中的最大值也還是很小,這就是最大池化的直觀理解。

必須承認,人們使用最大池化的主要原因是此方法在很多實驗中效果都很好。盡管剛剛描述的直觀理解經常被引用,不知大家是否完全理解它的真正原因,不知大家是否理解最大池化效率很高的真正原因。

其中一個有意思的特點就是,它有一組超參數,但並沒有參數需要學習。實際上,梯度下降沒有什么可學的,一旦確定了f和s,它就是一個固定運算,梯度下降無需改變任何值。

我們來看一個有若干個超級參數的示例,輸入是一個5×5的矩陣。我們采用最大池化法,它的過濾器參數為3×3,即f=3,步幅為1,s=1,輸出矩陣是3×3。之前講的計算卷積層輸出大小的公式同樣適用於最大池化,即(n+2p-f)/s+1,這個公式也可以計算最大池化的輸出大小。

 

 

 

此例是計算3×3輸出的每個元素,我們看左上角這些元素,注意這是一個3×3區域,因為有3個過濾器,取最大值9。然后移動一個元素,因為步幅是1,藍色區域的最大值是9.繼續向右移動,藍色區域的最大值是5。然后移到下一行,因為步幅是1,我們只向下移動一個格,所以該區域的最大值是9。這個區域也是9。這兩個區域的最大值都是5。最后這三個區域的最大值分別為8,6和9。超參數f=3,s=1,最終輸出如圖所示。

 

以上就是一個二維輸入的最大池化的演示,如果輸入是三維的,那么輸出也是三維的。例如,輸入是5×5×2,那么輸出是3×3×2。計算最大池化的方法就是分別對每個通道執行剛剛的計算過程。如上圖所示,第一個通道依然保持不變。對於第二個通道,我剛才畫在下面的,在這個層做同樣的計算,得到第二個通道的輸出。一般來說,如果輸入是5×5×n_c,輸出就是3×3×n_c,n_c個通道中每個通道都單獨執行最大池化計算,以上就是最大池化算法。

 

另外還有一種類型的池化,平均池化,它不太常用。我簡單介紹一下,這種運算顧名思義,選取的不是每個過濾器的最大值,而是平均值。示例中,紫色區域的平均值是3.75,后面依次是1.25、4和2。這個平均池化的超級參數f=2,s=2,我們也可以選擇其它超級參數。

 

目前來說,最大池化比平均池化更常用。但也有例外,就是深度很深的神經網絡,你可以用平均池化來分解規模為7×7×1000的網絡的表示層,在整個空間內求平均值,得到1×1×1000,一會我們看個例子。但在神經網絡中,最大池化要比平均池化用得更多。

總結一下,池化的超級參數包括過濾器大小f和步幅s,常用的參數值為f=2,s=2,應用頻率非常高,其效果相當於高度和寬度縮減一半。也有使用f=3,s=2的情況。至於其它超級參數就要看你用的是最大池化還是平均池化了。你也可以根據自己意願增加表示padding的其他超級參數,雖然很少這么用。最大池化時,往往很少用到超參數padding,當然也有例外的情況,我們下周會講。大部分情況下,最大池化很少用padding。目前p最常用的值是0,即p=0。最大池化的輸入就是n_H×n_W×n_c,假設沒有padding,則輸出⌊(n_H-f)/s+1⌋×⌊(n_w-f)/s+1⌋×n_c。輸入通道與輸出通道個數相同,因為我們對每個通道都做了池化。需要注意的一點是,池化過程中沒有需要學習的參數。執行反向傳播時,反向傳播沒有參數適用於最大池化。只有這些設置過的超參數,可能是手動設置的,也可能是通過交叉驗證設置的。

除了這些,池化的內容就全部講完了。

最大池化只是計算神經網絡某一層的靜態屬性,沒有什么需要學習的,它只是一個靜態屬性

關於池化我們就講到這兒,現在我們已經知道如何構建卷積層和池化層了。下節課,我們會分析一個更復雜的可以引進全連接層的卷積網絡示例。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM