LeNet網絡模型

一、LeNet模型簡介
  LeNet模型是一種用來識別手寫數字的最經典的卷積神經網絡,他是Yann LeCun在1998年設計並提出的。當年美國大多數銀行就是用它來識別支票上面的手寫數字的。它的識別準確性非常高。
  LeNet的網絡模型框架如下圖所示:

這裏寫圖片描述

  下面對網絡模型的每一層進行分析。

二、LeNet模型網絡層詳解
  LeNet-5包含輸入共有8層,每層都包含可訓練參數(連接權重)。
  第一層:輸入層。輸入圖像的尺寸爲32*32。這要比Mnist數據庫(caffe中的輸入尺寸爲28*28)中最大的字母還大。這樣做的原因是希望潛在的明顯特徵,比如筆畫斷續、角點能夠出現在最高層特徵監測子感受野的中心。
  第二層:C1卷積層。它是第一個卷積層,它由6個特徵圖Feature Map構成,5*5大小的卷積核。而特徵圖中每個神經元與輸入中5*5的鄰域相連。特徵圖的大小爲28*28(32-5+1=28),所以每個特徵圖上有28*28個神經元。C1有156個可訓練參數(每個濾波器5*5=25個unit參數和一個bias參數,一共6個濾波器,共(5*5+1)*6=156個參數),共156(28*28)=122,304個連接。(最後順便說一下爲什麼要進行卷積?卷積運算一個重要的特點就是,通過卷積運算,可以使原信號特徵增強,並且降低噪音,同時不同的卷積層可以提取到圖像中的不同特徵,這層卷積我們就是用了6個卷積核)
  第三層:S2層是一個下采樣層,有6個14*14的特徵圖。特徵圖中的每個單元與C1中相對應特徵圖的2*2鄰域相連接。S2層每個單元的4個輸入相加,乘以一個可訓練參數,再加上一個可訓練偏置,結果通過sigmoid函數計算而得。每個單元的2*2感受野並不重疊,因此S2中每個特徵圖的大小是C1中特徵圖大小的1/4(行和列各1/2),所以S2中每一個特徵圖都有14*14個神經元。S2層有12個可訓練參數(2*6=12,2代表一個可訓練參數和一個可訓練偏置)和5880個連接,計算過程如下:(4+1)*(14*14)*6=5880。(說明下爲什麼要進行下采樣?利用圖像局部相關性的原理,對圖像進行子抽樣,可以減少數據處理量同時保留有用信息,從而降低了網絡訓練的參數和模型的過擬合程度)。
  一般神經網絡常採用最大池化或平均池化。子採樣具體過程如下:每鄰域四個像素求和變爲一個像素,然後通過標量Wx+1加權,再增加偏置bx+1,然後通過一個sigmoid激活函數,產生一個大概縮小四倍的特徵映射圖Sx+1。在整個網絡中,S-層可看作是模糊濾波器,起到二次特徵提取的作用。隱層與隱層之間空間分辨率遞減,而每層所含的平面數遞增,這樣可用於檢測更多的特徵信息。
  第四層:C3層是第二個卷積層。它同樣通過5x5的卷積核去卷積層S2,然後得到的特徵map就只有10x10個神經元,但是它有16種不同的卷積核,所以就存在16個特徵map了。這裏需要注意的一點是:C3中的每個特徵map是連接到S2中的所有6個或者幾個特徵map的,表示本層的特徵map是上一層提取到的特徵map的不同組合(這裏是組合,就像人的視覺系統一樣,底層的結構構成上層更抽象的結構,例如邊緣構成形狀或者目標的部分)。
  在Yann的論文中說明了C3中每個特徵圖與S2中哪些特徵圖相連,連接情況如下表所示:

