卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)講解

本文首發(fā)于:人工智能A7論壇

轉(zhuǎn)載請注明出處


1什么是卷積神經(jīng)網(wǎng)絡(luò)(CNN)

1.1 什么是卷積操作

CNN中的卷積和數(shù)字信號處理中的卷積其實不是一回事,但有點類似。這里說的只是CNN中的卷積操作。

對圖像(或者可以表示為同樣結(jié)構(gòu)的其他數(shù)據(jù),如文本、語音等)和濾波矩陣(一組固定的權(quán)重:因為每個神經(jīng)元的多個權(quán)重固定,所以又可以看做一個恒定的濾波器filter)做內(nèi)積(逐個元素相乘再求和)的操作就是所謂的『卷積』操作,也是卷積神經(jīng)網(wǎng)絡(luò)的名字來源。

(gif動圖見附件)

備注:

http://deeplearning.stanford.edu/wiki/index.php/Feature_extraction_using_convolution

一個很自然的想法,是filter的各個權(quán)重應該是多少?filter的size怎么???

1.2 卷積神經(jīng)網(wǎng)絡(luò)的概念

CNN的概念最早來自于對“感受野”的研究??茖W家對貓的視覺細胞研究發(fā)現(xiàn),每一個視覺神經(jīng)元只處理一小塊區(qū)域的視覺圖像。即感受野(receptive field)。

卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks)是一種在空間上共享參數(shù)的神經(jīng)網(wǎng)絡(luò)。通過共享參數(shù),減少了參數(shù)的個數(shù)。卷積的圖示

備注:上圖是以“圖片”舉例,所以depth是RGB三個維度。后面我們會說到CNN也可以處理文本。用卷積來處理文本分類的要點在于怎么把文本數(shù)據(jù)準備成CNN所需要的這種固定width和height的形式。

卷積神經(jīng)網(wǎng)絡(luò)簡單講就是把一個圖片的數(shù)據(jù)傳遞給CNN,原涂層是由RGB組成,然后CNN把它的厚度加厚,長寬變小,每做一層都這樣被拉長,最后形成一個分類器:

CNN是首個成功進行多層訓練的網(wǎng)絡(luò)結(jié)構(gòu)(Lecun的LeNet5),之所以CNN能夠成為“第一個吃螃蟹”的網(wǎng)絡(luò),除了因為LeCun作為深度學習三巨頭之一,“天生神力”,有一個不可忽視的因素或許是,CNN利用空間結(jié)構(gòu)大大減少了參數(shù)量,提高了訓練效率,避免了全連接網(wǎng)絡(luò)(FCN, full connection Network)的參數(shù)過多不好訓練、以及梯度彌散(gradient vanishment)的問題。

2CNN中的一些基本概念

卷積核

卷積核,英文名kernels,有時候也叫濾波器(filters )。卷積核是CNN的核心。從信號處理的角度而言,濾波器是對信號做頻率篩選,這里主要是空間-頻率的轉(zhuǎn)換,cnn的訓練就是找到最好的濾波器使得濾波后的信號更容易分類,還可以從模版匹配的角度看卷積,每個卷積核都可以看成一個特征模版,訓練就是為了找到最適合分類的特征模版。

問題:卷積核的大小和初始值怎么?。?/p>

feature map

每一個卷積核濾波得到的圖像就是一類特征的映射,也就是一個feature map

LeNet5

每個卷積核作用于input可以得到一個feature map。

我們知道圖片有RGB三個維度,這三個維度的處理是怎么樣的?

Stride

Stride就是“移動切片的步長”,影響取樣的數(shù)量。也就是表示做卷積時對input進行每次移動多少步。每一塊抽取一部分信息,長寬就縮減,但是厚度(depth)增加。抽取的各個小塊兒,再把它們合并起來,就變成一個壓縮后的立方體。

厚度為什么增加?一定增加嗎?

一般來說,后面的卷積層feature map數(shù)要比前面的feature map數(shù)多些

Padding

填充的方式有兩種,“有效填充”和“相同填充”。在相同填充中,超出邊界的部分使用補充0的辦法,使得輸入輸出的尺寸相同。而在有效填充中,則不使用補充0的方法,不能超出邊界。

以一維的填充為例:

在圖像的padding任務中,

如圖中紫色方框所示,左邊是有效填充,右邊是相同填充。在相同填充中,超出邊界的部分使用補充0的辦法,使得輸入輸出的圖像尺寸相同。而在有效填充中,則不使用補充0的方法,不能超出邊界,

思考問題:在一個CNN網(wǎng)絡(luò)中,input層Layer A做了卷積以后變成Layer B,再做卷積變成Layer C。為了達到圖中所示的A、B、C三個layer寬和高都一樣大的效果,需要怎么設(shè)置padding和stride 兩個參數(shù)。

[很顯然,需要stride=1, padding設(shè)置成

Pooling(池化層)

就是當跨步比較大的時候,它會漏掉一些重要的信息,為了解決這樣的問題,就加上一層叫pooling,事先把這些必要的信息存儲起來,然后再變成壓縮后的層。最常見的就是mean-pooling和max-pooling。

Pooling層可以理解為一種特殊的卷積層。

Pooling層的作用:

1). invariance(不變性),這種不變性包括translation(平移),rotation(旋轉(zhuǎn)),scale(尺度)[詳見附錄“POOLing的三個不變性的形象化解釋”

2. 保留主要的特征同時減少參數(shù)(降維,效果類似PCA)和計算量,防止過擬合,提高模型泛化能力

3).獲得定長輸出。(文本分類的時候輸入是不定長的,可以通過池化獲得定長輸出)

4).防止過擬合或有可能會帶來欠擬合。

patch

一個局部切片。

參考:

http://xrds.acm.org/blog/2016/06/convolutional-neural-networks-cnns-illustrated-explanation/

感受野的理解

輸出feature map某個節(jié)點的響應對應的輸入圖像的區(qū)域就是感受野

拿一個例子來算算

pool3的一個輸出對應pool3的輸入大小為2*2??如果padding=valid

pool3: 2*2 conv4: 4*4 conv3: 6*6 pool2:12*12 conv2:14*14 pool1:28*28 conv1:30*30

因此 pool3的感受野大小就是30*30

3 CNN處理圖像分類問題的網(wǎng)絡(luò)結(jié)構(gòu)

在 RGB 這個層,每一次把一塊核心抽出來,然后厚度加厚,長寬變小,形成分類器:

如果想要分成十類的話,那么就會有0到9這十個位置,這個數(shù)據(jù)屬于哪一類就在哪個位置上是1,而在其它位置上為零。

CNN的結(jié)構(gòu),分析一張圖片時,先放一個CNN的圖層,再把這個圖層進行一個pooling。這樣可以比較好的保持信息,之后再加第二層的CNN和pooling。

導入一個圖片之后,先是有它的RGB三個圖層,然后把像素塊縮小變厚。本來有三個厚度,然后把它變成八個厚度,它的長寬在不斷的減小,最后把它們連接在一起。

下圖是一個經(jīng)典的CNN做圖像分類的網(wǎng)絡(luò)結(jié)構(gòu)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容