1. 程式人生 > >深度學習 CNN卷積神經網路 LeNet-5詳解

深度學習 CNN卷積神經網路 LeNet-5詳解

卷積神經網路( Convolutional Neural Network, CNN):
是一種常見的深度學習架構,受生物自然視覺認知機制(動物視覺皮層細胞負責檢測光學訊號)啟發而來,是一種特殊的多層前饋神經網路。它的人工神經元可以響應一部分覆蓋範圍內的周圍單元,對於大型影象處理有出色表現。
一般神經網路VS卷積神經網路:
相同點:卷積神經網路也使用一種反向傳播演算法(BP)來進行訓練
不同點:網路結構不同。卷積神經網路的網路連線具有區域性連線、引數共享的特點。
區域性連線:是相對於普通神經網路的全連線而言的,是指這一層的某個節點只與上一層的部分節點相連。
引數共享:是指一層中多個節點的連線共享相同的一組引數。
這裡寫圖片描述


全連線:連線個數n*m 區域性連線:連線個數i*m
引數不共享:引數個數n*m+m 引數共享:引數個數i+1

卷積神經網路的主要組成:
卷積層(Convolutional layer),卷積運算的目的是提取輸入的不同特徵,第一層卷積層可能只能提取一些低階的特徵如邊緣、線條和角等層級,更多層的網路能從低階特徵中迭代提取更復雜的特徵。

池化層(Pooling),它實際上一種形式的向下取樣。有多種不同形式的非線性池化函式,而其中最大池化(Max pooling)和平均取樣是最為常見的

全連線層(Full connection), 與普通神經網路一樣的連線方式,一般都在最後幾層

pooling層的作用:
Pooling層相當於把一張解析度較高的圖片轉化為解析度較低的圖片;
pooling層可進一步縮小最後全連線層中節點的個數,從而達到減少整個神經網路中引數的目的。

LeNet-5卷積神經網路模型
LeNet-5:是Yann LeCun在1998年設計的用於手寫數字識別的卷積神經網路,當年美國大多數銀行就是用它來識別支票上面的手寫數字的,它是早期卷積神經網路中最有代表性的實驗系統之一。

LenNet-5共有7層(不包括輸入層),每層都包含不同數量的訓練引數,如下圖所示。
這裡寫圖片描述


LeNet-5中主要有2個卷積層、2個下抽樣層(池化層)、3個全連線層3種連線方式

卷積層
卷積層採用的都是5x5大小的卷積核/過濾器(kernel/filter),且卷積核每次滑動一個畫素(stride=1),一個特徵圖譜使用同一個卷積核.
每個上層節點的值乘以連線上的引數,把這些乘積及一個偏置引數相加得到一個和,把該和輸入啟用函式,啟用函式的輸出即是下一層節點的值
這裡寫圖片描述

LeNet-5的下采樣層(pooling層)
下抽樣層採用的是2x2的輸入域,即上一層的4個節點作為下一層1個節點的輸入,且輸入域不重疊,即每次滑動2個畫素,下抽樣節點的結構如下:
這裡寫圖片描述
每個下抽樣節點的4個輸入節點求和後取平均(平均池化),均值乘以一個引數加上一個偏置引數作為啟用函式的輸入,啟用函式的輸出即是下一層節點的值。

卷積後輸出層矩陣寬度的計算:
Outlength=
(inlength-fileterlength+2*padding)/stridelength+1

Outlength:輸出層矩陣的寬度
Inlength:輸入層矩陣的寬度
Padding:補0的圈數(非必要)
Stridelength:步長,即過濾器每隔幾步計算一次結果

LeNet-5第一層:卷積層C1
C1層是卷積層,形成6個特徵圖譜。卷積的輸入區域大小是5x5,每個特徵圖譜內參數共享,即每個特徵圖譜內只使用一個共同卷積核,卷積核有5x5個連線引數加上1個偏置共26個引數。卷積區域每次滑動一個畫素,這樣卷積層形成的每個特徵圖譜大小是(32-5)/1+1=28x28。C1層共有26x6=156個訓練引數,有(5x5+1)x28x28x6=122304個連線。C1層的連線結構如下所示。
這裡寫圖片描述

LeNet-5第二層:池化層S2
S2層是一個下采樣層(為什麼是下采樣?利用影象區域性相關性的原理,對影象進行子抽樣,可以減少資料處理量同時保留有用資訊)。C1層的6個28x28的特徵圖譜分別進行以2x2為單位的下抽樣得到6個14x14((28-2)/2+1)的圖。每個特徵圖譜使用一個下抽樣核。5x14x14x6=5880個連線。S2層的網路連線結構如下右圖
這裡寫圖片描述

