吳恩達深度學習筆記(79)-池化層講解(Pooling layers)

池化層(Pooling layers)

除了卷積層,卷積網絡也

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

吳恩達深度學習筆記(79)-池化層講解(Pooling layers)

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

吳恩達深度學習筆記(79)-池化層講解(Pooling layers)

左上區域的最大值是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。

吳恩達深度學習筆記(79)-池化層講解(Pooling layers)

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

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

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

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

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

吳恩達深度學習筆記(79)-池化層講解(Pooling layers)

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

吳恩達深度學習筆記(79)-池化層講解(Pooling layers)

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

吳恩達深度學習筆記(79)-池化層講解(Pooling layers)

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

吳恩達深度學習筆記(79)-池化層講解(Pooling layers)

目前來說,最大池化比平均池化更常用。但也有例外,就是深度很深的神經網絡,你可以用平均池化來分解規模為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。輸入通道與輸出通道個數相同,因為我們對每個通道都做了池化。需要注意的一點是,池化過程中沒有需要學習的參數。執行反向傳播時,反向傳播沒有參數適用於最大池化。只有這些設置過的超參數,可能是手動設置的,也可能是通過交叉驗證設置的。

吳恩達深度學習筆記(79)-池化層講解(Pooling layers)

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

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

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


分享到:


相關文章: