天天看點

從卷積層、激活層、池化層到全連接配接層深度解析卷積神經網絡的原理

局部連接配接+權值共享

全連接配接神經網絡需要非常多的計算資源才能支撐它來做反向傳播和前向傳播,是以說全連接配接神經網絡可以存儲非常多的參數,如果你給它的樣本如果沒有達到它的量級的時候,它可以輕輕松松把你給他的樣本全部都記下來,這會出現過拟合的情況。

是以我們應該把神經元和神經元之間的連接配接的權重個數降下來,但是降下來我們又不能保證它有較強的學習能力,是以這是一個糾結的地方,是以有一個方法就是局部連接配接+權值共享,局部連接配接+權值共享不僅權重參數降下來了,而且學習能力并沒有實質的降低,除此之外還有其它的好處,下來看一下,下面的這幾張圖檔:

一個圖像的不同表示方式

這幾張圖檔描述的都是一個東西,但是有的大有的小,有的靠左邊,有的靠右邊,有的位置不同,但是我們建構的網絡識别這些東西的時候應該是同一結果。為了能夠達到這個目的,我們可以讓圖檔的不同位置具有相同的權重(權值共享),也就是上面所有的圖檔,我們隻需要在訓練集中放一張,我們的神經網絡就可以識别出上面所有的,這也是權值共享的好處。

而卷積神經網絡就是局部連接配接+權值共享的神經網絡。

卷積神經網絡

現在我們對卷積神經網絡有一個初步認識了,下面具體來講解一下卷積神經網絡,卷積神經網絡依舊是層級結構,但層的功能和形式做了改變,卷積神經網絡常用來處理圖檔資料,比如識别一輛汽車:

從卷積層、激活層、池化層到全連接配接層深度解析卷積神經網絡的原理

卷積神經網絡結構

其中資料輸入的是一張圖檔(輸入層),CONV表示卷積層,RELU表示激勵層,POOL表示池化層,Fc表示全連接配接層

卷積神經網絡之輸入層

在圖檔輸出到神經網絡之前,常常先進行圖像處理,有三種常見的圖像的處理方式:

  1. 均值化:把輸入資料各個次元都中心化到0,所有樣本求和求平均,然後用所有的樣本減去這個均值樣本就是去均值。
  2. 歸一化:資料幅度歸一化到同樣的範圍,對于每個特征而言,範圍最好是[-1,1]
  3. PCA/白化:用PCA降維,讓每個次元的相關度取消,特征和特征之間是互相獨立的。白化是對資料每個特征軸上的幅度歸一化
從卷積層、激活層、池化層到全連接配接層深度解析卷積神經網絡的原理

均值化和歸一化

從卷積層、激活層、池化層到全連接配接層深度解析卷積神經網絡的原理

去相關和白化

卷神網絡之卷積層:

圖檔有一個性質叫做局部關聯性質,一個圖檔的像素點影響最大的是它周邊的像素點,而距離這個像素點比較遠的像素點二者之間關系不大。這個性質意味着每一個神經元我們不用處理全局的圖檔了(和上一層全連接配接),我們的每一個神經元隻需要和上一層局部連接配接,相當于每一個神經元掃描一小區域,然後許多神經元(這些神經元權值共享)合起來就相當于掃描了全局,這樣就構成一個特征圖,n個特征圖就提取了這個圖檔的n維特征,每個特征圖是由很多神經元來完成的。

在卷積神經網絡中,我們先選擇一個局部區域(filter),用這個局部區域(filter)去掃描整張圖檔。 局部區域所圈起來的所有節點會被連接配接到下一層的一個節點上。我們拿灰階圖(隻有一維)來舉例:

從卷積層、激活層、池化層到全連接配接層深度解析卷積神經網絡的原理

局部區域

圖檔是矩陣式的,将這些以矩陣排列的節點展成了向量。就能更好的看出來卷積層和輸入層之間的連接配接,并不是全連接配接的,我們将上圖中的紅色方框稱為filter,它是2*2的,這是它的尺寸,這不是固定的,我們可以指定它的尺寸。

