LeNet-5詳解


一、前言

LeNet-5出自論文Gradient-Based Learning Applied to Document Recognition,是一種用於手寫體字符識別的非常高效的卷積神經網絡。

本文將從卷積神經網絡結構的基礎說起,詳細地講解每個網絡層。

論文下載:請到文章結尾處下載。

二、卷積神經網絡(Convolutional Neural Network, CNN)

在講解LeNet-5之前,讓我們先看下CNN。卷積神經網絡能夠很好的利用圖像的結構信息。LeNet-5是一個較簡單的卷積神經網絡。下圖顯示了其結構:輸入的二維圖像,先經過兩次卷積層到池化層,再經過全連接層,最后使用softmax分類作為輸出層。下面我們主要介紹卷積層和池化層。

網絡解析(一):LeNet-5詳解

1、卷積層

卷積層是卷積神經網絡的核心基石。在圖像識別里我們提到的卷積是二維卷積,即離散二維濾波器(也稱作卷積核)與二維圖像做卷積操作,簡單的講是二維濾波器滑動到二維圖像上所有位置,並在每個位置上與該像素點及其領域像素點做內積。卷積操作被廣泛應用與圖像處理領域,不同卷積核可以提取不同的特征,例如邊沿、線性、角等特征。在深層卷積神經網絡中,通過卷積操作可以提取出圖像低級到復雜的特征。

網絡解析(一):LeNet-5詳解

上圖給出一個卷積計算過程的示例圖,輸入圖像大小為H=5,W=5,D=3,即5×5大小的3通道(RGB,也稱作深度)彩色圖像。這個示例圖中包含兩(用K表示)組卷積核,即圖中濾波器W0和W1。在卷積計算中,通常對不同的輸入通道采用不同的卷積核,如圖示例中每組卷積核包含(D=3)個3×3(用F×F表示)大小的卷積核。另外,這個示例中卷積核在圖像的水平方向(W方向)和垂直方向(H方向)的滑動步長為2(用S表示);對輸入圖像周圍各填充1(用P表示)個0,即圖中輸入層原始數據為藍色部分,灰色部分是進行了大小為1的擴展,用0來進行擴展。經過卷積操作得到輸出為3×3×2(用Ho×Wo×K表示)大小的特征圖,即3×3大小的2通道特征圖,其中Ho計算公式為:Ho=(H−F+2×P)/S+1,Wo同理。 而輸出特征圖中的每個像素,是每組濾波器與輸入圖像每個特征圖的內積再求和,再加上偏置bo,偏置通常對於每個輸出特征圖是共享的。輸出特征圖o[:,:,0]中的最后一個−2計算如上圖右下角公式所示。

記住這幾個符號:

  • H:圖片高度;
  • W:圖片寬度;
  • D:原始圖片通道數,也是卷積核個數;
  • F:卷積核高寬大小;
  • P:圖像邊擴充大小;
  • S:滑動步長。

在卷積操作中卷積核是可學習的參數,經過上面示例介紹,每層卷積的參數大小為D×F×F×K。卷積層的參數較少,這也是由卷積層的主要特性即局部連接和共享權重所決定。

  • 局部連接:每個神經元僅與輸入神經元的一塊區域連接,這塊局部區域稱作感受野(receptive field)。在圖像卷積操作中,即神經元在空間維度(spatial dimension,即上圖示例H和W所在的平面)是局部連接,但在深度上是全部連接。對於二維圖像本身而言,也是局部像素關聯較強。這種局部連接保證了學習后的過濾器能夠對於局部的輸入特征有最強的響應。局部連接的思想,也是受啟發於生物學里面的視覺系統結構,視覺皮層的神經元就是局部接受信息的。
  • 權重共享:計算同一個深度切片的神經元時采用的濾波器是共享的。例上圖中計算o[:,:,0]的每個每個神經元的濾波器均相同,都為W0,這樣可以很大程度上減少參數。共享權重在一定程度上講是有意義的,例如圖片的底層邊緣特征與特征在圖中的具體位置無關。但是在一些場景中是無意的,比如輸入的圖片是人臉,眼睛和頭發位於不同的位置,希望在不同的位置學到不同的特征 。請注意權重只是對於同一深度切片的神經元是共享的,在卷積層,通常采用多組卷積核提取不同特征,即對應不同深度切片的特征,不同深度切片的神經元權重是不共享。另外,偏重對同一深度切片的所有神經元都是共享的。

通過介紹卷積計算過程及其特性,可以看出卷積是線性操作,並具有平移不變性(shift-invariant),平移不變性即在圖像每個位置執行相同的操作。卷積層的局部連接和權重共享使得需要學習的參數大大減小,這樣也有利於訓練較大卷積神經網絡。

