Deep Learning(深度学习)学习笔记整理(二)
本文整理了網(wǎng)上幾位大牛的博客,詳細(xì)地講解了CNN的基礎(chǔ)結(jié)構(gòu)與核心思想,歡迎交流
[1]Deep learning簡介
[2]Deep Learning訓(xùn)練過程
[3]Deep Learning模型之:CNN卷積神經(jīng)網(wǎng)絡(luò)推導(dǎo)和實(shí)現(xiàn)
[4]Deep Learning模型之:CNN的反向求導(dǎo)及練習(xí)
[5]Deep Learning模型之:CNN卷積神經(jīng)網(wǎng)絡(luò)(一)深度解析CNN
[6]Deep Learning模型之:CNN卷積神經(jīng)網(wǎng)絡(luò)(二)文字識(shí)別系統(tǒng)LeNet-5
[7]Deep Learning模型之:CNN卷積神經(jīng)網(wǎng)絡(luò)(三)CNN常見問題總結(jié)
1.?概述
? ?卷積神經(jīng)網(wǎng)絡(luò)是一種特殊的深層的神經(jīng)網(wǎng)絡(luò)模型,它的特殊性體現(xiàn)在兩個(gè)方面,一方面它的神經(jīng)元間的連接是非全連接的,?另一方面同一層中某些神經(jīng)元之間的連接的權(quán)重是共享的(即相同的)。它的非全連接和權(quán)值共享的網(wǎng)絡(luò)結(jié)構(gòu)使之更類似于生物?神經(jīng)網(wǎng)絡(luò),降低了網(wǎng)絡(luò)模型的復(fù)雜度(對(duì)于很難學(xué)習(xí)的深層結(jié)構(gòu)來說,這是非常重要的),減少了權(quán)值的數(shù)量。
? ? ?回想一下BP神經(jīng)網(wǎng)絡(luò)。BP網(wǎng)絡(luò)每一層節(jié)點(diǎn)是一個(gè)線性的一維排列狀態(tài),層與層的網(wǎng)絡(luò)節(jié)點(diǎn)之間是全連接的。這樣設(shè)想一下,如果BP網(wǎng)絡(luò)中層與層之間的節(jié)點(diǎn)連接不再是全連接,而是局部連接的。這樣,就是一種最簡單的一維卷積網(wǎng)絡(luò)。如果我們把上述這個(gè)思路擴(kuò)展到二維,這就是我們在大多數(shù)參考資料上看到的卷積神經(jīng)網(wǎng)絡(luò)。具體參看下圖:
?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ???上圖左:全連接網(wǎng)絡(luò)。如果我們有1000x1000像素的圖像,有1百萬個(gè)隱層神經(jīng)元,每個(gè)隱層神經(jīng)元都連接圖像的每一個(gè)像素點(diǎn),就有1000x1000x1000000=10^12個(gè)連接,也就是10^12個(gè)權(quán)值參數(shù)。
? ? ? ?上圖右:局部連接網(wǎng)絡(luò),每一個(gè)節(jié)點(diǎn)與上層節(jié)點(diǎn)同位置附件10x10的窗口相連接,則1百萬個(gè)隱層神經(jīng)元就只有100w乘以100,即10^8個(gè)參數(shù)。其權(quán)值連接個(gè)數(shù)比原來減少了四個(gè)數(shù)量級(jí)。
? ? ? 根據(jù)BP網(wǎng)絡(luò)信號(hào)前向傳遞過程,我們可以很容易計(jì)算網(wǎng)絡(luò)節(jié)點(diǎn)的輸出。例如,對(duì)于上圖中被標(biāo)注為紅色節(jié)點(diǎn)的凈輸入,就等于所有與紅線相連接的上一層神經(jīng)元節(jié)點(diǎn)值與紅色線表示的權(quán)值之積的累加。這樣的計(jì)算過程,很多書上稱其為卷積。
? ? ? ?事實(shí)上,對(duì)于數(shù)字濾波而言,其濾波器的系數(shù)通常是對(duì)稱的。否則,卷積的計(jì)算需要先反向?qū)φ?#xff0c;然后進(jìn)行乘累加的計(jì)算。上述神經(jīng)網(wǎng)絡(luò)權(quán)值滿足對(duì)稱嗎?我想答案是否定的!所以,上述稱其為卷積運(yùn)算,顯然是有失偏頗的。但這并不重要,僅僅是一個(gè)名詞稱謂而已。只是,搞信號(hào)處理的人,在初次接觸卷積神經(jīng)網(wǎng)絡(luò)的時(shí)候,帶來了一些理解上的誤區(qū)。
?
? ? ? ? 卷積神經(jīng)網(wǎng)絡(luò)另外一個(gè)特性是權(quán)值共享。例如,就上面右邊那幅圖來說,權(quán)值共享,也就是說所有的紅色線標(biāo)注的連接權(quán)值相同。這一點(diǎn),初學(xué)者容易產(chǎn)生誤解。
? ? ? ? 上面描述的只是單層網(wǎng)絡(luò)結(jié)構(gòu),前A&T?Shannon Lab?? 的? Yann LeCun等人據(jù)此提出了基于卷積神經(jīng)網(wǎng)絡(luò)的一個(gè)文字識(shí)別系統(tǒng) LeNet-5。該系統(tǒng)90年代就被用于銀行手寫數(shù)字的識(shí)別。
2、 CNN的結(jié)構(gòu)
卷積網(wǎng)絡(luò)是為識(shí)別二維形狀而特殊設(shè)計(jì)的一個(gè)多層感知器,這種網(wǎng)絡(luò)結(jié)構(gòu)對(duì)平移、比例縮放、傾斜或者共他形式的變形具有高度不變性。?這些良好的性能是網(wǎng)絡(luò)在有監(jiān)督方式下學(xué)會(huì)的,網(wǎng)絡(luò)的結(jié)構(gòu)主要有稀疏連接和權(quán)值共享兩個(gè)特點(diǎn),包括如下形式的約束:
1、?特征提取。每一個(gè)神經(jīng)元從上一層的局部接受域得到突觸輸人,因而迫使它提取局部特征。一旦一個(gè)特征被提取出來,?只要它相對(duì)于其他特征的位置被近似地保留下來,它的精確位置就變得沒有那么重要了。
2 、特征映射。網(wǎng)絡(luò)的每一個(gè)計(jì)算層都是由多個(gè)特征映射組成的,每個(gè)特征映射都是平面形式的。平面中單獨(dú)的神經(jīng)元在約束下共享?相同的突觸權(quán)值集,這種結(jié)構(gòu)形式具有如下的有益效果:a.平移不變性。b.自由參數(shù)數(shù)量的縮減(通過權(quán)值共享實(shí)現(xiàn))。
3、子抽樣。每個(gè)卷積層后面跟著一個(gè)實(shí)現(xiàn)局部平均和子抽樣的計(jì)算層,由此特征映射的分辨率降低。這種操作具有使特征映射的輸出對(duì)平移和其他?形式的變形的敏感度下降的作用。
卷積神經(jīng)網(wǎng)絡(luò)是一個(gè)多層的神經(jīng)網(wǎng)絡(luò),每層由多個(gè)二維平面組成,而每個(gè)平面由多個(gè)獨(dú)立神經(jīng)元組成。
?????? 圖:卷積神經(jīng)網(wǎng)絡(luò)的概念示范:輸入圖像通過和三個(gè)可訓(xùn)練的濾波器和可加偏置進(jìn)行卷積,卷積后在C1層產(chǎn)生三個(gè)特征映射圖,然后特征映射圖中每組的四個(gè)像素再進(jìn)行求和,加權(quán)值,加偏置,通過一個(gè)Sigmoid函數(shù)得到三個(gè)S2層的特征映射圖。這些映射圖再進(jìn)過濾波得到C3層。這個(gè)層級(jí)結(jié)構(gòu)再和S2一樣產(chǎn)生S4。最終,這些像素值被光柵化,并連接成一個(gè)向量輸入到傳統(tǒng)的神經(jīng)網(wǎng)絡(luò),得到輸出。
?????? 一般地,C層為特征提取層,每個(gè)神經(jīng)元的輸入與前一層的局部感受野相連,并提取該局部的特征,一旦該局部特征被提取后,它與其他特征間的位置關(guān)系也隨之確定下來;S層是特征映射層,網(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ù),降低了網(wǎng)絡(luò)參數(shù)選擇的復(fù)雜度。卷積神經(jīng)網(wǎng)絡(luò)中的每一個(gè)特征提取層(C-層)都緊跟著一個(gè)用來求局部平均與二次提取的計(jì)算層(S-層),這種特有的兩次特征提取結(jié)構(gòu)使網(wǎng)絡(luò)在識(shí)別時(shí)對(duì)輸入樣本有較高的畸變?nèi)萑棠芰Α?/p>
2.1?稀疏連接(Sparse?Connectivity)
卷積網(wǎng)絡(luò)通過在相鄰兩層之間強(qiáng)制使用局部連接模式來利用圖像的空間局部特性,在第m層的隱層單元只與第m-1層的輸入單元的局部區(qū)域有連接,第m-1層的這些局部?區(qū)域被稱為空間連續(xù)的接受域。我們可以將這種結(jié)構(gòu)描述如下:
設(shè)第m-1層為視網(wǎng)膜輸入層,第m層的接受域的寬度為3,也就是說該層的每個(gè)單元與且僅與輸入層的3個(gè)相鄰的神經(jīng)元相連,第m層與第m+1層具有類似的鏈接規(guī)則,如下圖所示。
?
?
? ? 可以看到m+1層的神經(jīng)元相對(duì)于第m層的接受域的寬度也為3,但相對(duì)于輸入層的接受域?yàn)?,這種結(jié)構(gòu)將學(xué)習(xí)到的過濾器(對(duì)應(yīng)于輸入信號(hào)中被最大激活的單元)限制在局部空間?模式(因?yàn)槊總€(gè)單元對(duì)它接受域外的variation不做反應(yīng))。從上圖也可以看出,多個(gè)這樣的層堆疊起來后,會(huì)使得過濾器(不再是線性的)逐漸成為全局的(也就是覆蓋到了更?大的視覺區(qū)域)。例如上圖中第m+1層的神經(jīng)元可以對(duì)寬度為5的輸入進(jìn)行一個(gè)非線性的特征編碼。
?
2.2?權(quán)值共享(Shared?Weights)
在卷積網(wǎng)絡(luò)中,每個(gè)稀疏過濾器hi通過共享權(quán)值都會(huì)覆蓋整個(gè)可視域,這些共享權(quán)值的單元構(gòu)成一個(gè)特征映射,如下圖所示。
? ??在圖中,有3個(gè)隱層單元,他們屬于同一個(gè)特征映射。同種顏色的鏈接的權(quán)值是相同的,我們?nèi)匀豢梢允褂锰荻认陆档姆椒▉韺W(xué)習(xí)這些權(quán)值,只需要對(duì)原始算法做一些小的改動(dòng),?這里共享權(quán)值的梯度是所有共享參數(shù)的梯度的總和。我們不禁會(huì)問為什么要權(quán)重共享呢?一方面,重復(fù)單元能夠?qū)μ卣鬟M(jìn)行識(shí)別,而不考慮它在可視域中的位置。另一方面,權(quán)值?共享使得我們能更有效的進(jìn)行特征抽取,因?yàn)樗鼧O大的減少了需要學(xué)習(xí)的自由變量的個(gè)數(shù)。通過控制模型的規(guī)模,卷積網(wǎng)絡(luò)對(duì)視覺問題可以具有很好的泛化能力。
?
舉例講解:???
? ? ?上面聊到,好像CNN一個(gè)牛逼的地方就在于通過感受野和權(quán)值共享減少了神經(jīng)網(wǎng)絡(luò)需要訓(xùn)練的參數(shù)的個(gè)數(shù)。那究竟是啥的呢?
? ? ?下圖左:如果我們有1000x1000像素的圖像,有1百萬個(gè)隱層神經(jīng)元,那么他們?nèi)B接的話(每個(gè)隱層神經(jīng)元都連接圖像的每一個(gè)像素點(diǎn)),就有1000x1000x1000000=10^12個(gè)連接,也就是10^12個(gè)權(quán)值參數(shù)。然而圖像的空間聯(lián)系是局部的,就像人是通過一個(gè)局部的感受野去感受外界圖像一樣,每一個(gè)神經(jīng)元都不需要對(duì)全局圖像做感受,每個(gè)神經(jīng)元只感受局部的圖像區(qū)域,然后在更高層,將這些感受不同局部的神經(jīng)元綜合起來就可以得到全局的信息了。這樣,我們就可以減少連接的數(shù)目,也就是減少神經(jīng)網(wǎng)絡(luò)需要訓(xùn)練的權(quán)值參數(shù)的個(gè)數(shù)了。如下圖右:假如局部感受野是10x10,隱層每個(gè)感受野只需要和這10x10的局部圖像相連接,所以1百萬個(gè)隱層神經(jīng)元就只有一億個(gè)連接,即10^8個(gè)參數(shù)。比原來減少了四個(gè)0(數(shù)量級(jí)),這樣訓(xùn)練起來就沒那么費(fèi)力了,但還是感覺很多的啊,那還有啥辦法沒?
?
?????? 我們知道,隱含層的每一個(gè)神經(jīng)元都連接10x10個(gè)圖像區(qū)域,也就是說每一個(gè)神經(jīng)元存在10x10=100個(gè)連接權(quán)值參數(shù)。那如果我們每個(gè)神經(jīng)元這100個(gè)參數(shù)是相同的呢?也就是說每個(gè)神經(jīng)元用的是同一個(gè)卷積核去卷積圖像。這樣我們就只有多少個(gè)參數(shù)??只有100個(gè)參數(shù)啊!!!親!不管你隱層的神經(jīng)元個(gè)數(shù)有多少,兩層間的連接我只有100個(gè)參數(shù)啊!親!這就是權(quán)值共享啊!親!這就是卷積神經(jīng)網(wǎng)絡(luò)的主打賣點(diǎn)啊!親!(有點(diǎn)煩了,呵呵)也許你會(huì)問,這樣做靠譜嗎?為什么可行呢?這個(gè)……共同學(xué)習(xí)。
?????? 好了,你就會(huì)想,這樣提取特征也忒不靠譜吧,這樣你只提取了一種特征啊?對(duì)了,真聰明,我們需要提取多種特征對(duì)不?假如一種濾波器,也就是一種卷積核就是提出圖像的一種特征,例如某個(gè)方向的邊緣。那么我們需要提取不同的特征,怎么辦,加多幾種濾波器不就行了嗎?對(duì)了。所以假設(shè)我們加到100種濾波器,每種濾波器的參數(shù)不一樣,表示它提出輸入圖像的不同特征,例如不同的邊緣。這樣每種濾波器去卷積圖像就得到對(duì)圖像的不同特征的放映,我們稱之為Feature Map。所以100種卷積核就有100個(gè)Feature Map。這100個(gè)Feature Map就組成了一層神經(jīng)元。到這個(gè)時(shí)候明了了吧。我們這一層有多少個(gè)參數(shù)了?100種卷積核x每種卷積核共享100個(gè)參數(shù)=100x100=10K,也就是1萬個(gè)參數(shù)。才1萬個(gè)參數(shù)啊!親!(又來了,受不了了!)見下圖右:不同的顏色表達(dá)不同的濾波器。
?
?????? 嘿喲,遺漏一個(gè)問題了。剛才說隱層的參數(shù)個(gè)數(shù)和隱層的神經(jīng)元個(gè)數(shù)無關(guān),只和濾波器的大小和濾波器種類的多少有關(guān)。那么隱層的神經(jīng)元個(gè)數(shù)怎么確定呢?它和原圖像,也就是輸入的大小(神經(jīng)元個(gè)數(shù))、濾波器的大小和濾波器在圖像中的滑動(dòng)步長都有關(guān)!例如,我的圖像是1000x1000像素,而濾波器大小是10x10,假設(shè)濾波器沒有重疊,也就是步長為10,這樣隱層的神經(jīng)元個(gè)數(shù)就是(1000x1000 )/ (10x10)=100x100個(gè)神經(jīng)元了,假設(shè)步長是8,也就是卷積核會(huì)重疊兩個(gè)像素,那么……我就不算了,思想懂了就好。注意了,這只是一種濾波器,也就是一個(gè)Feature Map的神經(jīng)元個(gè)數(shù)哦,如果100個(gè)Feature Map就是100倍了。由此可見,圖像越大,神經(jīng)元個(gè)數(shù)和需要訓(xùn)練的權(quán)值參數(shù)個(gè)數(shù)的貧富差距就越大。
?
??????需要注意的一點(diǎn)是,上面的討論都沒有考慮每個(gè)神經(jīng)元的偏置部分。所以權(quán)值個(gè)數(shù)需要加1 。這個(gè)也是同一種濾波器共享的。
????? 總之,卷積網(wǎng)絡(luò)的核心思想是將:局部感受野、權(quán)值共享(或者權(quán)值復(fù)制)以及時(shí)間或空間亞采樣這三種結(jié)構(gòu)思想結(jié)合起來獲得了某種程度的位移、尺度、形變不變性。
2.3?The?Full?Model
? ??? ? 卷積神經(jīng)網(wǎng)絡(luò)是一個(gè)多層的神經(jīng)網(wǎng)絡(luò),每層由多個(gè)二維平面組成,而每個(gè)平面由多個(gè)獨(dú)立神經(jīng)元組成。網(wǎng)絡(luò)中包含一些簡單元和復(fù)雜元,分別記為S-元?和C-元。S-元聚合在一起組成S-面,S-面聚合在一起組成S-層,用Us表示。C-元、C-面和C-層(Us)之間存在類似的關(guān)系。網(wǎng)絡(luò)的任一中間級(jí)由S-層與C-層?串接而成,而輸入級(jí)只含一層,它直接接受二維視覺模式,樣本特征提取步驟已嵌入到卷積神經(jīng)網(wǎng)絡(luò)模型的互聯(lián)結(jié)構(gòu)中。
一般地,Us為特征提取層(子采樣層),每個(gè)神經(jīng)元的輸入與前一層的局部感受野相連,并提取該局部的特征,一旦該局部特征被提取后,它與其他特征間的位置關(guān)系?也隨之確定下來;
Uc是特征映射層(卷積層),網(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ù),降低了網(wǎng)絡(luò)參數(shù)選擇的復(fù)雜度。卷積神經(jīng)網(wǎng)絡(luò)中的每一個(gè)特征提取層(S-層)都緊跟著一個(gè)?用來求局部平均與二次提取的計(jì)算層(C-層),這種特有的兩次特征提取結(jié)構(gòu)使網(wǎng)絡(luò)在識(shí)別時(shí)對(duì)輸入樣本有較高的畸變?nèi)萑棠芰Α?/p>
下圖是一個(gè)卷積網(wǎng)絡(luò)的實(shí)例,在博文”Deep Learning模型之:CNN卷積神經(jīng)網(wǎng)絡(luò)(二)?文字識(shí)別系統(tǒng)LeNet-5?“中有詳細(xì)講解:
? ??圖中的卷積網(wǎng)絡(luò)工作流程如下,輸入層由32×32個(gè)感知節(jié)點(diǎn)組成,接收原始圖像。然后,計(jì)算流程在卷積和子抽樣之間交替進(jìn)行,如下所述:
? ? 第一隱藏層進(jìn)行卷積,它由8個(gè)特征映射組成,每個(gè)特征映射由28×28個(gè)神經(jīng)元組成,每個(gè)神經(jīng)元指定一個(gè)?5×5?的接受域;
? ? 第二隱藏層實(shí)現(xiàn)子?抽樣和局部平均,它同樣由?8?個(gè)特征映射組成,但其每個(gè)特征映射由14×14?個(gè)神經(jīng)元組成。每個(gè)神經(jīng)元具有一個(gè)?2×2?的接受域,一個(gè)可訓(xùn)練?系數(shù),一個(gè)可訓(xùn)練偏置和一個(gè)?sigmoid?激活函數(shù)。可訓(xùn)練系數(shù)和偏置控制神經(jīng)元的操作點(diǎn)。
? ? 第三隱藏層進(jìn)行第二次卷積,它由?20?個(gè)特征映射組?成,每個(gè)特征映射由?10×10?個(gè)神經(jīng)元組成。該隱藏層中的每個(gè)神經(jīng)元可能具有和下一個(gè)隱藏層幾個(gè)特征映射相連的突觸連接,它以與第一個(gè)卷積?層相似的方式操作。
? ? 第四個(gè)隱藏層進(jìn)行第二次子抽樣和局部平均汁算。它由?20?個(gè)特征映射組成,但每個(gè)特征映射由?5×5?個(gè)神經(jīng)元組成,它以?與第一次抽樣相似的方式操作。
? ? 第五個(gè)隱藏層實(shí)現(xiàn)卷積的最后階段,它由?120?個(gè)神經(jīng)元組成,每個(gè)神經(jīng)元指定一個(gè)?5×5?的接受域。
? ? 最后是個(gè)全?連接層,得到輸出向量。
? ? 相繼的計(jì)算層在卷積和抽樣之間的連續(xù)交替,我們得到一個(gè)“雙尖塔”的效果,也就是在每個(gè)卷積或抽樣層,隨著空?間分辨率下降,與相應(yīng)的前一層相比特征映射的數(shù)量增加。卷積之后進(jìn)行子抽樣的思想是受到動(dòng)物視覺系統(tǒng)中的“簡單的”細(xì)胞后面跟著“復(fù)雜的”細(xì)胞的想法的啟發(fā)而產(chǎn)生的。
圖中所示的多層感知器包含近似?100000?個(gè)突觸連接,但只有大約2600?個(gè)自由參數(shù)(每個(gè)特征映射為一個(gè)平面,平面上所有神經(jīng)元的權(quán)值相等)。自由參數(shù)在數(shù)量上顯著地減少是通過權(quán)值共享獲得?的,學(xué)習(xí)機(jī)器的能力(以?VC?維的形式度量)因而下降,這又提高它的泛化能力。而且它對(duì)自由參數(shù)的調(diào)整通過反向傳播學(xué)習(xí)的隨機(jī)形式來實(shí)?現(xiàn)。另一個(gè)顯著的特點(diǎn)是使用權(quán)值共享使得以并行形式實(shí)現(xiàn)卷積網(wǎng)絡(luò)變得可能。這是卷積網(wǎng)絡(luò)對(duì)全連接的多層感知器而言的另一個(gè)優(yōu)點(diǎn)。
3、 CNN的訓(xùn)練
? ? ? ??神經(jīng)網(wǎng)絡(luò)用于模式識(shí)別的主流是有指導(dǎo)學(xué)習(xí)網(wǎng)絡(luò),無指導(dǎo)學(xué)習(xí)網(wǎng)絡(luò)更多的是用于聚類分析。對(duì)于有指導(dǎo)的模式識(shí)別,由于任一樣本的類別是已知的,樣本在空間的分布不再是依據(jù)其自然分布傾向來劃分,而是要根據(jù)同類樣本在空間的分布及不同類樣本之間的分離程度找一種適當(dāng)?shù)目臻g劃分方法,或者找到一個(gè)分類邊界,使得不同類樣本分別位于不同的區(qū)域內(nèi)。這就需要一個(gè)長時(shí)間且復(fù)雜的學(xué)習(xí)過程,不斷調(diào)整用以劃分樣本空間的分類邊界的位置,使盡可能少的樣本被劃分到非同類區(qū)域中。
?????? 卷積網(wǎng)絡(luò)在本質(zhì)上是一種輸入到輸出的映射,它能夠?qū)W習(xí)大量的輸入與輸出之間的映射關(guān)系,而不需要任何輸入和輸出之間的精確的數(shù)學(xué)表達(dá)式,只要用已知的模式對(duì)卷積網(wǎng)絡(luò)加以訓(xùn)練,網(wǎng)絡(luò)就具有輸入輸出對(duì)之間的映射能力。卷積網(wǎng)絡(luò)執(zhí)行的是有導(dǎo)師訓(xùn)練,所以其樣本集是由形如:(輸入向量,理想輸出向量)的向量對(duì)構(gòu)成的。所有這些向量對(duì),都應(yīng)該是來源于網(wǎng)絡(luò)即將模擬的系統(tǒng)的實(shí)際“運(yùn)行”結(jié)果。它們可以是從實(shí)際運(yùn)行系統(tǒng)中采集來的。在開始訓(xùn)練前,所有的權(quán)都應(yīng)該用一些不同的小隨機(jī)數(shù)進(jìn)行初始化。“小隨機(jī)數(shù)”用來保證網(wǎng)絡(luò)不會(huì)因權(quán)值過大而進(jìn)入飽和狀態(tài),從而導(dǎo)致訓(xùn)練失敗;“不同”用來保證網(wǎng)絡(luò)可以正常地學(xué)習(xí)。實(shí)際上,如果用相同的數(shù)去初始化權(quán)矩陣,則網(wǎng)絡(luò)無能力學(xué)習(xí)。
?????? 訓(xùn)練算法與傳統(tǒng)的BP算法差不多。主要包括4步,這4步被分為兩個(gè)階段:
第一階段,向前傳播階段:
a)從樣本集中取一個(gè)樣本(X,Yp),將X輸入網(wǎng)絡(luò);
b)計(jì)算相應(yīng)的實(shí)際輸出Op。
????? 在此階段,信息從輸入層經(jīng)過逐級(jí)的變換,傳送到輸出層。這個(gè)過程也是網(wǎng)絡(luò)在完成訓(xùn)練后正常運(yùn)行時(shí)執(zhí)行的過程。在此過程中,網(wǎng)絡(luò)執(zhí)行的是計(jì)算(實(shí)際上就是輸入與每層的權(quán)值矩陣相點(diǎn)乘,得到最后的輸出結(jié)果):
????????? Op=Fn(…(F2(F1(XpW(1))W(2))…)W(n))
第二階段,向后傳播階段
a)算實(shí)際輸出Op與相應(yīng)的理想輸出Yp的差;
b)按極小化誤差的方法反向傳播調(diào)整權(quán)矩陣。
?
4、 CNN的學(xué)習(xí)總體而言,卷積網(wǎng)絡(luò)可以簡化為下圖所示模型:
? ??其中,input?到C1、S4到C5、C5到output是全連接,C1到S2、C3到S4是一一對(duì)應(yīng)的連接,S2到C3為了消除網(wǎng)絡(luò)對(duì)稱性,去掉了一部分連接,?可以讓特征映射更具多樣性。需要注意的是?C5?卷積核的尺寸要和?S4?的輸出相同,只有這樣才能保證輸出是一維向量。
4.1?卷積層的學(xué)習(xí)
卷積層的典型結(jié)構(gòu)如下圖所示:
卷積層的前饋運(yùn)算是通過如下算法實(shí)現(xiàn)的:
卷積層的輸出=?Sigmoid(?Sum(卷積)?+偏移量)
其中卷積核和偏移量都是可訓(xùn)練的。下面是其核心代碼:
ConvolutionLayer::fprop(input,output) {//取得卷積核的個(gè)數(shù)int n=kernel.GetDim(0);for (int i=0;i<n;i++) {//第i個(gè)卷積核對(duì)應(yīng)輸入層第a個(gè)特征映射,輸出層的第b個(gè)特征映射//這個(gè)卷積核可以形象的看作是從輸入層第a個(gè)特征映射到輸出層的第b個(gè)特征映射的一個(gè)鏈接int a=table[i][0], b=table[i][1];//用第i個(gè)卷積核和輸入層第a個(gè)特征映射做卷積convolution = Conv(input[a],kernel[i]);//把卷積結(jié)果求和sum[b] +=convolution;}for (i=0;i<(int)bias.size();i++) {//加上偏移量sum[i] += bias[i];}//調(diào)用Sigmoid函數(shù)output = Sigmoid(sum); }? ? 其中,input是?n1×n2×n3?的矩陣,n1是輸入層特征映射的個(gè)數(shù),n2是輸入層特征映射的寬度,n3是輸入層特征映射的高度。output,?sum,?convolution,?bias是n1×(n2-kw+1)×(n3-kh+1)的矩陣,kw,kh是卷積核的寬度高度(圖中是5×5)。kernel是卷積核矩陣。table是連接表,即如果第a輸入和第b個(gè)輸出之間?有連接,table里就會(huì)有[a,b]這一項(xiàng),而且每個(gè)連接都對(duì)應(yīng)一個(gè)卷積核。
?
?
?
卷積層的反饋運(yùn)算的核心代碼如下:
?
ConvolutionLayer::bprop(input,output,in_dx,out_dx) {//梯度通過DSigmoid反傳sum_dx = DSigmoid(out_dx);//計(jì)算bias的梯度for (i=0;i<bias.size();i++) {bias_dx[i] = sum_dx[i];}//取得卷積核的個(gè)數(shù)int n=kernel.GetDim(0);for (int i=0;i<n;i++){int a=table[i][0],b=table[i][1];//用第i個(gè)卷積核和第b個(gè)輸出層反向卷積(即輸出層的一點(diǎn)乘卷積模板返回給輸入層),并把結(jié)果累加到第a個(gè)輸入層input_dx[a] += DConv(sum_dx[b],kernel[i]);//用同樣的方法計(jì)算卷積模板的梯度kernel_dx[i] += DConv(sum_dx[b],input[a]);} }?
其中in_dx,out_dx?的結(jié)構(gòu)和?input,output?相同,代表的是相應(yīng)點(diǎn)的梯度。
4.2?子采樣層的學(xué)習(xí)
子采樣層的典型結(jié)構(gòu)如下圖所示:
類似的子采樣層的輸出的計(jì)算式為:
輸出=?Sigmoid(?采樣*權(quán)重?+偏移量)?
其核心代碼如下:
?
SubSamplingLayer::fprop(input,output) {int n1= input.GetDim(0);int n2= input.GetDim(1);int n3= input.GetDim(2);for (int i=0;i<n1;i++) {for (int j=0;j<n2;j++) {for (int k=0;k<n3;k++) {//coeff 是可訓(xùn)練的權(quán)重,sw 、sh 是采樣窗口的尺寸。sub[i][j/sw][k/sh] += input[i][j][k]*coeff[i];}}}for (i=0;i<n1;i++) {//加上偏移量sum[i] = sub[i] + bias[i];}output = Sigmoid(sum); }?
?
子采樣層的反饋運(yùn)算的核心代碼如下:
?
SubSamplingLayer::bprop(input,output,in_dx,out_dx) {//梯度通過DSigmoid反傳sum_dx = DSigmoid(out_dx);//計(jì)算bias和coeff的梯度for (i=0;i<n1;i++) {coeff_dx[i] = 0;bias_dx[i] = 0;for (j=0;j<n2/sw;j++)for (k=0;k<n3/sh;k++) {coeff_dx[i] += sub[j][k]*sum_dx[i][j][k];bias_dx[i] += sum_dx[i][j][k]);}}for (i=0;i<n1;i++) {for (j=0;j<n2;j++)for (k=0;k<n3;k++) {in_dx[i][j][k] = coeff[i]*sum_dx[i][j/sw][k/sh];}} }?
5、CNN的優(yōu)點(diǎn)
????????卷積神經(jīng)網(wǎng)絡(luò)CNN主要用來識(shí)別位移、縮放及其他形式扭曲不變性的二維圖形。由于CNN的特征檢測層通過訓(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)勢。卷積神經(jīng)網(wǎng)絡(luò)以其局部權(quán)值共享的特殊結(jié)構(gòu)在語音識(shí)別和圖像處理方面有著獨(dú)特的優(yōu)越性,其布局更接近于實(shí)際的生物神經(jīng)網(wǎng)絡(luò),權(quán)值共享降低了網(wǎng)絡(luò)的復(fù)雜性,特別是多維輸入向量的圖像可以直接輸入網(wǎng)絡(luò)這一特點(diǎn)避免了特征提取和分類過程中數(shù)據(jù)重建的復(fù)雜度。
??????? 流的分類方式幾乎都是基于統(tǒng)計(jì)特征的,這就意味著在進(jìn)行分辨前必須提取某些特征。然而,顯式的特征提取并不容易,在一些應(yīng)用問題中也并非總是可靠的。卷積神經(jīng)網(wǎng)絡(luò),它避免了顯式的特征取樣,隱式地從訓(xùn)練數(shù)據(jù)中進(jìn)行學(xué)習(xí)。這使得卷積神經(jīng)網(wǎng)絡(luò)明顯有別于其他基于神經(jīng)網(wǎng)絡(luò)的分類器,通過結(jié)構(gòu)重組和減少權(quán)值將特征提取功能融合進(jìn)多層感知器。它可以直接處理灰度圖片,能夠直接用于處理基于圖像的分類。
?????? 卷積網(wǎng)絡(luò)較一般神經(jīng)網(wǎng)絡(luò)在圖像處理方面有如下優(yōu)點(diǎn): a)輸入圖像和網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu)能很好的吻合;b)特征提取和模式分類同時(shí)進(jìn)行,并同時(shí)在訓(xùn)練中產(chǎn)生;c)權(quán)重共享可以減少網(wǎng)絡(luò)的訓(xùn)練參數(shù),使神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)變得更簡單,適應(yīng)性更強(qiáng)。
6、CNN的實(shí)現(xiàn)問題
???????CNNs中這種層間聯(lián)系和空域信息的緊密關(guān)系,使其適于圖像處理和理解。而且,其在自動(dòng)提取圖像的顯著特征方面還表現(xiàn)出了比較優(yōu)的性能。在一些例子當(dāng)中,Gabor濾波器已經(jīng)被使用在一個(gè)初始化預(yù)處理的步驟中,以達(dá)到模擬人類視覺系統(tǒng)對(duì)視覺刺激的響應(yīng)。在目前大部分的工作中,研究者將CNNs應(yīng)用到了多種機(jī)器學(xué)習(xí)問題中,包括人臉識(shí)別,文檔分析和語言檢測等。為了達(dá)到尋找視頻中幀與幀之間的相干性的目的,目前CNNs通過一個(gè)時(shí)間相干性去訓(xùn)練,但這個(gè)不是CNNs特有的。? ? ?
由于卷積神經(jīng)網(wǎng)絡(luò)采用BP網(wǎng)絡(luò)相同的算法。所以,采用現(xiàn)有BP網(wǎng)絡(luò)就可以實(shí)現(xiàn)。開源的神經(jīng)網(wǎng)絡(luò)代碼FAAN可以利用。這個(gè)開源的實(shí)現(xiàn)采用了一些代碼優(yōu)化技術(shù),有雙精度,單精度,定點(diǎn)運(yùn)算三個(gè)不同的版本。 由于經(jīng)典的BP網(wǎng)絡(luò)是一個(gè)一維節(jié)點(diǎn)分布排列,而卷積神經(jīng)網(wǎng)絡(luò)是二維網(wǎng)絡(luò)結(jié)構(gòu)。所以,要把卷積神經(jīng)網(wǎng)絡(luò)的每一層,按照一定的順序和規(guī)則映射為一維節(jié)點(diǎn)分布,然后,按照這個(gè)分布創(chuàng)建一個(gè)多層反向傳播算法的網(wǎng)絡(luò)結(jié)構(gòu),就可以按照一般的BP訓(xùn)練算法去學(xué)習(xí)網(wǎng)絡(luò)參數(shù)。對(duì)于實(shí)際環(huán)境中新樣本的預(yù)測,也采用BP算法中相同信號(hào)前向傳遞算法進(jìn)行。具體細(xì)節(jié)也可以參考網(wǎng)上的一個(gè)開源代碼,鏈接如下: http://www.codeproject.com/Articles/16650/Neural-Network-for-Recognition-of-Handwritten-Digi 注:這個(gè)代碼在創(chuàng)建CNN的時(shí)候有個(gè)明顯的BUG,如果你看明白了我上面對(duì)簡化的LeNet-5的結(jié)構(gòu)描述,一眼就會(huì)找出問題所在。 7、幾點(diǎn)困惑 ? 這篇文章講解的CNN構(gòu)建過程,稍微詳細(xì)點(diǎn),可是還有幾點(diǎn)我沒有搞清楚: <1>局部滑動(dòng)窗的大小決定什么? <2>滑動(dòng)窗的位置怎么決定? <3>滑動(dòng)窗的位置決定什么?C層大小? <4>“根據(jù)對(duì)前面C1層同樣的理解,我們很容易得到C3層的大小為10x10。”不明白怎么得到 <5>“C3層的變成了16個(gè)10x10網(wǎng)絡(luò)!”怎么變成了16個(gè)? <6>第三部分講? 簡化的LeNet-5系統(tǒng),完全不明白節(jié)點(diǎn)與權(quán)值的計(jì)算。 希望能遇到比較精通CNN的朋友稍作講解,感激不盡!References:
卷積神經(jīng)網(wǎng)絡(luò)(CNN)
GitHub卷及神經(jīng)網(wǎng)絡(luò)代碼(MATLAB)
CNN代碼理解(matlab)
http://blog.csdn.net/nan355655600/article/details/17690029
http://blog.csdn.net/zouxy09/article/details/8782018
本文轉(zhuǎn)自博客園知識(shí)天地的博客,原文鏈接:Deep Learning(深度學(xué)習(xí))學(xué)習(xí)筆記整理(二),如需轉(zhuǎn)載請(qǐng)自行聯(lián)系原博主。
總結(jié)
以上是生活随笔為你收集整理的Deep Learning(深度学习)学习笔记整理(二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: quartus 13.1自带仿真测试流程
- 下一篇: C程序中如何获取shell命令执行结果和