這裏寫圖片描述

  由上表可以發現C3的前6個特徵圖以S2中3個相鄰的特徵圖爲輸入。接下來6個特徵圖以S2中4個相鄰特徵圖爲輸入,下面的3個特徵圖以不相鄰的4個特徵圖爲輸入。最後一個特徵圖以S2中所有特徵圖爲輸入。這樣C3層有1516個可訓練參數((25*3+1)*6+(25*4+1)*9+(25*6+1)=1516)和151600(1516*10*10)個連接。
  那麼爲什麼不把S2中的每個特徵圖連接到每個C3的特徵圖呢?原因有2點。第一,不完全的連接機制將連接的數量保持在合理的範圍內。第二,也是最重要的,其破壞了網絡的對稱性。由於不同的特徵圖有不同的輸入,所以迫使他們抽取不同的特徵(希望是互補的)。
  第五層:S4層是一個下采樣層,由16個5*5大小的特徵圖構成。特徵圖中的每個單元與C3中相應特徵圖的2*2鄰域相連接,跟C1和S2之間的連接一樣。S4層有32(2*16)個可訓練參數(每個特徵圖1個因子和一個偏置)和2000個連接。
  第六層:C5層是一個卷積層,有120個特徵圖。每個單元與S4層的全部16個特徵圖的5*5領域相連。由於S4層特徵圖的大小也爲5*5(同濾波器一樣),故C5特徵圖的大小爲1*1,這構成了S4和C5之間的全連接。之所以仍將C5標示爲卷積層而非全連接層,是因爲如果LeNet-5的輸入變大,而其他的保持不變,那麼此時特徵圖的維數就會比1*1大。C5層有48120個可訓練連接((5*5*16+1)*120)。
  第七層:F6層有84個單元(之所以選這個數字的原因來自於輸出層的設計),與C5層全相連。有10164個可訓練參數((1*1*120+1)*84=10164)。如同經典神經網絡,F6層計算輸入向量和權重向量之間的點積,再加上一個偏置。然後將其傳遞給sigmoid函數產生單元i的一個狀態。
第八層:輸出層由歐式徑向基函數(Euclidean Radial Basis Function)單元組成,每類一個單元,每個有84個輸入。換句話說,每個輸出RBF單元計算輸入向量和參數向量之間的歐式距離。輸入離參數向量越遠,RBF輸出的越大。一個RBF輸出可以被理解爲衡量輸入模式和與RBF相關聯類的一個模型的匹配程度的懲罰項。用概率術語來說,RBF輸出可以被理解爲F6層配置空間的高斯分佈的負log-likelihood。給定一個輸入模式,損失函數應能使得F6的配置與RBF參數向量(即模式的期望分類)足夠接近。這些單元的參數是人工選取並保持固定的(至少初始時候如此)。這些參數向量的成分被設爲-1或1。雖然這些參數可以以-1和1等概率的方式任選,或者構成一個糾錯碼,但是被設計成一個相應字符類的7*12大小(即84)的格式化圖片。這種表示對識別單獨的數字不是很有用,但是對識別可打印ASCII集中的字符串很有用。
  使用這種分佈編碼而非更常用的“1 of N”編碼用於產生輸出的另一個原因是,當類別比較大的時候,非分佈編碼的效果比較差。原因是大多數時間非分佈編碼的輸出必須爲0。這使得用sigmoid單元很難實現。另一個原因是分類器不僅用於識別字母,也用於拒絕非字母。使用分佈編碼的RBF更適合該目標。因爲與sigmoid不同,他們在輸入空間的較好限制的區域內興奮,而非典型模式更容易落到外邊。
  RBF參數向量起着F6層目標向量的角色。需要指出這些向量的成分是+1或-1,這正好在F6 sigmoid的範圍內,因此可以防止sigmoid函數飽和。實際上,+1和-1是sigmoid函數的最大彎曲的點處。這使得F6單元運行在最大非線性範圍內。必須避免sigmoid函數的飽和,因爲這將會導致損失函數較慢的收斂和病態問題。

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