我們可以看出來目前filter是2*2的小視窗,這個小視窗會将圖檔矩陣從左上角滑到右下角,每滑一次就會一下子圈起來四個,連接配接到下一層的一個神經元,然後産生四個權重,這四個權重(w1、w2、w3、w4)構成的矩陣就叫做卷積核。

卷積核是算法自己學習得到的,它會和上一層計算,比如,第二層的0節點的數值就是局部區域的線性組合(w1*0+w2*1+w3*4+w4*5),即被圈中節點的數值乘以對應的權重後相加。

從卷積層、激活層、池化層到全連接配接層深度解析卷積神經網絡的原理

卷積核計算

從卷積層、激活層、池化層到全連接配接層深度解析卷積神經網絡的原理

卷積操作

我們前面說過圖檔不用向量表示是為了保留圖檔平面結構的資訊。 同樣的,卷積後的輸出若用上圖的向量排列方式則丢失了平面結構資訊。 是以我們依然用矩陣的方式排列它們,就得到了下圖所展示的連接配接,每一個藍色結點連接配接四個黃色的結點。

從卷積層、激活層、池化層到全連接配接層深度解析卷積神經網絡的原理

卷積層的連接配接方式

圖檔是一個矩陣然後卷積神經網絡的下一層也是一個矩陣,我們用一個卷積核從圖檔矩陣左上角到右下角滑動,每滑動一次,當然被圈起來的神經元們就會連接配接下一層的一個神經元,形成參數矩陣這個就是卷積核,每次滑動雖然圈起來的神經元不同,連接配接下一層的神經元也不同,但是産生的參數矩陣确是一樣的,這就是權值共享。

卷積核會和掃描的圖檔的那個局部矩陣作用産生一個值,比如第一次的時候,(w1*0+w2*1+w3*4+w4*5),是以,filter從左上到右下的這個過程中會得到一個矩陣(這就是下一層也是一個矩陣的原因),具體過程如下所示:

從卷積層、激活層、池化層到全連接配接層深度解析卷積神經網絡的原理

卷積計算過程

上圖中左邊是圖矩陣,我們使用的filter的大小是3*3的,第一次滑動的時候,卷積核和圖檔矩陣作用(1*1+1*0+1*1+0*0+1*1+1*0+0*1+0*0+1*1)=4,會産生一個值,這個值就是右邊矩陣的第一個值,filter滑動9次之後,會産生9個值,也就是說下一層有9個神經元,這9個神經元産生的值就構成了一個矩陣,這矩陣叫做特征圖,表示image的某一次元的特征,當然具體哪一次元可能并不知道,可能是這個圖像的顔色,也有可能是這個圖像的輪廓等等。

單通道圖檔總結:以上就是單通道的圖檔的卷積處理,圖檔是一個矩陣,我們用指定大小的卷積核從左上角到右下角來滑動,每次滑動所圈起來的結點會和下一層的一個結點相連,連接配接之後就會形成局部連接配接,每一條連接配接都會産生權重,這些權重就是卷積核,是以每次滑動都會産生一個卷積核,因為權值共享,是以這些卷積核都是一樣的。卷積核會不斷和當時卷積核所圈起來的局部矩陣作用,每次産生的值就是下一層結點的值了,這樣多次産生的值組合起來就是一個特征圖,表示某一次元的特征。也就是從左上滑動到右下這一過程中會形成一個特征圖矩陣(共享一個卷積核),再從左上滑動到右下又會形成另一個特征圖矩陣(共享另一個卷積核),這些特征圖都是表示特征的某一次元。

三個通道的圖檔如何進行卷積操作?

至此我們應該已經知道了單通道的灰階圖是如何處理的,實際上我們的圖檔都是RGB的圖像,有三個通道,那麼此時圖像是如何卷積的呢?

從卷積層、激活層、池化層到全連接配接層深度解析卷積神經網絡的原理

彩色圖像

