大話CNN經典模型:LeNet

近幾年來,卷積神經網絡(Convolutional Neural Networks,簡稱CNN)在圖像識別中取得了很是成功的應用,成爲深度學習的一大亮點。CNN發展至今,已經有不少變種,其中有幾個經典模型在CNN發展歷程中有着里程碑的意義,它們分別是:LeNet、Alexnet、Googlenet、VGG、DRL等,接下來將分期進行逐一介紹。
在以前的文章中,已經介紹了卷積神經網絡(CNN)的技術原理,細節部分就再也不重複了,有興趣的同窗再打開連接看看(大話卷積神經網絡),在此簡單回顧一下CNN的幾個特色:局部感知、參數共享、池化。
一、局部感知
人類對外界的認知通常是從局部到全局、從片面到全面,相似的,在機器識別圖像時也沒有必要把整張圖像按像素所有都鏈接到神經網絡中,在圖像中也是局部周邊的像素聯繫比較緊密,而距離較遠的像素則相關性較弱,所以能夠採用局部鏈接的模式(將圖像分塊鏈接,這樣能大大減小模型的參數),以下圖所示:
 
二、參數(權值)共享
每張天然圖像(人物、山水、建築等)都有其固有特性,也就是說,圖像其中一部分的統計特性與其它部分是接近的。這也意味着這一部分學習的特徵也能用在另外一部分上,能使用一樣的學習特徵。所以,在局部鏈接中隱藏層的每個神經元鏈接的局部圖像的權值參數(例如5×5),將這些權值參數共享給其它剩下的神經元使用,那麼此時無論隱藏層有多少個神經元,須要訓練的參數就是這個局部圖像的權限參數(例如5×5),也就是卷積核的大小,這樣大大減小了訓練參數。以下圖
 
三、池化
隨着模型網絡不斷加深,卷積核愈來愈多,要訓練的參數仍是不少,並且直接拿卷積核提取的特徵直接訓練也容易出現過擬合的現象。回想一下,之因此對圖像使用卷積提取特徵是由於圖像具備一種「靜態性」的屬性,所以,一個很天然的想法就是對不一樣位置區域提取出有表明性的特徵(進行聚合統計,例如最大值、平均值等),這種聚合的操做就叫作池化,池化的過程一般也被稱爲特徵映射的過程(特徵降維),以下圖:
 
回顧了卷積神經網絡(CNN)上面的三個特色後,下面來介紹一下CNN的經典模型:手寫字體識別模型LeNet5
LeNet5誕生於1994年,是最先的卷積神經網絡之一, 由Yann LeCun完成,推進了深度學習領域的發展。在那時候,沒有GPU幫助訓練模型,甚至CPU的速度也很慢,所以,LeNet5經過巧妙的設計,利用卷積、參數共享、池化等操做提取特徵,避免了大量的計算成本,最後再使用全鏈接神經網絡進行分類識別,這個網絡也是最近大量神經網絡架構的起點,給這個領域帶來了許多靈感。
LeNet5的網絡結構示意圖以下所示:
 
LeNet5由7層CNN(不包含輸入層)組成,上圖中輸入的原始圖像大小是32×32像素,卷積層用Ci表示,子採樣層(pooling,池化)用Si表示,全鏈接層用Fi表示。下面逐層介紹其做用和示意圖上方的數字含義。
一、C1層(卷積層):6@28×28
該層使用了6個卷積核,每一個卷積核的大小爲5×5,這樣就獲得了6個feature map(特徵圖)。
(1)特徵圖大小
每一個卷積核(5×5)與原始的輸入圖像(32×32)進行卷積,這樣獲得的feature map(特徵圖)大小爲(32-5+1)×(32-5+1)= 28×28
卷積過程以下圖所示:
 
卷積核與輸入圖像按卷積核大小逐個區域進行匹配計算,匹配後原始輸入圖像的尺寸將變小,由於邊緣部分卷積核沒法越出界,只能匹配一次,如上圖,匹配計算後的尺寸變爲Cr×Cc=(Ir-Kr+1)×(Ic-Kc+1),其中Cr、Cc,Ir、Ic,Kr、Kc分別表示卷積後結果圖像、輸入圖像、卷積核的行列大小。
(2)參數個數
因爲參數(權值)共享的緣由,對於同個卷積核每一個神經元均使用相同的參數,所以,參數個數爲(5×5+1)×6= 156,其中5×5爲卷積核參數,1爲偏置參數
(3)鏈接數
卷積後的圖像大小爲28×28,所以每一個特徵圖有28×28個神經元,每一個卷積核參數爲(5×5+1)×6,所以,該層的鏈接數爲(5×5+1)×6×28×28=122304
二、S2層(下采樣層,也稱池化層):6@14×14
(1)特徵圖大小

這一層主要是作池化或者特徵映射(特徵降維),池化單元爲2×2,所以,6個特徵圖的大小經池化後即變爲14×14。回顧本文剛開始講到的池化操做,池化單元之間沒有重疊,在池化區域內進行聚合統計後獲得新的特徵值,所以經2×2池化後,每兩行兩列從新算出一個特徵值出來,至關於圖像大小減半,所以卷積後的28×28圖像經2×2池化後就變爲14×14。
這一層的計算過程是:2×2 單元裏的值相加,而後再乘以訓練參數w,再加上一個偏置參數b(每個特徵圖共享相同的w和b),而後取sigmoid值(S函數:0-1區間),做爲對應的該單元的值。卷積操做與池化的示意圖以下:
 
