卷積神經網絡.基礎知識

本文是根據吳恩達大仙^_^的卷積神經網絡課程總結的筆記

注:在數學上,卷積操作一般之前都會存在一個對filter做翻轉的操作,但是我們在深度學習上的卷積並沒有對filter做翻轉,深度學習上所說的卷積操作實際上應該叫交叉相關,但是大部分深度學習文獻都將其稱作卷積,所以我們在根據這條約定俗成的規則將其稱作卷積操作,對於是否翻轉對於深度學習領域來說並不重要,但是翻轉在信號處理等領域卻有着重要的作用。

1.Padding

中文意思爲 填充

分析上面的卷積操作:

左邊我們輸入的圖像的大小爲 6*6, filter的大小爲 3*3,按照一般的卷積操作(這裏假設沒有提出padding、stride的概念):

我們得到的結果輸出維度爲 (6-3+1)*(6-3+1),即 4*4

按照上面的操作我們會發現這樣操作會有兩個缺陷:

1.輸出維度逐漸縮小------輸入圖像經過一次卷積過後,你的圖像將會從 6*6 降維到 4*4,那如果圖像連續經過多次卷積,輸出圖像的維度將會非常非常小,甚至輸出維度降維 1*1,但是並不是每次卷積我們都想要將圖像維度縮小(例如我們在做same conv時)

2.丟失忽略角落邊界圖像信息------輸入圖像角落或者邊緣上的像素在一次卷積過程中只被使用一次,而在圖像中間的像素點則會在一次卷積過程中多次被filter所重疊計算,所以相對而言,角落或者邊界上的像素被使用的次數少很多,這樣會導致最終卷積的結果會丟失忽略很多靠近圖片邊界的圖像信息

所以,爲了解決上面的兩個問題,引入了 padding 這一概念,即在 是使用卷積操作前,在輸入圖像的四面邊緣填充1個像素大小的額外邊緣,如下圖所示:

n=8,即 變成了 一個 8*8 的圖片經過一個 3*3的filter卷積,得到輸出圖像維度變成 6*6,而不是4*4,這樣我們通過padding保持了圖片的原始大小 6*6。

因爲padding是在輸入圖像的邊緣額外填充了p圈,也就是輸入圖像維度變成了  (n+2p)*(n+2p)(n+2p)*(n+2p)

所以我們得到的輸出圖像維度大小爲   (n+2p-f+1) * (n+2p-f+1)

對於需要填充數字p的選擇 ,我們有兩個常見的選擇: valid convolution、same convolution

1.valid convolution:

有效卷積,基本意思是 沒有填充,即 p = 0

2.same convolution:

選擇的填充將使得輸出大小維度 等於 輸入大小維度,即  n+2p-f+1 = n    ====>     p=\frac{f-1}{2}.

在計算機視覺當中,f基本上都是使用奇數(一般1*1、3*3 、5*5、7*7),極少數是偶數大小的,導致這種現象的一般有兩個原因:

1.如果f是偶數,將會導致一些不對稱的填充;只有當f是奇數時,這種same 卷積纔會產生,在四周有相同的維度的一個自然的填充區域,而不是在左邊多填充在右邊少填充的情況

2.其次在奇數大小的filter,都會有一箇中心位置,一般稱作中心像素,這樣就可以描述filter的位置

2. stride

中文意思是步幅

如上所示的例子,我們將stride設置爲2,即步長爲2,filter會移動兩個像素單位。

所以我們對 7*7 的輸入圖像,使用一個3*3的filter做卷積操作,stride爲2,默認的padding = 0,得到的輸出結果維度爲

(\frac{7+0-3}{2}+1) * (\frac{7+0-3}{2}+1),即 3*3

3.卷積的操作的通用公式:

對於一個n*n大小的輸入圖片,使用一個大小爲 f*f 的filter,其中padding爲p,卷積stride爲 s,得到的輸出結果的維度爲:

(\frac{n+2p-f}{s}+1)*(\frac{n+2p-f}{s}+1) 

這裏會存在一個問題,如果前面的除法中分子不能被分母整除怎麼辦?這裏一般都是向下取整floor(z),即最接近z的小於z的整數

之所以這樣是因爲在filter在移動過程中肯定是不能夠超過輸入圖像自身範圍或其填充區域範圍的。

例如上面的 7*7 的輸入圖像,使用一個3*3的filter做卷積操作,stride爲3,padding=0,得到的輸出結果維度只能是(7+0-3)/3+1,即維度爲2*2,而不會是3*3

4. RGB圖像的卷積操作

在實際應用中,我們輸入的圖像一般不會是灰度圖像而是RGB彩色圖像

例如如上的輸入圖像的維度爲 6*6*3(其中6表示輸入圖像的寬高,3表示是RGB三通道),filter爲3*3*3(filter中的通道數必須和輸入圖像維度的通道數一致,輸入圖像爲RGB三通道,那麼filter同樣也有類似的RGB三通道參數),輸出圖像維度爲 4*4*1(通道數由filter的數量來決定的,這裏只使用了一個filter,所以通道數爲1)

這裏注意到filter的參數爲3*3*3=27個,其每一層的參數與輸入圖像的每一層數據進行相乘求和,最終將三層的求和結果相加,得到輸出圖像上了像素點值;接着正常的將filter移動s個步長,進行下一個點輸出計算,以此類推,最終得到了最終的輸出圖像且維度爲4*4*1.

這裏爲什麼會要求filter的通道數與輸入圖像的通道數一致呢?

