1. 程式人生 > >deeplearning.ai第四課第一週:卷積神經網路

deeplearning.ai第四課第一週:卷積神經網路

1 計算機視覺

計算機視覺包含的典型任務有:

  • 影象分類;
  • 目標檢測;
  • 影象風格轉換。

計算機視覺任務的特點是輸入資料量較大,對於一副1000 * 1000 * 3的影象而言,需要的輸入神經元數量為3百萬。假如第一隱藏層有1000個神經元,那麼 W [ 1 ]

R 1000 × 3 M i l
l i o n
W^{[1]} \in R^{1000 \times 3Million} ,如此大規模的引數很容易造成神經網路的過擬合,也對引數的儲存要求了很高的記憶體需求。因此需要使用卷積運算降低所需要處理的引數數量。

2 卷積

卷積是卷積神經網路的基本組成部分。

卷積的實現是將卷積核依次沿著影象進行滑動,在任一處進行卷積核和覆蓋影象塊的對應元素相乘再相加的操作。

深度學習的發展就是不再使用手工設計的卷積核與影象進行卷積運算,而是採用有監督的訓練樣本、通過反向傳播逼迫網路自身去學習適合的卷積核。

卷積的定義是需要對卷積核進行翻轉操作的,但是一般在卷積神經網路中都是直接進行對應元素相乘再相加的操作,這其實是“相關”。之所以使用相關而不是卷積是因為一個基於核翻轉的卷積運算的學習演算法所學得的核是對未進行翻轉的演算法學得的核的翻轉,因此在卷積神經網路中使用卷積和相關進行運算學得的核,含義是完全一致的。為了計算的便利性,一般都採用相關代替卷積。

padding
對輸入為n * n的影象應用核大小為k*k的卷積操作後,得到的輸出大小為(n-k+1) * (n-k+1)。如果進行多層這樣的卷積,輸出的尺寸會越來越小。同時,使用普通卷積時,影象邊緣的畫素參與計算的次數遠小於影象中間位置的畫素參與卷積計算的次數。因此,需要對輸入影象進行padding操作以進行影象擴充。

padding操作一般在影象的四周進行尺寸相同的填充0的操作。

假設padding的尺寸為p,則卷積之後得到的輸出為(n + 2p - k +1) * (n + 2p - k +1)。進行padding操作一方面可以防止卷積輸出尺寸減小,另一方面也可以減弱影象邊緣畫素作用被弱化。

根據padding的尺寸大小,卷積可以分為vaild convolution和same convolution兩種。

  • vaild convolution:no padding。輸出就是(n - k +1) * (n - k +1);
  • same convolution:padding的目的是保證卷積前後得到的影象大小是一樣的,padding根據卷積核的大小進行確定,即2p + 1 = k p = k 1 2 \Rightarrow p = \frac{k-1}{2} 。計算機視覺中使用的卷積核尺寸一般為奇數,因此 p 一般為整數。

卷積的stride
stride決定卷積核滑過影象時的移動步長。

原始輸入影象 n * n,卷積核 k * k,padding尺寸 p,stride尺寸s,則卷積輸出的尺寸為: n + 2 p k s + 1 n + 2 p k s + 1 \lfloor \frac{n+2p-k}{s}+1\rfloor * \lfloor \frac{n+2p-k}{s}+1\rfloor 。向下取整是因為只有卷積核完全包含在影象範圍內時才可以進行卷積計算。

多通道卷積–convlution over columes:
進行多通道卷積時,輸入資料的通道數必須和卷積核的通道數一樣。
在這裡插入圖片描述
輸入 n n n c n * n *n_c ,卷積核 k k n c m k*k*n_c*m ,卷積的輸出為 n + 2 p f s + 1 n + 2 p f s + 1 m \lfloor \frac{n+2p-f}{s}+1\rfloor*\lfloor \frac{n+2p-f}{s}+1\rfloor*m m m 表示卷積核的數量。即卷積核必須和輸入資料具有相同的通道數。輸出的通道數為卷積核的數量。

總結:第l個卷積層也是先進行核和輸入資料的卷積操作,然後再加偏差,通過relu啟用函式得到輸出。
假設第 l l 個卷積層:

  • padding大小為 p [ l ] p [ l ] p^{[l]} * p^{[l]}
  • stride大小為 s [ l ] s [ l ] s^{[l]} * s^{[l]}
  • 卷積核數量為 n c [ l ] n_c^{[l]}
  • 輸入大小為 n H [ l 1 ] n W [ l 1 ] n C [ l 1 ] n_H^{[l - 1]} * n_W^{[l - 1]} * n_C^{[l-1]}
  • kernel大小為 k [ l ] k [ l ] n C [ l 1 ] k^{[l]} * k^{[l]}*n_C^{[l-1]}
  • 輸出大小為 n H [ l ] n W [ l ] n C [ l ] = n H [ l 1 ] + 2 p [ l ] k [ l ] s [ l ] + 1 n W [ l 1 ] + 2 p [ l ] k [ l ] s [ l ] + 1 n C [ l ] n_H^{[l]} * n_W^{[l]} * n_C^{[l]} = \lfloor \frac{n_H^{[l-1]}+2p^{[l]}-k^{[l]}}{s^{[l]}}+1\rfloor* \lfloor \frac{n_W^{[l-1]}+2p^{[l]}-k^{[l]}}{s^{[l]}}+1\rfloor*n_C^{[l]}
  • 權重數目為 k [ l ] k [ l ] n C [ l 1 ] n C [ l ] k^{[l]} * k^{[l]}*n_C^{[l-1]}*n_C^{[l]} ;
  • bias數目為 1 1 1 n C [ l ] 1*1*1*n_C^{[l]}
  • 大小為m的樣本batch的啟用值為 m n