1. 程式人生 > >深度學習 --- 卷積神經網路CNN(LeNet-5網路詳解)

深度學習 --- 卷積神經網路CNN(LeNet-5網路詳解)

卷積神經網路(Convolutional Neural Network,CNN)是一種前饋型的神經網路,其在大型影象處理方面有出色的表現,目前已經被大範圍使用到影象分類、定位等領域中。相比於其他神經網路結構,卷積神經網路需要的引數相對較少,使的其能夠廣泛應用。

本節打算先介紹背景和簡單的基本概念術語,然後詳細介紹LeNet-5網路,其工作流程大家需要先搞清楚,學習原理其實是基於BP學習原理的,只是稍微有點麻煩點,這個在後面會單獨講,希望先從定性的角度去學習他,然後在定量的分析其學習過程,這樣更容易接受,掌握這些以後再看hintion的學生的一篇論文深度卷積神經網路《ImageNet Classification with Deep Convolutional  Neural Networks》,在後面會詳細探討這個神經網路優化方面的思想和手段,因此這將是一個很長的學習過程,要研究咱就把他研究透,只有這樣你才有可能具有創造性解決問題的能力。當然,有前面的那麼多的知識的鋪墊,理解這裡的就不會太困難了,好,廢話不多說,下面開始:

發展背景和基本概念

        卷積神經網路是目前深度學習技術領域中非常具有代表性的神經網路之一,在影象分析和處理領域取得了眾多突破性的進展,在學術界常用的標準影象標註集ImageNet上,基於卷積神經網路取得了很多成就,包括影象特徵提取分類、場景識別等。卷積神經網路相較於傳統的影象處理演算法的優點之一在於避免了對影象複雜的前期預處理過程,尤其是人工參與影象預處理過程,卷積神經網路可以直接輸入原始影象進行一系列工作,至今己經廣泛應用於各類影象相關的應用中。
       從卷積神經網路的提出到目前的廣泛應用,大致經歷了理論萌芽階段、實驗發展階段以及大規模應用和深入研究階段。
(1)理論萌芽階段。1962年Hubel以及Wiesel通過生物學研究表明,從視網膜傳遞腦中的視覺資訊是通過多層次的感受野(Receptive Field)激發完成的,並首先提出了感受野的概念。1980年日本學者Fukushima在基於感受野的概念基礎之上,提出了神經認知機(Neocognitron)。神經認知機是一個自組織的多層神經網路模型,每一層的響應都由上一層的區域性感受野激發得到,對於模式的識別不受位置、較小形狀變化以及尺度大小的影響。神經認知機可以理解為卷積神經網路的第一版,核心點在於將視覺系統模型化,並且不受視覺中的位置和大小等影響。 

(2)實驗發展階段。1998年電腦科學家Yann LeCun等提出的LeNet5採用了基於梯度的反向傳播演算法對網路進行有監督的訓練,Yann LeCun在機器學習、計算機視覺等都有傑出貢獻,被譽為卷積神經網路之父。LeNet5網路通過交替連線的卷積層和下采樣層,將原始影象逐漸轉換為一系列的特徵圖,並且將這些特徵傳遞給全連線的神經網路,以根據影象的特徵對影象進行分類。感受野是卷積神經網路的核心,卷積神經網路的卷積核則是感受野概念的結構表現。學術界對於卷積神經網路的關注,也正是開始於LeNet5網路的提出,併成功應用於手寫體識別。同時,卷積神經網路在語音識別、物體檢測、人臉識別等應用領域的研究也逐漸開展起來。
(3)大規模應用和深入研究階段。在LeNet5網路之後,卷積神經網路一直處於實驗發展階段。直到2012年AlexNet網路的提出才奠定了卷積神經網路在深度學習應用中的地位,Krizhevsky(他是hintion的學生對應的論文就是剛開始提到的深度卷積神經網路)等提出的卷積神經網路AlexNet在ImageNet的訓練集上取得了影象分類的冠軍,使得卷積神經網路成為計算機視覺中的重點研究物件,並且不斷深入。在AlexNet之後,不斷有新的卷積神經網路提出,包括牛津大學的VGG網路、微軟的ResNet網路、谷歌的GoogLeNet網路等,這些網路的提出使得卷積神經網路逐步開始走向商業化應用,幾乎只要是存在影象的地方,就會有卷積神經網路的身影。
       從目前的發展趨勢而言,卷積神經網路將依然會持續發展,並且會產生適合各類應用場景的卷積神經網路,例如,面向視訊理解的3D卷積神經網路等。值得說明的是,卷積神經網路不僅僅應用於影象相關的網路,還包括與影象相似的網路,例如,在圍棋中分析棋盤等。

