卷積神經(jīng)網(wǎng)絡(luò)是一種特殊的多層神經(jīng)網(wǎng)絡(luò),像其它的神經(jīng)網(wǎng)絡(luò)一樣,卷積神經(jīng)網(wǎng)絡(luò)也使用一種反向傳播算法來進(jìn)行訓(xùn)練,不同之處在于網(wǎng)絡(luò)的結(jié)構(gòu)。卷積神經(jīng)網(wǎng)絡(luò)的網(wǎng)絡(luò)連接具有局部連接、參數(shù)共享的特點(diǎn)。局部連接是相對于普通神經(jīng)網(wǎng)絡(luò)的全連接而言的,是指這一層的某個(gè)節(jié)點(diǎn)只與上一層的部分節(jié)點(diǎn)相連。參數(shù)共享是指一層中多個(gè)節(jié)點(diǎn)的連接共享相同的一組參數(shù)。
一個(gè)典型的神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)是全連接的,即某一層的某個(gè)節(jié)點(diǎn)與上一層的每個(gè)節(jié)點(diǎn)相連,且每個(gè)節(jié)點(diǎn)各自使用一套參數(shù),這樣的結(jié)構(gòu)就是經(jīng)典的全連接結(jié)構(gòu)。在全連接的網(wǎng)絡(luò)中,假如k層有n個(gè)節(jié)點(diǎn),k+1層有m個(gè)節(jié)點(diǎn),則一共有n*m個(gè)連接;每個(gè)連接都有一個(gè)參數(shù),外加每個(gè)k+1層節(jié)點(diǎn)有一個(gè)bias,則共有n*m + m個(gè)訓(xùn)練參數(shù),所以全連接的層的連接數(shù)、參數(shù)數(shù)量的數(shù)量級約為O(n^2)。全連接的網(wǎng)絡(luò)的結(jié)構(gòu)如下圖:
Figure1 全連接的網(wǎng)絡(luò)
卷積神經(jīng)網(wǎng)絡(luò)采用局部連接和參數(shù)共享的方式連接網(wǎng)絡(luò)。對于一個(gè)卷積神經(jīng)網(wǎng)絡(luò),假如該網(wǎng)絡(luò)的第k層有n個(gè)節(jié)點(diǎn),k+1層為卷積層且有m個(gè)節(jié)點(diǎn),則k+1層的每個(gè)節(jié)點(diǎn)只與k層的部分節(jié)點(diǎn)相連,此處假設(shè)只與k層的i個(gè)節(jié)點(diǎn)相連(局部連接);另外k+1層的每個(gè)節(jié)點(diǎn)的連接共享相同的參數(shù)、相同的bias(參數(shù)共享)。這樣該卷積神經(jīng)網(wǎng)絡(luò)的第k、k+1層間共有m*i個(gè)連接、i+1個(gè)參數(shù)。由于i小于n且為常數(shù),所以卷積層的連接數(shù)、參數(shù)數(shù)量的數(shù)量級約為O(n),遠(yuǎn)小于全連接的O(n^2)的數(shù)量級。卷積神經(jīng)網(wǎng)絡(luò)的部分連接的結(jié)構(gòu)如下圖:
Figure2 部分連接且卷積層各節(jié)點(diǎn)的輸入節(jié)點(diǎn)有重疊的網(wǎng)絡(luò)
Figure3 部分連接且卷積層各節(jié)點(diǎn)的輸入節(jié)點(diǎn)無重疊的網(wǎng)絡(luò)
卷積神經(jīng)網(wǎng)絡(luò)在使用時(shí)往往是多層的,下面通過LeNet-5的網(wǎng)絡(luò)連接來舉例說明一個(gè)卷積神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)和特點(diǎn)。LeNet-5是Yann LeCun在1998年設(shè)計(jì)的用于手寫數(shù)字識別的卷積神經(jīng)網(wǎng)絡(luò),是早期卷積神經(jīng)網(wǎng)絡(luò)中最有代表性的實(shí)驗(yàn)系統(tǒng)之一。
LenNet-5共有7層(不包括輸入層),每層都包含不同數(shù)量的訓(xùn)練參數(shù)。各層的結(jié)構(gòu)如Figure 4所示:
Figure4 LeNet-5的網(wǎng)絡(luò)結(jié)構(gòu)
LeNet-5中主要的有卷積層、下抽樣層、全連接層3中連接方式。全連接層在這里就不贅述。
卷積層采用的都是5x5大小的卷積核,且卷積核每次滑動(dòng)一個(gè)像素,一個(gè)特征圖譜使用同一個(gè)卷積核(即特征圖譜內(nèi)卷積核共享參數(shù)),卷積核的結(jié)構(gòu)見Figure 5。每個(gè)上層節(jié)點(diǎn)的值乘以連接上的參數(shù),把這些乘積及一個(gè)偏置參數(shù)相加得到一個(gè)和,把該和輸入激活函數(shù),激活函數(shù)的輸出即是下一層節(jié)點(diǎn)的值。卷積核有5x5個(gè)連接參數(shù)加上1個(gè)偏置共26個(gè)訓(xùn)練參數(shù)。這樣局部連接、參數(shù)共享的方式,在數(shù)學(xué)上相當(dāng)于上一層節(jié)點(diǎn)矩陣與連接參數(shù)矩陣做卷積得到的結(jié)果矩陣,即下一層的節(jié)點(diǎn)值,這是卷積神經(jīng)網(wǎng)絡(luò)名字的由來。Figure 6顯示了卷積神經(jīng)網(wǎng)絡(luò)連接于矩陣卷積的對應(yīng)關(guān)系:
Figure5 一個(gè)卷積節(jié)點(diǎn)的連接方式
Figure6 卷積神經(jīng)網(wǎng)絡(luò)連接與矩陣卷積的對應(yīng)關(guān)系
下抽樣層采用的是2x2的輸入域,即上一層的4個(gè)節(jié)點(diǎn)作為下一層1個(gè)節(jié)點(diǎn)的輸入,且輸入域不重疊,即每次滑動(dòng)2個(gè)像素,下抽樣節(jié)點(diǎn)的結(jié)構(gòu)見Figure 6。每個(gè)下抽樣節(jié)點(diǎn)的4個(gè)輸入節(jié)點(diǎn)求和后取平均,均值乘以一個(gè)參數(shù)加上一個(gè)偏置參數(shù)作為激活函數(shù)的輸入,激活函數(shù)的輸出即是下一層節(jié)點(diǎn)的值。一個(gè)下抽樣節(jié)點(diǎn)只有2個(gè)訓(xùn)練參數(shù)。
Figure7 一個(gè)下抽樣節(jié)點(diǎn)的連接方式
輸入層是32x32像素的圖片,比數(shù)據(jù)集中最大的的字符(最大體積是20x20像素的字符位于28x28像素區(qū)域的中心)大很多。這樣做的原因是能使?jié)撛诘奶卣鞅热邕吘壍亩它c(diǎn)、拐角能夠出現(xiàn)在最高層次的特征解碼器的接收域的中心。LeNet-5的最后一個(gè)卷積層(C3,見后面)的接收域的中心與輸入的32x32的圖像的中心的20x20的區(qū)域相連。輸入的像素值被標(biāo)準(zhǔn)化為背景色(白色)值為-0.1、前景色(黑色)值為1.175,這樣使得輸入的均值大致為0、方差大致為1,從而有利于加快訓(xùn)練的速度。
在后面的描述中,卷積層用Cx標(biāo)記,子抽樣層用Sx標(biāo)記,全連接層用Fx標(biāo)記,其中x表示該層的是LeNet的第x層。
C1層是卷積層,形成6個(gè)特征圖譜。特征圖譜中的每個(gè)單元與輸入層的一個(gè)5x5的相鄰區(qū)域相連,即卷積的輸入?yún)^(qū)域大小是5x5,每個(gè)特征圖譜內(nèi)參數(shù)共享,即每個(gè)特征圖譜內(nèi)只使用一個(gè)共同卷積核,卷積核有5x5個(gè)連接參數(shù)加上1個(gè)偏置共26個(gè)參數(shù)。卷積區(qū)域每次滑動(dòng)一個(gè)像素,這樣卷積層形成的特征圖譜每個(gè)的大小是28x28。C1層共有26x6=156個(gè)訓(xùn)練參數(shù),有(5x5+1)x28x28x6=122304個(gè)連接。Figure 8 是C1層的連接結(jié)構(gòu)。
Figure8 C1層的結(jié)構(gòu)
S2層是一個(gè)下抽樣層。C1層的6個(gè)28x28的特征圖譜分別進(jìn)行以2x2為單位的下抽樣得到6個(gè)14x14的圖。每個(gè)特征圖譜使用一個(gè)下抽樣核,每個(gè)下抽象核有兩個(gè)訓(xùn)練參數(shù),所以共有2x6=12個(gè)訓(xùn)練參數(shù),但是有5x14x14x6=5880個(gè)連接。Figure 9是S2層的網(wǎng)絡(luò)連接的結(jié)構(gòu)。
Figure9 S2層的網(wǎng)絡(luò)結(jié)構(gòu)
C3層是一個(gè)卷積層,卷積和和C1相同,不同的是C3的每個(gè)節(jié)點(diǎn)與S2中的多個(gè)圖相連。C3層有16個(gè)10x10的圖,每個(gè)圖與S2層的連接的方式如Table1 所示。C3與S2中前3個(gè)圖相連的卷積結(jié)構(gòu)見Figure 10.這種不對稱的組合連接的方式有利于提取多種組合特征。改成有(5x5x3+1)x6 + (5x5x4 + 1) x 3 + (5x5x4 +1)x6 + (5x5x6+1)x1 = 1516個(gè)訓(xùn)練參數(shù),共有1516x10x10=151600個(gè)連接。
Table 1 C3與S2的連接關(guān)系
Figure10 C3與S2中前3個(gè)圖相連的卷積結(jié)構(gòu)
S4是一個(gè)下采樣層。C3層的16個(gè)10x10的圖分別進(jìn)行以2x2為單位的下抽樣得到16個(gè)5x5的圖。這一層有2x16共32個(gè)訓(xùn)練參數(shù),5x5x5x16=2000個(gè)連接。連接的方式與S2層類似。
C5層是一個(gè)卷積層。由于S4層的16個(gè)圖的大小為5x5,與卷積核的大小相同,所以卷積后形成的圖的大小為1x1。這里形成120個(gè)卷積結(jié)果。每個(gè)都與上一層的16個(gè)圖相連。所以共有(5x5x16+1)x120 = 48120個(gè)參數(shù),同樣有48120個(gè)連接。C5層的網(wǎng)絡(luò)結(jié)構(gòu)見Figure 11。
Figure11 C5層的連接方式
F6層是全連接層。F6層有84個(gè)節(jié)點(diǎn),對應(yīng)于一個(gè)7x12的比特圖,-1表示白色,1表示黑色,這樣每個(gè)符號的比特圖的黑白色就對應(yīng)于一個(gè)編碼。該層的訓(xùn)練參數(shù)和連接數(shù)是(120 + 1)x84=10164. 比特圖的樣式見Figure 12,連接方式見Figure 13.
Figure12 編碼的比特圖
Figure13 F6層的連接方式
Output層也是全連接層,共有10個(gè)節(jié)點(diǎn),分別代表數(shù)字0到9,且如果節(jié)點(diǎn)i的值為0,則網(wǎng)絡(luò)識別的結(jié)果是數(shù)字i。采用的是徑向基函數(shù)(RBF)的網(wǎng)絡(luò)連接方式。假設(shè)x是上一層的輸入,y是RBF的輸出,則RBF輸出的計(jì)算方式是:
的值由i的比特圖編碼確定。越接近于0,則越接近于,即越接近于i的比特圖編碼,表示當(dāng)前網(wǎng)絡(luò)輸入的識別結(jié)果是字符i。該層有84x10=840個(gè)設(shè)定的參數(shù)和連接。連接的方式見Figure 14.
Figure14 Output層的網(wǎng)絡(luò)連接方式
以上是LeNet-5的卷積神經(jīng)網(wǎng)絡(luò)的完整結(jié)構(gòu),共約有60,840個(gè)訓(xùn)練參數(shù),340,908個(gè)連接。一個(gè)數(shù)字識別的效果如Figure 15所示。
Figure15 LeNet-5識別數(shù)字3的過程
通過對LeNet-5的網(wǎng)絡(luò)結(jié)構(gòu)的分析,可以直觀地了解一個(gè)卷積神經(jīng)網(wǎng)絡(luò)的構(gòu)建方法,為分析、構(gòu)建更復(fù)雜、更多層的卷積神經(jīng)網(wǎng)絡(luò)做準(zhǔn)備。
參考文獻(xiàn):
[1] Yoshua Bengio, DEEP LEARNING, Convolutional Networks, http://www.iro.umontreal.ca/~bengioy/dlbook/ .
[2] Y. LeCun, L. Bottou, Y. Bengio, and P. Haffner. Gradient-based learning applied to document recognition. Proceedings of the IEEE, november 1998.