Deep learning with Theano 官方中文教程(翻譯)(四)—— 卷積神經網絡(CNN)


原文轉自http://www.cnblogs.com/charleshuang/

 本文譯自:http://deeplearning.net/tutorial/lenet.html

文章中的代碼截圖不是很清晰,可以去上面的原文網址去查看。

 

1、動機

   卷積神經網絡(CNN)是多層感知機(MLP)的一個變種模型,它是從生物學概念中演化而來的。從Hubel和Wiesel早期對貓的視覺皮層的研究工作,我們知道在視覺皮層存在一種細胞的複雜分佈,,這些細胞對於外界的輸入局部是很敏感的,它們被稱爲“感受野”(細胞),它們以某種方法來覆蓋整個視覺域。這些細胞就像一些濾波器一樣,它們對輸入的圖像是局部敏感的,因此能夠更好地挖掘出自然圖像中的目標的空間關係信息。

   此外,視覺皮層存在兩類相關的細胞,S細胞(Simple Cell)和C(Complex Cell)細胞。S細胞在自身的感受野內最大限度地對圖像中類似邊緣模式的刺激做出響應,而C細胞具有更大的感受野,它可以對圖像中產生刺激的模式的空間位置進行精準地定位。

   視覺皮層作爲目前已知的最爲強大的視覺系統,廣受關注。學術領域出現了很多基於它的神經啓發式模型。比如:NeoCognitron [Fukushima], HMAX [Serre07] 以及本教程要討論的重點 LeNet-5 [LeCun98]

 

2、稀疏連接

   CNNs通過加強神經網絡中相鄰層之間節點的局部連接模式(Local Connectivity Pattern)來挖掘自然圖像(中的興趣目標)的空間局部關聯信息。第m層隱層的節點與第m-1層的節點的局部子集,並具有空間連續視覺感受野的節點(就是m-1層節點中的一部分,這部分節點在m-1層都是相鄰的)相連。可以用下面的圖來表示這種連接。

   假設,m-1層爲視網膜輸入層(接受自然圖像)。根據上圖的描述,在m-1層上面的m層的神經元節點都具有寬度爲3的感受野,m層每一個節點連接下面的視網膜層的3個相鄰的節點。m+1層的節點與它下面一層的節點有着相似的連接屬性,所以m+1層的節點仍與m層中3個相鄰的節點相連,但是對於輸入層(視網膜層)連接數就變多了,在本圖中是5。這種結構把訓練好的濾波器(corresponding to the input producing the strongest response)構建成了一種空間局部模式(因爲每個上層節點都只對感受野中的,連接的局部的下層節點有響應)。根據上面圖,多層堆積形成了濾波器(不再是線性的了),它也變得更具有全局性了(如包含了一大片的像素空間)。比如,在上圖中,第m+1層能夠對寬度爲5的非線性特徵進行編碼(就像素空間而言)。

 

3、權值共享

   在CNNs中,每一個稀疏濾波器hi在整個感受野中是重複疊加的,這些重複的節點形式了一種特徵圖(feature map),這個特種圖可以共享相同的參數,比如相同的權值矩陣和偏置向量。

 

   在上圖中,屬於同一個特徵圖的三個隱層節點,因爲需要共享相同顏色的權重, 他們的被限制成相同的。在這裏, 梯度下降算法仍然可以用來訓練這些共享的參數,只需要在原算法的基礎上稍作改動即可。共享權重的梯度可以對共享參數的梯度進行簡單的求和得到。

   爲什麼對權值共享如此感興趣呢?無論重複單元在感受野的什麼位置,他們都可以檢測到特徵。此外,權值共享提供了一種高效的方式來實現這個,因爲這種方式大大減少了需要學習(訓練)的參數數目。如果控制好模型的容量,CNN在解決計算機視覺問題上會有更好的泛化能力。

 

4、詳細說明和標註說明

   從概念上來說,特徵圖是通過對輸入圖像在一個線性濾波器上做卷積,增加一個偏置項,在此結果上再作用一個非線性函數得到的。如果我們把某一層的第k個特徵圖記爲hk,它的濾波器由權值Wk和偏置bk所決定,所以特徵圖的由下面公式定義(非線性函數取tanh):

 

卷積說明:

 

爲了更好地表示數據,隱層由多個特徵圖構成,{hk,k=1,2,3 ...K}.權值W由4個參數決定(目標特徵圖的索引、源特徵圖的索引、源垂直位置的索引、源水平位置的索引)(可以說W是一個4維的張量),偏置b爲一個向量,向量中的每一個元素對應一個特徵圖的索引。我們用下圖來表示:

 

上圖是一個包含2層神經元節點的CNN,包括m-1層的4個特徵圖和m層的2個特徵圖(h0,h1)。神經元在h0,h1的輸出(像素)是由m-1層中在其2*2的感受野中的像素計算得到的。這裏注意感受野是如何跨越4個特徵圖的,權值W0,W1是3維的張量(3D tensor),一個表示輸入特徵圖的索引,另外兩個表示像素座標。總的來說,表示連接第m層第k個特徵圖的特徵圖上的每一個像素的權重,與之連接的是m-1層上第l個特徵圖中座標爲(i,j)的像素。

 

5、ConvOp

   ConvOp是Theano中對卷積層的一個實現。它重複了Scipy中scipy.signal.convolve2d的函數功能,總的來講,ConvOp包含了兩個輸入(參數):

   (1)對應輸入圖像的mini-batch的4D張量。每個張量的大小爲:[mini-batch的大小,輸入的特徵圖的數量,圖像的高度,圖像的寬度]。

   (2)對應於權值W的4D張量。每個張量的大小爲:[m層的特徵圖數量,m-1層的特徵圖數量,濾波器的高度,濾波器的寬度]。

   下面代碼實現了Figure 1中的卷積層,輸入包括了大小爲120*160的3個特徵圖(對應RGB). 我們可以用兩個具有9*9的感受野的卷積過濾器。

 

 