基本概念

 卷積神經網路中有三個基本的概念:區域性感受野(Local Receptive Fields)、共享權值(Shared Weights)、池化(Pooling)。
(1)區域性感受野。對於一般的深度神經網路,往往會把影象的每一個畫素點連線到全連線的每一個神經元中,而卷積神經網路則是把每一個隱藏節點只連線到影象的某個區域性區域,從而減少引數訓練的數量。例如,一張1024×720的影象,使用9×9的感受野,則只需要81個權值引數。對於一般的視覺也是如此,當觀看一張影象時,更多的時候關注的是區域性。
(2)共享權值。在卷積神經網路的卷積層中,神經元對應的權值是相同的,由於權值相同,因此可以減少訓練的引數量。共享的權值和偏置也被稱作卷積核或濾汲器。
(3)池化。由於待處理的影象往往都比較大,而在實際過程中,沒有必要對原圖進行分析,能夠有效獲得影象的特徵才是最主要的,因此可以採用類似於影象壓縮的思想,對影象進行卷積之後,通過一個下采樣過程,來調整影象的大小。

LeNet-5網路

本網路的的講解主要參考1998年電腦科學家Yann LeCun釋出的一篇論文《Gradient based learning applied to document-recognition》大家可以找到這篇論文結合學習,針對該網路,首先大家需要了解一下影象中的常用操作卷積,卷積這個詞是訊號處理領域的詞,表示一個系統多資料處理的過程,在影象處理中的卷積,其實就是濾波器。下面先簡要介紹一下卷積核的概念,這個不能細說,因為想要深入理解卷積需要很多知識,這裡只給大家一個直觀的概念,隨著我們後面的不斷深入,在優化時在討論卷積核如何設定。

開始前先普及一下基礎知識,我們所知說的圖片是通過畫素來定義的,即每個畫素點的顏色不同,其對應的顏色值不同,例如黑白圖片的顏色值為0到255,手寫體字元,白色的地方為0,黑色為1,如下圖,也就是說我們平常說的畫素其實就是圖片的最小組成,黑白只是0-255,彩色其實就是RGB即三層基色合成的,就可以通過三層下圖數值代表即可。

image

卷積核

大家可以簡單理解,卷積核的的目的就是提取特徵,那什麼是特徵呢?這篇文章我講解了什麼是特徵。如果大家對卷積核感興趣可以搜尋一下看看,本人本科是電子資訊工程的,所有這些概念我都已經深入理解了。下面看看卷積對影象到底做了哪些事:

å¾1    æµ®é

如何達到上面的效果呢?我們看看下圖:

 中間那個就是卷積核了,其實就是3x3的方格,裡面填一些數字,然後和原始影象進行相乘求和,這樣就可以達到上面的效果。

通過卷積核就可以提取圖片的特徵和壓縮圖片了,其實卷積核就是一個二維的濾波器,下面再給一個大家到處能看到的動態卷積圖:

å·ç§¯ç¥ç»ç½ç»

大家先感性的這裡理解,等深入知道CNN後再仔細研究也不遲,下面我們就正式開始講解 LeNet5網路。

 

