1. 程式人生 > >卷積神經網路及影象處理中共享權重、特徵對映等理解

卷積神經網路及影象處理中共享權重、特徵對映等理解

一,前言

卷積神經網路(Constitutional Neural Networks, CNN)是在多層神經網路的基礎上發展起來的針對影象分類和識別而特別設計的一種深度學習方法。先回顧一下多層神經網路:
這裡寫圖片描述
多層神經網路包括一個輸入層和一個輸出層,中間有多個隱藏層。每一層有若干個神經元,相鄰的兩層之間的後一層的每一個神經元都分別與前一層的每一個神經元連線。在一般的識別問題中,輸入層代表特徵向量,輸入層的每一個神經元代表一個特徵值。

在影象識別問題中,輸入層的每一個神經元可能代表一個畫素的灰度值。但這種神經網路用於影象識別有幾個問題,一是沒有考慮影象的空間結構,識別效能會受到限制;二是每相鄰兩層的神經元都是全相連,引數太多,訓練速度受到限制。

而卷積神經網路就可以解決這些問題。卷積神經網路使用了針對影象識別的特殊結構,可以快速訓練。因為速度快,使得采用多層神經網路變得容易,而多層結構在識別準確率上又很大優勢。

二,卷積神經網路的結構

卷積神經網路有三個基本概念:區域性感知域(local receptive fields),共享權重(shared weights)和池化(pooling)。

區域性感知域: 在上圖中的神經網路中輸入層是用一列的神經元來表示的,在CNN中,不妨將輸入層當做二維矩陣排列的神經元。

與常規神經網路一樣,輸入層的神經元需要和隱藏層的神經元連線。但是這裡不是將每一個輸入神經元都與每一個隱藏神經元連線,而是僅僅在一個影象的區域性區域建立連線。以大小為28X28的影象為例,假如第一個隱藏層的神經元與輸入層的一個5X5的區域連線,如下圖所示:
這裡寫圖片描述


這個5X5的區域就叫做區域性感知域。該區域性感知域的25個神經元與第一個隱藏層的同一個神經元連線,每個連線上有一個權重引數,因此區域性感知域共有5X5個權重。如果將區域性感知域沿著從左往右,從上往下的順序滑動,就會得對應隱藏層中不同的神經元,如下圖分別展示了第一個隱藏層的前兩個神經元與輸入層的連線情況。
這裡寫圖片描述
這裡寫圖片描述
如果輸入層是尺寸為28X28的影象,區域性感知域大小為5X5,那麼得到的第一個隱藏層的大小是24X24。

共享權重: 上面得到的第一隱藏層中的24X24個神經元都使用同樣的5X5個權重。第j個隱藏層中第k個神經元的輸出為:

                                                            σ

(b+l=04m=04wl,maj+l,k+m)


這裡σ是神經元的激勵函式(可以是sigmoid函式、thanh函式或者rectified linear unit函式等)。b 是該感知域連線的共享偏差。wl,m是個5X5共享權重矩陣。因此這裡有26個引數。 ax,y 代表在輸入層的x,y處的輸入激勵。

這就意味著第一個隱藏層中的所有神經元都檢測在影象的不同位置處的同一個特徵。(權重共享,檢測特徵相同)因此也將從輸入層到隱藏層的這種對映稱為特徵對映(或稱作filters, kernels)。該特徵對映的權重稱為共享權重,其偏差稱為共享偏差。

為了做影象識別,通常需要不止一個的特徵對映,因此一個完整的卷積層包含若干個不同的特徵對映。下圖中是個三個特徵對映的例子。
這裡寫圖片描述
在實際應用中CNN可能使用更多的甚至幾十個特徵對映。以MNIST手寫數字識別為例,學習到的一些特徵如下:
這裡寫圖片描述
這20幅影象分別對應20個不同的特徵對映(或稱作filters, kernels)。每一個特徵對映由5X5的影象表示,代表了局部感知域中的5X5個權重。亮的畫素點代表小的權重,與之對應的影象中的畫素產生的影響要小一些。暗的畫素點代表的大的權重,也意味著對應的影象中的畫素的影響要大一些。可以看出這些特徵對映反應了某些特殊的空間結構,因此CNN學習到了一些與空間結構有關的資訊用於識別。

池化層(pooling layers) 池化層通常緊隨卷積層之後使用,其作用是簡化卷積層的輸出。例如,池化層中的每一個神經元可能將前一層的一個2X2區域內的神經元求和。而另一個經常使用的max-pooling,該池化單元簡單地將一個2X2的輸入域中的最大激勵輸出,如下圖所示:
這裡寫圖片描述
如果卷積層的輸出包含24X24個神經元,那麼在池化後可得到12X12個神經元。每一個特徵對映後分別有一個池化處理,前面所述的卷積層池化後的結構為:
這裡寫圖片描述
Max-pooling並不是唯一的池化方法,另一種池化方法是L2pooling

,該方法是將卷積層2X2區域中的神經元的輸出求平方和的平方根。儘管細節與Max-pooling不一樣,但其效果也是簡化卷積層輸出的資訊。

將上述結構連線在一起,再加上一個輸出層,得到一個完整的卷積神經網路。在手寫數字識別的例子中輸出層有十個神經元,分別對應0,1, … ,9的輸出。
這裡寫圖片描述
網路中的最後一層是一個全連線層,即該層的每個神經元都與最後一個Max-pooling層的每個神經元連線。

這個結構這是一個特殊的例子,實際CNN中也可在卷積層和池化層之後可再加上一個或多個全連線層。