Lenet5設計理解——咬文嚼字系列

    最近在看lecun大神的這篇經典文章:“Gradient-Based Learning Appliedto Document Recognition”,文章較老,但是對於lenet5的一些基礎概念講解淺顯易懂,本文主要對lenet5的架構和設計講一些我的粗淺理解,對一些問題寫一些我的看法,同時我也提出了一些自己的疑惑,才疏學淺希望能和各位一起討論。

這裏再說一點我最近看博客的想法:對任何一種算法由於大家的背景不同理解上可能有偏差,尤其是原作者是外國人的一些算法,網上的一些中文翻譯一些地方會存在問題,所以還是建議抽時間能把算法原文看看,希望這裏能成爲大家共同討論的平臺。

1. lenet5架構理解

C1卷積層:卷積層就是fig2的convolution層,對輸入圖像的某個位置使用一樣權重的感知野得到一幅feature map,針對不同權重的感知野得到一組feature maps,然後把這些feature maps統稱爲卷積層,這樣卷積層就獲得了每一個位置的不同特徵。fig2有六副feature maps,所以有六組不同特徵。
  • 共享權重:lecun在文章裏面單獨提到了“共享權重”這個概念,但其實這個概念學過圖像處理的人都知道卷積操作,比如對圖像做垂直邊緣檢測子:,其實就是對圖像每個位置做卷積操作,整幅圖共享這個權重,本文提到“共享權重”就是這個意思。只不過卷積層的共享權重是個未知量,需要後續計算出來。
  • 卷積層能學到什麼:我得一點想法是如果拿濾波器類比假設每一個卷積層分別是低通、中通、高通濾波後的圖像,卷積層就能獲得圖像的低頻信息、圖像的高頻信息(比如噪聲等);同樣的小波變換、傅立葉變換也是類似的。
S2下采樣層:下采樣層在原文裏的解釋原話是降低分辨率,它取圖像的2*2小塊進行平均然後乘權重加上偏置過sigmoid函數,取圖像2*2小塊進行平均就是下采樣,平均的過程就是模糊,下采樣就是降低分辨率,所以通過下采樣層,圖像一些小的畸變,噪聲等等都可以解決。下采樣層還有一個很大的優點是擁有尺度不變性,lenet5我們可以根據自己的圖像大小來設計下采樣的模版大小。
C3卷積層:C1卷積層的卷積原理方法類似,唯一不同的是c1輸入圖像只有1副,而這裏輸入圖像爲6副,並且輸出是16副,
作者在原文裏畫的這個表可以說是非常形象了,0~5表示S2層的6幅圖,橫軸0~15表示C3的feature maps,然後第一副feature map就取的是S2層0,1,2三幅圖,使用同一個卷積核k1對這三幅圖分別卷積再求和,所以輸出的圖像是一副哦; 以此類推,第二副feature map就取的是S2層1,2,3三幅圖,使用同一個卷積核k2對這三幅圖分別卷積再求和。所以爲了生成C3的16幅圖,共需要16個卷積核。
另外這篇博客https://blog.csdn.net/zhangjunhit/article/details/53536915畫了副圖形象的解釋了這個,
我在這裏想解釋的是
  • 爲什麼要取這樣的組合呢:我是這樣像的這一層是比上一個卷積層更高級的特徵,作者實現的方法就是用了原始6張feature maps的任意組合,從圖像的兩兩組合開始,2= 6-4,所以四個一組的特徵跟2個一組的特徵是一個意思,這是因爲權重是可以取負數的,3=6-3,所以三個一組的特徵就是6個,4出現了,5=6-1,一副圖像在c1層已經考慮了,最後是6張圖。所以說作者的這16個組合是最簡單但是覆蓋率又最廣的組合了,贊!我覺得這有點像sift的金字塔模型,也是取得若干層特徵組合。
