1. 程式人生 > >吳恩達深度學習筆記(deeplearning.ai)之卷積神經網路(CNN)(上)

吳恩達深度學習筆記(deeplearning.ai)之卷積神經網路(CNN)(上)

1. Padding

在卷積操作中,過濾器(又稱核)的大小通常為奇數,如3x3,5x5。這樣的好處有兩點:

  • 在特徵圖(二維卷積)中就會存在一箇中心畫素點。有一箇中心畫素點會十分方便,便於指出過濾器的位置。

  • 在沒有padding的情況下,經過卷積操作,輸出的資料維度會減少。以二維卷積為例,輸入大小 n×nn×n,過濾器大小f×ff×f,卷積後輸出的大小為(n−f+1)×(n−f+1)(n−f+1)×(n−f+1)。
  • 為了避免這種情況發生,可以採取padding操作,padding的長度為p​p​,由於在二維情況下,上下左右都“新增”長度為p​p​的資料。構造新的輸入大小為(n+2p)×(n+2p)​(n+2p)×(n+2p)​ , 卷積後的輸出變為(n+2p−f+1)×(n+2p−f+1)​(n+2p−f+1)×(n+2p−f+1)​。
  • 如果想使卷積操作不縮減資料的維度,那麼pp的大小應為(f−1)/2(f−1)/2,其中ff是過濾器的大小,該值如果為奇數,會在原始資料上對稱padding,否則,就會出現向上padding 1個,向下padding 2個,向左padding 1個,向右padding 2個的情況,破壞原始資料結構。

2. Stride

卷積中的步長大小為ss,指過濾器在輸入資料上,水平/豎直方向上每次移動的步長,在Padding 公式的基礎上,最終卷積輸出的維度大小為:

⌊n+2p−fs+1⌋×⌊n+2p−fs+1⌋⌊n+2p−fs+1⌋×⌊n+2p−fs+1⌋

⌊⌋⌊⌋符號指向下取整,在python 中為floor地板除操作。

3. Channel

通道,通常指資料的最後一個維度(三維),在計算機視覺中,RGB代表著3個通道(channel)。

  • 舉例說明:現在有一張圖片的大小為6×6×36×6×3,過濾器的大小為3×3×nc3×3×nc, 這裡ncnc指過濾器的channel大小,該數值必須與輸入的channel大小相同,即nc=3nc=3。
  • 如果有kk個3×3×nc3×3×nc的過濾器,那麼卷積後的輸出維度為4×4×k4×4×k。注意此時p=0,s=1p=0,s=1,kk表示輸出資料的channel大小。一般情況下,kk代表kk個過濾器提取的k個特徵,如k=128k=128,代表128個3×33×3大小的過濾器,提取了128個特徵,且卷積後的輸出維度為4×4×1284×4×128。

在多層卷積網路中,以計算機視覺為例,通常情況下,影象的長和寬會逐漸縮小,channel數量會逐漸增加。

4. Pooling

  • 除了卷積層,卷積網路使用池化層來縮減資料的大小,提高計算的速度 ,同時提高所提取特徵的魯棒性。 池化操作不需要對引數進行學習,只是神經網路中的靜態屬性。
  • 池化層中,資料的維度變化與卷積操作類似。池化後的channel數量與輸入的channel數量相同,因為在每個channel上單獨執行最大池化操作。
  • f=2, s=2,相當於對資料維度的減半操作,f指池化層過濾器大小,s指池化步長。

5. 卷積神經網路(CNN)示例

課堂筆記中關於簡單卷積神經網路的介紹:

一個用於手寫數字識別的CNN結構如下圖所示:

  • 該網路應用了兩層卷積,並且在第二個池化層之後又接了幾個全連線層,這樣做的目的是避免某一層的啟用值數量減少的太快,具體原因後文解釋。

與卷積神經網路的引數數量計算相關的問題:

該手寫數字識別的CNN具體引數數量視覺化如下所示:

  • 從圖中可以發現,卷積層的引數數量較小,大部分引數集中在全連線層。而且隨著網路層的加深,啟用值數量逐漸減少,如果啟用值數量下降太快,會影響網路的效能。
  • 因此需要構建多個全連線層,而不是一個全連線層一步到位

6. 卷積層的好處

與只用全連線層相比,卷積層的主要優點是引數共享稀疏連線,這使得卷積操作所需要學習的引數數量大大減少。