(Convolutional Neural Networks)CNN-卷積神經網絡學習

參考:http://blog.csdn.net/zouxy09/article/details/8781543 ( 但其中有部分錯誤)

            http://ufldl.stanford.edu/wiki/index.php/UFLDL_Tutorial

一、卷積(convolution) - 整理自UFLDL

卷積的引入,基於三方面考量:一是爲了減少全連接網絡對於large scale圖像的計算複雜度;二是迎合了生物視覺系統的結構特徵:視覺皮層是局部接受信息的;三是根據圖像的stationary特性:圖像的一個部分統計特性與其他部分是一樣的(這個統計特性,比如說顏色直方圖分佈)。

卷積的具體做法

注意:這裏小塊在原圖中的選取是有重疊的

圖中實際上是預先訓練了一個visible層9個神經元,hidden層1個神經元的全連接AE(AutoEncoder)。再對輸入圖像的每一個3X3=9的小塊取特徵(1維),最終得到1X[(5-3+1)X(5-3+1)]個特徵。這裏的紫色圖,實際上就是下文介紹的Feature Map(FM),因爲對每個3X3小塊只提取1維特徵(1個hidden神經元),因此就只有一個FM:有n個特徵,就有n個FM。

這樣做的目的,從計算的角度來說,(假設hidden層只有1個神經元):

全連接:1X5X5個權重(不考慮bias)

卷積:1X3X3個權重

二、池化(pooling) - 整理自UFLDL

在卷積過後,一般會接着做pooling,原因如下:

例如:對於一個 96X96 像素的圖像,假設我們已經學習得到了400個定義在8X8輸入上的特徵,每一個特徵和圖像卷積都會得到一個(96 − 8 + 1) * (96 − 8 + 1) = 7921 維的卷積特徵,由於有 400 個特徵,所以每個樣例 (example) 都會得到一個892 * 400 = 3,168,400 維的卷積特徵向量。學習一個擁有超過 3 百萬特徵輸入的分類器十分不便,並且容易出現過擬合 (over-fitting)。

就是在卷積得到的每個FM中,對每個給定大小的區域上做運算(這裏是不重疊的),可以是取最大值或者取均值等等。

三、例子LeNet-5



1、INPUT -> C1

預先訓練NN-C1:input層5X5=25,output層6

用訓練好的NN-C1對原圖片每個5X5小塊(類似sliding window,有重疊採樣)取6維特徵:得到28X28個小塊,每個小塊用6維特徵表示,即6@28X28。

此時6維的每維特徵都有28X28個值,把它們放在一個圖裏,就變成了一個28X28的FeatureMap(FM),一共6張。

2、C1 -> S2

Subsampling,實際上就是pooling過程

對每一張FM的每個2X2小塊(類似不重疊的sliding window),也就是2X2=4個值做一個運算,簡單點的就是取max和均值。複雜點的如下圖的Cx到Sx+1部分,做一個線性加權然後放入sigmoid分類器。subsampling(pooling)最終得出一個值用來表示這個2X2小塊。

3、S2 -> C3

預先訓練NN-C3:input層5X5=25,output層16

一樣是做卷積,但這裏就有講究了。C1的輸入只是一張圖(原圖),此時的輸入有6張圖。

以下參考zouxy09

C3層也是一個卷積層,它同樣通過5x5的卷積核去卷積層S2,然後得到的特徵map就只有10x10個神經元,但是它有16種不同的卷積核,所以就存在16個特徵map了。這裏需要注意的一點是:C3中的每個特徵map是連接到S2中的所有6個或者幾個特徵map的,表示本層的特徵map是上一層提取到的特徵map的不同組合(這個做法也並不是唯一的)。(這裏是組合,就像人的視覺系統一樣,底層的結構構成上層更抽象的結構,例如邊緣構成形狀或者目標的部分)。

剛纔說C3中每個特徵圖由S2中所有6個或者幾個特徵map組合而成。爲什麼不把S2中的每個特徵圖連接到每個C3的特徵圖呢?原因有2點。第一,不完全的連接機制將連接的數量保持在合理的範圍內。第二,也是最重要的,其破壞了網絡的對稱性。由於不同的特徵圖有不同的輸入,所以迫使他們抽取不同的特徵(希望是互補的)。

例如,存在的一個方式是:C3的前6個特徵圖以S2中3個相鄰的特徵圖子集爲輸入。接下來6個特徵圖以S2中4個相鄰特徵圖子集爲輸入。然後的3個以不相鄰的4個特徵圖子集爲輸入。最後一個將S2中所有特徵圖爲輸入。這樣C3層有1516個可訓練參數和151600個連接。

4、C3 -> S4

與C1 -> S2類似,對C3的每一個FM中2X2的小塊做一個運算。

5、S4 -> C5

預先訓練NN-C5:input層5X5=25,output層120

這裏S4每個FM是5X5大小,因此取小塊之後在C5中表現出來的就是1X1的FM。

由於是全連接的,我認爲這裏對於5X5的輸入,每一個輸入都是16維的向量,也就是16X(5X5)。

6、C5 -> F6

普通的全連接神經網絡


四、訓練過程

1、看完UFLDL後,認爲訓練是每一層先訓練一個local分類器。

2、看完其他介紹後的另一種想法,直接使用BP來對整個網絡進行訓練。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章