整體計算過程如下(與上圖中的數據不同,但是計算過程相同):

網絡解析(一):LeNet-5詳解

2、池化層

網絡解析(一):LeNet-5詳解

池化是非線性下采樣的一種形式,主要作用是通過減少網絡的參數來減小計算量,並且能夠在一定程度上控制過擬合。通常在卷積層的后面會加上一個池化層。池化包括最大池化、平均池化等。其中最大池化是用不重疊的矩形框將輸入層分成不同的區域,對於每個矩形框的數取最大值作為輸出層,如上圖所示。

三、Lenet-5

LeNet5 這個網絡雖然很小,但是它包含了深度學習的基本模塊:卷積層,池化層,全鏈接層。是其他深度學習模型的基礎, 這里我們對LeNet5進行深入分析。同時,通過實例分析,加深對與卷積層和池化層的理解。

網絡解析(一):LeNet-5詳解

LeNet-5共有7層,不包含輸入,每層都包含可訓練參數;每個層有多個Feature Map,每個FeatureMap通過一種卷積濾波器提取輸入的一種特征,然后每個FeatureMap有多個神經元。

各層參數詳解:

1、INPUT層-輸入層

首先是數據 INPUT 層,輸入圖像的尺寸統一歸一化為32*32。

注意:本層不算LeNet-5的網絡結構,傳統上,不將輸入層視為網絡層次結構之一。

2、C1層-卷積層

輸入圖片:32*32

卷積核大小:5*5

卷積核種類:6

輸出featuremap大小:28*28 (32-5+1)=28

神經元數量:28*28*6

可訓練參數:(5*5+1) * 6(每個濾波器5*5=25個unit參數和一個bias參數,一共6個濾波器)

連接數:(5*5+1)*6*28*28=122304

詳細說明:對輸入圖像進行第一次卷積運算(使用 6 個大小為 5*5 的卷積核),得到6個C1特征圖(6個大小為28*28的 feature maps, 32-5+1=28)。我們再來看看需要多少個參數,卷積核的大小為5*5,總共就有6*(5*5+1)=156個參數,其中+1是表示一個核有一個bias。對於卷積層C1,C1內的每個像素都與輸入圖像中的5*5個像素和1個bias有連接,所以總共有156*28*28=122304個連接(connection)。有122304個連接,但是我們只需要學習156個參數,主要是通過權值共享實現的。

3、S2層-池化層(下采樣層)

輸入:28*28

采樣區域:2*2

采樣方式:4個輸入相加,乘以一個可訓練參數,再加上一個可訓練偏置。結果通過sigmoid

采樣種類:6

輸出featureMap大小:14*14(28/2)

神經元數量:14*14*6

連接數:(2*2+1)*6*14*14

S2中每個特征圖的大小是C1中特征圖大小的1/4。

詳細說明:第一次卷積之后緊接着就是池化運算,使用 2*2核 進行池化,於是得到了S2,6個14*14的 特征圖(28/2=14)。S2這個pooling層是對C1中的2*2區域內的像素求和乘以一個權值系數再加上一個偏置,然后將這個結果再做一次映射。同時有5x14x14x6=5880個連接。

4、C3層-卷積層

輸入:S2中所有6個或者幾個特征map組合

卷積核大小:5*5

卷積核種類:16

輸出featureMap大小:10*10 (14-5+1)=10

C3中的每個特征map是連接到S2中的所有6個或者幾個特征map的,表示本層的特征map是上一層提取到的特征map的不同組合

存在的一個方式是:C3的前6個特征圖以S2中3個相鄰的特征圖子集為輸入。接下來6個特征圖以S2中4個相鄰特征圖子集為輸入。然后的3個以不相鄰的4個特征圖子集為輸入。最后一個將S2中所有特征圖為輸入。

則:可訓練參數:6*(3*5*5+1)+6*(4*5*5+1)+3*(4*5*5+1)+1*(6*5*5+1)=1516

連接數:10*10*1516=151600

詳細說明:第一次池化之后是第二次卷積,第二次卷積的輸出是C3,16個10x10的特征圖,卷積核大小是 5*5. 我們知道S2 有6個 14*14 的特征圖,怎么從6 個特征圖得到 16個特征圖了? 這里是通過對S2 的特征圖特殊組合計算得到的16個特征圖。具體如下:

網絡解析(一):LeNet-5詳解

C3的前6個feature map(對應上圖第一個紅框的6列)與S2層相連的3個feature map相連接(上圖第一個紅框),后面6個feature map與S2層相連的4個feature map相連接(上圖第二個紅框),后面3個feature map與S2層部分不相連的4個feature map相連接,最后一個與S2層的所有feature map相連。卷積核大小依然為5*5,所以總共有6*(3*5*5+1)+6*(4*5*5+1)+3*(4*5*5+1)+1*(6*5*5+1)=1516個參數。而圖像大小為10*10,所以共有151600個連接。

