CNN的概念与原理
文章轉(zhuǎn)自:https://blog.csdn.net/yunpiao123456/article/details/52437794###
一、卷積神經(jīng)網(wǎng)絡(luò)的基本概念
? ? ? ?受Hubel和Wiesel對(duì)貓視覺(jué)皮層電生理研究啟發(fā),有人提出卷積神經(jīng)網(wǎng)絡(luò)(CNN),Yann Lecun 最早將CNN用于手寫(xiě)數(shù)字識(shí)別并一直保持了其在該問(wèn)題的霸主地位。近年來(lái)卷積神經(jīng)網(wǎng)絡(luò)在多個(gè)方向持續(xù)發(fā)力,在語(yǔ)音識(shí)別、人臉識(shí)別、通用物體識(shí)別、運(yùn)動(dòng)分析、自然語(yǔ)言處理甚至腦電波分析方面均有突破。
? ? ? ?卷積神經(jīng)網(wǎng)絡(luò)與普通神經(jīng)網(wǎng)絡(luò)的區(qū)別在于,卷積神經(jīng)網(wǎng)絡(luò)包含了一個(gè)由卷積層和子采樣層構(gòu)成的特征抽取器。在卷積神經(jīng)網(wǎng)絡(luò)的卷積層中,一個(gè)神經(jīng)元只與部分鄰層神經(jīng)元連接。在CNN的一個(gè)卷積層中,通常包含若干個(gè)特征平面(featureMap),每個(gè)特征平面由一些矩形排列的的神經(jīng)元組成,同一特征平面的神經(jīng)元共享權(quán)值,這里共享的權(quán)值就是卷積核。卷積核一般以隨機(jī)小數(shù)矩陣的形式初始化,在網(wǎng)絡(luò)的訓(xùn)練過(guò)程中卷積核將學(xué)習(xí)得到合理的權(quán)值。共享權(quán)值(卷積核)帶來(lái)的直接好處是減少網(wǎng)絡(luò)各層之間的連接,同時(shí)又降低了過(guò)擬合的風(fēng)險(xiǎn)。子采樣也叫做池化(pooling),通常有均值子采樣(mean pooling)和最大值子采樣(max pooling)兩種形式。子采樣可以看作一種特殊的卷積過(guò)程。卷積和子采樣大大簡(jiǎn)化了模型復(fù)雜度,減少了模型的參數(shù)。
二、卷積神經(jīng)網(wǎng)絡(luò)的應(yīng)用場(chǎng)景
三、卷積神經(jīng)網(wǎng)絡(luò)的原理
3.1 神經(jīng)網(wǎng)絡(luò)
? ? ? ?首先介紹神經(jīng)網(wǎng)絡(luò),這一步的詳細(xì)可以參考資源1。簡(jiǎn)要介紹下。神經(jīng)網(wǎng)絡(luò)的每個(gè)單元如下:
? ? ? ?其對(duì)應(yīng)的公式如下:
? ? ? ?其中,該單元也可以被稱作是Logistic回歸模型。當(dāng)將多個(gè)單元組合起來(lái)并具有分層結(jié)構(gòu)時(shí),就形成了神經(jīng)網(wǎng)絡(luò)模型。下圖展示了一個(gè)具有一個(gè)隱含層的神經(jīng)網(wǎng)絡(luò)。
? ? ? ? 其對(duì)應(yīng)的公式如下:
? ? ? ?比較類(lèi)似的,可以拓展到有2,3,4,5,…個(gè)隱含層。
? ? ? ?神經(jīng)網(wǎng)絡(luò)的訓(xùn)練方法也同Logistic類(lèi)似,不過(guò)由于其多層性,還需要利用鏈?zhǔn)角髮?dǎo)法則對(duì)隱含層的節(jié)點(diǎn)進(jìn)行求導(dǎo),即梯度下降+鏈?zhǔn)角髮?dǎo)法則,專業(yè)名稱為反向傳播。關(guān)于訓(xùn)練算法,本文暫不涉及。
3.2 卷積神經(jīng)網(wǎng)絡(luò)
? ? ? ?受Hubel和Wiesel對(duì)貓視覺(jué)皮層電生理研究啟發(fā),有人提出卷積神經(jīng)網(wǎng)絡(luò)(CNN),Yann Lecun 最早將CNN用于手寫(xiě)數(shù)字識(shí)別并一直保持了其在該問(wèn)題的霸主地位。近年來(lái)卷積神經(jīng)網(wǎng)絡(luò)在多個(gè)方向持續(xù)發(fā)力,在語(yǔ)音識(shí)別、人臉識(shí)別、通用物體識(shí)別、運(yùn)動(dòng)分析、自然語(yǔ)言處理甚至腦電波分析方面均有突破。
? ? ? ?卷積神經(jīng)網(wǎng)絡(luò)與普通神經(jīng)網(wǎng)絡(luò)的區(qū)別在于,卷積神經(jīng)網(wǎng)絡(luò)包含了一個(gè)由卷積層和子采樣層構(gòu)成的特征抽取器。在卷積神經(jīng)網(wǎng)絡(luò)的卷積層中,一個(gè)神經(jīng)元只與部分鄰層神經(jīng)元連接。在CNN的一個(gè)卷積層中,通常包含若干個(gè)特征平面(featureMap),每個(gè)特征平面由一些矩形排列的的神經(jīng)元組成,同一特征平面的神經(jīng)元共享權(quán)值,這里共享的權(quán)值就是卷積核。卷積核一般以隨機(jī)小數(shù)矩陣的形式初始化,在網(wǎng)絡(luò)的訓(xùn)練過(guò)程中卷積核將學(xué)習(xí)得到合理的權(quán)值。共享權(quán)值(卷積核)帶來(lái)的直接好處是減少網(wǎng)絡(luò)各層之間的連接,同時(shí)又降低了過(guò)擬合的風(fēng)險(xiǎn)。子采樣也叫做池化(pooling),通常有均值子采樣(mean pooling)和最大值子采樣(max pooling)兩種形式。子采樣可以看作一種特殊的卷積過(guò)程。卷積和子采樣大大簡(jiǎn)化了模型復(fù)雜度,減少了模型的參數(shù)。卷積神經(jīng)網(wǎng)絡(luò)的基本結(jié)構(gòu)如圖所示:
? ? ? ?卷積神經(jīng)網(wǎng)絡(luò)由三部分構(gòu)成。第一部分是輸入層。第二部分由n個(gè)卷積層和池化層的組合組成。第三部分由一個(gè)全連結(jié)的多層感知機(jī)分類(lèi)器構(gòu)成。
3.2.1局部感受野
? ? ? ?卷積神經(jīng)網(wǎng)絡(luò)有兩種神器可以降低參數(shù)數(shù)目,第一種神器叫做局部感知野。一般認(rèn)為人對(duì)外界的認(rèn)知是從局部到全局的,而圖像的空間聯(lián)系也是局部的像素聯(lián)系較為緊密,而距離較遠(yuǎn)的像素相關(guān)性則較弱。因而,每個(gè)神經(jīng)元其實(shí)沒(méi)有必要對(duì)全局圖像進(jìn)行感知,只需要對(duì)局部進(jìn)行感知,然后在更高層將局部的信息綜合起來(lái)就得到了全局的信息。網(wǎng)絡(luò)部分連通的思想,也是受啟發(fā)于生物學(xué)里面的視覺(jué)系統(tǒng)結(jié)構(gòu)。視覺(jué)皮層的神經(jīng)元就是局部接受信息的(即這些神經(jīng)元只響應(yīng)某些特定區(qū)域的刺激)。如下圖所示:左圖為全連接,右圖為局部連接。
? ? ? ? 在上右圖中,假如每個(gè)神經(jīng)元只和10×10個(gè)像素值相連,那么權(quán)值數(shù)據(jù)為1000000×100個(gè)參數(shù),減少為原來(lái)的萬(wàn)分之一。而那10×10個(gè)像素值對(duì)應(yīng)的10×10個(gè)參數(shù),其實(shí)就相當(dāng)于卷積操作。
3.2.3 權(quán)值共享
? ? ? ?但其實(shí)這樣的話參數(shù)仍然過(guò)多,那么就啟動(dòng)第二級(jí)神器,即權(quán)值共享。在上面的局部連接中,每個(gè)神經(jīng)元都對(duì)應(yīng)100個(gè)參數(shù),一共1000000個(gè)神經(jīng)元,如果這1000000個(gè)神經(jīng)元的100個(gè)參數(shù)都是相等的,那么參數(shù)數(shù)目就變?yōu)?00了。
? ?? ? 怎么理解權(quán)值共享呢?我們可以這100個(gè)參數(shù)(也就是卷積操作)看成是提取特征的方式,該方式與位置無(wú)關(guān)。這其中隱含的原理則是:圖像的一部分的統(tǒng)計(jì)特性與其他部分是一樣的。這也意味著我們?cè)谶@一部分學(xué)習(xí)的特征也能用在另一部分上,所以對(duì)于這個(gè)圖像上的所有位置,我們都能使用同樣的學(xué)習(xí)特征。
? ? ? ?更直觀一些,當(dāng)從一個(gè)大尺寸圖像中隨機(jī)選取一小塊,比如說(shuō) 8x8 作為樣本,并且從這個(gè)小塊樣本中學(xué)習(xí)到了一些特征,這時(shí)我們可以把從這個(gè) 8x8 樣本中學(xué)習(xí)到的特征作為探測(cè)器,應(yīng)用到這個(gè)圖像的任意地方中去。特別是,我們可以用從 8x8 樣本中所學(xué)習(xí)到的特征跟原本的大尺寸圖像作卷積,從而對(duì)這個(gè)大尺寸圖像上的任一位置獲得一個(gè)不同特征的激活值。
? ? ? ?如下圖所示,展示了一個(gè)3×3的卷積核在5×5的圖像上做卷積的過(guò)程。每個(gè)卷積都是一種特征提取方式,就像一個(gè)篩子,將圖像中符合條件(激活值越大越符合條件)的部分篩選出來(lái)。
3.2.4 多卷積核
? ? ? ?上面所述只有100個(gè)參數(shù)時(shí),表明只有1個(gè)10*10的卷積核,顯然,特征提取是不充分的,我們可以添加多個(gè)卷積核,比如32個(gè)卷積核,可以學(xué)習(xí)32種特征。在有多個(gè)卷積核時(shí),如下圖所示:
? ? ? ?上圖右,不同顏色表明不同的卷積核。每個(gè)卷積核都會(huì)將圖像生成為另一幅圖像。比如兩個(gè)卷積核就可以將生成兩幅圖像,這兩幅圖像可以看做是一張圖像的不同的通道。如下圖所示,下圖有個(gè)小錯(cuò)誤,即將w1改為w0,w2改為w1即可。下文中仍以w1和w2稱呼它們。
? ? ? 下圖展示了在四個(gè)通道上的卷積操作,有兩個(gè)卷積核,生成兩個(gè)通道。其中需要注意的是,四個(gè)通道上每個(gè)通道對(duì)應(yīng)一個(gè)卷積核,先將w2忽略,只看w1,那么在w1的某位置(i,j)處的值,是由四個(gè)通道上(i,j)處的卷積結(jié)果相加然后再取激活函數(shù)值得到的。
? ? ? ?所以,在上圖由4個(gè)通道卷積得到2個(gè)通道的過(guò)程中,參數(shù)的數(shù)目為4×2×2×2個(gè),其中4表示4個(gè)通道,第一個(gè)2表示生成2個(gè)通道,最后的2×2表示卷積核大小。
3.2.5?Down-pooling
? ? ? ?在通過(guò)卷積獲得了特征 (features) 之后,下一步我們希望利用這些特征去做分類(lèi)。理論上講,人們可以用所有提取得到的特征去訓(xùn)練分類(lèi)器,例如 softmax 分類(lèi)器,但這樣做面臨計(jì)算量的挑戰(zhàn)。例如:對(duì)于一個(gè) 96X96 像素的圖像,假設(shè)我們已經(jīng)學(xué)習(xí)得到了400個(gè)定義在8X8輸入上的特征,每一個(gè)特征和圖像卷積都會(huì)得到一個(gè) (96 ? 8 + 1) × (96 ? 8 + 1) = 7921 維的卷積特征,由于有 400 個(gè)特征,所以每個(gè)樣例 (example) 都會(huì)得到一個(gè) 7921 × 400 = 3,168,400 維的卷積特征向量。學(xué)習(xí)一個(gè)擁有超過(guò) 3 百萬(wàn)特征輸入的分類(lèi)器十分不便,并且容易出現(xiàn)過(guò)擬合 (over-fitting)。
? ? ? ?為了解決這個(gè)問(wèn)題,首先回憶一下,我們之所以決定使用卷積后的特征是因?yàn)閳D像具有一種“靜態(tài)性”的屬性,這也就意味著在一個(gè)圖像區(qū)域有用的特征極有可能在另一個(gè)區(qū)域同樣適用。因此,為了描述大的圖像,一個(gè)很自然的想法就是對(duì)不同位置的特征進(jìn)行聚合統(tǒng)計(jì),例如,人們可以計(jì)算圖像一個(gè)區(qū)域上的某個(gè)特定特征的平均值 (或最大值)。這些概要統(tǒng)計(jì)特征不僅具有低得多的維度 (相比使用所有提取得到的特征),同時(shí)還會(huì)改善結(jié)果(不容易過(guò)擬合)。這種聚合的操作就叫做池化 (pooling),有時(shí)也稱為平均池化或者最大池化 (取決于計(jì)算池化的方法)。
? ? ? ??
? ? ? ?子采樣有兩種形式,一種是均值子采樣(mean-pooling),一種是最大值子采樣(max-pooling)。兩種子采樣看成特殊的卷積過(guò)程,如圖下圖所示:
? ? ? ?(1)均值子采樣的卷積核中每個(gè)權(quán)重都是0.25,卷積核在原圖inputX上的滑動(dòng)的步長(zhǎng)為2。均值子采樣的效果相當(dāng)于把原圖模糊縮減至原來(lái)的1/4。
? ? ? ?(2)最大值子采樣的卷積核中各權(quán)重值中只有一個(gè)為1,其余均為0,卷積核中為1的位置對(duì)應(yīng)inputX被卷積核覆蓋部分值最大的位置。卷積核在原圖inputX上的滑動(dòng)步長(zhǎng)為2。最大值子采樣的效果是把原圖縮減至原來(lái)的1/4,并保留每個(gè)2*2區(qū)域的最強(qiáng)輸入。
? ? ? ? 至此,卷積神經(jīng)網(wǎng)絡(luò)的基本結(jié)構(gòu)和原理已經(jīng)闡述完畢。
3.2.6 多卷積層
? ? ? ?在實(shí)際應(yīng)用中,往往使用多層卷積,然后再使用全連接層進(jìn)行訓(xùn)練,多層卷積的目的是一層卷積學(xué)到的特征往往是局部的,層數(shù)越高,學(xué)到的特征就越全局化。
四、卷積神經(jīng)網(wǎng)絡(luò)的訓(xùn)練
? ? ? 本文的主要目的是介紹CNN參數(shù)在使用bp算法時(shí)該怎么訓(xùn)練,畢竟CNN中有卷積層和下采樣層,雖然和MLP的bp算法本質(zhì)上相同,但形式上還是有些區(qū)別的,很顯然在完成CNN反向傳播前了解bp算法是必須的。
4.1 Forward前向傳播
? ? ? ?前向過(guò)程的卷積為典型valid的卷積過(guò)程,即卷積核kernalW覆蓋在輸入圖inputX上,對(duì)應(yīng)位置求積再求和得到一個(gè)值并賦給輸出圖OutputY對(duì)應(yīng)的位置。每次卷積核在inputX上移動(dòng)一個(gè)位置,從上到下從左到右交疊覆蓋一遍之后得到輸出矩陣outputY(如圖4.1與圖4.3所示)。如果卷積核的輸入圖inputX為Mx*Nx大小,卷積核為Mw*Nw大小,那么輸出圖Y為(Mx-Mw+1)*(Nx-Nw+1)大小。
4.2 BackForward反向傳播
? ? ? ?在錯(cuò)誤信號(hào)反向傳播過(guò)程中,先按照神經(jīng)網(wǎng)絡(luò)的錯(cuò)誤反傳方式得到尾部分類(lèi)器中各神經(jīng)元的錯(cuò)誤信號(hào),然后錯(cuò)誤信號(hào)由分類(lèi)器向前面的特征抽取器傳播。錯(cuò)誤信號(hào)從子采樣層的特征圖(subFeatureMap)往前面卷積層的特征圖(featureMap)傳播要通過(guò)一次full卷積過(guò)程來(lái)完成。這里的卷積和上一節(jié)卷積的略有區(qū)別。如果卷積核kernalW的長(zhǎng)度為Mw*Mw的方陣,那么subFeatureMap的錯(cuò)誤信號(hào)矩陣Q_err需要上下左右各拓展Mw-1行或列,與此同時(shí)卷積核自身旋轉(zhuǎn)180度。subFeatureMap的錯(cuò)誤信號(hào)矩陣P_err等于featureMap的誤差矩陣Q_err卷積旋轉(zhuǎn)180度的卷積核W_rot180。
? ? ? ?下圖錯(cuò)誤信號(hào)矩陣Q_err中的A,它的產(chǎn)生是P中左上2*2小方塊導(dǎo)致的,該2*2的小方塊的對(duì)A的責(zé)任正好可以用卷積核W表示,錯(cuò)誤信號(hào)A通過(guò)卷積核將錯(cuò)誤信號(hào)加權(quán)傳遞到與錯(cuò)誤信號(hào)量為A的神經(jīng)元所相連的神經(jīng)元a、b、d、e中,所以在下圖中的P_err左上角的2*2位置錯(cuò)誤值包含A、2A、3A、4A。同理,我們可以論證錯(cuò)誤信號(hào)B、C、D的反向傳播過(guò)程。綜上所述,錯(cuò)誤信號(hào)反向傳播過(guò)程可以用下圖中的卷積過(guò)程表示。
4.3 權(quán)值更新過(guò)程中的卷積
? ? ? ?卷積神經(jīng)網(wǎng)絡(luò)中卷積層的權(quán)重更新過(guò)程本質(zhì)是卷積核的更新過(guò)程。由神經(jīng)網(wǎng)絡(luò)的權(quán)重修改策略我們知道一條連接權(quán)重的更新量為該條連接的前層神經(jīng)元的興奮輸出乘以后層神經(jīng)元的輸入錯(cuò)誤信號(hào),卷積核的更新也是按照這個(gè)規(guī)律來(lái)進(jìn)行。
? ? ? ?在前向卷積過(guò)程中,卷積核的每個(gè)元素(鏈接權(quán)重)被使用過(guò)四次,所以卷積核每個(gè)元素的產(chǎn)生四個(gè)更新量。把前向卷積過(guò)程當(dāng)做切割小圖進(jìn)行多個(gè)神經(jīng)網(wǎng)絡(luò)訓(xùn)練過(guò)程,我們得到四個(gè)4*1的神經(jīng)網(wǎng)絡(luò)的前層興奮輸入和后層輸入錯(cuò)誤信號(hào),如圖所示。
? ? ? ? 根據(jù)神經(jīng)網(wǎng)絡(luò)的權(quán)重修改策略,我們可以算出如圖所示卷積核的更新量W_delta。權(quán)重更新量W_delta可由P_out和Q_err卷積得到,如圖下圖所示。
五、常見(jiàn)網(wǎng)絡(luò)結(jié)構(gòu)
5.1 ImageNet-2010網(wǎng)絡(luò)結(jié)構(gòu)
ImageNet LSVRC是一個(gè)圖片分類(lèi)的比賽,其訓(xùn)練集包括127W+張圖片,驗(yàn)證集有5W張圖片,測(cè)試集有15W張圖片。本文截取2010年Alex Krizhevsky的CNN結(jié)構(gòu)進(jìn)行說(shuō)明,該結(jié)構(gòu)在2010年取得冠軍,top-5錯(cuò)誤率為15.3%。值得一提的是,在今年的ImageNet LSVRC比賽中,取得冠軍的GoogNet已經(jīng)達(dá)到了top-5錯(cuò)誤率6.67%。可見(jiàn),深度學(xué)習(xí)的提升空間還很巨大。
下圖即為Alex的CNN結(jié)構(gòu)圖。需要注意的是,該模型采用了2-GPU并行結(jié)構(gòu),即第1、2、4、5卷積層都是將模型參數(shù)分為2部分進(jìn)行訓(xùn)練的。在這里,更進(jìn)一步,并行結(jié)構(gòu)分為數(shù)據(jù)并行與模型并行。數(shù)據(jù)并行是指在不同的GPU上,模型結(jié)構(gòu)相同,但將訓(xùn)練數(shù)據(jù)進(jìn)行切分,分別訓(xùn)練得到不同的模型,然后再將模型進(jìn)行融合。而模型并行則是,將若干層的模型參數(shù)進(jìn)行切分,不同的GPU上使用相同的數(shù)據(jù)進(jìn)行訓(xùn)練,得到的結(jié)果直接連接作為下一層的輸入。
上圖模型的基本參數(shù)為:
- 輸入:224×224大小的圖片,3通道
- 第一層卷積:11×11大小的卷積核96個(gè),每個(gè)GPU上48個(gè)。
- 第一層max-pooling:2×2的核。
- 第二層卷積:5×5卷積核256個(gè),每個(gè)GPU上128個(gè)。
- 第二層max-pooling:2×2的核。
- 第三層卷積:與上一層是全連接,3*3的卷積核384個(gè)。分到兩個(gè)GPU上個(gè)192個(gè)。
- 第四層卷積:3×3的卷積核384個(gè),兩個(gè)GPU各192個(gè)。該層與上一層連接沒(méi)有經(jīng)過(guò)pooling層。
- 第五層卷積:3×3的卷積核256個(gè),兩個(gè)GPU上個(gè)128個(gè)。
- 第五層max-pooling:2×2的核。
- 第一層全連接:4096維,將第五層max-pooling的輸出連接成為一個(gè)一維向量,作為該層的輸入。
- 第二層全連接:4096維
- Softmax層:輸出為1000,輸出的每一維都是圖片屬于該類(lèi)別的概率。
5.2 DeepID網(wǎng)絡(luò)結(jié)構(gòu)
? ? ? ? DeepID網(wǎng)絡(luò)結(jié)構(gòu)是香港中文大學(xué)的Sun Yi開(kāi)發(fā)出來(lái)用來(lái)學(xué)習(xí)人臉特征的卷積神經(jīng)網(wǎng)絡(luò)。每張輸入的人臉被表示為160維的向量,學(xué)習(xí)到的向量經(jīng)過(guò)其他模型進(jìn)行分類(lèi),在人臉驗(yàn)證試驗(yàn)上得到了97.45%的正確率,更進(jìn)一步的,原作者改進(jìn)了CNN,又得到了99.15%的正確率。
如下圖所示,該結(jié)構(gòu)與ImageNet的具體參數(shù)類(lèi)似,所以只解釋一下不同的部分吧。
? ? ? ?上圖中的結(jié)構(gòu),在最后只有一層全連接層,然后就是softmax層了。論文中就是以該全連接層作為圖像的表示。在全連接層,以第四層卷積和第三層max-pooling的輸出作為全連接層的輸入,這樣可以學(xué)習(xí)到局部的和全局的特征。
參考資源
- [1] http://deeplearning.stanford.edu/wiki/index.php/UFLDL%E6%95%99%E7%A8%8B 梔子花對(duì)Stanford深度學(xué)習(xí)研究團(tuán)隊(duì)的深度學(xué)習(xí)教程的翻譯
- [2] http://blog.csdn.net/zouxy09/article/details/14222605 csdn博主zouxy09深度學(xué)習(xí)教程系列
- [3] http://deeplearning.net/tutorial/ theano實(shí)現(xiàn)deep learning
- [4] Krizhevsky A, Sutskever I, Hinton G E. Imagenet classification with deep convolutional neural networks[C]//Advances in neural information processing systems. 2012: 1097-1105.
- [5] Sun Y, Wang X, Tang X. Deep learning face representation from predicting 10,000 classes[C]//Computer Vision and Pattern Recognition (CVPR), 2014 IEEE Conference on. IEEE, 2014: 1891-1898.
- [6]?http://blog.csdn.net/stdcoutzyx/article/details/41596663
總結(jié)
- 上一篇: Python + Neo4j(安装)可视
- 下一篇: 如何成为一名合格的自动驾驶工程师