|
卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)是一種前饋型的神經(jīng)網(wǎng)絡(luò),其在大型圖像處理方面有出色的表現(xiàn),目前已經(jīng)被大范圍使用到圖像分類、定位等領(lǐng)域中。相比于其他神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),卷積神經(jīng)網(wǎng)絡(luò)需要的參數(shù)相對較少,使的其能夠廣泛應(yīng)用。 本節(jié)打算先介紹背景和簡單的基本概念術(shù)語,然后詳細介紹LeNet-5網(wǎng)絡(luò),其工作流程大家需要先搞清楚,學(xué)習(xí)原理其實是基于BP學(xué)習(xí)原理的,只是稍微有點麻煩點,這個在后面會單獨講,希望先從定性的角度去學(xué)習(xí)他,然后在定量的分析其學(xué)習(xí)過程,這樣更容易接受,掌握這些以后再看hintion的學(xué)生的一篇論文深度卷積神經(jīng)網(wǎng)絡(luò)《ImageNet Classification with Deep Convolutional Neural Networks》,在后面會詳細探討這個神經(jīng)網(wǎng)絡(luò)優(yōu)化方面的思想和手段,因此這將是一個很長的學(xué)習(xí)過程,要研究咱就把他研究透,只有這樣你才有可能具有創(chuàng)造性解決問題的能力。當(dāng)然,有前面的那么多的知識的鋪墊,理解這里的就不會太困難了,好,廢話不多說,下面開始: 發(fā)展背景和基本概念 卷積神經(jīng)網(wǎng)絡(luò)是目前深度學(xué)習(xí)技術(shù)領(lǐng)域中非常具有代表性的神經(jīng)網(wǎng)絡(luò)之一,在圖像分析和處理領(lǐng)域取得了眾多突破性的進展,在學(xué)術(shù)界常用的標(biāo)準(zhǔn)圖像標(biāo)注集ImageNet上,基于卷積神經(jīng)網(wǎng)絡(luò)取得了很多成就,包括圖像特征提取分類、場景識別等。卷積神經(jīng)網(wǎng)絡(luò)相較于傳統(tǒng)的圖像處理算法的優(yōu)點之一在于避免了對圖像復(fù)雜的前期預(yù)處理過程,尤其是人工參與圖像預(yù)處理過程,卷積神經(jīng)網(wǎng)絡(luò)可以直接輸入原始圖像進行一系列工作,至今己經(jīng)廣泛應(yīng)用于各類圖像相關(guān)的應(yīng)用中。 (2)實驗發(fā)展階段。1998年計算機科學(xué)家Yann LeCun等提出的LeNet5采用了基于梯度的反向傳播算法對網(wǎng)絡(luò)進行有監(jiān)督的訓(xùn)練,Yann LeCun在機器學(xué)習(xí)、計算機視覺等都有杰出貢獻,被譽為卷積神經(jīng)網(wǎng)絡(luò)之父。LeNet5網(wǎng)絡(luò)通過交替連接的卷積層和下采樣層,將原始圖像逐漸轉(zhuǎn)換為一系列的特征圖,并且將這些特征傳遞給全連接的神經(jīng)網(wǎng)絡(luò),以根據(jù)圖像的特征對圖像進行分類。感受野是卷積神經(jīng)網(wǎng)絡(luò)的核心,卷積神經(jīng)網(wǎng)絡(luò)的卷積核則是感受野概念的結(jié)構(gòu)表現(xiàn)。學(xué)術(shù)界對于卷積神經(jīng)網(wǎng)絡(luò)的關(guān)注,也正是開始于LeNet5網(wǎng)絡(luò)的提出,并成功應(yīng)用于手寫體識別。同時,卷積神經(jīng)網(wǎng)絡(luò)在語音識別、物體檢測、人臉識別等應(yīng)用領(lǐng)域的研究也逐漸開展起來。 基本概念 卷積神經(jīng)網(wǎng)絡(luò)中有三個基本的概念:局部感受野(Local Receptive Fields)、共享權(quán)值(Shared Weights)、池化(Pooling)。 LeNet-5網(wǎng)絡(luò)本網(wǎng)絡(luò)的的講解主要參考1998年計算機科學(xué)家Yann LeCun發(fā)布的一篇論文《Gradient based learning applied to document-recognition》大家可以找到這篇論文結(jié)合學(xué)習(xí),針對該網(wǎng)絡(luò),首先大家需要了解一下圖像中的常用操作卷積,卷積這個詞是信號處理領(lǐng)域的詞,表示一個系統(tǒng)多數(shù)據(jù)處理的過程,在圖像處理中的卷積,其實就是濾波器。下面先簡要介紹一下卷積核的概念,這個不能細說,因為想要深入理解卷積需要很多知識,這里只給大家一個直觀的概念,隨著我們后面的不斷深入,在優(yōu)化時在討論卷積核如何設(shè)置。 開始前先普及一下基礎(chǔ)知識,我們所知說的圖片是通過像素來定義的,即每個像素點的顏色不同,其對應(yīng)的顏色值不同,例如黑白圖片的顏色值為0到255,手寫體字符,白色的地方為0,黑色為1,如下圖,也就是說我們平常說的像素其實就是圖片的最小組成,黑白只是0-255,彩色其實就是RGB即三層基色合成的,就可以通過三層下圖數(shù)值代表即可。
卷積核 大家可以簡單理解,卷積核的的目的就是提取特征,那什么是特征呢?這篇文章我講解了什么是特征。如果大家對卷積核感興趣可以搜索一下看看,本人本科是電子信息工程的,所有這些概念我都已經(jīng)深入理解了。下面看看卷積對圖像到底做了哪些事:
如何達到上面的效果呢?我們看看下圖:
中間那個就是卷積核了,其實就是3x3的方格,里面填一些數(shù)字,然后和原始圖像進行相乘求和,這樣就可以達到上面的效果。 通過卷積核就可以提取圖片的特征和壓縮圖片了,其實卷積核就是一個二維的濾波器,下面再給一個大家到處能看到的動態(tài)卷積圖:
大家先感性的這里理解,等深入知道CNN后再仔細研究也不遲,下面我們就正式開始講解 LeNet5網(wǎng)絡(luò)。
因為我們應(yīng)對的領(lǐng)域是圖像識別的領(lǐng)域同時網(wǎng)絡(luò)的類型是基于BP的,因此針對這個領(lǐng)域先看看BP的缺點,我們知道BP網(wǎng)絡(luò)是全連接的,對于圖片的識別,我們不用提取特征,一般一層提取特征的效果并不是很好,因此我們需要很多層,如果按照BP進行全連接,會使得權(quán)值數(shù)量急劇增加,想要訓(xùn)練這么多的權(quán)值,樣本必須足夠的才行,即使樣本數(shù)量夠,但是計算量也會急劇增加,而且還有面臨梯度消失的情況,因此需要改進連接的方式即采用局部連接和權(quán)值共享,如下圖: 假如一張圖片的像素點為4x4的,上圖的左邊圖W為全連接,一個神經(jīng)元就有16個連接 ,每個連接的權(quán)值不同,因此如果有n個神經(jīng)元則有16n個權(quán)值,左圖就是局部連接,此時加入四個像素點連接一個神經(jīng)元,則需要四個,但是如果像素很多的情況下,權(quán)值還是很多,此時是按照每個神經(jīng)元的連接權(quán)值如上圖的 全連接的權(quán)值數(shù):4x4x4=64(前面兩是像素點,后面的4是神經(jīng)元,這里先不考慮偏置值) , 局部連接的權(quán)值:4x4=16(4個神經(jīng)元,每個神經(jīng)元4個權(quán)值) 局部連接和權(quán)值共享: 4 因此權(quán)值的數(shù)量就降低了,這就是通過局部連接和權(quán)值共享來解決BP的存在的問題,這里的理論依據(jù)就是根據(jù)上面說的感受野進行簡化的,但是按照上圖的局部連接存在一個問題就是邊緣過度不平滑,會出現(xiàn)邊緣效應(yīng),為了解決這個問題引入了采樣窗口法使其彼此重疊,因為這樣做和卷積很類似,因此采樣窗口就稱為卷積核了,我們看這個窗口是怎么重疊的;
假如采樣窗口為2x2,所謂重疊,我們每次左移一個像素點送給神經(jīng)元,往下移動時也是這樣的,這樣就避免了邊緣效應(yīng)了 到這里基本上知道由來了,下面我們就正式介紹 LeNet5網(wǎng)絡(luò) 我們就按照這個圖詳細介紹CNN,首先需要說明的是,這里先不介紹該網(wǎng)絡(luò)的學(xué)習(xí)過程,先介紹網(wǎng)絡(luò)的整體架構(gòu),解釋每層的作用,后面再單獨介紹CNN的學(xué)習(xí)算法和學(xué)習(xí)過程。 上圖包含輸入層總共8層網(wǎng)絡(luò),分別為: 輸入層(INPUT)、卷積層(Convolutions,C1)、池化層(Subsampling,S2)、卷積層(C3)、池化層(Subsampling,S4)、卷積層(C5)、全連接層(F6)、輸出層(徑向基層) 輸入層(INPUT): 輸入的手寫體是32x32像素的圖片,在論文里說輸入像素的值背景層(白色)的corresp值為-0.1,前景層(黑色)的corresp值 為 1.175。這使得平均輸入大約為0,而方差大約為1,從而加速了學(xué)習(xí),要求手寫體應(yīng)該在中心,即20x20以內(nèi)。 卷積層(Convolutions,C1): 提取特征 我們從上圖可以看到這里有6個特征平面(這里不應(yīng)該稱為卷積核,卷積核是滑動窗口,通過卷積核提取特征的結(jié)果叫特 征平面),得到的每個特征平面使用的一個5x5的卷積核(這里說明窗口滑動的權(quán)值就是卷積核的內(nèi)容,這里需要注意的是特征平面有6個說明有6個不同的卷積核,因此每個特征平面所使用的權(quán)值都是一樣的,這樣就得到了特征平面。那么特征平面有多少神經(jīng)元呢?如下圖,32x32通過一個5x5的卷積核運算,根據(jù)局部連接和平滑,需要每次移動1,因此從左移動到右時是28,因此特征平面是28x28的,即每個特征平面有28x28個神經(jīng)元。如下圖,權(quán)值共享就是右邊的神經(jīng)元的權(quán)值都是w,這里大家需要好好理解,還是在解釋一下,6個特征平面對應(yīng)6個不同的卷積核或者6個濾波器,每個濾波器的參數(shù)值也就是權(quán)值都是一樣的,下圖就是卷積對應(yīng)的一個特征平面,這樣的平面有6個,即卷積層有6個特征平面。 現(xiàn)在我們計算一下該層總共有多少個連接,有多少個待訓(xùn)練的權(quán)值呢? 連接數(shù),首先每個卷積核是5x5的,每個特征平面有28x28的神經(jīng)元(每個神經(jīng)元對應(yīng)一個偏置值),總共有6個特征平 面,因此連接數(shù)為:(5x5+1)x28x28x6 = 122304。 權(quán)值數(shù),首先每個特征平面神經(jīng)元共用一套權(quán)值,而每套權(quán)值取決于卷積核的大小,因此權(quán)值數(shù)為:(5x5+1)x6 = 156個 池化層(Subsampling,S2): 降低數(shù)據(jù)維度 池化層又叫下采樣層,目的是壓縮數(shù)據(jù),降低數(shù)據(jù)維度,如下圖所示,他和卷積有明顯的區(qū)別,這里采樣2x2的選擇框進 行壓縮,如何壓縮呢,通過選擇框的數(shù)據(jù)求和再取平均值然后在乘上一個權(quán)值和加上一個偏置值,組成一個新的圖片,每個特征平面采樣的權(quán)值和偏置值都是一樣的,因此每個特征平面對應(yīng)的采樣層只兩個待訓(xùn)練的參數(shù)。如下圖4x4的圖片經(jīng)過采樣后還剩2x2,直接壓縮了4倍。本層具有激活函數(shù),為sigmod函數(shù),而卷積層沒有激活函數(shù)。
那我們看看S2層,他是使用2x2進行采樣,原來是28x28的,采樣后就是14x14,總共有6張采樣平面,即每個特征平面對 應(yīng)一個采樣層的一個平面,總共的待訓(xùn)練的權(quán)值為:2x6=12 卷積層(C3): 這一層也是卷積層,和C2不同的是這一層有16個特征平面,那么16個特征平面是如何和上一層池化層是如何對應(yīng)的呢?這里的16個特征平面是這樣對應(yīng)的,每個特征平面對應(yīng)的卷積核,和池化層的多個平面進行卷積。這里把C3的卷積層特征平面編號即0,1,2,...,15,把池化層S2也編號為0,1,2,3,4,5.這兩層具體如何對應(yīng)呢?如下圖
上面說了,C3層和S2的對應(yīng)關(guān)系和前面不一樣,主要體現(xiàn)在C3的每一個特征平面是對應(yīng)多個池化層的采樣數(shù)據(jù),如上圖,橫向的數(shù)表示卷積層C3的特征平面,縱向表示池化層的6個采樣平面,我們以卷積層C3的第0號特征平面為例,它對應(yīng)了池化層的前三個采樣平面即0,1,2,三個平面使用的是三個卷積核(每個采樣平面是卷積核相同,權(quán)值相等,大小為5x5),既然對應(yīng)三個池化層平面,那么也就是說有5x5x3個連接到卷積層特征平面的一個神經(jīng)元,因為池化層所有的樣本均為14x14的,而卷積窗口為5x5的,因此卷積特征平面為10x10(大家可按照第一個卷積計算求的)。只是這里的卷積操作要更復(fù)雜,他不是所有的都是特征平面對應(yīng)三個池化層平面,而是變化的,從上圖我們可以清楚的看到前6個特征平面對應(yīng)池化層的三個平面即0,1,2,3,4,5 , 而6~14每張?zhí)卣髌矫鎸?yīng)4個卷積層,此時每個特征平面的一個神經(jīng)元的連接數(shù)為5x5x4,最后一個特征平面是對應(yīng)池化層所有的樣本平面,這里大家好好理解。我們來計算一下連接數(shù)和待訓(xùn)練權(quán)值個數(shù): 連接數(shù): (5x5x3+1)x10x10x6+(5x5x4+1)x10x10x9+(5x5x6+1)x10x10 = 45600+90900+15100=151600 權(quán)值數(shù): (5x5x3+1)x6 + (5x5x4+1)x9 + 5x5x6+1 = 456 + 909+151 = 1516 這一層為什么要這樣做呢?為什么不和前面的一樣進行卷積呢?Lecon的論文說,主要是為了打破對稱性,提取深層特征,因為特征不是對稱的,因此需要打破這種對稱,以提取到更重要的特征,這樣設(shè)計的目的就是這個原因,大家好好體會,我們繼續(xù)往下看。 池化層(S4): 這一層采樣和前面的采樣是一樣的,使用的采樣窗口為2x2的,對C3層進行采樣,得到16個采樣平面,此時的采樣平面為5x5的,這里不細講了,另外本層存在激活函數(shù),為sigmod函數(shù)。大家上面理解的話,這里還是很簡單的。我們繼續(xù)看下一層: 卷積層(C5): 這一層還是卷積層,且這一層的特征平面有120個,每個特征平面是5x5的,而上一層的池化層S2只有16個平面且每個平面為5x5,本層使用的卷積核為5x5,因此和池化層正好匹配,那么怎么連接呢?很簡單就是這里每個特征平面連接池化層的所有的采樣層。這里稱呼特征平面已經(jīng)不合適了,因為每個卷積核只對應(yīng)一個神經(jīng)元了,因此本層只有120個神經(jīng)元并列排列,每個神經(jīng)元連接池化層的所有層。C5層的每個神經(jīng)元的連接數(shù)為5x5x16+1,因此總共的連接數(shù)為:(5x5x16+1)x120=48120,而這一層的權(quán)值和連接數(shù)一樣,因此也有48120個待訓(xùn)練權(quán)值。結(jié)合下面的圖看:
全連接層(F6): 這一層其實就是BP網(wǎng)絡(luò)的隱層,且為全連接層,即這一層有84個神經(jīng)元,每一個神經(jīng)元都和上一次的120個神經(jīng)元相連接,那么連接數(shù)為(120+1)x84 = 10164,因為權(quán)值不共享,隱層權(quán)值數(shù)也是10164,至于為什么隱層是84個神經(jīng)元稍后解釋,本層的輸出有激活函數(shù),激活函數(shù)為雙曲正切函數(shù):
根據(jù)論文解釋:A的幅值,S是原點處的傾斜率,A的經(jīng)驗值是1.7159,原因沒說。 輸出層:該層有十個神經(jīng)元,可以理解這是對于手寫體10個數(shù),那個輸出的數(shù)大,那個神經(jīng)元代表的數(shù)字就是輸出,下面我們看看他是和F6層是如何連接的,他不在是BP的神經(jīng)輸出層,而是基于徑向基神經(jīng)網(wǎng)絡(luò)的輸出層,徑向基神經(jīng)網(wǎng)絡(luò)在上一節(jié)我們詳細探討了,上一節(jié)我們主要說了是關(guān)于高斯徑向基,這里使用的是更簡單的歐幾里得徑向基函數(shù),如下:
這公式是什么意思呢?
首先大家應(yīng)該明白什么是徑向基神經(jīng)網(wǎng)絡(luò),他基于距離進行衡量兩個數(shù)據(jù)的相近程度的,RBF網(wǎng)最顯著的特點是隱節(jié)點采用輸人模式與中心向量的距離(如歐氏距離)作為函數(shù)的自變量,并使用徑向基函數(shù)(如函數(shù))作為激活函數(shù)。徑向基函數(shù)關(guān)于N維空間的一個中心點具有徑向?qū)ΨQ性,而且神經(jīng)元的輸人離該中心點越遠,神經(jīng)元的激活程度就越低。上式是基于歐幾里得距離,怎么理解那個式子呢?就是說F6層為84個輸入用
這里標(biāo)準(zhǔn)的每個字符都是像素都是12x7=84.這就是解釋了為什么F6層的神經(jīng)元為84個,因為他要把所有像素點和標(biāo)準(zhǔn)的比較在進行判斷,因此從這里也可以看出,這里不僅僅可以訓(xùn)練手寫體數(shù)字,也可以識別其他字符,取決于
到這里本節(jié)就結(jié)束了,下一節(jié)我們將解釋該網(wǎng)絡(luò)的學(xué)習(xí)過程和權(quán)值更新是如何進行的。 |
|
|