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