我們發現,隨機初始化的的濾波器能夠產生邊緣檢測算子的作用。

另外,我們使用了相同的公式對權值進行初始化,這些權值都是從一個範圍爲[-1/fan-in, 1/fan-in]的均勻分佈中採樣得到的,fan-in是隱層的輸入節點數目,在MLP中,這個fan-in就是下面那一層的節點數目,然而對於CNN來說,我們需要考慮到輸入特徵圖的數量,以及感受野的大小。

 

6、最大池化

   CNNs中另一個很重要的概念是最大池化(max-pooling),這是一種非線性的下采樣的方法。最大池化把輸入圖像分割成爲不重疊的矩陣,每一個子區域(矩形區域),都輸出最大值。

   最大池化技術在視覺問題中是很有用的,原因有兩個:(1)降低了上層的計算複雜度。(2)提出了一種變化的不變性形式。爲了理解這種不變性,我們假設把最大池化層和一個卷基層結合起來,對於單個像素,有8個變換的方向,如果共有最大層在2*2的窗口上面實現,這8個可能的配置中,有3個可以準確的產生和卷積層相同的結果。如果窗口變成3*3,則產生精確結果的概率變成了5/8。

   因此,它對於位移變化有着不錯的魯棒性,最大池化用一種很靈活的方式降低了中間表示層的維度。

   最大池化在Theano中的theano.tensor.signal.downsample.max_pool_2d實現了。這個函數以一個N維的張量作爲輸入(N>2),和一個縮放因子用來對這個張量進行最大池化的變換。下面是例程代碼:

 

注意到和大部分代碼不同的是,這個函數max_pool_2d 在創建Theano圖的時候,需要一個向下採樣的因子ds (長度爲2的tuple變量,表示了圖像的寬和高的縮放. 這個可能在以後的版本中升級。

 

7、一個完整的CNN模型:LeNet

   稀疏性、卷積層和最大池化是LeNet系列模型的核心概念。猶豫模型細節變化較大,我們用下圖來展示整個LeNet模型。

 

模型的低層由卷基層和最大池化曾組成,高層是一個全連接的MLP神經網絡(隱層+邏輯迴歸,ANN),高層的輸入是下層特徵圖的集合。

從實現的角度講,這意味着低層操作了4D的張量,這個張量被壓縮到了一個2D矩陣表示的光柵化的特徵圖上,以便於和前面的MLP的實現兼容。

   

 

8、全部代碼

 

 

 

應該注意的是,在初始化權重的時候,fan-in是由感知野的大小和輸入特徵圖的數目決定的。最後,採用前面章節定義的LogisticRegressionHiddenLayer類,LeNet就可以工作了。

 

9、注意要點和技巧

   超參數選擇:由於CNNs比標準的MLP有着更多的超參數,所以CNNs的模型訓練是很需要技巧的。不過傳統的學習率和懲罰項仍然是需要使用的,下面說的的這些技巧在優化CNNs模型的過程中需要牢記。

  (1)濾波器的數量選擇:在選定每一層的濾波器的數量的時候,要牢記計算一個卷積層濾波器的激活函數比計算傳統的MLPs的激活函數的代價要高很多!假設第(i-1)層包含了Ki-1個特徵圖和M*N個像素座標(如座標位置數目乘以特徵圖數目),在l層有Kl個m*n的濾波器,所以計算特徵圖的代價爲:(M-m)*(N-n)*m*n*Kl-1。整個代價是Kl乘級的。如果一層的所有特徵圖沒有和前一層的所有的特徵圖全部連起來,情況可能會更加複雜一些。對於標準的MLP,這個代價爲Kl * Kl-1,Kl是第l層上的不同的節點。所以,CNNs中的特徵圖數目一般比MLPs中的隱層節點數目要少很多,這還取決於特徵圖的尺寸大小。因爲特徵圖的尺寸隨着層次深度的加大而變小,越靠近輸入,所在層所包含的特徵圖越少,高層的特徵圖會越多。實際上,把每一次的計算平均一下,輸出的特徵圖的的數目和像素位置的數目在各層是大致保持不變的。To preserve the information about the input would require keeping the total number of activations (number of feature maps times number of pixel positions) to be non-decreasing from one layer to the next (of course we could hope to get away with less when we are doing supervised learning).所以特徵圖的數量直接控制着模型的容量,它依賴於樣本的數量和任務的複雜度。

  (2)濾波器的模型屬性(shape):一般來說,在論文中,由於所用的數據庫不一樣,濾波器的模型屬性變化都會比較大。最好的CNNs的MNIST分類結果中,圖像(28*28)在第一層的輸入用的5*5的窗口(感受野),然後自然圖像一般都使用更大的窗口,如12*12,15*15等。爲了在給定數據庫的情況下,獲得某一個合適的尺度下的特徵,需要找到一個合適的粒度等級。

  (3)最大池化的模型屬性:典型的取值是2*2或者不用最大池化。比較大的圖像可以在CNNs的低層用4*4的池化窗口。但是要需要注意的是,這樣的池化在降維的同事也有可能導致信息丟失嚴重。

  (4)注意點:如果想在一些新的數據庫上用CNN進行測試,可以對數據先進行白化處理(如用PCA),還有就是在每次訓練迭代中減少學習率,這樣可能會得到更好的實驗效果。

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