網絡解析(一):LeNet-5詳解

C3與S2中前3個圖相連的卷積結構如下圖所示:

網絡解析(一):LeNet-5詳解

上圖對應的參數為 3*5*5+1,一共進行6次卷積得到6個特征圖,所以有6*(3*5*5+1)參數。 為什么采用上述這樣的組合了?論文中說有兩個原因:1)減少參數,2)這種不對稱的組合連接的方式有利於提取多種組合特征。

5、S4層-池化層(下采樣層)

輸入:10*10

采樣區域:2*2

采樣方式:4個輸入相加,乘以一個可訓練參數,再加上一個可訓練偏置。結果通過sigmoid

采樣種類:16

輸出featureMap大小:5*5(10/2)

神經元數量:5*5*16=400

連接數:16*(2*2+1)*5*5=2000

S4中每個特征圖的大小是C3中特征圖大小的1/4

詳細說明:S4是pooling層,窗口大小仍然是2*2,共計16個feature map,C3層的16個10x10的圖分別進行以2x2為單位的池化得到16個5x5的特征圖。有5x5x5x16=2000個連接。連接的方式與S2層類似。

6、C5層-卷積層

輸入:S4層的全部16個單元特征map(與s4全相連)

卷積核大小:5*5

卷積核種類:120

輸出featureMap大小:1*1(5-5+1)

可訓練參數/連接:120*(16*5*5+1)=48120

詳細說明:C5層是一個卷積層。由於S4層的16個圖的大小為5x5,與卷積核的大小相同,所以卷積后形成的圖的大小為1x1。這里形成120個卷積結果。每個都與上一層的16個圖相連。所以共有(5x5x16+1)x120 = 48120個參數,同樣有48120個連接。C5層的網絡結構如下:

網絡解析(一):LeNet-5詳解

7、F6層-全連接層

輸入:c5 120維向量

計算方式:計算輸入向量和權重向量之間的點積,再加上一個偏置,結果通過sigmoid函數輸出。

可訓練參數:84*(120+1)=10164

詳細說明:6層是全連接層。F6層有84個節點,對應於一個7x12的比特圖,-1表示白色,1表示黑色,這樣每個符號的比特圖的黑白色就對應於一個編碼。該層的訓練參數和連接數是(120 + 1)x84=10164。ASCII編碼圖如下:

網絡解析(一):LeNet-5詳解

F6層的連接方式如下:

網絡解析(一):LeNet-5詳解

8、Output層-全連接層

Output層也是全連接層,共有10個節點,分別代表數字0到9,且如果節點i的值為0,則網絡識別的結果是數字i。采用的是徑向基函數(RBF)的網絡連接方式。假設x是上一層的輸入,y是RBF的輸出,則RBF輸出的計算方式是:

網絡解析(一):LeNet-5詳解

上式w_ij 的值由i的比特圖編碼確定,i從0到9,j取值從0到7*12-1。RBF輸出的值越接近於0,則越接近於i,即越接近於i的ASCII編碼圖,表示當前網絡輸入的識別結果是字符i。該層有84x10=840個參數和連接。

網絡解析(一):LeNet-5詳解

上圖是LeNet-5識別數字3的過程。

四、總結

  • LeNet-5是一種用於手寫體字符識別的非常高效的卷積神經網絡。
  • 卷積神經網絡能夠很好的利用圖像的結構信息。
  • 卷積層的參數較少,這也是由卷積層的主要特性即局部連接和共享權重所決定。

 【. . . . . .本博客僅作個人生活、工作、學習等的日常記錄。說明: (1) 內容有參考其他博主、網頁等,有因“懶”直接粘貼來,會備注出處。若遇雷同,或忘備注,並無故意抄襲之意,請諸“原主”諒解,很感謝您的辛勤"筆記"可供本人參考學習。 (2) 如遇同行,有參考學習者,因個人學識有限,不保證所寫內容完全正確。您對本博文有任何的意見或建議,歡迎留言,感謝指正。 (3) 若您認為本主的全博客還不錯,可以點擊關注,便於互相學習。 (4) 感謝您的閱讀,希望對您有一定的幫助。歡迎轉載或分享,但請注明出處,謝謝。. . . . . .】

參考資料:

http://blog.csdn.net/zhangjunhit/article/details/53536915

https://www.jianshu.com/p/ce609f9b5910

文件下載 Gradient-Based Learning Applied to Document Recognition下載地址


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM