最近發現很多以前看的論文都忘了,所以想寫點東西來整理下之前的paper,paper主要是cv(computer vision)方向的。
第一篇:Gradient-based learning applied to document recognition。這是1998年Yann Lecun的一篇大作,是研究CNN必看的一篇文章。文中提出的Le-Net5模型很好的識別了Mnist的手寫體,此模型也被用到了很多銀行的鈔票識別上。下面來研究這篇paper的成果。文章參考:http://blog.csdn.net/zouxy09/article/details/8781543
在分析這篇paper之前我們先要講下CNN的基本原理,卷積神經網絡是人工神經網絡的一種,隨着今年來DL的熱潮而重新為人們所關注,卷積網絡是為識別二維形狀而特殊設計的一個多層感知器,這種網絡結構對平移、比例縮放、傾斜或者共他形式的變形具有高度不變性。
CNN的歷史:
1962年Hubel和Wiesel通過對貓視覺皮層細胞的研究,提出了感受野(receptive field)的概念,1984年日本學者Fukushima基於感受野概念提出的神經認知機(neocognitron)可以看作是卷積神經網絡的第一個實現網絡,也是感受野概念在人工神經網絡領域的首次應用。神經認知機將一個視覺模式分解成許多子模式(特征),然后進入分層遞階式相連的特征平面進行處理,它試圖將視覺系統模型化,使其能夠在即使物體有位移或輕微變形的時候,也能完成識別。通常神經認知機包含兩類神經元,即承擔特征抽取的S-元和抗變形的C-元。S-元中涉及兩個重要參數,即感受野與閾值參數,前者確定輸入連接的數目,后者則控制對特征子模式的反應程度。許多學者一直致力於提高神經認知機的性能的研究:在傳統的神經認知機中,每個S-元的感光區中由C-元帶來的視覺模糊量呈正態分布。如果感光區的邊緣所產生的模糊效果要比中央來得大,S-元將會接受這種非正態模糊所導致的更大的變形容忍性。我們希望得到的是,訓練模式與變形刺激模式在感受野的邊緣與其中心所產生的效果之間的差異變得越來越大。為了有效地形成這種非正態模糊,Fukushima提出了帶雙C-元層的改進型神經認知機。
Van Ooyen和Niehuis為提高神經認知機的區別能力引入了一個新的參數。事實上,該參數作為一種抑制信號,抑制了神經元對重復激勵特征的激勵。多數神經網絡在權值中記憶訓練信息。根據Hebb學習規則,某種特征訓練的次數越多,在以后的識別過程中就越容易被檢測。也有學者將進化計算理論與神經認知機結合,通過減弱對重復性激勵特征的訓練學習,而使得網絡注意那些不同的特征以助於提高區分能力。上述都是神經認知機的發展過程,而卷積神經網絡可看作是神經認知機的推廣形式,神經認知機是卷積神經網絡的一種特例。
CNN的結構:
卷積神經網絡是一個多層的神經網絡,每層由多個二維平面組成,而每個平面由多個獨立神經元組成。
輸入圖像和三個不同的Filter經過卷積,加偏置,通過一個sigmoid函數得到C1,C1我們稱之為Feature Map。然后C1經過sub-samples(相鄰四個像素求平均,加偏置)得到S2,S2中的每個Map經過Filter,加偏置,通過sigmoid函數得到C3,C3經過sub-sample得到S4。如此反復,最終,這些像素值被光柵化,並連接成一個向量輸入到傳統的神經網絡,得到輸出。
一般地,C層為特征提取層,每個神經元的輸入與前一層的局部感受野相連,並提取該局部的特征,一旦該局部特征被提取后,它與其他特征間的位置關系也隨之確定下來;S層是特征映射層,網絡的每個計算層由多個特征映射組成,每個特征映射為一個平面,平面上所有神經元的權值相等。特征映射結構采用影響函數核小的sigmoid函數作為卷積網絡的激活函數,使得特征映射具有位移不變性。
此外,由於一個映射面上的神經元共享權值,因而減少了網絡自由參數的個數,降低了網絡參數選擇的復雜度。卷積神經網絡中的每一個特征提取層(C-層)都緊跟着一個用來求局部平均與二次提取的計算層(S-層),這種特有的兩次特征提取結構使網絡在識別時對輸入樣本有較高的畸變容忍能力。(這些文中都有說明)
CNN除了對shifts和distortions有較好的魯棒性,CNN還具有傳統人工神經網絡不具備的一個優勢,那就是“權值共享”。關於“權值共享”也許很多人有疑問,其實很簡單,我的理解就是對於一個input,雖然有很多感受野(size:5x5),我們都只需要用同一個權值矩陣(Filter)與其相乘,加偏置。也就是說,所有的“感受野”的權值是共享的。這樣可能有人就有疑問:“這樣我們一副圖像所提取的特征不就是相同的了嗎”。不錯,同一個Filter提取的Feature確實是相同的,但是我們這里可以用不同的Filter啊,這樣我們就可以提取我們想要的特征(關於這個特征濾波器的選擇,馬毅的一篇PCANet中利用PCA提取trianImges的8個主成分,然后用每個主成分構成Filter,取得了非常不錯的識別效果。)關於權值共享,這篇博文里面講的非常清楚。http://blog.csdn.net/zouxy09/article/details/8781543
(左邊:Fully connection 右邊:locally connection)
好了,了解了CNN的相關知識,現在我們可以進入這篇Paper的學習了。
文章前面所講到的一些數學優化的算法我們在此略過,直接分析文章的最核心部分,也就是文章給出的那篇網絡結構。
不含輸入層,此網絡層一共有七層(C1, S2, C3, S4, C5, F6,output),這里我們輸入的圖片選為32x32(目的是使得手寫體的特征都能在每個patch的中間,比如‘7’,最左上角的一個endpoint,右上角的Corner,和下面的endpoint,都剛好在patch的中間)。每一個patch就是一個(感受野)。C1層具有6個Feature Maps,每個Feature Maps連接着input的一個5x5的“receptive field”,這樣每個receptive field就有5x5+1 = 26 個參數了。第二層的28*28是這樣得到的,input中的receptive field的size是5x5,step為1,所以每行和每列都有(32-5+1 = 28)個神經元(經過sigmoid函數后這是一個具體的數)。所以Layer C1一共有26*6 = 156個parameters,156*28*28=122304個connections。
從Layer C1到 Layer C2的過程是這樣的。對於C1中的每個Feature Map, 相鄰的2x2區域求average,加上一個偏置,並且相鄰的2x2區域部重疊。這樣每個2x2的區域就有(1+1=2)個參數,整個S2層一共有2x6=12個參數。每個2x2區域有(4+1=5)個connections,所以一共有(4+1)*14*14=5880個connections。
從Layer S2到 Layer C3要麻煩一些,這里首先要聲明,不同於input到C1,這里的S2到C3,並非每個C3中的Feature map都和S2相連接。具體的連接情況如下圖所示:
用文中的原話就是:The first six C3 feature maps take inputs from every contiguous subsets of three feature maps in S2。The next six take input from every contiguous subset of four. the next three take input from some discontinuous subsets, finally the last one takes from all S2 features maps.關於為什么要這么做文中也有講解,具體列出了兩個原因(個人不是很懂,具體可看paper)。這樣我們C3層一共就有(3*6*26 + 4*9*26 + 6*26 = 1560)個參數,文章中的1516是錯誤的。一共有1560*100=156000個connections。
從Layer C3 到 Layer S4分析如上sub-samples所示,一共有(1+1)x16=32個參數,(4+1)*5*5*16=2000個connections。C5的參數個數文中具體給出來的也沒有分析,具體分析過程和S2到C3相同。F6層的之所以是84是由輸入層決定的(每類有84個樣本)。最后,輸出層由歐式徑向基函數(Euclidean Radial Basis Function)單元組成,每類一個單元,每個有84個輸入。換句話說,每個輸出RBF單元計算輸入向量和參數向量之間的歐式距離。輸入離參數向量越遠,RBF輸出的越大。一個RBF輸出可以被理解為衡量輸入模式和與RBF相關聯類的一個模型的匹配程度的懲罰項。用概率術語來說,RBF輸出可以被理解為F6層配置空間的高斯分布的負log-likelihood。
yi是第i類,xj是第i類的第j個樣本。接着我們來計算損失函數:loss function
接着我們就可以用優化算法求出loss function的最小值,更新權值。。。。。
接下來的兩篇文章都是在CNN的基礎上做了一些改進,得到了更好的分類效果,這里簡單的提下他的思想。。
第二篇:PCANet: A Simple Deep Learning Baseline for Image Classification?
這篇文章是馬毅等提出來的基於CNN和PCA的人臉識別的一篇文章,在上一篇我們了解了CNN的基本結構后,接下來講這篇文章剛剛合適。
這是PCANet的一個結構圖,從圖中可以看出其實它就是一個卷積網絡的形式,唯一不同的是Le-Net5所采用的權值(Filter)是通過訓練過程不斷迭代優化得到的,而PCANet所采用的Filter是通過直接提取“receptive field”得到maps, 然后利用PCA提取主成分,每個主成分就是一個Filter。接着把訓練樣本和測試樣本通過這個已知Filter的網絡提取Features,做分類。這樣做的好處是,我們不用通過大量的迭代計算來求出最優的weights,節省了很多計算開銷。同時線下訓練出Filters,在實際做測試分類時也可以節省時間消耗。
對於N個 input image。我們取size = 8x8,step = 1的一個patch去遍歷input,得到一個Feature map,對這個Feature map,我們用PCA求出他的8個主成分,然后將8個主成分resize成8個Filter,然后像CNN那樣得到8個 Feature maps。接下來的第二層和第一層的處理一樣,到第三層我們得到了64個Feature maps。統計着64個Feature maps 得到8個直方圖,這就是我們提取出來的Features 可以用來分類。
第三篇:Face Recognition: A Convolutional Neural-Network Approach (Steve Lawrence)
這篇文章我看的很粗略,文章的主要思想就是把傳統的CNN的sub-sample做了一些改進。Le-Net5的結構中我們的sub-samples直接取相鄰的4x4的patch求average,加偏置,然后通過一個sigmoid函數得到下一層的map,而這里作者改為用一個SOM算法得到一個縮放的作用。這樣做的好處是下一層可以比較准確的保留上一層的信息,同時保持網絡的拓撲結構不變,文章的大量篇幅都用在了SOM算法的介紹上。 下圖就是SOM算法代替sub-sample的一個過程:
下圖是改進后的卷積網絡圖
總體流程圖
這幾篇文章都是和CNN有關的,前一篇是傳統的CNN網絡結構,后面兩篇是對CNN的一個改進,三篇放在一起看,融匯貫通,就不難理解卷積神經網絡的精髓所在了。在這里多說一句,之所以卷積是有效的,這要歸結於生物上的發現,也涉及到 sparse coding的相關知識。下一個博文我將主要講解看過的一些sparse coding相關的文章,希望大家繼續關注。。。。。