吴恩达老师深度学习视频课笔记:卷积神经网络
????????計算機視覺:包括圖像分類(image classification)、目標檢測(object detection)、風格遷移(neural style transfer)等等。
????????邊緣檢測示例:神經網絡的前幾層可以檢測邊緣,然后后面幾層可能檢測到物體的部分,接下來靠后的一些層可能檢測到完整的物體,如下圖示例:
????????在卷積神經網絡術語中,它被稱為過濾器(filter),在論文中,有時它被稱為核(kernel)而不是過濾器(filter)。卷積運算過程,如下圖,用卷積運算實現垂直邊緣檢測:
????????更多邊緣檢測示例:正邊、負邊其實就是由亮到暗與由暗到亮的區別,即邊緣的過渡(edge transitions),如下圖:
????????更多的過濾器,如下圖:通過使用不同的過濾器,可以找出垂直或水平的邊緣。還有其它過濾器,如Sobel過濾器、Scharr過濾器。一般將垂直過濾器,順時針翻轉90度,就會得到水平過濾器。一般垂直過濾器,左邊是正值,中間是0,右邊是負值;而一般水平過濾器,上邊是正值,中間是0,下邊是負值。在深度學習中,你不一定要去使用研究者們推薦的這些過濾器,可以把矩陣中的這9個數字,當成9個參數,并且在之后可以學習使用反向傳播算法,其目標就是理解這9個參數,通過反向傳播,你可以學習另一種濾波器,這種濾波器對于數據的捕捉能力,甚至可以勝過之前任何的濾波器(單純的水平邊緣和垂直邊緣),它可以檢測出45度、75度或73度,甚至是任何角度的邊緣。
????????Padding:有一個n*n的圖像,用一個f*f的過濾器做卷積,那么輸出的結果維即大小就是(n-f+1)*(n-f+1)。按照這種運算會有2個缺點:第一個缺點是每次做卷積操作,你的圖像就會縮小,作了幾次卷次操作,可能會縮小到1*1的大小;第二個缺點是,邊角的像素,這個像素點只會被一個輸出所觸碰或者使用,但是如果在中間的像素點,就會有許多的區域與之重疊,所以那些在角落或者邊緣區域的像素點在輸出中采用較少,意味著你丟掉了圖像邊緣位置的許多信息。為了解決這兩個問題,你可以在卷積操作之前填充所處理的圖像,可以沿著圖像邊緣,在填充一層像素,如下圖,卷積后會得到和原始圖像一樣大小的圖像。習慣上,你可以用0填充,如果p是填充的數量,那么輸出就變成了(n+2p-f+1)*(n+2p-f+1)。
????????至于選擇填充多少個像素,通常有兩個選擇,分別叫做Valid卷積和Same卷積。Valid卷積意味著不填充(no dapping),即p=0。Same卷積意味著填充后你的輸入大小和輸出大小是一樣的,即p=(f-1)/2,如下圖,習慣上,計算機視覺中,f通常是奇數。
????????卷積步長:如下圖,假如輸入圖像為n*n,過濾器為f*f,padding為p,步長(stride)為s,則輸出大小為((n+2p-f)/s+1)*((n+2p-f)/s+1)。如果商不是整數,我們向下取整,即floor函數,這個原則實現的方式是,你只在籃框完全包括在圖像或填充完的圖像內部時才對它進行運算。如果有任意一個藍框移動到了外面,那么你就不要進行相乘操作,這是一個慣例。
????????Convolutions over volumes:在BGR圖像上進行卷積操作,如下圖,依次取過濾器這27個數,然后乘以相應的紅、綠、藍通道中的數字,然后把這些數加起來,就得到了輸出的數。圖像的通道數必須和過濾器的通道數一致。過濾器的參數選擇不同,你就可以得到不同的特征檢測器。按照計算機視覺的慣例,當你的輸入有特定的高、寬和通道數時,你的過濾器可以有不同的高、不同的寬,但是必須有一樣的通道數。理論上,我們的過濾器,只關注紅色通道、或者只關注綠色通道是可行的。
????????Multiplefilters: 如下圖,可以同時使用兩個過濾器,其中一個過濾器可能用來檢測垂直邊緣,另一個過濾器用來檢測水平邊緣,輸出結果為4*4*2。如果你有一個n*n*nc的輸入圖,然后卷積上一個f*f*nc的過濾器,然后得到一個(n-f+1)*(n-f+1)*n’c的輸出,其中n’c為過濾器的個數。在上面這個式子中是假設步長為1并且沒有padding。
????????單層卷積網絡:如下圖,在6*6的BGR圖像上進行卷積操作,有2個3*3*3的過濾器,通過卷積后產生2個4*4的結果,在此結果上加上偏差(bias),再應用非線性激活函數ReLU,再把兩個結果矩陣堆疊起來,最終得到一個4*4*2的矩陣。這就是卷積神經網絡的一層。
????????輸出圖像中的通道數量就是神經網絡中這一層所使用的過濾器數量。過濾器中通道的數量必須與輸入中通道的數量一致。每個過濾器都有一個偏差參數,它是一個實數。如下圖:
????????簡單卷積網絡示例:假設有一個卷積網絡,用來識別輸入的圖像中是否含有貓。輸入圖像的大小為39*39*3,第一層卷積層用3*3的filter來檢測特征,stride為1,padding為0,這層共有10個filters,這層輸出將是37*37*10。第二層也是卷積層用5*5的filter,stride為2,padding為0,這層共有20個filters,輸出將是17*17*20。最后一層卷積層,用5*5的filter, stride為2,這層共有40個filters,輸出將是7*7*40,即1960特征,可以將其平滑(flatten)或展開(unroll)成1960個單元,即輸出一個長向量,那時和logistic回歸或softmax進行計算最終得出神經網絡的預測輸出,如下圖所示。隨著神經網絡計算深度不斷加深,通常開始時圖像會較大,高度和寬度會在一段時間內保持一致,然后隨著網絡深度的加深而逐漸減少,而通道數(numberof channels)在增加。在其它許多卷積神經網絡中也有相似操作。
????????一個典型的卷積網絡通常有三種類型的層:一個是卷積層(Convolution),通常用Conv來標注;一個是池化層(Pooling),經常叫做POOL;還有一個是全連接層(Fully connected),用FC表示。雖然僅用卷積層也有可能構建出很好的神經網絡,但大部分神經網絡架構師依然會添加池化層和全連接層。一般池化層和全連接層比卷積層更容易設計。如下圖所示:
????????池化層:除了卷積層,卷積網絡也經常使用池化層來縮減模型的大小,提高計算速度,同時提高所提取特征的魯棒性。池化類型有最大池化(maxpooling),如下圖所示,在此例中,filter的大小為2,stride位2 ,這兩個是最大池化的超參。最大池化運算的實際作用就是:如果在過濾器中提取到某個特征,那么保留其最大值;如果沒有提取到某個特征,可能不存在這個特征,那么其中的最大值也還是很小。
????????計算卷積層輸出大小的公式同樣適用于最大池化:((n+2p-f)/s)+1,這個公式也可以計算最大池化的輸出大小。計算最大池化的方法就是分別對每個通道執行相同的計算過程,nc個通道中每個通道都單獨執行最大池化運算。
????????平均池化:另外一種類型的池化,它不太常用,選取的不是每個過濾器的最大值,而是平均值,如下圖所示:
????????池化的超級參數包括過濾器大小(filter size)和步長(stride)。其中f=2,s=2應該頻率比較高,其效果相當于高度和寬度縮減一半。你也可以根據自己的意愿增加表示padding的其它超級參數,但是很少這么用。最大池化時,往往很少用到超級參數padding,當然也有例外情況。最大池化的輸入是nh*nw*nc,假設沒有padding,輸出為((nh-f/s)+1)*((nw-f/s)+1)*nc,如下圖所示。需要注意的一點是,池化過程中沒有需要學習的參數。反向傳播沒有參數適用于最大池化。最大池化只是計算神經網絡某一層的靜態屬性。
????????卷積神經網絡示例:假設有一張32*32*3的輸入圖像,如下圖所示,用于手寫體數字識別,想識別它是從0到9這10個數字中的哪一個。讓我們來構建一個神經網絡來實現這個功能。此網絡結構和LeNet-5非常相似。假設第一層使用filter大小為5*5,stride為1,padding為0,filter的個數是6,那么輸出為28*28*6,將這層標記為CONV1,它有6個filter,增加了bias,應用了非線性函數(激活函數),可能是ReLU,最后輸出CONV1的結果。然后構建一個池化層,選用最大池化,超參f=2,s=2,padding=0,最終輸出為14*14*6,將這層標記為POOL1。在卷積網絡文獻中,卷積有兩種分類,一類卷積是一個卷積層和一個池化層一起作為一層;另一類卷積是把卷積層作為一層,而池化層單獨作為一層。人們在計算神經網絡有多少層時,通常只是統計具有權重和參數的層,因此池化層沒有權重和參數,只有一些超級參數。這里采用的是把CONV1和POOL1共同作為一個卷積,并標記為Layer1。接著在構建一個卷積層,filter為5*5,stride為1,padding為0,使用16個filter,輸出一個10*10*16的矩陣,標記為CONV2,然后最大池化,f=2,s=2,輸出為5*5*16的矩陣,標記為POOL2,這是Layer2。現在將POOL2平整化為一個大小為400(即5*5*16)的一維向量。然后利用這400個單元構建下一層。下一層有120個單元,這是第一個全連接層,標記為FC3,此連接層的權重W[3]為(120,400),b[3]為(120,1)。接著再添加一個全連接層,有84個單元,標記為FC4。最后用這84個單元填充一個softmax單元,這個softmax會有10個輸出。
????????在神經網絡中,另一種常見模式就是一個或多個卷積層后跟隨一個池化層,然后一個或多個卷積層后再跟一個池化層,然后是幾個全連接層,最后是一個softmax。
????????神經網絡的激活值形狀(activation shape)、激活值大小(activation size)和參數數量:如上例以32*32*3作為輸入的神經網絡架構,如下圖所示:注意事項:(1)、池化層和最大池化層沒有任何參數;(2)、卷積層的參數相對較少;(3)、許多參數都存在于神經網絡的全連接層;(4)、觀察可發現,隨著神經網絡的加深,激活值size會逐漸變小,如果激活值size下降太快,也會影響網絡性能。許多卷積網絡都具有這些屬性,模式上也相似。
????????Why convolutions:和只用全連接層相比,卷積層的兩個主要優勢在于:參數共享(parameter sharing)和稀疏連接(sparsity of connections)。如下圖所示:
????? ? GitHub:https://github.com/fengbingchun/NN_Test
總結
以上是生活随笔為你收集整理的吴恩达老师深度学习视频课笔记:卷积神经网络的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux下通过gettimeofday
- 下一篇: Shell脚本示例代码