因為我們應對的領域是影象識別的領域同時網路的型別是基於BP的,因此針對這個領域先看看BP的缺點,我們知道BP網路是全連線的,對於圖片的識別,我們不用提取特徵,一般一層提取特徵的效果並不是很好,因此我們需要很多層,如果按照BP進行全連線,會使得權值數量急劇增加,想要訓練這麼多的權值,樣本必須足夠的才行,即使樣本數量夠,但是計算量也會急劇增加,而且還有面臨梯度消失的情況,因此需要改進連線的方式即採用區域性連線和權值共享,如下圖:

假如一張圖片的畫素點為4x4的,上圖的左邊圖W為全連線,一個神經元就有16個連線 ,每個連線的權值不同,因此如果有n個神經元則有16n個權值,左圖就是區域性連線,此時加入四個畫素點連線一個神經元,則需要四個,但是如果畫素很多的情況下,權值還是很多,此時是按照每個神經元的連線權值如上圖的w_1,w_2,w_3,w_4是其中一個神經元的是4個權值,所謂權值共享,就是其他神經元的權值也使用這四個值,此時的位置和數值都是這樣對應的,這裡大家需要理解。即四個神經元只有四個不同的權值,現在我們來算算,按照右邊的計算:

 全連線的權值數:4x4x4=64(前面兩是畫素點,後面的4是神經元,這裡先不考慮偏置值) ,

區域性連線的權值:4x4=16(4個神經元,每個神經元4個權值)

區域性連線和權值共享: 4

 因此權值的數量就降低了,這就是通過區域性連線和權值共享來解決BP的存在的問題,這裡的理論依據就是根據上面說的感受野進行簡化的,但是按照上圖的區域性連線存在一個問題就是邊緣過度不平滑,會出現邊緣效應,為了解決這個問題引入了取樣視窗法使其彼此重疊,因為這樣做和卷積很類似,因此取樣視窗就稱為卷積核了,我們看這個視窗是怎麼重疊的;

 

 假如取樣視窗為2x2,所謂重疊,我們每次左移一個畫素點送給神經元,往下移動時也是這樣的,這樣就避免了邊緣效應了

到這裡基本上知道由來了,下面我們就正式介紹 LeNet5網路

我們就按照這個圖詳細介紹CNN,首先需要說明的是,這裡先不介紹該網路的學習過程,先介紹網路的整體架構,解釋每層的作用,後面再單獨介紹CNN的學習演算法和學習過程。

 上圖包含輸入層總共8層網路,分別為:

輸入層(INPUT)、卷積層(Convolutions,C1)、池化層(Subsampling,S2)、卷積層(C3)、池化層(Subsampling,S4)、卷積層(C5)、全連線層(F6)、輸出層(徑向基層)

輸入層(INPUT):

輸入的手寫體是32x32畫素的圖片,在論文裡說輸入畫素的值背景層(白色)的corresp值為-0.1,前景層(黑色)的corresp值              為 1.175。這使得平均輸入大約為0,而方差大約為1,從而加速了學習,要求手寫體應該在中心,即20x20以內。

卷積層(Convolutions,C1): 提取特徵

我們從上圖可以看到這裡有6個特徵平面(這裡不應該稱為卷積核,卷積核是滑動視窗,通過卷積核提取特徵的結果叫特            徵平面),得到的每個特徵平面使用的一個5x5的卷積核(這裡說明視窗滑動的權值就是卷積核的內容,這裡需要注意的是特徵平面有6個說明有6個不同的卷積核,因此每個特徵平面所使用的權值都是一樣的,這樣就得到了特徵平面。那麼特徵平面有多少神經元呢?如下圖,32x32通過一個5x5的卷積核運算,根據區域性連線和平滑,需要每次移動1,因此從左移動到右時是28,因此特徵平面是28x28的,即每個特徵平面有28x28個神經元。如下圖,權值共享就是右邊的神經元的權值都是w,這裡大家需要好好理解,還是在解釋一下,6個特徵平面對應6個不同的卷積核或者6個濾波器,每個濾波器的引數值也就是權值都是一樣的,下圖就是卷積對應的一個特徵平面,這樣的平面有6個,即卷積層有6個特徵平面。

現在我們計算一下該層總共有多少個連線,有多少個待訓練的權值呢?

連線數,首先每個卷積核是5x5的,每個特徵平面有28x28的神經元(每個神經元對應一個偏置值),總共有6個特徵平                面,因此連線數為:(5x5+1)x28x28x6 = 122304。

權值數,首先每個特徵平面神經元共用一套權值,而每套權值取決於卷積核的大小,因此權值數為:(5x5+1)x6 = 156個

池化層(Subsampling,S2): 降低資料維度

池化層又叫下采樣層,目的是壓縮資料,降低資料維度,如下圖所示,他和卷積有明顯的區別,這裡取樣2x2的選擇框進 行壓縮,如何壓縮呢,通過選擇框的資料求和再取平均值然後在乘上一個權值和加上一個偏置值,組成一個新的圖片,每個特徵平面取樣的權值和偏置值都是一樣的,因此每個特徵平面對應的取樣層只兩個待訓練的引數。如下圖4x4的圖片經過取樣後還剩2x2,直接壓縮了4倍。本層具有啟用函式,為sigmod函式,而卷積層沒有啟用函式。

那我們看看S2層,他是使用2x2進行取樣,原來是28x28的,取樣後就是14x14,總共有6張取樣平面,即每個特徵平面對           應一個取樣層的一個平面,總共的待訓練的權值為:2x6=12

卷積層(C3):

這一層也是卷積層,和C2不同的是這一層有16個特徵平面,那麼16個特徵平面是如何和上一層池化層是如何對應的呢?這裡的16個特徵平面是這樣對應的,每個特徵平面對應的卷積核,和池化層的多個平面進行卷積。這裡把C3的卷積層特徵平面編號即0,1,2,...,15,把池化層S2也編號為0,1,2,3,4,5.這兩層具體如何對應呢?如下圖

上面說了,C3層和S2的對應關係和前面不一樣,主要體現在C3的每一個特徵平面是對應多個池化層的取樣資料,如上圖,橫向的數表示卷積層C3的特徵平面,縱向表示池化層的6個取樣平面,我們以卷積層C3的第0號特徵平面為例,它對應了池化層的前三個取樣平面即0,1,2,三個平面使用的是三個卷積核(每個取樣平面是卷積核相同,權值相等,大小為5x5),既然對應三個池化層平面,那麼也就是說有5x5x3個連線到卷積層特徵平面的一個神經元,因為池化層所有的樣本均為14x14的,而卷積視窗為5x5的,因此卷積特徵平面為10x10(大家可按照第一個卷積計算求的)。只是這裡的卷積操作要更復雜,他不是所有的都是特徵平面對應三個池化層平面,而是變化的,從上圖我們可以清楚的看到前6個特徵平面對應池化層的三個平面即0,1,2,3,4,5 , 而6~14每張特徵平面對應4個卷積層,此時每個特徵平面的一個神經元的連線數為5x5x4,最後一個特徵平面是對應池化層所有的樣本平面,這裡大家好好理解。我們來計算一下連線數和待訓練權值個數:

連線數: (5x5x3+1)x10x10x6+(5x5x4+1)x10x10x9+(5x5x6+1)x10x10 = 45600+90900+15100=151600

權值數: (5x5x3+1)x6 + (5x5x4+1)x9 + 5x5x6+1  = 456 + 909+151 = 1516

這一層為什麼要這樣做呢?為什麼不和前面的一樣進行卷積呢?Lecon的論文說,主要是為了打破對稱性,提取深層特徵,因為特徵不是對稱的,因此需要打破這種對稱,以提取到更重要的特徵,這樣設計的目的就是這個原因,大家好好體會,我們繼續往下看。

池化層(S4):

這一層取樣和前面的取樣是一樣的,使用的取樣視窗為2x2的,對C3層進行取樣,得到16個取樣平面,此時的取樣平面為5x5的,這裡不細講了,另外本層存在啟用函式,為sigmod函式。大家上面理解的話,這裡還是很簡單的。我們繼續看下一層:

卷積層(C5):

這一層還是卷積層,且這一層的特徵平面有120個,每個特徵平面是5x5的,而上一層的池化層S2只有16個平面且每個平面為5x5,本層使用的卷積核為5x5,因此和池化層正好匹配,那麼怎麼連線呢?很簡單就是這裡每個特徵平面連線池化層的所有的取樣層。這裡稱呼特徵平面已經不合適了,因為每個卷積核只對應一個神經元了,因此本層只有120個神經元並列排列,每個神經元連線池化層的所有層。C5層的每個神經元的連線數為5x5x16+1,因此總共的連線數為:(5x5x16+1)x120=48120,而這一層的權值和連線數一樣,因此也有48120個待訓練權值。結合下面的圖看:

全連線層(F6):

這一層其實就是BP網路的隱層,且為全連線層,即這一層有84個神經元,每一個神經元都和上一次的120個神經元相連線,那麼連線數為(120+1)x84 = 10164,因為權值不共享,隱層權值數也是10164,至於為什麼隱層是84個神經元稍後解釋,本層的輸出有啟用函式,啟用函式為雙曲正切函式:                           

 根據論文解釋:A的幅值,S是原點處的傾斜率,A的經驗值是1.7159,原因沒說。

輸出層:該層有十個神經元,可以理解這是對於手寫體10個數,那個輸出的數大,那個神經元代表的數字就是輸出,下面我們看看他是和F6層是如何連線的,他不在是BP的神經輸出層,而是基於徑向基神經網路的輸出層,徑向基神經網路在上一節我們詳細探討了,上一節我們主要說了是關於高斯徑向基,這裡使用的是更簡單的歐幾里得徑向基函式,如下:

這公式是什麼意思呢?

首先大家應該明白什麼是徑向基神經網路,他基於距離進行衡量兩個資料的相近程度的,RBF網最顯著的特點是隱節點採用輸人模式與中心向量的距離(如歐氏距離)作為函式的自變數,並使用徑向基函式(如函式)作為啟用函式。徑向基函式關於N維空間的一箇中心點具有徑向對稱性,而且神經元的輸人離該中心點越遠,神經元的啟用程度就越低。上式是基於歐幾里得距離,怎麼理解那個式子呢?就是說F6層為84個輸入用x_j表示,而輸出有10個用y_i表示,而權值 使用w_{ji},上式說明所有輸入和權值的距離平方和為依據判斷,如果越相近距離越小,輸出越小則去哪個,如果我們儲存的到w_{ji}的值為標準的輸出,如標準的手寫體0,1,2,3等,那麼最後一層就說明。F6層和標準的作比較,和標準的那個圖形越相似就說明就越是那個字元的可能性更大。我們看看標準的是什麼樣的:

 這裡標準的每個字元都是畫素都是12x7=84.這就是解釋了為什麼F6層的神經元為84個,因為他要把所有畫素點和標準的比較在進行判斷,因此從這裡也可以看出,這裡不僅僅可以訓練手寫體數字,也可以識別其他字元,取決於w_{ji}和網路的設計,這些可以認為修改的。例如我們讓他識別可列印的ASCII碼,把小圖片新增到這裡就可以了,同時增加輸出的神經元個數就可以完成了。再給出另外一個詳細的圖:

到這裡本節就結束了,下一節我們將解釋該網路的學習過程和權值更新是如何進行的。