作者:szx_spark
1. Padding
在卷積操作中,過濾器(又稱核)的大小通常為奇數,如3x3,5x5。這樣的好處有兩點:
-
在特征圖(二維卷積)中就會存在一個中心像素點。有一個中心像素點會十分方便,便於指出過濾器的位置。
-
在沒有padding的情況下,經過卷積操作,輸出的數據維度會減少。以二維卷積為例,輸入大小 \(n\times n\),過濾器大小\(f\times f\),卷積后輸出的大小為\((n-f+1)\times(n-f+1)\)。
-
為了避免這種情況發生,可以采取padding操作,padding的長度為\(p\),由於在二維情況下,上下左右都“添加”長度為\(p\)的數據。構造新的輸入大小為\((n+2p)\times(n+2p)\) , 卷積后的輸出變為\((n+2p-f+1)\times(n+2p-f+1)\)。
-
如果想使卷積操作不縮減數據的維度,那么\(p\)的大小應為\((f-1)/2\),其中\(f\)是過濾器的大小,該值如果為奇數,會在原始數據上對稱padding,否則,就會出現向上padding 1個,向下padding 2個,向左padding 1個,向右padding 2個的情況,破壞原始數據結構。
2. Stride
卷積中的步長大小為\(s\),指過濾器在輸入數據上,水平/豎直方向上每次移動的步長,在Padding 公式的基礎上,最終卷積輸出的維度大小為:
\(\left \lfloor \right\rfloor\)符號指向下取整,在python 中為floor地板除操作。
3. Channel
通道,通常指數據的最后一個維度(三維),在計算機視覺中,RGB代表着3個通道(channel)。
- 舉例說明:現在有一張圖片的大小為\(6\times 6\times 3\),過濾器的大小為\(3\times 3\times n_c\), 這里\(n_c\)指過濾器的channel大小,該數值必須與輸入的channel大小相同,即\(n_c=3\)。
- 如果有\(k\)個\(3\times 3\times n_c\)的過濾器,那么卷積后的輸出維度為\(4\times 4\times k\)。注意此時\(p=0, s=1\),\(k\)表示輸出數據的channel大小。一般情況下,\(k\)代表\(k\)個過濾器提取的k個特征,如\(k=128\),代表128個\(3\times 3\)大小的過濾器,提取了128個特征,且卷積后的輸出維度為\(4\times 4\times 128\)。
在多層卷積網絡中,以計算機視覺為例,通常情況下,圖像的長和寬會逐漸縮小,channel數量會逐漸增加。
4. Pooling
- 除了卷積層,卷積網絡使用池化層來縮減數據的大小,提高計算的速度 ,同時提高所提取特征的魯棒性。 池化操作不需要對參數進行學習,只是神經網絡中的靜態屬性。
- 池化層中,數據的維度變化與卷積操作類似。池化后的channel數量與輸入的channel數量相同,因為在每個channel上單獨執行最大池化操作。
- f=2, s=2,相當於對數據維度的減半操作,f指池化層過濾器大小,s指池化步長。
5. 卷積神經網絡(CNN)示例
課堂筆記中關於簡單卷積神經網絡的介紹:
一個用於手寫數字識別的CNN結構如下圖所示:
- 該網絡應用了兩層卷積,並且在第二個池化層之后又接了幾個全連接層,這樣做的目的是避免某一層的激活值數量減少的太快,具體原因后文解釋。
與卷積神經網絡的參數數量計算相關的問題:
該手寫數字識別的CNN具體參數數量可視化如下所示:
- 從圖中可以發現,卷積層的參數數量較小,大部分參數集中在全連接層。而且隨着網絡層的加深,激活值數量逐漸減少,如果激活值數量下降太快,會影響網絡的性能。
- 因此需要構建多個全連接層,而不是一個全連接層一步到位。
6. 卷積層的好處
與只用全連接層相比,卷積層的主要優點是參數共享和稀疏連接,這使得卷積操作所需要學習的參數數量大大減少。