主要參考:點擊打開鏈接 圖像處理都是小 patchs ,比如28*28或者36*36之類,考慮如下情形,對于一副1000*1000的圖像,即106,當隱層也有106節(jié)點時,那么W(1)(第一層鏈接權值)的數(shù)量將達到1012級別,為了減少參數(shù)規(guī)模,加快訓練速度,CNN應運而生。CNN有幾個重要的點:局部感知、參數(shù)共享、池化。 局部感知(讓一個小塊對應一個神經元,計算出的一個像素就是一個神經元,一張圖片由無數(shù)個神經元鋪滿)
一般認為人對外界的認知是從局部到全局的,而圖像的空間聯(lián)系也是局部的像素聯(lián)系較為緊密,而距離較遠的像素相關性則較弱。因而,每個神經元其實沒有必要對全局圖像進行感知,只需要對局部進行感知,然后在更高層將局部的信息綜合起來就得到了全局的信息。每個隱含單元僅僅連接輸入單元的一部分。例如,每個隱含單元僅僅連接輸入圖像的一小片相鄰區(qū)域。對于一個輸入與隱層均有 如下圖所示,左邊就是全連接網絡,每個隱藏神經元與每個像素進行連接。右邊就是部分連接網絡,每個隱神經元只與一部分區(qū)域相連接。右邊的圖進行的便是卷積操作,該操作會生成一副 feature map 。
參數(shù)共享
盡管減少了幾個數(shù)量級,但參數(shù)數(shù)量依然較多。能不能再進一步減少呢?能!方法就是權值共享。具體做法是,在局部連接中隱藏層的每一個神經元連接的是一個 10×10 的局部圖像,因此有10×10 個權值參數(shù),將這 10×10 個權值參數(shù)共享給剩下的神經元,也就是說隱藏層中
單核單通道卷積如果隱神經元與其連接的100個輸入單元具有相同的100個參數(shù),那么就相當于是一個 10*10 的模板在原始的輸入圖像上做卷積(當然需要加上一個偏置參數(shù)b),這樣相當于得到一個新的圖像,新圖像的大小為(1000-100+1)*(1000-100+1),因此也得名卷積神經網絡。這樣的10*10的模板,我們也把它稱為一個卷積核。以下為單個卷積核示意圖:
多核單通道卷積CNN中只用一個卷積核提取得到的特征往往是不充分的,只能算作是一種類型的特征(比如某個方向的邊緣),如果我們要提取其它方向的邊緣,那就多弄幾個卷積核,這樣就變成了多卷積核了。假設有k個卷積核,那么可訓練的參數(shù)的個數(shù)就變?yōu)榱薻×10×10。注意沒有包含偏置參數(shù)。每個卷積核得到一副特征圖像也被稱為一個Feature Map。卷積的過程也被稱為特征提取的過程,多核卷積中,隱層的節(jié)點數(shù)量為: k×(1000-100+1)×(1000-100+1) ,對于下圖的手寫數(shù)字灰度圖,做單通道卷及操作:
多核多通道卷積當圖像為RGB或ARGB(A代表透明度)時,可以在多通道進行卷積操作,或者對于堆疊卷積層來說, pooling 層之后可以繼續(xù)接下一個 卷積層,對 pooling 層多個 Feature Map 的操作即為多通道卷積,下圖為 w1,w2 兩個卷積核在ARGB四通道上進行卷積操作,在生成 w1 對應的 Feature Map 時,w1 這個卷積核對應4個卷積模板(這一個卷積核對應的四個模板都不一樣),分別用4種不同的顏色表示,F(xiàn)eature Map 對應的位置的值是由四核卷積模板分別作用在4個通道的對應位置處的卷積結果相加然后取激活函數(shù)得到的,所以在四通道得到2通道的過程中,參數(shù)數(shù)目為 4×2×2×2個,其中4表示4個通道,第一個2表示生成2個卷積核,最后的2×2表示卷積核大小。見下圖:
池化 pooling通過卷積操作獲得了特征 (features) 之后,下一步我們要利用這些特征去做分類??梢杂盟刑崛〉玫降奶卣魅ビ柧毞诸惼?,例如用這些特征訓練一個 softmax 分類器,對于一個 96X96 像素的圖像,假設我們已經學習得到了400個 Feature Map,每個 Feature Map 都定義在 8X8 卷積核上,每一個卷積核和圖像卷積都會得到一個 (96 ? 8 + 1) * (96 ? 8 + 1) = 7921 維的卷積特征,由于有 400 個Feature Map,所以每個訓練樣例(輸入圖像) 都會得到一個 7921* 400 = 3,168,400 維的卷積特征向量。學習一個擁有超過 3 百萬特征輸入的分類器十分不便,并且容易出現(xiàn)過擬合 (over-fitting)。 為了解決這個問題,首先回憶一下,之所以決定使用卷積后的特征是因為圖像具有一種“靜態(tài)性”的屬性,這也就意味著在一個圖像區(qū)域有用的特征極有可能在另一個區(qū)域同樣適用。因此,處理大圖像時,一個很自然的想法就是對不同位置的特征進行聚合統(tǒng)計,比如可以計算圖像一個區(qū)域上的某個特定特征的平均值 (或最大值)。這些概要統(tǒng)計特征不僅具有低得多的維度 (相比使用所有提取得到的特征),同時還會改善結果(不容易過擬合)。這種聚合的操作就叫做池化 (pooling),有時也稱為平均池化或者最大池化 (取決于計算池化的方法)。池化的過程通常也被稱為特征映射的過程(特征降維),如下圖過程如下所示:
CNN的應用 下面來看 LeNet-5 ,用于實現(xiàn)手寫識別的7層CNN(不包含輸入層),以下為LeNet-5的示意圖:
輸入原始圖像的大小是32×32,卷積層用 Cx 表示,子采樣層(pooling)用Sx表示,全連接層用Fx表示,x 代表層數(shù)。 C1層是卷積層,單通道下用了6個卷積核,這樣就得到了6個feature map,其中每個卷積核的大小為5*5,用每個卷積核與原始的輸入圖像進行卷積,這樣feature map的大小為(32-5+1)×(32-5+1)= 28×28,所需要的參數(shù)的個數(shù)為(5×5+1)×6= 156(其中5×5為卷積模板參數(shù),1為偏置參數(shù)),連接數(shù)為(5×5+1)×28×28×6=122304(其中28×28為卷積后圖像的大小)。 S2層為 pooling 層,也可以說是池化或者特征映射的過程,擁有6個 feature map,每個feature map的大小為14*14,每個feature map的隱單元與上一層C1相對應的feature map的 2×2 單元相連接,這里沒有重疊。計算過程是:2×2 單元里的值相加然后再乘以訓練參數(shù)w,再加上一個偏置參數(shù)b(每一個feature map共享相同w和b),然后取sigmoid (S函數(shù):0-1區(qū)間)值,作為對應的該單元的值。(這個地方和之前自己想的不太一樣)所以S2層中每 feature map 的長寬都是上一層C1的一半。S2層需要2×6=12個參數(shù),連接數(shù)為(4+1)×14×14×6 = 5880。注:這里池化的過程與ufldl教程中略有不同。下面為卷積操作與池化的示意圖:
C3層也是一個卷積層(多通道(14個通道)),16核卷積,注意此處C3并不是與S2全連接而是部分連接,見下圖),有16個卷積核,卷積模板的大小為5*5,因此具有16個feature maps,每個feature map的大小為(14-5+1)×(14-5+1)= 10×10。每個feature map只與上一層S2中部分feature maps相連接,下表給出了16個feature maps與上一層S2的連接方式(行為S2層feature map的標號,列為C3層feature map的標號,第一列表示C3層的第0個feature map只有S2層的第0、1和2這三個feature maps相連接,其它解釋類似)。為什么要采用部分連接,而不采用全連接呢?首先就是部分連接,可計算的參數(shù)就會比較少,其次更重要的是它能打破對稱性,這樣就能得到輸入的不同特征集合。以第0個feature map描述計算過程:用1個卷積核(對應3個卷積模板,但仍稱為一個卷積核,可以認為是三維卷積核)分別與S2層的3個feature maps進行卷積,然后將卷積的結果相加,再加上一個偏置,再取sigmoid就可以得出對應的feature map了。所需要的參數(shù)數(shù)目為(5×5×3+1)×6 +(5×5×4+1)×9 +5×5×6+1 = 1516(5×5為卷積參數(shù),卷積核分別有 3 4 6 個卷積模板),連接數(shù)為1516*10*10= 151600 (98論文年論文給出的結果是156000,個人認為這是錯誤的,因為一個卷積核只有一個偏置參數(shù) ?)。
S4層也是采樣層,有16個feature maps,每個feature map的大小為5×5,計算過程和S2類似,需要參數(shù)個數(shù)為16×2 = 32個,連接數(shù)為(4+1)×5×5×16 = 2000. C5為卷積層,有120個卷積核,卷積核的大小仍然為5×5,因此有120個feature maps,每個feature map的大小都與上一層S4的所有feature maps進行連接,這樣一個卷積核就有16個卷積模板。Feature map的大小為1×1,這樣剛好變成了全連接,但是我們不把它寫成F5,因為這只是巧合。C5層有120*(5*5*16+1) = 48120(16為上一層所有的feature maps個數(shù))參數(shù)(自己的理解:和C3的不同,這一層一共有120個16維的5*5大小的卷積核,且每一個核中的16維模板都一樣),連接數(shù)也是這么多。 F6層有86個神經單元,每個神經單元與C5進行全連接。它的連接數(shù)和參數(shù)均為 86 × 120 = 10164 。這樣F6層就可以得到一個86維特征了。后面可以使用該86維特征進行做分類預測等內容了。注意:這里卷積和池化的計算過程和ufldl教程中的計算略有不同。 參考: 1:UFLDL:http://deeplearning./wiki/index.php/UFLDL_Tutorial 2:論文:Gradient-BasedLearning Applied to Document Recognition 3:http://blog.csdn.net/stdcoutzyx/article/details/41596663 4:http://blog.csdn.net/lu597203933/article/details/46575779 |
|