自今年七月份以來(lái),一直在實(shí)驗(yàn)室負(fù)責(zé)卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN),期間配置和使用過(guò)theano和cuda-convnet、cuda-convnet2。為了增進(jìn)CNN的理解和使用,特寫(xiě)此博文,以其與人交流,互有增益。正文之前,先說(shuō)幾點(diǎn)自己對(duì)于CNN的感觸。先明確一點(diǎn)就是,Deep Learning是全部深度學(xué)習(xí)算法的總稱,CNN是深度學(xué)習(xí)算法在圖像處理領(lǐng)域的一個(gè)應(yīng)用。
第一點(diǎn),在學(xué)習(xí)Deep learning和CNN之前,總以為它們是很了不得的知識(shí),總以為它們能解決很多問(wèn)題,學(xué)習(xí)了之后,才知道它們不過(guò)與其他機(jī)器學(xué)習(xí)算法如svm等相似,仍然可以把它當(dāng)做一個(gè)分類器,仍然可以像使用一個(gè)黑盒子那樣使用它。
第二點(diǎn),Deep Learning強(qiáng)大的地方就是可以利用網(wǎng)絡(luò)中間某一層的輸出當(dāng)做是數(shù)據(jù)的另一種表達(dá),從而可以將其認(rèn)為是經(jīng)過(guò)網(wǎng)絡(luò)學(xué)習(xí)到的特征。基于該特征,可以進(jìn)行進(jìn)一步的相似度比較等。
第三點(diǎn),Deep Learning算法能夠有效的關(guān)鍵其實(shí)是大規(guī)模的數(shù)據(jù),這一點(diǎn)原因在于每個(gè)DL都有眾多的參數(shù),少量數(shù)據(jù)無(wú)法將參數(shù)訓(xùn)練充分。
接下來(lái)話不多說(shuō),直接奔入主題開(kāi)始CNN之旅。
卷積神經(jīng)網(wǎng)絡(luò)簡(jiǎn)介(Convolutional Neural Networks,簡(jiǎn)稱CNN)
卷積神經(jīng)網(wǎng)絡(luò)是近年發(fā)展起來(lái),并引起廣泛重視的一種高效識(shí)別方法。20世紀(jì)60年代,Hubel和Wiesel在研究貓腦皮層中用于局部敏感和方向選擇的神經(jīng)元時(shí)發(fā)現(xiàn)其獨(dú)特的網(wǎng)絡(luò)結(jié)構(gòu)可以有效地降低反饋神經(jīng)網(wǎng)絡(luò)的復(fù)雜性,繼而提出了卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks-簡(jiǎn)稱CNN)?,F(xiàn)在,CNN已經(jīng)成為眾多科學(xué)領(lǐng)域的研究熱點(diǎn)之一,特別是在模式分類領(lǐng)域,由于該網(wǎng)絡(luò)避免了對(duì)圖像的復(fù)雜前期預(yù)處理,可以直接輸入原始圖像,因而得到了更為廣泛的應(yīng)用。 K.Fukushima在1980年提出的新識(shí)別機(jī)是卷積神經(jīng)網(wǎng)絡(luò)的第一個(gè)實(shí)現(xiàn)網(wǎng)絡(luò)。隨后,更多的科研工作者對(duì)該網(wǎng)絡(luò)進(jìn)行了改進(jìn)。其中,具有代表性的研究成果是Alexander和Taylor提出的“改進(jìn)認(rèn)知機(jī)”,該方法綜合了各種改進(jìn)方法的優(yōu)點(diǎn)并避免了耗時(shí)的誤差反向傳播。
一般地,CNN的基本結(jié)構(gòu)包括兩層,其一為特征提取層,每個(gè)神經(jīng)元的輸入與前一層的局部接受域相連,并提取該局部的特征。一旦該局部特征被提取后,它與其它特征間的位置關(guān)系也隨之確定下來(lái);其二是特征映射層,網(wǎng)絡(luò)的每個(gè)計(jì)算層由多個(gè)特征映射組成,每個(gè)特征映射是一個(gè)平面,平面上所有神經(jīng)元的權(quán)值相等。特征映射結(jié)構(gòu)采用影響函數(shù)核小的sigmoid函數(shù)作為卷積網(wǎng)絡(luò)的激活函數(shù),使得特征映射具有位移不變性。此外,由于一個(gè)映射面上的神經(jīng)元共享權(quán)值,因而減少了網(wǎng)絡(luò)自由參數(shù)的個(gè)數(shù)。卷積神經(jīng)網(wǎng)絡(luò)中的每一個(gè)卷積層都緊跟著一個(gè)用來(lái)求局部平均與二次提取的計(jì)算層,這種特有的兩次特征提取結(jié)構(gòu)減小了特征分辨率。
CNN主要用來(lái)識(shí)別位移、縮放及其他形式扭曲不變性的二維圖形。由于CNN的特征檢測(cè)層通過(guò)訓(xùn)練數(shù)據(jù)進(jìn)行學(xué)習(xí),所以在使用CNN時(shí),避免了顯示的特征抽取,而隱式地從訓(xùn)練數(shù)據(jù)中進(jìn)行學(xué)習(xí);再者由于同一特征映射面上的神經(jīng)元權(quán)值相同,所以網(wǎng)絡(luò)可以并行學(xué)習(xí),這也是卷積網(wǎng)絡(luò)相對(duì)于神經(jīng)元彼此相連網(wǎng)絡(luò)的一大優(yōu)勢(shì)。卷積神經(jīng)網(wǎng)絡(luò)以其局部權(quán)值共享的特殊結(jié)構(gòu)在語(yǔ)音識(shí)別和圖像處理方面有著獨(dú)特的優(yōu)越性,其布局更接近于實(shí)際的生物神經(jīng)網(wǎng)絡(luò),權(quán)值共享降低了網(wǎng)絡(luò)的復(fù)雜性,特別是多維輸入向量的圖像可以直接輸入網(wǎng)絡(luò)這一特點(diǎn)避免了特征提取和分類過(guò)程中數(shù)據(jù)重建的復(fù)雜度。
1. 神經(jīng)網(wǎng)絡(luò)
首先介紹神經(jīng)網(wǎng)絡(luò),這一步的詳細(xì)可以參考資源1。簡(jiǎn)要介紹下。神經(jīng)網(wǎng)絡(luò)的每個(gè)單元如下:

其對(duì)應(yīng)的公式如下:

其中,該單元也可以被稱作是Logistic回歸模型。當(dāng)將多個(gè)單元組合起來(lái)并具有分層結(jié)構(gòu)時(shí),就形成了神經(jīng)網(wǎng)絡(luò)模型。下圖展示了一個(gè)具有一個(gè)隱含層的神經(jīng)網(wǎng)絡(luò)。

其對(duì)應(yīng)的公式如下:
