本文主要是對(duì)自斯坦福CS231n課程進(jìn)行學(xué)習(xí)的筆記。在本章節(jié)我們將討論卷積神經(jīng)網(wǎng)絡(luò)的構(gòu)建層和具體的結(jié)構(gòu),這也是課程的最后的章節(jié)。我覺得這個(gè)課程主要是對(duì)神經(jīng)網(wǎng)絡(luò)理解和原理的簡(jiǎn)介。至于具體的實(shí)現(xiàn),我會(huì)在接下來(lái)的博客里面介紹一種新的深度學(xué)習(xí)庫(kù)-keras。里面會(huì)具體到實(shí)現(xiàn)環(huán)節(jié),敬請(qǐng)期待。詳細(xì)可以見課程筆記
卷積神經(jīng)網(wǎng)絡(luò)
卷積神經(jīng)網(wǎng)絡(luò)和上一章講的常規(guī)神經(jīng)網(wǎng)絡(luò)非常相似:它們都是由神經(jīng)元組成,神經(jīng)元中有具有學(xué)習(xí)能力的權(quán)重和偏差。每個(gè)神經(jīng)元都得到一些輸入數(shù)據(jù),進(jìn)行內(nèi)積運(yùn)算后再進(jìn)行激活函數(shù)運(yùn)算。整個(gè)網(wǎng)絡(luò)依舊是一個(gè)可導(dǎo)的評(píng)分函數(shù):該函數(shù)的輸入是原始的圖像像素,輸出是不同類別的評(píng)分。在最后一層(往往是全連接層),網(wǎng)絡(luò)依舊有一個(gè)損失函數(shù)(比如SVM或Softmax),并且在神經(jīng)網(wǎng)絡(luò)中我們實(shí)現(xiàn)的各種技巧和要點(diǎn)依舊適用于卷積神經(jīng)網(wǎng)絡(luò)。
那么有哪些地方變化了呢?卷積神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)基于一個(gè)假設(shè),即輸入數(shù)據(jù)是圖像,基于該假設(shè),我們就向結(jié)構(gòu)中添加了一些特有的性質(zhì)。這些特有屬性使得前向傳播函數(shù)實(shí)現(xiàn)起來(lái)更高效,并且大幅度降低了網(wǎng)絡(luò)中參數(shù)的數(shù)量。
卷積神經(jīng)網(wǎng)絡(luò)的各層中的神經(jīng)元是3維排列的:寬度、高度和深度(這里的深度指的是激活數(shù)據(jù)體的第三個(gè)維度,而不是整個(gè)網(wǎng)絡(luò)的深度,整個(gè)網(wǎng)絡(luò)的深度指的是網(wǎng)絡(luò)的層數(shù))。舉個(gè)例子,CIFAR-10中的圖像是作為卷積神經(jīng)網(wǎng)絡(luò)的輸入,該數(shù)據(jù)體的維度是32x32x3(寬度,高度和深度)。我們將看到,層中的神經(jīng)元將只與前一層中的一小塊區(qū)域連接,而不是采取全連接方式。對(duì)于用來(lái)分類CIFAR-10中的圖像的卷積網(wǎng)絡(luò),其最后的輸出層的維度是1x1x10,因?yàn)樵诰矸e神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的最后部分將會(huì)把全尺寸的圖像壓縮為包含分類評(píng)分的一個(gè)向量,向量是在深度方向排列的。下面是例子:
用來(lái)構(gòu)建卷積神經(jīng)網(wǎng)絡(luò)的各種層
一個(gè)簡(jiǎn)單的卷積神經(jīng)網(wǎng)絡(luò)是由各種層按照順序排列組成,網(wǎng)絡(luò)中的每個(gè)層使用一個(gè)可以微分的函數(shù)將激活數(shù)據(jù)從一個(gè)層傳遞到另一個(gè)層。卷積神經(jīng)網(wǎng)絡(luò)主要由三種類型的層構(gòu)成:卷積層,匯聚(Pooling)層和全連接層(全連接層和常規(guī)神經(jīng)網(wǎng)絡(luò)中的一樣)。通過(guò)將這些層疊加起來(lái),就可以構(gòu)建一個(gè)完整的卷積神經(jīng)網(wǎng)絡(luò)。
一個(gè)用于CIFAR-10圖像數(shù)據(jù)分類的卷積神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)可以是[輸入層-卷積層-ReLU層-匯聚層-全連接層]。細(xì)節(jié)如下:
1.輸入[32x32x3]存有圖像的原始像素值,本例中圖像寬高均為32,有3個(gè)顏色通道。
2.卷積層中,神經(jīng)元與輸入層中的一個(gè)局部區(qū)域相連,每個(gè)神經(jīng)元都計(jì)算自己與輸入層相連的小區(qū)域與自己權(quán)重的內(nèi)積。卷積層會(huì)計(jì)算所有神經(jīng)元的輸出。如果我們使用12個(gè)濾波器(也叫作核),得到的輸出數(shù)據(jù)體的維度就是[32x32x12]。
3.ReLU層將會(huì)逐個(gè)元素地進(jìn)行激活函數(shù)操作,比如使用以0為閾值的max(0,x)作為激活函數(shù)。該層對(duì)數(shù)據(jù)尺寸沒有改變,還是[32x32x12]。
4.匯聚層在在空間維度(寬度和高度)上進(jìn)行降采樣(downsampling)操作,數(shù)據(jù)尺寸變?yōu)閇16x16x12]。
5.全連接層將會(huì)計(jì)算分類評(píng)分,數(shù)據(jù)尺寸變?yōu)閇1x1x10],其中10個(gè)數(shù)字對(duì)應(yīng)的就是CIFAR-10中10個(gè)類別的分類評(píng)分值。正如其名,全連接層與常規(guī)神經(jīng)網(wǎng)絡(luò)一樣,其中每個(gè)神經(jīng)元都與前一層中所有神經(jīng)元相連接。
此看來(lái),卷積神經(jīng)網(wǎng)絡(luò)一層一層地將圖像從原始像素值變換成最終的分類評(píng)分值。其中有的層含有參數(shù),有的沒有。具體說(shuō)來(lái),卷積層和全連接層(CONV/FC)對(duì)輸入執(zhí)行變換操作的時(shí)候,不僅會(huì)用到激活函數(shù),還會(huì)用到很多參數(shù)(神經(jīng)元的突觸權(quán)值和偏差)。而ReLU層和匯聚層則是進(jìn)行一個(gè)固定不變的函數(shù)操作。卷積層和全連接層中的參數(shù)會(huì)隨著梯度下降被訓(xùn)練,這樣卷積神經(jīng)網(wǎng)絡(luò)計(jì)算出的分類評(píng)分就能和訓(xùn)練集中的每個(gè)圖像的標(biāo)簽吻合了。
卷積層
卷積層是構(gòu)建卷積神經(jīng)網(wǎng)絡(luò)的核心層,它產(chǎn)生了網(wǎng)絡(luò)中大部分的計(jì)算量。
首先討論的是,在沒有大腦和生物意義上的神經(jīng)元之類的比喻下,卷積層到底在計(jì)算什么。卷積層的參數(shù)是有一些可學(xué)習(xí)的濾波器集合構(gòu)成的。每個(gè)濾波器在空間上(寬度和高度)都比較小,但是深度和輸入數(shù)據(jù)一致。舉例來(lái)說(shuō),卷積神經(jīng)網(wǎng)絡(luò)第一層的一個(gè)典型的濾波器的尺寸可以是5x5x3(寬高都是5像素,深度是3是因?yàn)閳D像應(yīng)為顏色通道,所以有3的深度)。在前向傳播的時(shí)候,讓每個(gè)濾波器都在輸入數(shù)據(jù)的寬度和高度上滑動(dòng)(更精確地說(shuō)是卷積),然后計(jì)算整個(gè)濾波器和輸入數(shù)據(jù)任一處的內(nèi)積。當(dāng)濾波器沿著輸入數(shù)據(jù)的寬度和高度滑過(guò)后,會(huì)生成一個(gè)2維的激活圖(activationmap),激活圖給出了在每個(gè)空間位置處濾波器的反應(yīng)。直觀地來(lái)說(shuō),網(wǎng)絡(luò)會(huì)讓濾波器學(xué)習(xí)到當(dāng)它看到某些類型的視覺特征時(shí)就激活,具體的視覺特征可能是某些方位上的邊界,或者在第一層上某些顏色的斑點(diǎn),甚至可以是網(wǎng)絡(luò)更高層上的蜂巢狀或者車輪狀圖案。在每個(gè)卷積層上,我們會(huì)有一整個(gè)集合的濾波器(比如12個(gè)),每個(gè)都會(huì)生成一個(gè)不同的二維激活圖。將這些激活映射在深度方向上層疊起來(lái)就生成了輸出數(shù)據(jù)。
局部鏈接
在處理圖像這樣的高維度輸入時(shí),讓每個(gè)神經(jīng)元都與前一層中的所有神經(jīng)元進(jìn)行全連接是不現(xiàn)實(shí)的。相反,我們讓每個(gè)神經(jīng)元只與輸入數(shù)據(jù)的一個(gè)局部區(qū)域連接。該連接的空間大小叫做神經(jīng)元的感受野(receptive field),它的尺寸是一個(gè)超參數(shù)(其實(shí)就是濾波器的空間尺寸)。在深度方向上,這個(gè)連接的大小總是和輸入量的深度相等。需要再次強(qiáng)調(diào)的是,我們對(duì)待空間維度(寬和高)與深度維度是不同的:連接在空間(寬高)上是局部的,但是在深度上總是和輸入數(shù)據(jù)的深度一致。
例1:假設(shè)輸入數(shù)據(jù)體尺寸為[32x32x3](比如CIFAR-10的RGB圖像),如果感受野(或?yàn)V波器尺寸)是5x5,那么卷積層中的每個(gè)神經(jīng)元會(huì)有輸入數(shù)據(jù)體中[5x5x3]區(qū)域的權(quán)重,共5x5x3=75個(gè)權(quán)重(還要加一個(gè)偏差參數(shù))。注意這個(gè)連接在深度維度上的大小必須為3,和輸入數(shù)據(jù)體的深度一致。
例2:假設(shè)輸入數(shù)據(jù)體的尺寸是[16x16x20],感受野尺寸是3x3,那么卷積層中每個(gè)神經(jīng)元和輸入數(shù)據(jù)體就有3x3x20=180個(gè)連接。再次提示:在空間上連接是局部的(3x3),但是在深度上是和輸入數(shù)據(jù)體一致的。
空間排列
上文講解了卷積層中每個(gè)神經(jīng)元與輸入數(shù)據(jù)體之間的連接方式,但是尚未討論輸出數(shù)據(jù)體中神經(jīng)元的數(shù)量,以及它們的排列方式。3個(gè)超參數(shù)控制著輸出數(shù)據(jù)體的尺寸:深度(depth),步長(zhǎng)(stride)和零填充(zero-padding)。下面是對(duì)它們的討論:
1.首先,輸出數(shù)據(jù)體的深度是一個(gè)超參數(shù):它和使用的濾波器的數(shù)量一致,而每個(gè)濾波器在輸入數(shù)據(jù)中尋找一些不同的東西。舉例來(lái)說(shuō),如果第一個(gè)卷積層的輸入是原始圖像,那么在深度維度上的不同神經(jīng)元將可能被不同方向的邊界,或者是顏色斑點(diǎn)激活。我們將這些沿著深度方向排列、感受野相同的神經(jīng)元集合稱為深度列(depth column),也有人使用纖維(fibre)來(lái)稱呼它們。
2.其次,在滑動(dòng)濾波器的時(shí)候,必須指定步長(zhǎng)。當(dāng)步長(zhǎng)為1,濾波器每次移動(dòng)1個(gè)像素。當(dāng)步長(zhǎng)為2(或者不常用的3,或者更多,這些在實(shí)際中很少使用),濾波器滑動(dòng)時(shí)每次移動(dòng)2個(gè)像素。這個(gè)操作會(huì)讓輸出數(shù)據(jù)體在空間上變小。
3.在下文可以看到,有時(shí)候?qū)⑤斎霐?shù)據(jù)體用0在邊緣處進(jìn)行填充是很方便的。這個(gè)零填充(zero-padding)的尺寸是一個(gè)超參數(shù)。零填充有一個(gè)良好性質(zhì),即可以控制輸出數(shù)據(jù)體的空間尺寸(最常用的是用來(lái)保持輸入數(shù)據(jù)體在空間上的尺寸,這樣輸入和輸出的寬高都相等)。
輸出數(shù)據(jù)體在空間上的尺寸可以通過(guò)輸入數(shù)據(jù)體尺寸(W),卷積層中神經(jīng)元的感受野尺寸(F),步長(zhǎng)(S)和零填充的數(shù)量(P)的函數(shù)來(lái)計(jì)算。(譯者注:這里假設(shè)輸入數(shù)組的空間形狀是正方形,即高度和寬度相等)輸出數(shù)據(jù)體的空間尺寸為(W-F+2P)/S+1。比如輸入是7x7,濾波器是3x3,步長(zhǎng)為1,填充為0,那么就能得到一個(gè)5x5的輸出。如果步長(zhǎng)為2,輸出就是3x3。
空間排列的圖示。在本例中只有一個(gè)空間維度(x軸),神經(jīng)元的感受野尺寸F=3,輸入尺寸W=5,零填充P=1。左邊:神經(jīng)元使用的步長(zhǎng)S=1,所以輸出尺寸是(5-3+2)/1+1=5。右邊:神經(jīng)元的步長(zhǎng)S=2,則輸出尺寸是(5-3+2)/2+1=3。注意當(dāng)步長(zhǎng)S=3時(shí)是無(wú)法使用的,因?yàn)樗鼰o(wú)法整齊地穿過(guò)數(shù)據(jù)體。從等式上來(lái)說(shuō),因?yàn)?5-3+2)=4是不能被3整除的。
本例中,神經(jīng)元的權(quán)重是[1,0,-1],顯示在圖的右上角,偏差值為0。這些權(quán)重是被所有黃色的神經(jīng)元共享的(參數(shù)共享的內(nèi)容看下文相關(guān)內(nèi)容)。
使用零填充:在上面左邊例子中,注意輸入維度是5,輸出維度也是5。之所以如此,是因?yàn)楦惺芤笆?并且使用了1的零填充。如果不使用零填充,則輸出數(shù)據(jù)體的空間維度就只有3,因?yàn)檫@就是濾波器整齊滑過(guò)并覆蓋原始數(shù)據(jù)需要的數(shù)目。一般說(shuō)來(lái),當(dāng)步長(zhǎng)S=1時(shí),零填充的值是P=(F-1)/2,這樣就能保證輸入和輸出數(shù)據(jù)體有相同的空間尺寸。這樣做非常常見,在介紹卷積神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)的時(shí)候我們會(huì)詳細(xì)討論其原因。
步長(zhǎng)的限制:注意這些空間排列的超參數(shù)之間是相互限制的。舉例說(shuō)來(lái),當(dāng)輸入尺寸W=10,不使用零填充則P=0,濾波器尺寸F=3,這樣步長(zhǎng)S=2就行不通,因?yàn)?W-F+2P)/S+1=(10-3+0)/2+1=4.5,結(jié)果不是整數(shù),這就是說(shuō)神經(jīng)元不能整齊對(duì)稱地滑過(guò)輸入數(shù)據(jù)體。因此,這些超參數(shù)的設(shè)定就被認(rèn)為是無(wú)效的,一個(gè)卷積神經(jīng)網(wǎng)絡(luò)庫(kù)可能會(huì)報(bào)出一個(gè)錯(cuò)誤,或者修改零填充值來(lái)讓設(shè)置合理,或者修改輸入數(shù)據(jù)體尺寸來(lái)讓設(shè)置合理,或者其他什么措施。在后面的卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)小節(jié)中,讀者可以看到合理地設(shè)置網(wǎng)絡(luò)的尺寸讓所有的維度都能正常工作,這件事可是相當(dāng)讓人頭痛的。而使用零填充和遵守其他一些設(shè)計(jì)策略將會(huì)有效解決這個(gè)問(wèn)題.
參數(shù)共享
在卷積層中使用參數(shù)共享是用來(lái)控制參數(shù)的數(shù)量。就用上面的例子,在第一個(gè)卷積層就有55x55x96=290,400個(gè)神經(jīng)元,每個(gè)有11x11x3=364個(gè)參數(shù)和1個(gè)偏差。將這些合起來(lái)就是290400x364=105,705,600個(gè)參數(shù)。單單第一層就有這么多參數(shù),顯然這個(gè)數(shù)目是非常大的。
作一個(gè)合理的假設(shè):如果一個(gè)特征在計(jì)算某個(gè)空間位置(x,y)的時(shí)候有用,那么它在計(jì)算另一個(gè)不同位置(x2,y2)的時(shí)候也有用。基于這個(gè)假設(shè),可以顯著地減少參數(shù)數(shù)量。換言之,就是將深度維度上一個(gè)單獨(dú)的2維切片看做深度切片(depthslice),比如一個(gè)數(shù)據(jù)體尺寸為[55x55x96]的就有96個(gè)深度切片,每個(gè)尺寸為[55x55]。在每個(gè)深度切片上的神經(jīng)元都使用同樣的權(quán)重和偏差。在這樣的參數(shù)共享下,例子中的第一個(gè)卷積層就只有96個(gè)不同的權(quán)重集了,一個(gè)權(quán)重集對(duì)應(yīng)一個(gè)深度切片,共有96x11x11x3=34,848個(gè)不同的權(quán)重,或34,944個(gè)參數(shù)(+96個(gè)偏差)。在每個(gè)深度切片中的55x55個(gè)權(quán)重使用的都是同樣的參數(shù)。在反向傳播的時(shí)候,都要計(jì)算每個(gè)神經(jīng)元對(duì)它的權(quán)重的梯度,但是需要把同一個(gè)深度切片上的所有神經(jīng)元對(duì)權(quán)重的梯度累加,這樣就得到了對(duì)共享權(quán)重的梯度。這樣,每個(gè)切片只更新一個(gè)權(quán)重集。
注意,如果在一個(gè)深度切片中的所有權(quán)重都使用同一個(gè)權(quán)重向量,那么卷積層的前向傳播在每個(gè)深度切片中可以看做是在計(jì)算神經(jīng)元權(quán)重和輸入數(shù)據(jù)體的卷積(這就是“卷積層”名字由來(lái))。這也是為什么總是將這些權(quán)重集合稱為濾波器(filter)(或卷積核(kernel)),因?yàn)樗鼈兒洼斎脒M(jìn)行了卷積。
注意有時(shí)候參數(shù)共享假設(shè)可能沒有意義,特別是當(dāng)卷積神經(jīng)網(wǎng)絡(luò)的輸入圖像是一些明確的中心結(jié)構(gòu)時(shí)候。這時(shí)候我們就應(yīng)該期望在圖片的不同位置學(xué)習(xí)到完全不同的特征。一個(gè)具體的例子就是輸入圖像是人臉,人臉一般都處于圖片中心。你可能期望不同的特征,比如眼睛特征或者頭發(fā)特征可能(也應(yīng)該)會(huì)在圖片的不同位置被學(xué)習(xí)。在這個(gè)例子中,通常就放松參數(shù)共享的限制,將層稱為局部連接層(Locally-Connected Layer)。
匯聚層
通常,在連續(xù)的卷積層之間會(huì)周期性地插入一個(gè)匯聚層。它的作用是逐漸降低數(shù)據(jù)體的空間尺寸,這樣的話就能減少網(wǎng)絡(luò)中參數(shù)的數(shù)量,使得計(jì)算資源耗費(fèi)變少,也能有效控制過(guò)擬合。匯聚層使用MAX操作,對(duì)輸入數(shù)據(jù)體的每一個(gè)深度切片獨(dú)立進(jìn)行操作,改變它的空間尺寸。最常見的形式是匯聚層使用尺寸2x2的濾波器,以步長(zhǎng)為2來(lái)對(duì)每個(gè)深度切片進(jìn)行降采樣,將其中75%的激活信息都丟掉。每個(gè)MAX操作是從4個(gè)數(shù)字中取最大值(也就是在深度切片中某個(gè)2x2的區(qū)域)。深度保持不變。匯聚層的一些公式:
普通匯聚:
除了最大匯聚,匯聚單元還可以使用其他的函數(shù),比如平均匯聚(average pooling)或L-2范式匯聚(L2-norm pooling)。平均匯聚歷史上比較常用,但是現(xiàn)在已經(jīng)很少使用了。因?yàn)閷?shí)踐證明,最大匯聚的效果比平均匯聚要好。
反向傳播:
回顧一下反向傳播的內(nèi)容,其中max(x,y)函數(shù)的反向傳播可以簡(jiǎn)單理解為將梯度只沿最大的數(shù)回傳。因此,在向前傳播經(jīng)過(guò)匯聚層的時(shí)候,通常會(huì)把池中最大元素的索引記錄下來(lái)(有時(shí)這個(gè)也叫作道岔(switches)),這樣在反向傳播的時(shí)候梯度的路由就很高效。
全連接層
在全連接層中,神經(jīng)元對(duì)于前一層中的所有激活數(shù)據(jù)是全部連接的,這個(gè)常規(guī)神經(jīng)網(wǎng)絡(luò)中一樣。它們的激活可以先用矩陣乘法,再加上偏差。更多細(xì)節(jié)請(qǐng)查看神經(jīng)網(wǎng)絡(luò)章節(jié)。
卷積神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)
積神經(jīng)網(wǎng)絡(luò)通常是由三種層構(gòu)成:卷積層,匯聚層(除非特別說(shuō)明,一般就是最大值匯聚)和全連接層(簡(jiǎn)稱FC)。ReLU激活函數(shù)也應(yīng)該算是是一層,它逐元素地進(jìn)行激活函數(shù)操作。在本節(jié)中將討論在卷積神經(jīng)網(wǎng)絡(luò)中這些層通常是如何組合在一起的。
層的排列規(guī)律
卷積神經(jīng)網(wǎng)絡(luò)最常見的形式就是將一些卷積層和ReLU層放在一起,其后緊跟匯聚層,然后重復(fù)如此直到圖像在空間上被縮小到一個(gè)足夠小的尺寸,在某個(gè)地方過(guò)渡成成全連接層也較為常見。最后的全連接層得到輸出,比如分類評(píng)分等。換句話說(shuō),最常見的卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)如下:
幾個(gè)小濾波器卷積層的組合比一個(gè)大濾波器卷積層好:假設(shè)你一層一層地重疊了3個(gè)3x3的卷積層(層與層之間有非線性激活函數(shù))。在這個(gè)排列下,第一個(gè)卷積層中的每個(gè)神經(jīng)元都對(duì)輸入數(shù)據(jù)體有一個(gè)3x3的視野。第二個(gè)卷積層上的神經(jīng)元對(duì)第一個(gè)卷積層有一個(gè)3x3的視野,也就是對(duì)輸入數(shù)據(jù)體有5x5的視野。同樣,在第三個(gè)卷積層上的神經(jīng)元對(duì)第二個(gè)卷積層有3x3的視野,也就是對(duì)輸入數(shù)據(jù)體有7x7的視野。假設(shè)不采用這3個(gè)3x3的卷積層,二是使用一個(gè)單獨(dú)的有7x7的感受野的卷積層,那么所有神經(jīng)元的感受野也是7x7,但是就有一些缺點(diǎn)。首先,多個(gè)卷積層與非線性的激活層交替的結(jié)構(gòu),比單一卷積層的結(jié)構(gòu)更能提取出深層的更好的特征。其次,假設(shè)所有的數(shù)據(jù)有C個(gè)通道,那么單獨(dú)的7x7卷積層將會(huì)包含49C^2個(gè)參數(shù),而3個(gè)3x3的卷積層的組合僅有27C^2個(gè)參數(shù)。直觀說(shuō)來(lái),最好選擇帶有小濾波器的卷積層組合,而不是用一個(gè)帶有大的濾波器的卷積層。前者可以表達(dá)出輸入數(shù)據(jù)中更多個(gè)強(qiáng)力特征,使用的參數(shù)也更少。唯一的不足是,在進(jìn)行反向傳播時(shí),中間的卷積層可能會(huì)導(dǎo)致占用更多的內(nèi)存。
層的尺寸設(shè)置規(guī)律
輸入層(包含圖像的)應(yīng)該能被2整除很多次。常用數(shù)字包括32(比如CIFAR-10),64,96(比如STL-10)或224(比如ImageNet卷積神經(jīng)網(wǎng)絡(luò)),384和512
卷積層應(yīng)該使用小尺寸濾波器(比如3x3或最多5x5),使用步長(zhǎng)S=1。還有一點(diǎn)非常重要,就是對(duì)輸入數(shù)據(jù)進(jìn)行零填充,這樣卷積層就不會(huì)改變輸入數(shù)據(jù)在空間維度上的尺寸。比如,當(dāng)F=3,那就使用P=1來(lái)保持輸入尺寸。當(dāng)F=5,P=2,一般對(duì)于任意F,當(dāng)P=(F-1)/2的時(shí)候能保持輸入尺寸。如果必須使用更大的濾波器尺寸(比如7x7之類),通常只用在第一個(gè)面對(duì)原始圖像的卷積層上。
匯聚層負(fù)責(zé)對(duì)輸入數(shù)據(jù)的空間維度進(jìn)行降采樣。最常用的設(shè)置是用用2x2感受野(即F=2)的最大值匯聚,步長(zhǎng)為2(S=2)。注意這一操作將會(huì)把輸入數(shù)據(jù)中75%的激活數(shù)據(jù)丟棄(因?yàn)閷?duì)寬度和高度都進(jìn)行了2的降采樣)。另一個(gè)不那么常用的設(shè)置是使用3x3的感受野,步長(zhǎng)為2。最大值匯聚的感受野尺寸很少有超過(guò)3的,因?yàn)閰R聚操作過(guò)于激烈,易造成數(shù)據(jù)信息丟失,這通常會(huì)導(dǎo)致算法性能變差。
案例學(xué)習(xí)
**LeNet:**第一個(gè)成功的卷積神經(jīng)網(wǎng)絡(luò)應(yīng)用,是YannLeCun在上世紀(jì)90年代實(shí)現(xiàn)的。當(dāng)然,最著名還是被應(yīng)用在識(shí)別數(shù)字和郵政編碼等的LeNet結(jié)構(gòu)。
**AlexNet:**AlexNet卷積神經(jīng)網(wǎng)絡(luò)在計(jì)算機(jī)視覺領(lǐng)域中受到歡迎,它由Alex Krizhevsky,Ilya Sutskever和GeoffHinton實(shí)現(xiàn)。AlexNet在2012年的ImageNetILSVRC競(jìng)賽中奪冠,性能遠(yuǎn)遠(yuǎn)超出第二名(16%的top5錯(cuò)誤率,第二名是26%的top5錯(cuò)誤率)。這個(gè)網(wǎng)絡(luò)的結(jié)構(gòu)和LeNet非常類似,但是更深更大,并且使用了層疊的卷積層來(lái)獲取特征(之前通常是只用一個(gè)卷積層并且在其后馬上跟著一個(gè)匯聚層)。
**ZF Net:**Matthew Zeiler和Rob Fergus發(fā)明的網(wǎng)絡(luò)在ILSVRC 2013比賽中奪冠,它被稱為 ZFNet(Zeiler&FergusNet的簡(jiǎn)稱)。它通過(guò)修改結(jié)構(gòu)中的超參數(shù)來(lái)實(shí)現(xiàn)對(duì)AlexNet的改良,具體說(shuō)來(lái)就是增加了中間卷積層的尺寸,讓第一層的步長(zhǎng)和濾波器尺寸更小。
**GoogLeNet:**ILSVRC2014的勝利者是谷歌的Szeged等實(shí)現(xiàn)的卷積神經(jīng)網(wǎng)絡(luò)。它主要的貢獻(xiàn)就是實(shí)現(xiàn)了一個(gè)奠基模塊,它能夠顯著地減少網(wǎng)絡(luò)中參數(shù)的數(shù)量(AlexNet中有60M,該網(wǎng)絡(luò)中只有4M)。還有,這個(gè)論文中沒有使用卷積神經(jīng)網(wǎng)絡(luò)頂部使用全連接層,而是使用了一個(gè)平均匯聚,把大量不是很重要的參數(shù)都去除掉了。GooLeNet還有幾種改進(jìn)的版本,最新的一個(gè)是Inception-v4。
**VGGNet:**ILSVRC2014的第二名是KarenSimonyan和AndrewZisserman實(shí)現(xiàn)的卷積神經(jīng)網(wǎng)絡(luò),現(xiàn)在稱其為VGGNet。它主要的貢獻(xiàn)是展示出網(wǎng)絡(luò)的深度是算法優(yōu)良性能的關(guān)鍵部分。他們最好的網(wǎng)絡(luò)包含了16個(gè)卷積/全連接層。網(wǎng)絡(luò)的結(jié)構(gòu)非常一致,從頭到尾全部使用的是3x3的卷積和2x2的匯聚。他們的預(yù)訓(xùn)練模型是可以在網(wǎng)絡(luò)上獲得并在Caffe中使用的。VGGNet不好的一點(diǎn)是它耗費(fèi)更多計(jì)算資源,并且使用了更多的參數(shù),導(dǎo)致更多的內(nèi)存占用(140M)。其中絕大多數(shù)的參數(shù)都是來(lái)自于第一個(gè)全連接層。后來(lái)發(fā)現(xiàn)這些全連接層即使被去除,對(duì)于性能也沒有什么影響,這樣就顯著降低了參數(shù)數(shù)量。
**ResNet:**殘差網(wǎng)絡(luò)(ResidualNetwork)是ILSVRC2015的勝利者,由何愷明等實(shí)現(xiàn)。它使用了特殊的跳躍鏈接,大量使用了批量歸一化(batchnormalization)。這個(gè)結(jié)構(gòu)同樣在最后沒有使用全連接層。讀者可以查看何愷明的的演講(視頻,PPT),以及一些使用Torch重現(xiàn)網(wǎng)絡(luò)的實(shí)驗(yàn)。ResNet當(dāng)前最好的卷積神經(jīng)網(wǎng)絡(luò)模型(2016年五月)。何開明等最近的工作是對(duì)原始結(jié)構(gòu)做一些優(yōu)化,可以看論文Identity Mappings in Deep Residual Networks,2016年3月發(fā)表。
掃一掃官方微信獲取更多精彩內(nèi)容與學(xué)習(xí)資料
星空人工智能技術(shù)網(wǎng) 倡導(dǎo)尊重與保護(hù)知識(shí)產(chǎn)權(quán)。如發(fā)現(xiàn)本站文章存在版權(quán)等問(wèn)題,煩請(qǐng)30天內(nèi)提供版權(quán)疑問(wèn)、身份證明、版權(quán)證明、聯(lián)系方式等發(fā)郵件至1851688011@qq.com我們將及時(shí)溝通與處理。!:首頁(yè) > 新聞 » cs231n卷積神經(jīng)網(wǎng)絡(luò)