(2)參數個數
S2層因爲每一個特徵圖都共享相同的w和b這兩個參數,所以須要2×6=12個參數
(3)鏈接數
下采樣以後的圖像大小爲14×14,所以S2層的每一個特徵圖有14×14個神經元,每一個池化單元鏈接數爲2×2+1(1爲偏置量),所以,該層的鏈接數爲(2×2+1)×14×14×6 = 5880
三、C3層(卷積層):16@10×10
C3層有16個卷積核,卷積模板大小爲5×5。
(1)特徵圖大小
與C1層的分析相似,C3層的特徵圖大小爲(14-5+1)×(14-5+1)= 10×10
(2)參數個數
須要注意的是,C3與S2並非全鏈接而是部分鏈接,有些是C3鏈接到S2三層、有些四層、甚至達到6層,經過這種方式提取更多特徵,鏈接的規則以下表所示:
 
例如第一列表示C3層的第0個特徵圖(feature map)只跟S2層的第0、1和2這三個feature maps相鏈接,計算過程爲:用3個卷積模板分別與S2層的3個feature maps進行卷積,而後將卷積的結果相加求和,再加上一個偏置,再取sigmoid得出卷積後對應的feature map了。其它列也是相似(有些是3個卷積模板,有些是4個,有些是6個)。所以,C3層的參數數目爲(5×5×3+1)×6 +(5×5×4+1)×9 +5×5×6+1 = 1516
(3)鏈接數
卷積後的特徵圖大小爲10×10,參數數量爲1516,所以鏈接數爲1516×10×10= 151600
四、S4(下采樣層,也稱池化層):16@5×5
(1)特徵圖大小

與S2的分析相似,池化單元大小爲2×2,所以,該層與C3同樣共有16個特徵圖,每一個特徵圖的大小爲5×5。
(2)參數數量
與S2的計算相似,所須要參數個數爲16×2 = 32
(3)鏈接數
鏈接數爲(2×2+1)×5×5×16 = 2000
五、C5層(卷積層):120
(1)特徵圖大小

該層有120個卷積核,每一個卷積核的大小仍爲5×5,所以有120個特徵圖。因爲S4層的大小爲5×5,而該層的卷積核大小也是5×5,所以特徵圖大小爲(5-5+1)×(5-5+1)= 1×1。這樣該層就恰好變成了全鏈接,這只是巧合,若是原始輸入的圖像比較大,則該層就不是全鏈接了。
(2)參數個數
與前面的分析相似,本層的參數數目爲120×(5×5×16+1) = 48120
(3)鏈接數
因爲該層的特徵圖大小恰好爲1×1,所以鏈接數爲48120×1×1=48120
六、F6層(全鏈接層):84
(1)特徵圖大小

F6層有84個單元,之因此選這個數字的緣由是來自於輸出層的設計,對應於一個7×12的比特圖,以下圖所示,-1表示白色,1表示黑色,這樣每一個符號的比特圖的黑白色就對應於一個編碼。
 
該層有84個特徵圖,特徵圖大小與C5同樣都是1×1,與C5層全鏈接。
(2)參數個數
因爲是全鏈接,參數數量爲(120+1)×84=10164。跟經典神經網絡同樣,F6層計算輸入向量和權重向量之間的點積,再加上一個偏置,而後將其傳遞給sigmoid函數得出結果。
(3)鏈接數
因爲是全鏈接,鏈接數與參數數量同樣,也是10164。
七、OUTPUT層(輸出層):10
Output層也是全鏈接層,共有10個節點,分別表明數字0到9。若是第i個節點的值爲0,則表示網絡識別的結果是數字i。
(1)特徵圖大小
該層採用徑向基函數(RBF)的網絡鏈接方式,假設x是上一層的輸入,y是RBF的輸出,則RBF輸出的計算方式是:
 
上式中的Wij的值由i的比特圖編碼肯定,i從0到9,j取值從0到7×12-1。RBF輸出的值越接近於0,表示當前網絡輸入的識別結果與字符i越接近。
(2)參數個數
因爲是全鏈接,參數個數爲84×10=840
(3)鏈接數
因爲是全鏈接,鏈接數與參數個數同樣,也是840算法

經過以上介紹,已經瞭解了LeNet各層網絡的結構、特徵圖大小、參數數量、鏈接數量等信息,下圖是識別數字3的過程,可對照上面介紹各個層的功能進行一一回顧:
 網絡

牆裂建議架構

Ann LeCun 在1998年發表了關於LeNet的經典論文《Gradient-Based Learning Applied to Document Recognition 》(基於梯度學習在文檔識別中的應用),裏面有很是詳細介紹,建議閱讀這篇論文,進一步鞏固知識。分佈式

掃描如下二維碼關注本人公衆號「大數據與人工智能Lab」(BigdataAILab),而後回覆「論文」關鍵字可在線閱讀這篇經典論文的內容。函數

 

推薦相關閱讀oop

相關文章
相關標籤/搜索