S4下采樣層:跟s2類似
C5卷積層:這一層卷積原理跟普通的卷積層一樣。注意這一層依然是卷積層!!!只是因爲恰巧模版大小和原feature maps大小一樣,所以輸出變成一緯。
F6層:這一層採用全連接的方式和c5連接,對c5的輸入乘以權重加上偏置,過激活函數:tanh,文章裏作者還解釋了爲啥取tanh還沒有到,等我看到了再補充。
輸出層:這裏先要解釋下爲啥F6層的神經元數量是84。這一層使用7*12位圖=84 來表示數字,一個原因是識別ascii表示的數字很有用,這樣可以區別易混淆的數字,比如數字0和字母o很像,但是一些後處理方法可以糾正這些錯誤,因爲相似的數字和字母會有相似的RBF輸出,後處理就可以針對這些相似的結果專門處理從而找到一個真正的結果。另外一個原因是過去的1~n編碼,這種非分散的編碼對於十幾個類別以上的分類問題效果差,因爲輸出需要只能是一個數字或者字母,這就需要選不到別的數字,而通常sigmoid函數長這樣:

我們希望能夠長成這樣:正巧RBF核函數就長類似這樣,

F6層的每一個RBF單元的輸出y,x是F6的輸出,:

這個公式的意思是:當輸入x的模式和權重w的模式非常接近的時候,y就最小,這裏的w可以手動選擇並且保持固定,並且取值爲1或者-1,保證-1和1的數量相等即可,當然w還有別的取值方法。w有i*j個元素。
這裏我們假設神經元個數爲4,那麼如下圖所示,數字0的編碼就是1,-1,-1,1;別的數字也有自己對應的編碼,如果x的編碼和數字1的編碼最接近,我們就認爲識別到的數字爲1,這個編碼就是原論文中提到的pattern。
由於文章給的神經元個數爲84,所以編碼長度是84,網絡訓練的結果就會給每個輸入數字找到一個對應的編碼。

2. 爲什麼CNN不採用全連接網絡?CNN結構設計的目的?

1)全連接網絡連接的網絡極多,所以需要更大的訓練集;對於圖像各種變換(平移、旋轉);全連接網絡會忽略掉輸入信號的拓撲結構,而圖像像素周圍的結構信息很重要,
2)CNN具有平移不變性;CNN可以學習到圖像的局部特徵,局部的結構信息
感知野,共享權重;空間和時序下采樣
3)使用局部感知野神經元可以提取基本的視覺特徵比如:邊緣、端點、角點;
之後將這些特徵通過下采樣層結合從而發現更高階的特徵,

  • 卷積層的平移不變性:卷積的目的是提取特徵,比如數字“7”,對應於左上角有一橫,右上角有個角點,左下角有斜槓。那麼將數字“7”平移之後,左上角、右上角、左下角的特徵相對位置依然存在。所以卷積關心的是特徵本身和特徵之間的相對位置,而不是絕對位置。比如“左上角”和“右上角”特徵的左和右其實是相對的。但是我覺得Lenet5的平移不變性和旋轉不變性還是有待商榷,作者的官網畫圖顯示了正負40度的平移不變性,但是注意那個圖像旋轉軸基本是中心, http://yann.lecun.com/exdb/lenet/rotation.html

3. LeNet-5的參數數目、連接數是怎麼算的?

圖像是28*28的,由於第一層卷積是5*5窗函數,所以input是32*32;
C1: 待訓練參數:(5*5*1+1)*6=156 ,5*5的窗函數*6幅圖對應的6組不同窗函數+6個偏置。
連接數:25*28*28*6+28*28*6=122304 ,係數部分+偏置部分
S2: 待訓練參數:(1+1)*6=12 ,6個係數+6個偏置。
連接數:4*14*14*6+14*14*6=5880
C3:待訓練參數:(5*5*3+1)*6+(5*5*4+1)*6+(5*5*4+1)*3+(5*5*6+1)=1516 ,
連接數:[(25*3+ 1)*6+(25*4+ 1)*6+(25*4+ 1)*3+(25*6+ 1)]*100=151600
S4:待訓練參數:(1+1)*16=32 ,6個係數+6個偏置。
連接數:4*5*5*16+5*5*16=2000
C5:
連接數:(25*16+1)*120=48120
F6:爲啥定義84層呢?因爲這裏使用的是7*12位圖=84,這種表示方法對於可打印的ASCII集的字符表示更有用,而不是通常識別的數字,因爲普通的數字可能很相像,容易混淆。
連接數:(120+1)*84=10164


未完待續。


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