吳恩達Deeplearning.ai 知識點梳理(course 4,week 1)

Computer Vision

  Computer Vision有兩個具體的問題類型:

  • Classification,例如分類圖片中有沒有貓
  • Object Detection,例如識別路上的汽車並圈起來

  對於這些Computer Vision的問題,神經網絡在處理的時候,最主要的問題是:規模變大。例如一個1000x1000x3,一個圖片就是3M的數據量。那麼對於一箇中間層,假如一箇中間層是1000個neuros,那麼W 矩陣尺寸就是(1000, 3M),假如是32位浮點數,12GB內存沒了,這還只是一層……
  所以原有的神經網絡就不能這樣使用了,那麼就需要引入卷積層。

邊緣檢測

  圖像的邊緣檢測這塊其實就是數字圖像處理的內容了。一些邊緣檢測算子,例如豎直邊緣提取的filter:

111000111

水平邊緣提取的filter:

101101101

sobel算子和schhar算子

121000121

31030003103

附上一些關於sobel算子和scharr算子的一些額外內容:
https://stackoverflow.com/questions/17078131/why-sobel-operator-looks-that-way
https://blogs.mathworks.com/steve/2006/10/04/separable-convolution/

Valid, Padding and Stride Convolution

  • Valid:正正常常的nh×nw 圖像和f×f 進行卷積,輸出結果是(nhf+1)×nwf+1) 。因爲filter的半徑是f12 ,需要把半徑減掉,兩邊都剪掉就是現在這個結果。

  • Padding:在邊緣進行補足,使得最後輸出結果還是nh×nw ,那麼就是nw+2pf+1=nw ,那麼p=f12 ,其實就是把濾波器的半徑補上,兩邊都補半徑。

  • Stride:就是中間每s個卷積一次,那麼最後輸出的結果尺寸就是nw+2pfs+1×nh+2pfs+1 。推導過程其實很簡單,對於n×n 來說吧,能用的像素是N=n+2pf+1 個上邊已經推導了,然後N 如果能夠整除s,那麼就是N/s個,如果不能整除,那麼就是N/s+1 ,所以這兩種最後可以歸併爲(N1)/s+1

Volume Convolution and Multiple Filters

  如圖所示,對於一個RGB的圖像,filter一般都是3通道的,做了element wise multiplication之後總體sum,所以例子中6x6x3卷積上3x3x3之後會得到一個4x4的圖像。當希望用多個filters時,則是列舉好多個filter一起卷積,然後把結果堆疊起來。

One Convolutional Layer

幾個要點:

  • RGB圖像作爲a[0]
  • Z[1] 是類似於全聯通的w[1]a[0] ,然後會加上一個常數項b
  • 然後加上ReLU作爲g() ,得到a[1]=g(z[1])

一個例子是:如果一個卷積層是有10個3x3x3濾波器,那麼這一層的參數值是多少?
答案是:280,因爲10個濾波器是270個參數,加上10個bias/b,一共280。值得注意的是,這一層無論輸入是多大的圖片,無論是64x64還是1000x1000,都是這麼多參數。

Notations / Convetions

ConvNet Example

這個裏邊沒啥特別的。

Pooling layer 池化

Pooling有兩種:

  • Max Pooling
  • Average Pooling

Max Pooling 用的比較多,其實就相當於極大值濾波(非線性濾波的一種),所以也一樣有n+2pfs+1 這個關係。
爲啥要用Max Pooling,到目前爲止沒有人能說清楚(Andrew Ng說的),Dr. Ng給出的一個通俗解釋就是:假如在某一層的Max Pooling的輸入是一個4x4的圖像,你可以把它認爲成是某一類特徵在空間上的分佈。這個特徵可以是各種各樣的,比如一個豎的邊緣,又或者是一個貓的眼睛,又或者是貓的鬍鬚等等。一個比較大的數,表示的是某一類特定的特徵檢測到了,而這個比較大的數所在的位置,比方說是右上角,那麼就可以說右上角存在着這個特徵。所以max pooling做的事就是:如果在某一個位置上檢測到了某類特徵,那麼就在這個位置上(或者相對位置,比方說右上角)把這個特徵保留起來;如果在某些區域沒有某類特徵,那麼取了最大值也很小,代表了這個區域上就沒有某一類特徵。

額,上邊是譯文,通俗點說就是,比方說貓的一組特徵是眼睛,眉毛和耳朵,這個眼睛眉毛和耳朵應該在左上角,那麼檢測到眼睛、或者檢測到耳朵了,左上角的某一個值就比較大。取最大值之後就會把左上角的特徵傳遞給下一層(一個大區域縮成一個pixel)。而假如在某個區域啥都沒檢測到,那麼就說明最大的那個值,也很小,那麼就把這個小數傳遞給下一層。

不過Dr. Ng也說,其實人們用max pooling的原因,主要是因爲在實驗中它好用。

Average Pooling
這個很少很少用,不過Dr. Ng說了一個例子,就是當網絡非常非常深的時候,比方說到了一個4x4x1000的層,那麼就把這個層給平均了,得到一個1000的向量。

一個示例(LeNet-5)

可以看到,這個裏邊有很多超參數,一般來說,不要一上來就自己去設置超參數,建議先用已有的結構來做。每一層的output的數值量不要下降的太快,否則性能不好。

爲什麼要用卷積?

  • Parameter Sharing: 對於一個特徵提取器(濾波器)在圖像的一個地方管用,那麼一般也會在另一個地方管用。比方說豎直邊緣檢測濾波器。
  • Sparsity Connections
    其實就每一個卷積計算結果而言,跟它有關的也就是那3x3個數。其他地方的數跟他沒關係。(不過沒講爲啥這樣好。。。)

另外還有就是卷積會帶來平移不變性,shift invariance。也就是卷積會在圖像平移了幾個像素之後,還是帶來相似的特徵。

習題精選

  in lecture we talked about “parameter sharing” as a benefit of using convolutional networks. Which of the following statements about parameter sharing in ConvNets are true? (Check all that apply.)
[√] It reduces the total number of parameters, thus reducing overfitting.
[x] It allows gradient descent to set many of the parameters to zero, thus making the connections sparse.
[√] It allows a feature detector to be used in multiple locations throughout the whole input image/input volume.
[x] It allows parameters learned for one task to be shared even for a different task (transfer learning).

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章