filter視窗滑的時候,我們隻是從width和height的角度來滑動的,并沒有考慮depth,是以每滑動一次實際上是産生一個卷積核,共享這一個卷積核,而現在depth=3了,是以每滑動一次實際上産生了具有三個通道的卷積核(它們分别作用于輸入圖檔的藍色、綠色、紅色通道),卷積核的一個通道核藍色的矩陣作用産生一個值,另一個和綠色的矩陣作用産生一個值,最後一個和紅色的矩陣作用産生一個值,然後這些值加起來就是下一層結點的值,結果也是一個矩陣,也就是一張特征圖。

從卷積層、激活層、池化層到全連接配接層深度解析卷積神經網絡的原理

三通道的計算過程

要想有多張特征圖的話,我們可以再用新的卷積核來進行左上到右下的滑動,這樣就會形成新的特征圖。

從卷積層、激活層、池化層到全連接配接層深度解析卷積神經網絡的原理

三通道圖檔的卷積過程

也就是說增加一個卷積核,就會産生一個特征圖,總的來說就是輸入圖檔有多少通道,我們的卷積核就需要對應多少通道,而本層中卷積核有多少個,就會産生多少個特征圖。這樣卷積後輸出可以作為新的輸入送入另一個卷積層中處理,有幾個特征圖那麼depth就是幾,那麼下一層的每一個特征圖就得用相應的通道的卷積核來對應處理,這個邏輯要清楚,我們需要先了解一下基本的概念:

  1. 深度depth(通道):由上一層濾波器的個數決定
  2. 步長stride:每次滑動幾步,步數越大得到的特征數越少,上面的例子中每次滑動1步。
  3. 填充值zero-padding:我們設定了步長之後,很有可能某些位置滑不到,為了避免了邊緣資訊被一步步舍棄的問題,我們需要設定填充值來解決這個問題。還有一個問題,4x4的圖檔被2x2的filter卷積後變成了3x3的圖檔,每次卷積後都會小一圈的話,經過若幹層後豈不是變的越來越小?zero padding就可以在這時幫助控制Feature Map的輸出尺寸,同時避免了邊緣資訊被一步步舍棄的問題。
從卷積層、激活層、池化層到全連接配接層深度解析卷積神經網絡的原理

卷積計算的公式

4x4的圖檔在邊緣Zero padding一圈後,再用3x3的filter卷積後,得到的Feature Map尺寸依然是4x4不變。

從卷積層、激活層、池化層到全連接配接層深度解析卷積神經網絡的原理

填充

當然也可以使用5x5的filte和2的zero padding可以保持圖檔的原始尺寸,3x3的filter考慮到了像素與其距離為1以内的所有其他像素的關系,而5x5則是考慮像素與其距離為2以内的所有其他像素的關系。

規律: Feature Map的尺寸等于

(input_size + 2 * padding_size − filter_size)/stride+1

我們可以把卷積層的作用總結一點:卷積層其實就是在提取特征,卷積層中最重要的是卷積核(訓練出來的),不同的卷積核可以探測特定的形狀、顔色、對比度等,然後特征圖保持了抓取後的空間結構,是以不同卷積核對應的特征圖表示某一次元的特征,具體什麼特征可能我們并不知道。特征圖作為輸入再被卷積的話,可以則可以由此探測到"更大"的形狀概念,也就是說随着卷積神經網絡層數的增加,特征提取的越來越具體化。

卷積神經網絡之激勵層

下面講解激勵層的作用,激勵層的作用可以了解為把卷積層的結果做非線性映射。

從卷積層、激活層、池化層到全連接配接層深度解析卷積神經網絡的原理

激勵層

上圖中的f表示激勵函數,常用的激勵函數幾下幾種:

從卷積層、激活層、池化層到全連接配接層深度解析卷積神經網絡的原理

常用的激勵函數

我們先來看一下激勵函數Sigmoid導數最小為0,最大為1/4,

從卷積層、激活層、池化層到全連接配接層深度解析卷積神經網絡的原理

激勵函數Sigmoid

Tanh激活函數:和sigmoid相似,它會關于x軸上下對應,不至于朝某一方面偏向

從卷積層、激活層、池化層到全連接配接層深度解析卷積神經網絡的原理

Tanh激活函數

