1.9 池化层-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
| 1.8 簡單卷積網絡示例 | 回到目錄 | 1.10 卷積神經網絡示例 |
池化層 (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=2f=2f=2 ,步幅是2,即 s=2s=2s=2 。
這是對最大池化功能的直觀理解,你可以把這個4×4輸入看作是某些特征的集合,也許不是。你可以把這個4×4區域看作是某些特征的集合,也就是神經網絡中某一層的非激活值集合。數字大意味著可能探測到了某些特定的特征,左上象限具有的特征可能是一個垂直邊緣,一只眼睛,或是大家害怕遇到的CAP特征。顯然左上象限中存在這個特征,這個特征可能是一只貓眼探測器。然而,右上象限并不存在這個特征。最大化操作的功能就是只要在任何一個象限內提取到某個特征,它都會保留在最大化的池化輸出里。所以最大化運算的實際作用就是,如果在過濾器中提取到某個特征,那么保留其最大值。如果沒有提取到這個特征,可能在右上象限中不存在這個特征,那么其中的最大值也還是很小,這就是最大池化的直觀理解。
必須承認,人們使用最大池化的主要原因是此方法在很多實驗中效果都很好。盡管剛剛描述的直觀理解經常被引用,不知大家是否完全理解它的真正原因,不知大家是否理解最大池化效率很高的真正原因。
其中一個有意思的特點就是,它有一組超參數,但并沒有參數需要學習。實際上,梯度下降沒有什么可學的,一旦確定了 fff 和 sss ,它就是一個固定運算,梯度下降無需改變任何值。
我們來看一個有若干個超級參數的示例,輸入是一個5×5的矩陣。我們采用最大池化法,它的過濾器參數為3×3,即 f=3f=3f=3 ,步幅為1, s=1s=1s=1 ,輸出矩陣是3×3.之前講的計算卷積層輸出大小的公式同樣適用于最大池化,即 n+2p?fs+1\frac{n+2p-f}{s}+1sn+2p?f?+1 ,這個公式也可以計算最大池化的輸出大小。
此例是計算3×3輸出的每個元素,我們看左上角這些元素,注意這是一個3×3區域,因為有3個過濾器,取最大值9。然后移動一個元素,因為步幅是1,藍色區域的最大值是9.繼續向右移動,藍色區域的最大值是5。然后移到下一行,因為步幅是1,我們只向下移動一個格,所以該區域的最大值是9。這個區域也是9。這兩個區域的最大值都是5。最后這三個區域的最大值分別為8,6和9。超參數 f=3,s=1f=3,s=1f=3,s=1 ,最終輸出如圖所示。
以上就是一個二維輸入的最大池化的演示,如果輸入是三維的,那么輸出也是三維的。例如,輸入是5×5×2,那么輸出是3×3×2。計算最大池化的方法就是分別對每個通道執行剛剛的計算過程。如上圖所示,第一個通道依然保持不變。對于第二個通道,我剛才畫在下面的,在這個層做同樣的計算,得到第二個通道的輸出。一般來說,如果輸入是5×5×ncn_cnc?,輸出就是3×3×ncn_cnc? , ncn_cnc? 個通道中每個通道都單獨執行最大池化計算,以上就是最大池化算法。
另外還有一種類型的池化,平均池化,它不太常用。我簡單介紹一下,這種運算顧名思義,選取的不是每個過濾器的最大值,而是平均值。示例中,紫色區域的平均值是3.75,后面依次是1.25、4和2。這個平均池化的超級參數 f=2,s=2f=2,s=2f=2,s=2 ,我們也可以選擇其它超級參數。
目前來說,最大池化比平均池化更常用。但也有例外,就是深度很深的神經網絡,你可以用平均池化來分解規模為7×7×1000的網絡的表示層,在整個空間內求平均值,得到1×1×1000,一會我們看個例子。但在神經網絡中,最大池化要比平均池化用得更多。
總結一下,池化的超級參數包括過濾器大小 fff 和步幅 sss ,常用的參數值為 f=2,s=2f=2,s=2f=2,s=2 ,應用頻率非常高,其效果相當于高度和寬度縮減一半。也有使用 f=3,s=2f=3,s=2f=3,s=2 的情況。至于其它超級參數就要看你用的是最大池化還是平均池化了。你也可以根據自己意愿增加表示padding的其他超級參數,雖然很少這么用。最大池化時,往往很少用到超參數padding,當然也有例外的情況,我們下周會講。大部分情況下,最大池化很少用padding。目前 ppp 最常用的值是0,即 p=0p=0p=0 。最大池化的輸入就是 nH?nW?ncn_H*n_W*n_cnH??nW??nc? ,假設沒有padding,則輸出 ?nH?fs+1???nW?fs+1??nc\lfloor \frac{n_H-f}{s}+1 \rfloor*\lfloor \frac{n_W-f}{s}+1 \rfloor*n_c?snH??f?+1???snW??f?+1??nc? 。輸入通道與輸出通道個數相同,因為我們對每個通道都做了池化。需要注意的一點是,池化過程中沒有需要學習的參數。執行反向傳播時,反向傳播沒有參數適用于最大池化。只有這些設置過的超參數,可能是手動設置的,也可能是通過交叉驗證設置的。
除了這些,池化的內容就全部講完了。最大池化只是計算神經網絡某一層的靜態屬性,沒有什么需要學習的,它只是一個靜態屬性。
關于池化我們就講到這兒,現在我們已經知道如何構建卷積層和池化層了。下節課,我們會分析一個更復雜的可以引進全連接層的卷積網絡示例。
課程板書
| 1.8 簡單卷積網絡示例 | 回到目錄 | 1.10 卷積神經網絡示例 |
總結
以上是生活随笔為你收集整理的1.9 池化层-深度学习第四课《卷积神经网络》-Stanford吴恩达教授的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1.8 简单卷积网络示例-深度学习第四课
- 下一篇: 1.10 卷积神经网络示例-深度学习第四