1 池化層(Pooling layers)
除了卷積層,卷積網絡也經常使用池化層來縮減模型的大小,提高計算速度,同時提高所提取特征的魯棒性。假如輸入是一個 4×4 矩陣,用到的池化類型是最大池化(max pooling),執行最大池化的樹池是一個 2×2 矩陣,即f=2,步幅是 2,即s = 2,執行過程非常簡單,把 4×4 的輸入拆分成不同的區域,這里用不同顏色來標記,對於 2×2的輸出,輸出的每個元素都是其對應顏色區域中的最大元素值,下圖是操作的具體細節:
最大化操作的功能就是只要在任何一個象限內提取到某個特征,它都會保留在最大化的池化輸出里。池化的超級參數包括過濾器大小f和步幅s,常用的參數值為f = 2,s = 2,應用頻率非常高,其效果相當於高度和寬度縮減一半,也有使用f = 3,s = 2的情況。至於其它超級參數就要看你用的是最大池化還是平均池化了,也可以根據自己意願增加表示padding 的其他超級參數,雖然很少這么用,最大池化時,往往很少用到超參數 padding,當然也有例外的情況。
2 卷積神經網絡示例( Convolutional neural network example)
假設,有一張大小為 32×32×3 的輸入圖片,這是一張 RGB 模式的圖片,我們想做手寫體數字識別。32×32×3 的 RGB 圖片中含有某個數字,比如 7,你想識別它是從 0-9 這 10 個數字中的哪一個,我們構建一個神經網絡來實現這個功能。
輸入是 32×32×3 的矩陣,假設第一層使用過濾器大小為 5×5,步幅是 1,padding是 0,過濾器個數為 6,那么輸出為 28×28×6,將這層標記為 CONV1,它用了 6 個過濾器,增加了偏差,應用了非線性函數,可能是 ReLU 非線性函數,最后輸出 CONV1 的結果。然后構建一個池化層,這里我選擇用最大池化,參數 f= 2,s = 2,因為 padding 為 0,現在開始構建池化層,最大池化使用的過濾器為 2×2,步幅為 2,表示層的高度和寬度會減少一半,因此,28×28 變成了 14×14,通道數量保持不變,所以最終輸出為 14×14×6,將該輸出標記為 POOL1。人們在計算神經網絡有多少層時,通常只統計具有權重和參數的層,因為池化層沒有權重和參數,只有一些超參數,這里,我們把 CONV1和 POOL1 共同作為一個卷積,並標記為 Layer1,得到的輸出是 14×14×6。我們再為它構建一個卷積層,過濾器大小為 5×5,步幅為 1,這次我們用 16 個過濾器,最后輸出一個 10×10×16 的矩陣,標記為 CONV2。然后做最大池化,超參數f = 2,s= 2。你大概可以猜出結果,f = 2,s = 2,高度和寬度會減半,最后輸出為5×5×16,標記為POOL2,這就是神經網絡的第二個卷積層,即Layer2。5×5×16 矩陣包含 400 個元素,現在將 POOL2 平整化為一個大小為 400 的一維向量,我們可以把平整化結果想象成這樣的一個神經元集合,然后利用這 400 個單元節點構建下一層。假設每個節點120個神經元,,這就是我們第一個全連接層,標記為 FC3,這 400 個單元與 120 個單元緊密相連,這就是全連接層,這是一個標准的神經網絡,它的權重矩陣為w[3],維度為 120×400。然后我們對這個 120 個單元再添加一個全連接層,這層更小,假設它含有 84 個單元,標記為 FC4。最后,用這 84 個單元填充一個 softmax 單元,如果我們想通過手寫數字識別來識別手寫 0-9 這 10 個數字,這個 softmax 就會有 10 個輸出。
在神經網絡中,另一種常見模式就是一個或多個卷積后面跟隨一個池化層,然后一個或個卷積層后面再跟一個池化層,然后是幾個全連接層,最后是一個 softmax,這是神經網絡的另一種常見模式。卷積層的兩個主要優勢在於參數共享和稀疏連接,一個特征檢測器,如垂直邊緣檢測器用於檢測圖片左上角區域的特征,這個特征很可能也適用於圖片的右下角區域,因此在計算圖片左上角和右下角區域時,你不需要添加其它特征檢測器,假如有一個這樣的數據集,其左上角和右下角可能有不同分布,也有可能稍有不同,但很相似,整張圖片共享特征檢測器,提取效果也很好;有一個3×3的過濾器,在6×6的圖片中,輸出單元(元素 0)僅與 36 個輸入特征中 9 個相連接,而且其它像素值都不會對輸出產生任影響,這就是稀疏連接的概念。