【DL-2-1】卷積神經網絡(CNN)--總體概述


一、目錄

1、目錄

2、簡述

3、CNN的結構組成

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

5、總結

常見問答

二、簡述

1980年,一位名為Fukushima的研究員提出了一種分層神經網絡模型。他稱之為新認知。該模型的靈感來自簡單和復雜細胞的概念。neocognitron能夠通過了解物體的形狀來識別模式。

后來,1998年,卷心神經網絡被Bengio,Le Cun,Bottou和Haffner引入。他們的第一個卷積神經網絡稱為LeNet-5,能夠對手寫數字中的數字進行分類。

卷積神經網絡(Convolutional Neural Network,CNN)是一種前饋神經網絡,它的人工神經元可以響應一部分覆蓋范圍內的周圍單元,對於語音識別,時間序列模型和大型圖像處理均有出色表現(一維卷積神經網絡主要用於序列類的數據處理,二維卷積神經網絡常應用於圖像類文本的識別,三維卷積神經網絡主要應用於醫學圖像以及視頻類數據識別。)。 它包括輸入層、卷積層、激活函數、池化層、全連接層。CNN的概念圖如下:

上圖為VGG16的網絡結構,共16層(不包括池化和softmax層),所有的卷積核都使用3*3的大小,池化都使用大小為2*2,步長為2的最大池化,卷積層深度依次為64 -> 128 -> 256 -> 512 ->512。

CNN架構簡單來說就是:圖片經過若干次的Convolution, Pooling, Fully Connected就是CNN的架構了,因此只要搞懂Convolution, Pooling, Fully Connected三個部分是核心。本文以房顫鑒別實驗作介紹(使用tensorflow)

三、CNN的結構組成

3.1 Convolutional layer(卷積層--CONV

卷積層是卷積神經網絡的核心基石。在圖像識別里我們提到的卷積是二維卷積,即離散二維濾波器(也稱作卷積核)與二維圖像做卷積操作,簡單的講是二維濾波器滑動到二維圖像上所有位置,並在每個位置上與該像素點及其領域像素點做內積。不同卷積核可以提取不同的特征,例如邊沿、線性、角等特征。在深層卷積神經網絡中,通過卷積操作可以提取出圖像低級到復雜的特征。在一維數組中,用於提取極值等特征。卷積核的權重是可以學習的,由此可以猜測,在高層神經網絡中,卷積操作能突破傳統濾波器的限制,根據目標函數提取出想要的特征。

由濾波器filters和激活函數構成。一般要設置的超參數包括filters的數量、大小、步長,以及padding是"valid"還是"same"。當然,還包括選擇什么激活函數。

卷積運算就是將原始圖片的與特定的Feature Detector(filter)做卷積運算(符號),卷積運算就是將下圖兩個3x3的矩陣作相乘后再相加,以下圖為例0 *0 + 0*0 + 0*1+ 0*1 + 1 *0 + 0*0 + 0*0 + 0*1 + 0*1 =0

再舉一個例子:我們有下面這個綠色的5x5輸入矩陣,卷積核是一個下面這個黃色的3x3的矩陣。卷積的步幅是一個像素。則卷積的過程如下面的動圖。卷積的結果是一個3x3的矩陣

在斯坦福大學的cs231n的課程上,有一個動態的例子,鏈接。建議大家對照着例子中的動圖看下面的講解。

常見的激活函數如下,詳細的可移步到我機器學習的另一篇文章。

類型

sigmoid

RELU

Leaky ReLU

tanh

說明

計算量大,容易梯度消失

計算簡單

計算量稍大,一般是RELU不能使用時才啟用

特征向量明顯時效果較好

3.2 Pooling layer (池化層--POOL

池化層:(Pooling Layer,POOL ):保證特不變性,降低維度,減少后續計算量,一定程度上防止過擬合。池化層進行的運算一般有以下幾種: 

類型

最大池化(Max Pooling)

均值池化(Mean Pooling)

高斯池化

說明

取幾個點中最大的

取幾個數的均值

借鑒高斯模糊的方法,不常用

需要指定的超參數,包括是Max還是average,窗口大小以及步長。

通常,我們使用的比較多的是Maxpooling,而且一般取大小為(2,2)步長為2的filter,這樣,經過pooling之后,輸入的長寬都會縮小2倍,channels不變。

  下面這個例子采用取最大值的池化方法。同時采用的是2x2的池化。步幅為2(這是壓縮的關鍵)。首先對紅色2x2區域進行池化,由於此2x2區域的最大值為6.那么對應的池化輸出位置的值為6,由於步幅為2,此時移動到綠色的位置去進行池化,輸出的最大值為8.同樣的方法,可以得到黃色區域和藍色區域的輸出值。最終,我們的輸入4x4的矩陣在池化后變成了2x2的矩陣。進行了壓縮。

3.3 Fully Connected layer(全連接層--FC

這個前面沒有講,是因為這個就是我們最熟悉的家伙,就是我們之前學的神經網絡中的那種最普通的層,就是一排神經元。因為這一層是每一個單元都和前一層的每一個單元相連接,所以稱之為"全連接"。

這里要指定的超參數,無非就是神經元的數量,以及激活函數。

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

傳統的神經網絡,其實就是多個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是用來檢測特征的,那一個特征一般情況下很可能在不止一個地方出現,比如"豎直邊界",就可能在一幅圖中多出出現,那么 我們共享同一個filter不僅是合理的,而且是應該這么做的。

由此可見,參數共享機制,讓我們的網絡的參數數量大大地減少。這樣,我們可以用較少的參數,訓練出更加好的模型,典型的事半功倍,而且可以有效地 避免過擬合。

同樣,由於filter的參數共享,即使圖片進行了一定的平移操作,我們照樣可以識別出特征,這叫做 "平移不變性"。因此,模型就更加穩健了。

2.局部感受野

如果采用經典的神經網絡模型,則需要讀取整幅圖像作為神經網絡模型的輸入(即全連接的方式),當圖像的尺寸越大時,其連接的參數將變得很多,從而導致計算量非常大,上面1也解釋了。

我們人類對外界的認知一般是從局部到全局,先對局部有感知的認識,再逐步對全體有認知,這是人類的認識模式。在圖像中的空間聯系也是類似,局部范圍內的像素之間聯系較為緊密,而距離較遠的像素則相關性較弱。因而,每個神經元其實沒有必要對全局圖像進行感知,只需要對局部進行感知,然后在更高層將局部的信息綜合起來就得到了全局的信息。這種模式就是卷積神經網絡中降低參數數目的重要神器:局部感受野。

連接的稀疏性(sparsity of connections)中,由卷積的操作可知,輸出圖像中的任何一個單元,只跟輸入圖像的一部分有關系。 而傳統神經網絡中,由於都是全連接,所以輸出的任何一個單元,都要受輸入的所有的單元的影響。這樣無形中會對圖像的識別效果大打折扣。比較,每一個區域都有自己的專屬特征,我們不希望它受到其他區域的影響。

正是由於上面這兩大優勢,使得CNN超越了傳統的NN,開啟了神經網絡的新時代。

五、總結

根據經典的手寫識別LeNet5再進一步闡述過程:

C3的每個特征圖中的每個元素由S2中某幾層多個5*5的領域相連

S4每張特征圖需要一個因子和一個偏置量,共2個參數

最后輸出層采用歐式徑向基函數(Euclidean Radial Basis Function)

常見問答:

關於卷積的計算:

共享權值數量計算:

   

參考文獻:

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

https://skymind.ai/wiki/convolutional-network

http://cs231n.github.io/convolutional-networks/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM