卷積神經網絡CNN

1、簡介

  卷積神經網絡是近年發展起來的,並引發普遍重視的一種高效識別方法,20世紀60年代,Hubel和Wiesel在研究貓腦皮層中用於局部敏感和方向選擇的神經元時發現其獨特的網絡結構能夠有效地下降反饋神經網絡的複雜性,繼而提出了卷積神經網絡(Convolutional Neural Networks-簡稱CNN)。如今,CNN已經成爲衆多科學領域的研究熱點之一,特別是在模式分類領域,因爲該網絡避免了對圖像的複雜前期預處理,能夠直接輸入原始圖像,於是獲得了更爲普遍的應用。 K.Fukushima在1980年提出的新識別機是卷積神經網絡的第一個實現網絡。隨後,更多的科研工做者對該網絡進行了改進。其中,具備表明性的研究成果是Alexander和Taylor提出的「改進認知機」,該方法綜合了各類改進方法的優勢並避免了耗時的偏差反向傳播。html

  通常的,CNN的基本結構包括兩層,其一爲特徵提取層,每一個神經元的輸入與前一層的局部接受域相連,並提取該局部的特徵。一旦該局部特徵被提取後,它與其它特徵間的位置關係也隨之肯定下來;其二是特徵映射層,網絡的每一個計算層由多個特徵映射組成,每一個特徵映射是一個平面,平面上全部神經元的權值相等。特徵映射結構採用影響函數核小的sigmoid函數做爲卷積網絡的激活函數,使得特徵映射具備位移不變性。此外,因爲一個映射面上的神經元共享權值,於是減小了網絡自由參數的個數。卷積神經網絡中的每個卷積層都緊跟着一個用來求局部平均與二次提取的計算層,這種特有的兩次特徵提取結構減少了特徵分辨率。算法

  CNN主要用來識別位移、縮放及其餘形式扭曲不變性的二維圖形,該部分功能主要由池化層實現。因爲CNN的特徵檢測層經過訓練數據進行學習,因此在使用CNN時,避免了顯式的特徵抽取,而隱式地從訓練數據中進行學習;再者因爲同一特徵映射面上的神經元權值相同,因此網絡能夠並行學習,這也是卷積網絡相對於神經元彼此相連網絡的一大優點。卷積神經網絡以其局部權值共享的特殊結構在語音識別和圖像處理方面有着獨特的優越性,其佈局更接近於實際的生物神經網絡,權值共享下降了網絡的複雜性,特別是多維輸入向量的圖像能夠直接輸入網絡這一特色避免了特徵提取和分類過程當中數據重建的複雜度。網絡

 

2、CNN卷積神經網絡

  一、CNN的主要概述

  卷積層的神經元只與前一層的部分神經元節點相連,即它的神經元間的鏈接是非全鏈接的,且同一層中某些神經元之間的鏈接的權重w和偏置b是共享的(即相同的)大量地減小了須要訓練參數的數量。ide

  CNN主要特色:減小權值,局部鏈接,權值共享函數

  CNN經過感覺野和權值共享減小了神經網絡須要訓練的參數的個數。佈局

  二、CNN的通常結構

  • 輸入層:用於數據的輸入
  • 卷積層:使用卷積核進行特徵提取和特徵映射
  • 激勵層:因爲卷積也是一種線性運算,所以須要增長非線性映射
  • 池化層:壓縮數據和參數的量,減少過擬合。
  • 全鏈接層:一般在CNN的尾部進行從新擬合,減小特徵信息的損失
  • 輸出層:用於輸出結果

  (1)數據輸入層性能

  該層要作的處理主要是對原始圖像數據進行預處理,其中包括:學習

  • 去均值:把輸入數據各個維度都中心化爲0,以下圖所示,其目的就是把樣本的中心拉回到座標系原點上。
  • 歸一化:幅度歸一化到一樣的範圍,以下所示,即減小各維度數據取值範圍的差別而帶來的干擾,好比,咱們有兩個維度的特徵A和B,A範圍是0到10,而B範圍是0到10000,若是直接使用這兩個特徵是有問題的,好的作法就是歸一化,即A和B的數據都變爲0到1的範圍。
  • PCA/白化:用PCA降維;白化是對數據各個特徵軸上的幅度歸一化

  去均值與歸一化效果圖:優化

 

去相關與白化效果圖:spa



  (2)卷積計算層

這一層就是卷積神經網絡最重要的一個層次,也是「卷積神經網絡」的名字來源。
在這個卷積層,有兩個關鍵操做:

  • 局部關聯。每一個神經元看作一個濾波器(filter)
  • 窗口(receptive field)滑動, filter對局部數據計算

  (2.1)名詞和概念

  先介紹卷積層的幾個名詞和概念:

  • 感覺視野( local receptive fields)

    即感覺上一層的部分特徵。在卷積神經網絡中,隱藏層中的神經元的感覺視野比較小,只能看到上一次的部分特徵,上一層的其餘特徵能夠經過平移感覺視野來獲得同一層的其餘神經元。

  • 卷積核

    感覺視野中的權重矩陣。

  • 共享權值(shared weights) 

  詳見(2.3)參數共享機制解釋。

  • 深度/depth(解釋見下圖)
 
  • 步長(stride)

    感覺視野對輸入的掃描間隔稱爲步長(stride),即窗口一次滑動的長度

  • 邊界擴充(pad)

     當步長比較大時(stride>1),爲了掃描到邊緣的一些特徵,感覺視野可能會「出界」,這時須要對邊界擴充(pad)。如下圖爲例子,好比有這麼一個5 * 5的圖片(一個格子一個像素),咱們滑動窗口取2*2,步長取2,那麼咱們發現還剩下1個像素無法滑完,那怎麼辦呢? 

 

那咱們在原先的矩陣加了一層填充值,使得變成6*6的矩陣,那麼窗口就能夠恰好把全部像素遍歷完。這就是填充值(邊界擴充)的做用。 

  • 特徵映射圖(feature map)

     經過一個帶有卷積核的感覺視野 掃描生成的下一層神經元矩陣 稱爲一個特徵映射圖(feature map)

  (2.2)卷積的計算

接下來說卷積的計算(注意,下面藍色矩陣周圍有一圈灰色的框,那些就是上面所說到的填充值)

 
 

  這裏的藍色矩陣就是輸入的圖像,粉色矩陣就是卷積層的神經元,這裏表示了有兩個神經元(w0,w1)。綠色矩陣就是通過卷積運算後的輸出矩陣,這裏的步長設置爲2。
 
 

 

  藍色的矩陣(輸入圖像)對粉色的矩陣(filter)進行矩陣內積計算並將三個內積運算的結果與偏置值b相加(好比上面圖的計算:2+(-2+1-2)+(1-2-2) + 1= 2 - 3 - 3 + 1 = -3),計算後的值就是綠框矩陣的一個元素。


 
 

  下面的動態圖形象地展現了卷積層的計算過程:


 
 

  (2.3)參數共享機制解釋

  • 在卷積層中每一個神經元鏈接數據窗的權重是固定的,每一個神經元只關注一個特性。神經元就是圖像處理中的濾波器,好比邊緣檢測專用的Sobel濾波器,即卷積層的每一個濾波器都會有本身所關注一個圖像特徵,好比垂直邊緣,水平邊緣,顏色,紋理等等,這些全部神經元加起來就比如就是整張圖像的特徵提取器集合。
  • 須要估算的權重個數減小: AlexNet 1億 => 3.5w
  • 一組固定的權重和不一樣窗口內數據作內積: 卷積

  (3)激勵層

  激勵層主要對卷積層的輸出進行一個非線性映射,由於卷積層的計算仍是一種線性計算。使用的激勵函數通常爲ReLu函數。

  卷積層和激勵層一般合併在一塊兒稱爲「卷積層」。

 

  CNN採用的激勵函數通常爲ReLU(The Rectified Linear Unit/修正線性單元),它的特色是收斂快,求梯度簡單,但較脆弱,圖像以下。


 
 


  (4)池化層

  池化層夾在連續的卷積層中間, 用於壓縮數據和參數的量,減少過擬合。當輸入通過卷積層時,若感覺視野比較小,布長stride比較小,獲得的feature map(特徵映射圖)仍是比較大,能夠經過池化層來對每個feature map進行降維操做,輸出的深度仍是不變的,依然爲feature map的個數。

  這裏再展開敘述池化層的具體做用:

  1)特徵不變性,也就是咱們在圖像處理中常常提到的特徵的尺度不變性,池化操做就是圖像的resize,平時一張狗的圖像被縮小了一倍咱們還能認出這是一張狗的照片,這說明這張圖像中仍保留着狗最重要的特徵,咱們一看就能判斷圖像中畫的是一隻狗,圖像壓縮時去掉的信息只是一些可有可無的信息,而留下的信息則是具備尺度不變性的特徵,是最能表達圖像的特徵。

  2)特徵降維,咱們知道一幅圖像含有的信息是很大的,特徵也不少,可是有些信息對於咱們作圖像任務時沒有太多用途或者有重複,咱們能夠把這類冗餘信息去除,把最重要的特徵抽取出來,這也是池化操做的一大做用。

  3)在必定程度上防止過擬合,更方便優化。

 
 

池化層也有一個「池化視野(filter)」來對feature map矩陣進行掃描,對「池化視野」中的矩陣值進行計算,通常有兩種計算方式:

   (1)Max pooling:取「池化視野」矩陣中的最大值

   (2)Average pooling:取「池化視野」矩陣中的平均值

  (5)全鏈接層和輸出層

全鏈接層主要對特徵進行從新擬合,減小特徵信息的丟失。輸出層主要準備作好最後目標結果的輸出。

兩層之間全部神經元都有權重鏈接,一般全鏈接層在卷積神經網絡尾部。也就是跟傳統的神經網絡神經元的鏈接方式是同樣的:

 

 

 

3、卷積神經網絡 VS. 傳統神經網絡

  其實如今回過頭來看,CNN跟咱們以前學習的神經網絡,也沒有很大的差異。傳統的神經網絡,其實就是多個FC層疊加起來。CNN,無非就是把FC改爲了CONV和POOL,就是把傳統的由一個個神經元組成的layer,變成了由filters組成的layer。那麼,爲何要這樣變?有什麼好處?具體說來有兩點:

  1.參數共享機制(parameters sharing)
  咱們對比一下傳統神經網絡的層和由filters構成的CONV層:
  假設咱們的圖像是8×8大小,也就是64個像素,假設咱們用一個有9個單元的全鏈接層:

 
使用全鏈接

  那這一層咱們須要多少個參數呢?須要 64×9 = 576個參數(先不考慮偏置項b)。由於每個連接都須要一個權重w。

  那咱們看看 一樣有9個單元的filter是怎麼樣的:

 
使用filter

  其實不用看就知道,有幾個單元就幾個參數,因此總共就9個參數

  由於,對於不一樣的區域,咱們都共享同一個filter,所以就共享這同一組參數。
這也是有道理的,經過前面的講解咱們知道,filter是用來檢測特徵的,那一個特徵通常狀況下極可能在不止一個地方出現,好比「豎直邊界」,就可能在一幅圖中多出出現,那麼 咱們共享同一個filter不只是合理的,並且是應該這麼作的。

  因而可知,參數共享機制,讓咱們的網絡的參數數量大大地減小。這樣,咱們能夠用較少的參數,訓練出更加好的模型,典型的事半功倍,並且能夠有效地 避免過擬合
  一樣,因爲filter的參數共享,即便圖片進行了必定的平移操做,咱們照樣能夠識別出特徵,這叫作 「平移不變性」。所以,模型就更加穩健了。

  2.鏈接的稀疏性(sparsity of connections)
  由卷積的操做可知,輸出圖像中的任何一個單元,只跟輸入圖像的一部分有關系:

 
只跟輸入的一部分有關

  而傳統神經網絡中,因爲都是全鏈接,因此輸出的任何一個單元,都要受輸入的全部的單元的影響。這樣無形中會對圖像的識別效果大打折扣。比較,每個區域都有本身的專屬特徵,咱們不但願它受到其餘區域的影響。

正是因爲上面這兩大優點,使得CNN超越了傳統的NN,開啓了神經網絡的新時代。

 

4、CNN的有點和缺點

  優勢:

    一、共享卷積核,對高維數據處理無壓力

    二、能夠自動進行特徵提取:卷積層能夠提取特徵, 卷積層中的卷積核(濾波器)真正發揮做用,經過卷積提取須要的特徵。 

  缺點:

    一、須要調參,須要大樣本量,訓練最好要GPU。

    二、卷積神經網絡沒有記憶功能。

    3、對圖像處理很友善,對視頻語音天然語言處理能力差

    四、池化層會丟失大量有價值信息,忽略局部與總體之間關聯性;

    五、因爲特徵提取的封裝,爲網絡性能的改進罩了一層黑盒。也就說,咱們並不知道沒個卷積層到底提取到的是什麼特徵,並且神經網絡自己就是一種難以解釋的「黑箱模型」。 

5、CNN卷積神經網絡的應用

一、目標分類 

二、目標檢測(目標定位、人臉檢測、人形檢測、車輛檢測) 

    (R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD、YOLO V二、YOLO V3)

三、目標識別(人臉識別、人形識別)  人臉識別算法演化史    (DeepFace、FaceNet、DeepID)

四、目標跟蹤

五、目標分割

六、關鍵點檢測 

6、常見的CNN卷積神經網絡

  • 卷積神經⽹絡(LeNet)
  • 深度卷積神經⽹絡(AlexNet)
  • 使⽤重複元素的⽹絡(VGG)
  • ⽹絡中的⽹絡(NiN)
  • 含並⾏連結的⽹絡(GoogLeNet)
  • 殘差⽹絡(ResNet)
  • 稠密鏈接⽹絡(DenseNet) 

7、總結

  卷積網絡在本質上是一種輸入到輸出的映射,它可以學習大量的輸入與輸出之間的映射關係,而不須要任何輸入和輸出之間的精確的數學表達式,只要用已知的模式對卷積網絡加以訓練,網絡就具備輸入輸出對之間的映射能力。

  CNN一個很是重要的特色就是頭重腳輕(越往輸入權值越小,越往輸出權值越多),呈現出一個倒三角的形態,這就很好地避免了BP神經網絡中反向傳播的時候梯度損失得太快。

  卷積神經網絡CNN主要用來識別位移、縮放及其餘形式扭曲不變性的二維圖形。因爲CNN的特徵檢測層經過訓練數據進行學習,因此在使用CNN時,避免了顯式的特徵抽取,而隱式地從訓練數據中進行學習;再者因爲同一特徵映射面上的神經元權值相同,因此網絡能夠並行學習,這也是卷積網絡相對於神經元彼此相連網絡的一大優點。卷積神經網絡以其局部權值共享的特殊結構在語音識別和圖像處理方面有着獨特的優越性,其佈局更接近於實際的生物神經網絡,權值共享下降了網絡的複雜性,特別是多維輸入向量的圖像能夠直接輸入網絡這一特色避免了特徵提取和分類過程當中數據重建的複雜度。

 

參考:

https://www.cnblogs.com/wj-1314/p/9754072.html

https://www.jianshu.com/p/c0215d26d20a

http://www.javashuo.com/article/p-pcwsxvuz-ep.html

相關文章
相關標籤/搜索