ReLU激活函數(修正線性單元):收斂快,求梯度快,但較脆弱,左邊的梯度為0

從卷積層、激活層、池化層到全連接配接層深度解析卷積神經網絡的原理

ReLU激活函數

Leaky ReLU激活函數:不會飽和或者挂掉,計算也很快,但是計算量比較大

從卷積層、激活層、池化層到全連接配接層深度解析卷積神經網絡的原理

Leaky ReLU激活函數

一些激勵函數的使用技巧:一般不要用sigmoid,首先試RELU,因為快,但要小心點,如果RELU失效,請用Leaky ReLU,某些情況下tanh倒是有不錯的結果。

這就是卷積神經網絡的激勵層,它就是将卷積層的線性計算的結果進行了非線性映射。可以從下面的圖中了解。它展示的是将非線性操作應用到一個特征圖中。這裡的輸出特征圖也可以看作是"修正"過的特征圖。如下所示:

從卷積層、激活層、池化層到全連接配接層深度解析卷積神經網絡的原理

非線性操作

卷積神經網絡之池化層

池化層:降低了各個特征圖的次元,但可以保持大分重要的資訊。池化層夾在連續的卷積層中間,壓縮資料和參數的量,減小過拟合,池化層并沒有參數,它隻不過是把上層給它的結果做了一個下采樣(資料壓縮)。下采樣有兩種常用的方式:

Max pooling:選取最大的,我們定義一個空間鄰域(比如,2x2 的視窗),并從視窗内的修正特征圖中取出最大的元素,最大池化被證明效果更好一些。

Average pooling:平均的,我們定義一個空間鄰域(比如,2x2 的視窗),并從視窗内的修正特征圖算出平均值

從卷積層、激活層、池化層到全連接配接層深度解析卷積神經網絡的原理

Max pooling

我們要注意一點的是:pooling在不同的depth上是分開執行的,也就是depth=5的話,pooling進行5次,産生5個池化後的矩陣,池化不需要參數控制。池化操作是分開應用到各個特征圖的,我們可以從五個輸入圖中得到五個輸出圖。

從卷積層、激活層、池化層到全連接配接層深度解析卷積神經網絡的原理

池化操作

無論是max pool還是average pool都有分資訊被舍棄,那麼部分資訊被舍棄後會損壞識别結果嗎?

因為卷積後的Feature Map中有對于識别物體不必要的備援資訊,我們下采樣就是為了去掉這些備援資訊,是以并不會損壞識别結果。

我們來看一下卷積之後的備援資訊是怎麼産生的?

我們知道卷積核就是為了找到特定次元的資訊,比如說某個形狀,但是圖像中并不會任何地方都出現這個形狀,但卷積核在卷積過程中沒有出現特定形狀的圖檔位置卷積也會産生一個值,但是這個值的意義就不是很大了,是以我們使用池化層的作用,将這個值去掉的話,自然也不會損害識别結果了。

比如下圖中,假如卷積核探測"橫折"這個形狀。 卷積後得到3x3的Feature Map中,真正有用的就是數字為3的那個節點,其餘數值對于這個任務而言都是無關的。 是以用3x3的Max pooling後,并沒有對"橫折"的探測産生影響。 試想在這裡例子中如果不使用Max pooling,而讓網絡自己去學習。 網絡也會去學習與Max pooling近似效果的權重。因為是近似效果,增加了更多的參數的代價,卻還不如直接進行最大池化處理。

從卷積層、激活層、池化層到全連接配接層深度解析卷積神經網絡的原理

最大池化處理

卷積神經網絡之全連接配接層

在全連接配接層中所有神經元都有權重連接配接,通常全連接配接層在卷積神經網絡尾部。目前面卷積層抓取到足以用來識别圖檔的特征後,接下來的就是如何進行分類。 通常卷積網絡的最後會将末端得到的長方體平攤成一個長長的向量,并送入全連接配接層配合輸出層進行分類。比如,在下面圖中我們進行的圖像分類為四分類問題,是以卷積神經網絡的輸出層就會有四個神經元。

繼續閱讀