我們假設一種場景,輸入通道爲RGB三通道的,我們的filter的通道也爲RGB三通道,我們可以針對輸入圖像做一些相關操作,例如,我們想檢測輸入圖像RGB中的紅色通道邊緣,那我們可以將filter自身的GB通道參數均設置爲0,僅設置R通道相關參數,這樣疊加三個通道的filter就可以用來檢測輸入圖像紅色通道的垂直水平邊緣了。

如果我們想既檢測垂直邊緣有檢測水平邊緣等多種圖像特徵時,我們需要同時使用多個filter,即使用多個filter來檢測輸入圖像中的多個特徵!具體如下:

這裏使用了一個檢測垂直邊緣的filter和一個檢測水平邊緣的filter,輸入圖像和每個filter做卷積都會得到一個4*4的輸出,兩個filter最終會得到兩個4*4的輸出,疊加在一起則就是最終的輸出圖像維度爲 4*4*2(這裏的輸出維度2表示使用了2個filter)

這裏我們總結一下:

輸入圖像維度爲 N*N*Nc(前面兩項爲圖像的寬、高,Nc表示通道數)

filters:維度爲f*f*Nc*Nf(前面兩項爲filter的寬、高,Nc表示filter的通道數,該數與輸入圖像通道數保持一致,Nf表示filter的數量) 這裏的padding=0,stride = 1

輸出圖像維度爲 (N-f+1)*(N-f+1)*Nf  (這裏的通道數也就是filters的數量)

5.構建單層卷積神經網絡

如上圖所示:

對於圖中的輸入圖像6*6*3,和第一個3*3*3維度的filter做卷積,得到第一個4*4的輸出;應用第二個卷積filter得到了另一個4*4的輸出,

最終我們需要把這些輸出變成單層卷積神經網絡,還需要對每一個輸出添加一個偏差bias(也就是對前面每一個卷積得到的16個數每個均需要加上相同的偏差,偏差爲實數),然後我們可以繼續添加一些非線性轉換 ReLU。最終通過添加偏差和非線性轉換得到一個4*4的矩陣輸出;對於下面的矩陣同樣也是加上一個不同的偏差值以及應用非線性處理函數得到另一個4*4的矩陣輸出;像之前一樣,最後將兩個矩陣疊加在一起得到一個4*4*2的輸出;如上就是卷積神經網絡的一層了。

現在將上面的這個例子與普通的非卷積單層前向傳播神經網絡對應起來,

z^{[1]} = W^{[1]} * a^{[0]} + b^{[1]}

a^{[1]} = g(z^{[1]})

在前面的例子中,我們可以看到輸入即爲 a^{[0]},也就是 x

filters 的作用類似於 W^{[1]}

b^{[0]} 表示偏差,例如這裏的 b1 、b2

g() 表示 非線性處理函數,例如ReLU函數等

a^{[1]} 成爲了下一層神經網絡的激活函數

6.summary

下面一張圖總結的是一層卷積神經網絡的各類參數:

這裏說明一下Activations:如果應用的是向量化實現或者批量梯度下降,也就是說有多個輸入圖片,那麼輸出A^{[l]}爲 m*n*n*Nc

7.卷積層、池化層、全連接層

卷積層、池化層 全連接層

一般我們使用卷積層就可以設計一個效果很好的神經網絡模型(前面講的都是卷積層),但是大多數神經網絡架構都會包含幾個pooling層和FC全連接層,且池化層和全連接層一般比卷積層簡單一些

7.1 池化層

一般我們使用池化層可以減小輸出圖像數據量來提高計算速度,並使一些特徵的檢測功能更加強大

a. Max Pooling 最大池化層

如上,它的超參數(hyperparameters)爲 f=2, s=2,它沒有任何參數需要來訓練學習。

對於我們在做max pooling,其類似於做卷積操作,只是不是將filter中的各個參數做對應乘法,只是挑選其對應區域的最大值而已,所以它的filter中其實也沒有任何參數

上面做最大池化使用的超參數爲f=3,s=1

b.Average Pooling 平均池化層

平均池化與最大池化不同點就是在filter對應的區域做平均計算而不是取最大值,但是在大多數的卷積神經網絡架構中使用最大池化的比較多!唯一的例外是有時候在深度非常大的神經網絡,我們可以使用平均池化來合併某一個輸出對象;如7*7*1000->1*1*1000

總結:

無論是最大池化還是平均池化我們用的就是兩個不需要訓練學習的超參數(通常是人工設定或使用交叉檢驗):

f:filter size

s:stride

一般還有一個p:padding,這個參數非常罕見;在做最大池化時我們一般是不進行任何的填充補位的,即p= 0

其中我們經常使用到的超參數組合爲 f=2 、s=2,這樣我們就可以將輸入圖像的寬高各縮小一倍

8.卷積神經網絡的優點

卷積層比只用完全連接的神經層比起來有兩個優勢:參數共享和連接的稀疏性

  

在輸出相同維度圖像的情況下,使用卷積相比全連接層可以減少大量的權重參數,這樣所需要訓練的參數就會大大減小

連接的稀疏性指的是輸出圖像的每一個像素點只與輸入圖像使用filter的f*f大小區域有關,輸入圖像上的其他範圍像素點對於其輸出無任何影響(如上圖的紅綠色3*3方塊經過卷積得到輸出圖像的紅綠像素點,在輸入圖像除紅綠方框外的像素點對其無任何影響)

卷積神經網絡被用來捕捉平移不變 

 

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