1. 程式人生 > >吳恩達《深度學習》第四課第一週筆記

吳恩達《深度學習》第四課第一週筆記

卷積神經網路——卷積神經網路

一、計算機視覺

1.計算機視覺的具體應用:影象識別、目標檢測、圖片風格轉換。在應用計算機視覺時要面臨一個挑戰:資料輸入大。例如:一張畫質為1000*1000*3的圖片,其所構建的神經網路中輸入特徵將是300W,這將消耗巨大的記憶體,因此要處理這樣龐大的神經網路,必須使用卷積技術來構建神經網路。

二、邊緣檢測

1卷積計算:卷積計算作為卷積神經網路的基礎,其最基本的運用是在邊緣檢測中,我們來看看這個卷積過程是如何實現的。

假設左側6X6的矩陣是圖片A,中間的3X3矩陣是卷積計算中的一個重要概念稱為過濾器(filter)也稱“核”,經過卷積運算後圖片A轉化成右側4X4矩陣假設其為圖片B,這個過程中卷積計算的重要作用是將較大圖片A轉化為較小圖片B。卷積計算的具體過程如圖中綠色字型所示,將過濾器中的元素逐一和圖片A最左上角的一個3X3矩陣運算得到圖片B第一個值,依次類推。

2.為什麼卷積計算可以進行垂直邊界檢測

我們知道影象是有RGB值組成,值得大小決定了顏色的深淺,因此,我們可以將上圖中的三個矩陣轉化成具有色彩的圖片進行說明這個邊界檢測的實現過程,如下圖。

三、邊緣檢測(續)

1.從上節可以使用過濾器(vertical)可以進行垂直邊緣檢測,那麼我們可以推出使用過濾器(horizontal)可以進行水平邊緣檢測,兩種過濾器(核)見下圖

       

2.常見的過濾器(核)形式:sobel filter,scharr filter,如下圖

當然我們可以將過濾器中的9個數字當做九個引數[w1,w2,...,w9],然後神經網路的反向傳播來去學習得到這九個引數,這樣一來就可以進行各種角度的邊緣檢測,這種思路已經成為計算機視覺領域的主流方法。

四、padding

1.padding:卷積的基本操作,卷積的缺點(1)每次卷積操作影象會縮小;(2)邊角處的畫素點或者邊緣畫素點會被較少使用,這意味著會丟失邊緣資訊。所以為了解決這兩個問題,在卷積之前要進行填充(padding),比如一個6X6的影象在padding之後變成8X8的影象,經過3X3的卷積,得到了6X6的影象,這樣影象大小沒有縮小,邊緣畫素點也沒有丟失。

通常padding的填充值為0,填充層數P=1.

2.填充畫素的選擇:valid 和same卷積

(1)valid 卷積:不需padding

(2)same卷積:使卷積後的輸出與輸入影象大小相同,此時通過選擇過濾器的大小(即fxf的值)可以保證輸出與輸入大小相同:p = ( f - 1) / 2.在計算機視覺中f通常為奇數。

3.我們在確定p的取值時有三種方式:(1)給定p值;(2)使用valid卷積,則p=0;(3)使用same卷積,則p值為(f-1)/2

五、卷積步長(stride)

1.如果在卷積操作中設定步長s,則輸出矩陣大小為 [(n +2*p -f)/ s ] +1,如果不能整除,則進行floor操作(向下取整)

2.在深度學習中的卷積操作其實和數學定義中的有所區別,應稱互相關而非卷積,但由於習慣還是稱之為卷積。數學定義中在做乘積前需要對過濾器進行翻窗,見下圖。

六、立體空間的卷積操作

1.對RGB影象的卷積操作,影象的三個維度分別是(高,寬,通道數(深度)),此時影象和過濾器的通道數需要保持一致。

2.多過濾器的卷積操作

七、如何構建CNN的卷積層——單層卷積網路

1.在上一節中我們瞭解到一個6x6x3的輸入影象經過卷積操作後變成4x4x2的輸出,如果把這個過程嵌入到神經網路,其類似於前向傳播的過程,即Z[1] = W[1] x a[0] + b[1],其中a[0] = X,代表6x6x3的輸入影象。

2.避免過擬合(less prone to over-fitting):在cnn中,不論輸入的影象有多大,1000x1000或者2000x2000,某層卷積的引數始終不變,使用過濾器來提取如垂直邊緣、水平邊緣或者其他特徵時,即使圖片很大,但引數很少,這種特性稱為“避免過擬合”

3.卷積層的標記

八、深度卷積神經網路示例

1.構建一個簡單的深層CNN網路,各卷積層引數如下圖所示。從圖中可見超引數很多,因此在構建CNN時引數的選擇是很重要的一個問題。在CNN中隨著層數的深入,影象的維度會逐漸減小(如:39-37-17-7),但是通道數量逐層增加(3-10-20-40)

2.一個典型的卷積網路通常包括3層:卷積層、池化層、全連線層。

九、池化層

1.池化層的作用:縮減模型的大小,提高計算速度,同時可提高所提取特徵的魯棒性。

2.max-pooling:比較常用的池化型別,實現的過程見下圖。其功能是隻要在任何一個象限內提取到某一個特徵值,就把它保留在最大池化輸出裡,最大化運算的實際作用(直觀理解):如果在過濾器中提取到某個特徵,那麼保留其最大值;如果沒有提取到這個特徵,(可能在該象限裡不存在這個特徵,那其最大值也很小)。

通常池化過程中需要設定的兩個引數:f 和 s,一旦f 和 s確定了,之後再不需反向傳播學習什麼引數。在此案例中,f=2, s=1。下面我們來看一個更復雜的案例。

3. Average Pooling:平均值池化(不常用)

該方法中f = 2,s = 2,通常最大池化操作比平均池化應用的更多,但是在非常深層CNN中使用平均池化。

4.總結:

(1)在最大池化操作時通常不使用padding

(2)最大池化的輸入:n_H, n_W, n_c       輸出為:math.floor( (n_H - f) / s   +1   ), math.floor( (n_W - f) / s   +1   ), n_c  

(3)在反向傳播是沒有需要學習的引數

(4)最大池化只是計算神經網路某一層的靜態屬性。

十、CNN示例

1.示例(類似LeNet-5):

中間層的定義,在CNN中有的文獻將卷積層和pooling層合起來稱為一層;有的文獻將二者分開各稱一層。我們知道在神經網路劃分層時通常是按照權重來劃分的,按照這個邏輯由於pooling層沒有權重,因此應將卷積層和pooling層合起來稱為一層。

2.超引數的選擇有個小技巧:多參閱文獻和資料,看看別人在取得較好效果時是如何選取的超引數,或者直接使用該架構,儘量不要全部通過反向出傳播學習。

3.隨著神經網路的加深,啟用層size逐漸下降,但是下降得太快也會影響網路效能。

十一、為什麼使用卷積

1.卷積或卷積網路在計算機視覺中表現良好的原因:與只用全連線層相比,卷積有兩個優勢:引數共享和稀疏連線,由於這兩種特性的存在還可以防止神經網路發生過擬合。

2.卷積神經網路善於捕捉平移不變。通過觀察可以發現,向右平移兩個畫素圖片中的影象(比如貓)仍然清晰可見,這正是因為神經網路的卷積結構即使移動幾個畫素,圖片依然具有非常相似的特性,應該屬於同樣的輸出標記。實際上我們用一個過濾器生成各層中圖片的所有畫素值,希望網路通過自動學習變得更加強壯,以便取得更好的平移不變屬性。