LeNet-5第三層:卷積層C3
C3層是一個卷積層,卷積和和C1相同,不同的是C3的每個節點與S2中的多個圖相連。C3層有16個10x10(14-5+1)的圖,每個圖與S2層的連線的方式如下表 所示。C3與S2中前3個圖相連的卷積結構見下圖.這種不對稱的組合連線的方式有利於提取多種組合特徵。該層有(5x5x3+1)x6 + (5x5x4 + 1) x 3 + (5x5x4 +1)x6 + (5x5x6+1)x1 = 1516個訓練引數,共有1516x10x10=151600個連線。
這裡寫圖片描述

LeNet-5第四層:池化層S4
S4是一個下采樣層。C3層的16個10x10的圖分別進行以2x2為單位的下抽樣得到16個5x5的圖。5x5x5x16=2000個連線。連線的方式與S2層類似,如下所示。
這裡寫圖片描述

LeNet-5第五層:全連線層C5
C5層是一個全連線層。由於S4層的16個圖的大小為5x5,與卷積核的大小相同,所以卷積後形成的圖的大小為1x1。這裡形成120個卷積結果。每個都與上一層的16個圖相連。所以共有(5x5x16+1)x120 = 48120個引數,同樣有48120個連線。C5層的網路結構如下所示。
這裡寫圖片描述

LeNet-5第六層:全連線層F6
F6層是全連線層。F6層有84個節點,對應於一個7x12的位元圖,該層的訓練引數和連線數都是(120 + 1)x84=10164.
這裡寫圖片描述

LeNet-5第七層:全連線層Output
Output層也是全連線層,共有10個節點,分別代表數字0到9,如果節點i的輸出值為0,則網路識別的結果是數字i。採用的是徑向基函式(RBF)的網路連線方式。假設x是上一層的輸入,y是RBF的輸出,則RBF輸出的計算方式是:
這裡寫圖片描述
yi的值由i的位元圖編碼(即引數Wij)確定。yi越接近於0,則標明輸入越接近於i的位元圖編碼,表示當前網路輸入的識別結果是字元i。該層有84x10=840個設定的引數和連線。連線的方式如上圖.

以上是LeNet-5的卷積神經網路的完整結構,共約有60,840個訓練引數,340,908個連線。一個數字識別的效果如圖所示

這裡寫圖片描述

LeNet-5的訓練演算法
訓練演算法與傳統的BP演算法差不多。主要包括4步,這4步被分為兩個階段:
第一階段,向前傳播階段:
a)從樣本集中取一個樣本(X,Yp),將X輸入網路;
b)計算相應的實際輸出Op。
在此階段,資訊從輸入層經過逐級的變換,傳送到輸出 層。這個過程也是網路在完成訓練後正常執行時執行的過程。在此過程中,網路執行的是計算(實際上就是輸入與每層的權值矩陣相點乘,得到最後的輸出結果):
Op=Fn(…(F2(F1(XpW(1))W(2))…)W(n))
第二階段,向後傳播階段
a)算實際輸出Op與相應的理想輸出Yp的差;
b)按極小化誤差的方法反向傳播調整權矩陣。

卷積神經網路的優點
卷積網路較一般神經網路在影象處理方面有 如下優點
a)輸入影象和網路的拓撲結構能很好的吻
合;
b)特徵提取和模式分類同時進行,並同時在
訓練中產生;
c)權重共享可以減少網路的訓練引數,使神
經網路結構變得更簡單,適應性更強。
總結
卷積網路在本質上是一種輸入到輸出的對映,它能夠學習大量的輸入與輸出之間的對映關係,而不需要任何輸入和輸出之間的精確的數學表示式。

通過對LeNet-5的網路結構的分析,可以直觀地瞭解一個卷積神經網路的構建方法,可以為分析、構建更復雜、更多層的卷積神經網路做準備。

LaNet-5的侷限性
CNN能夠得出原始影象的有效表徵,這使得CNN能夠直接從原始畫素中,經過極少的預處理,識別視覺上面的規律。然而,由於當時缺乏大規模訓練資料,計算機的計算能力也跟不上,LeNet-5 對於複雜問題的處理結果並不理想。

2006年起,人們設計了很多方法,想要克服難以訓練深度CNN的困難。其中,最著名的是 Krizhevsky et al.提出了一個經典的CNN 結構,並在影象識別任務上取得了重大突破。其方法的整體框架叫做 AlexNet,與 LeNet-5 類似,但要更加深一些。