姓名:于川皓 學(xué)號:16140210089
轉(zhuǎn)載自:https://www.cnblogs.com/nsnow/p/4562308.html
【嵌牛導(dǎo)讀】:卷積神經(jīng)網(wǎng)絡(luò)是一種能夠廣泛應(yīng)用的技術(shù),那它的原理是什么呢?
【嵌牛鼻子】:卷積神經(jīng)網(wǎng)絡(luò)
【嵌牛提問】:卷積神經(jīng)網(wǎng)絡(luò)實現(xiàn)方法是什么?
【嵌牛正文】:自今年七月份以來卡辰,一直在實驗室負責(zé)卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network攒菠,CNN)编整,期間配置和使用過theano和cuda-convnet栅葡、cuda-convnet2频祝。為了增進CNN的理解和使用旋炒,特寫此博文步悠,以其與人交流,互有增益瘫镇。正文之前贤徒,先說幾點自己對于CNN的感觸。先明確一點就是汇四,Deep Learning是全部深度學(xué)習(xí)算法的總稱接奈,CNN是深度學(xué)習(xí)算法在圖像處理領(lǐng)域的一個應(yīng)用。
第一點通孽,在學(xué)習(xí)Deep learning和CNN之前序宦,總以為它們是很了不得的知識,總以為它們能解決很多問題背苦,學(xué)習(xí)了之后互捌,才知道它們不過與其他機器學(xué)習(xí)算法如svm等相似潘明,仍然可以把它當(dāng)做一個分類器,仍然可以像使用一個黑盒子那樣使用它秕噪。
第二點钳降,Deep Learning強大的地方就是可以利用網(wǎng)絡(luò)中間某一層的輸出當(dāng)做是數(shù)據(jù)的另一種表達,從而可以將其認為是經(jīng)過網(wǎng)絡(luò)學(xué)習(xí)到的特征腌巾∷焯睿基于該特征,可以進行進一步的相似度比較等澈蝙。
第三點吓坚,Deep Learning算法能夠有效的關(guān)鍵其實是大規(guī)模的數(shù)據(jù),這一點原因在于每個DL都有眾多的參數(shù)灯荧,少量數(shù)據(jù)無法將參數(shù)訓(xùn)練充分礁击。
接下來話不多說,直接奔入主題開始CNN之旅逗载。
卷積神經(jīng)網(wǎng)絡(luò)簡介(Convolutional Neural Networks哆窿,簡稱CNN)
卷積神經(jīng)網(wǎng)絡(luò)是近年發(fā)展起來,并引起廣泛重視的一種高效識別方法厉斟。20世紀60年代挚躯,Hubel和Wiesel在研究貓腦皮層中用于局部敏感和方向選擇的神經(jīng)元時發(fā)現(xiàn)其獨特的網(wǎng)絡(luò)結(jié)構(gòu)可以有效地降低反饋神經(jīng)網(wǎng)絡(luò)的復(fù)雜性,繼而提出了卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks-簡稱CNN)∧笈颍現(xiàn)在,CNN已經(jīng)成為眾多科學(xué)領(lǐng)域的研究熱點之一食侮,特別是在模式分類領(lǐng)域号涯,由于該網(wǎng)絡(luò)避免了對圖像的復(fù)雜前期預(yù)處理,可以直接輸入原始圖像锯七,因而得到了更為廣泛的應(yīng)用链快。 K.Fukushima在1980年提出的新識別機是卷積神經(jīng)網(wǎng)絡(luò)的第一個實現(xiàn)網(wǎng)絡(luò)。隨后眉尸,更多的科研工作者對該網(wǎng)絡(luò)進行了改進域蜗。其中,具有代表性的研究成果是Alexander和Taylor提出的“改進認知機”噪猾,該方法綜合了各種改進方法的優(yōu)點并避免了耗時的誤差反向傳播霉祸。
一般地,CNN的基本結(jié)構(gòu)包括兩層袱蜡,其一為特征提取層丝蹭,每個神經(jīng)元的輸入與前一層的局部接受域相連,并提取該局部的特征坪蚁。一旦該局部特征被提取后奔穿,它與其它特征間的位置關(guān)系也隨之確定下來镜沽;其二是特征映射層,網(wǎng)絡(luò)的每個計算層由多個特征映射組成贱田,每個特征映射是一個平面缅茉,平面上所有神經(jīng)元的權(quán)值相等。特征映射結(jié)構(gòu)采用影響函數(shù)核小的sigmoid函數(shù)作為卷積網(wǎng)絡(luò)的激活函數(shù)男摧,使得特征映射具有位移不變性蔬墩。此外,由于一個映射面上的神經(jīng)元共享權(quán)值彩倚,因而減少了網(wǎng)絡(luò)自由參數(shù)的個數(shù)筹我。卷積神經(jīng)網(wǎng)絡(luò)中的每一個卷積層都緊跟著一個用來求局部平均與二次提取的計算層,這種特有的兩次特征提取結(jié)構(gòu)減小了特征分辨率帆离。
CNN主要用來識別位移蔬蕊、縮放及其他形式扭曲不變性的二維圖形。由于CNN的特征檢測層通過訓(xùn)練數(shù)據(jù)進行學(xué)習(xí)哥谷,所以在使用CNN時岸夯,避免了顯示的特征抽取,而隱式地從訓(xùn)練數(shù)據(jù)中進行學(xué)習(xí)们妥;再者由于同一特征映射面上的神經(jīng)元權(quán)值相同猜扮,所以網(wǎng)絡(luò)可以并行學(xué)習(xí),這也是卷積網(wǎng)絡(luò)相對于神經(jīng)元彼此相連網(wǎng)絡(luò)的一大優(yōu)勢监婶。卷積神經(jīng)網(wǎng)絡(luò)以其局部權(quán)值共享的特殊結(jié)構(gòu)在語音識別和圖像處理方面有著獨特的優(yōu)越性旅赢,其布局更接近于實際的生物神經(jīng)網(wǎng)絡(luò),權(quán)值共享降低了網(wǎng)絡(luò)的復(fù)雜性惑惶,特別是多維輸入向量的圖像可以直接輸入網(wǎng)絡(luò)這一特點避免了特征提取和分類過程中數(shù)據(jù)重建的復(fù)雜度煮盼。
1. 神經(jīng)網(wǎng)絡(luò)
首先介紹神經(jīng)網(wǎng)絡(luò),這一步的詳細可以參考資源1带污。簡要介紹下僵控。神經(jīng)網(wǎng)絡(luò)的每個單元如下:
卷積神經(jīng)網(wǎng)絡(luò)
其對應(yīng)的公式如下:
卷積神經(jīng)網(wǎng)絡(luò)
其中,該單元也可以被稱作是Logistic回歸模型鱼冀。當(dāng)將多個單元組合起來并具有分層結(jié)構(gòu)時报破,就形成了神經(jīng)網(wǎng)絡(luò)模型。下圖展示了一個具有一個隱含層的神經(jīng)網(wǎng)絡(luò)千绪。
卷積神經(jīng)網(wǎng)絡(luò)
其對應(yīng)的公式如下:
卷積神經(jīng)網(wǎng)絡(luò)
比較類似的充易,可以拓展到有2,3,4,5,…個隱含層荸型。
神經(jīng)網(wǎng)絡(luò)的訓(xùn)練方法也同Logistic類似蔽氨,不過由于其多層性,還需要利用鏈式求導(dǎo)法則對隱含層的節(jié)點進行求導(dǎo),即梯度下降+鏈式求導(dǎo)法則鹉究,專業(yè)名稱為反向傳播宇立。關(guān)于訓(xùn)練算法,本文暫不涉及自赔。
2 卷積神經(jīng)網(wǎng)絡(luò)
在圖像處理中妈嘹,往往把圖像表示為像素的向量,比如一個1000×1000的圖像绍妨,可以表示為一個1000000的向量润脸。在上一節(jié)中提到的神經(jīng)網(wǎng)絡(luò)中,如果隱含層數(shù)目與輸入層一樣他去,即也是1000000時毙驯,那么輸入層到隱含層的參數(shù)數(shù)據(jù)為1000000×1000000=10^12,這樣就太多了灾测,基本沒法訓(xùn)練爆价。所以圖像處理要想練成神經(jīng)網(wǎng)絡(luò)大法,必先減少參數(shù)加快速度媳搪。就跟辟邪劍譜似的铭段,普通人練得很挫,一旦自宮后內(nèi)力變強劍法變快秦爆,就變的很牛了序愚。
2.1 局部感知
卷積神經(jīng)網(wǎng)絡(luò)有兩種神器可以降低參數(shù)數(shù)目,第一種神器叫做局部感知野等限。一般認為人對外界的認知是從局部到全局的爸吮,而圖像的空間聯(lián)系也是局部的像素聯(lián)系較為緊密,而距離較遠的像素相關(guān)性則較弱望门。因而形娇,每個神經(jīng)元其實沒有必要對全局圖像進行感知,只需要對局部進行感知怒允,然后在更高層將局部的信息綜合起來就得到了全局的信息埂软。網(wǎng)絡(luò)部分連通的思想锈遥,也是受啟發(fā)于生物學(xué)里面的視覺系統(tǒng)結(jié)構(gòu)纫事。視覺皮層的神經(jīng)元就是局部接受信息的(即這些神經(jīng)元只響應(yīng)某些特定區(qū)域的刺激)。如下圖所示:左圖為全連接所灸,右圖為局部連接丽惶。
卷積神經(jīng)網(wǎng)絡(luò)
在上右圖中,假如每個神經(jīng)元只和10×10個像素值相連爬立,那么權(quán)值數(shù)據(jù)為1000000×100個參數(shù)钾唬,減少為原來的千分之一。而那10×10個像素值對應(yīng)的10×10個參數(shù),其實就相當(dāng)于卷積操作抡秆。
2.2 參數(shù)共享
但其實這樣的話參數(shù)仍然過多奕巍,那么就啟動第二級神器,即權(quán)值共享儒士。在上面的局部連接中的止,每個神經(jīng)元都對應(yīng)100個參數(shù),一共1000000個神經(jīng)元着撩,如果這1000000個神經(jīng)元的100個參數(shù)都是相等的诅福,那么參數(shù)數(shù)目就變?yōu)?00了。
怎么理解權(quán)值共享呢拖叙?我們可以這100個參數(shù)(也就是卷積操作)看成是提取特征的方式氓润,該方式與位置無關(guān)。這其中隱含的原理則是:圖像的一部分的統(tǒng)計特性與其他部分是一樣的薯鳍。這也意味著我們在這一部分學(xué)習(xí)的特征也能用在另一部分上咖气,所以對于這個圖像上的所有位置,我們都能使用同樣的學(xué)習(xí)特征辐啄。
更直觀一些采章,當(dāng)從一個大尺寸圖像中隨機選取一小塊,比如說 8×8 作為樣本壶辜,并且從這個小塊樣本中學(xué)習(xí)到了一些特征悯舟,這時我們可以把從這個 8×8 樣本中學(xué)習(xí)到的特征作為探測器,應(yīng)用到這個圖像的任意地方中去砸民。特別是抵怎,我們可以用從 8×8 樣本中所學(xué)習(xí)到的特征跟原本的大尺寸圖像作卷積,從而對這個大尺寸圖像上的任一位置獲得一個不同特征的激活值岭参。
如下圖所示反惕,展示了一個33的卷積核在55的圖像上做卷積的過程。每個卷積都是一種特征提取方式演侯,就像一個篩子姿染,將圖像中符合條件(激活值越大越符合條件)的部分篩選出來。
卷積神經(jīng)網(wǎng)絡(luò)
2.3 多卷積核
上面所述只有100個參數(shù)時秒际,表明只有1個100*100的卷積核悬赏,顯然,特征提取是不充分的娄徊,我們可以添加多個卷積核闽颇,比如32個卷積核,可以學(xué)習(xí)32種特征寄锐。在有多個卷積核時兵多,如下圖所示:
卷積神經(jīng)網(wǎng)絡(luò)
上圖右尖啡,不同顏色表明不同的卷積核。每個卷積核都會將圖像生成為另一幅圖像剩膘。比如兩個卷積核就可以將生成兩幅圖像衅斩,這兩幅圖像可以看做是一張圖像的不同的通道。如下圖所示怠褐,下圖有個小錯誤矛渴,即將w1改為w0,w2改為w1即可惫搏。下文中仍以w1和w2稱呼它們具温。
下圖展示了在四個通道上的卷積操作,有兩個卷積核筐赔,生成兩個通道铣猩。其中需要注意的是,四個通道上每個通道對應(yīng)一個卷積核茴丰,先將w2忽略达皿,只看w1,那么在w1的某位置(i,j)處的值贿肩,是由四個通道上(i,j)處的卷積結(jié)果相加然后再取激活函數(shù)值得到的峦椰。
卷積神經(jīng)網(wǎng)絡(luò)
卷積神經(jīng)網(wǎng)絡(luò)
所以,在上圖由4個通道卷積得到2個通道的過程中汰规,參數(shù)的數(shù)目為4×2×2×2個汤功,其中4表示4個通道,第一個2表示生成2個通道溜哮,最后的2×2表示卷積核大小滔金。
2.4 Down-pooling
在通過卷積獲得了特征 (features) 之后,下一步我們希望利用這些特征去做分類茂嗓。理論上講餐茵,人們可以用所有提取得到的特征去訓(xùn)練分類器,例如 softmax 分類器述吸,但這樣做面臨計算量的挑戰(zhàn)忿族。例如:對于一個 96X96 像素的圖像,假設(shè)我們已經(jīng)學(xué)習(xí)得到了400個定義在8X8輸入上的特征蝌矛,每一個特征和圖像卷積都會得到一個 (96 ? 8 + 1) × (96 ? 8 + 1) = 7921 維的卷積特征道批,由于有 400 個特征,所以每個樣例 (example) 都會得到一個 892 × 400 = 3,168,400 維的卷積特征向量朴读。學(xué)習(xí)一個擁有超過 3 百萬特征輸入的分類器十分不便屹徘,并且容易出現(xiàn)過擬合 (over-fitting)走趋。
為了解決這個問題衅金,首先回憶一下,我們之所以決定使用卷積后的特征是因為圖像具有一種“靜態(tài)性”的屬性,這也就意味著在一個圖像區(qū)域有用的特征極有可能在另一個區(qū)域同樣適用氮唯。因此鉴吹,為了描述大的圖像,一個很自然的想法就是對不同位置的特征進行聚合統(tǒng)計惩琉,例如豆励,人們可以計算圖像一個區(qū)域上的某個特定特征的平均值 (或最大值)。這些概要統(tǒng)計特征不僅具有低得多的維度 (相比使用所有提取得到的特征)瞒渠,同時還會改善結(jié)果(不容易過擬合)良蒸。這種聚合的操作就叫做池化 (pooling),有時也稱為平均池化或者最大池化 (取決于計算池化的方法)伍玖。
卷積神經(jīng)網(wǎng)絡(luò)
至此嫩痰,卷積神經(jīng)網(wǎng)絡(luò)的基本結(jié)構(gòu)和原理已經(jīng)闡述完畢。
2.5 多層卷積
在實際應(yīng)用中窍箍,往往使用多層卷積串纺,然后再使用全連接層進行訓(xùn)練,多層卷積的目的是一層卷積學(xué)到的特征往往是局部的椰棘,層數(shù)越高纺棺,學(xué)到的特征就越全局化。
3 ImageNet-2010網(wǎng)絡(luò)結(jié)構(gòu)
ImageNet LSVRC是一個圖片分類的比賽邪狞,其訓(xùn)練集包括127W+張圖片祷蝌,驗證集有5W張圖片,測試集有15W張圖片帆卓。本文截取2010年Alex Krizhevsky的CNN結(jié)構(gòu)進行說明杆逗,該結(jié)構(gòu)在2010年取得冠軍,top-5錯誤率為15.3%鳞疲。值得一提的是罪郊,在今年的ImageNet LSVRC比賽中,取得冠軍的GoogNet已經(jīng)達到了top-5錯誤率6.67%尚洽』陂希可見,深度學(xué)習(xí)的提升空間還很巨大腺毫。
下圖即為Alex的CNN結(jié)構(gòu)圖癣疟。需要注意的是,該模型采用了2-GPU并行結(jié)構(gòu)潮酒,即第1睛挚、2、4急黎、5卷積層都是將模型參數(shù)分為2部分進行訓(xùn)練的扎狱。在這里侧到,更進一步,并行結(jié)構(gòu)分為數(shù)據(jù)并行與模型并行淤击。數(shù)據(jù)并行是指在不同的GPU上匠抗,模型結(jié)構(gòu)相同,但將訓(xùn)練數(shù)據(jù)進行切分污抬,分別訓(xùn)練得到不同的模型汞贸,然后再將模型進行融合。而模型并行則是印机,將若干層的模型參數(shù)進行切分矢腻,不同的GPU上使用相同的數(shù)據(jù)進行訓(xùn)練,得到的結(jié)果直接連接作為下一層的輸入射赛。
卷積神經(jīng)網(wǎng)絡(luò)
上圖模型的基本參數(shù)為:
輸入:224×224大小的圖片踏堡,3通道
第一層卷積:5×5大小的卷積核96個,每個GPU上48個咒劲。
第一層max-pooling:2×2的核顷蟆。
第二層卷積:3×3卷積核256個,每個GPU上128個腐魂。
第二層max-pooling:2×2的核帐偎。
第三層卷積:與上一層是全連接,3*3的卷積核384個蛔屹。分到兩個GPU上個192個削樊。
第四層卷積:3×3的卷積核384個,兩個GPU各192個兔毒。該層與上一層連接沒有經(jīng)過pooling層漫贞。
第五層卷積:3×3的卷積核256個,兩個GPU上個128個育叁。
第五層max-pooling:2×2的核迅脐。
第一層全連接:4096維,將第五層max-pooling的輸出連接成為一個一維向量豪嗽,作為該層的輸入谴蔑。
第二層全連接:4096維
Softmax層:輸出為1000,輸出的每一維都是圖片屬于該類別的概率龟梦。
4 DeepID網(wǎng)絡(luò)結(jié)構(gòu)
DeepID網(wǎng)絡(luò)結(jié)構(gòu)是香港中文大學(xué)的Sun Yi開發(fā)出來用來學(xué)習(xí)人臉特征的卷積神經(jīng)網(wǎng)絡(luò)隐锭。每張輸入的人臉被表示為160維的向量,學(xué)習(xí)到的向量經(jīng)過其他模型進行分類计贰,在人臉驗證試驗上得到了97.45%的正確率钦睡,更進一步的,原作者改進了CNN躁倒,又得到了99.15%的正確率荞怒。
如下圖所示洒琢,該結(jié)構(gòu)與ImageNet的具體參數(shù)類似,所以只解釋一下不同的部分吧挣输。
卷積神經(jīng)網(wǎng)絡(luò)
上圖中的結(jié)構(gòu),在最后只有一層全連接層福贞,然后就是softmax層了撩嚼。論文中就是以該全連接層作為圖像的表示。在全連接層挖帘,以第四層卷積和第三層max-pooling的輸出作為全連接層的輸入完丽,這樣可以學(xué)習(xí)到局部的和全局的特征。