Convolutional Neural Network


Why CNN for Image

圖片是由像素點組成的,可以這樣來解釋深度神經網絡對圖片的處理。

第一層的layer是最基本的分類器,區分一些基本的特征,比如顏色、是否有斜線。

第二層的layer會檢測更加復雜的東西,比如一些簡單的組合線條;

后面的layer也會越來越復雜……

我們可以通過思考圖像的特征來簡化網絡。

1.圖片中一些特征通常比整個圖片要小,比如要檢測圖像中是否有鳥嘴。

 

 我們的neuron不需要看整個圖像來發現某些特征,所以我們只需要把鳥嘴那一小部分的圖片,用很少的參數跟neuron關聯起來。

 2.同樣的特征可能出現在圖片的不同位置。

我們不會為每個不同位置的特征單獨訓練一個neuron,因為它做的都是同樣的事情,就是檢測是否出現鳥嘴,只是出現的位置不一樣罷了。

3.subsampling 可以使圖片縮小,但不影響圖片的表達。

每隔一行、一列刪除一行pixel,就是subsampling,我們同樣可以看到圖片表達的信息,就是一只鳥。

由於圖片縮小了,這樣又可以減少參數了。

The whole CNN

來看看整個CNN的架構

從圖片作為輸入開始,經過多層的Convolution層+MaxPooling的組合,然后是Flatten層,最后經過一個Fully Connected network。

 其中,上面討論的關於圖片的三個特點,在CNN的不同層中有相應處理。

Property1、2是小的特征和 特征的不同位置,通過Convolution層進行處理;

Property3 Subsampling通過MaxPooling處理。

CNN – Convolution

這里需要提到的是Filter。Filter其實就是一個矩陣,它們是神經網絡需要學習的參數。

每個Filter在圖片中進行掃描,檢測3*3的特征。

Filter從圖片的左上角開始,以stride為步長進行圖片掃描,圖片中每3*3的子圖會和Filter作內積,然后得到一個輸出值。

上面就是FIlter1掃描整個6×6圖片后得到的4×4的結果矩陣。

可以進一步理解的是,該Filter對角線全為1,表示檢測圖像是否出現類似的斜線,出現斜線的地方在結果矩陣中的值為最大。

對於一張圖片,我們會同時檢測很多特征,每個filter只做一件相同的事情,所以需要有很多的Filter,

它們放在一起就叫做Feature Map。

對於彩色圖片,一個Filter是3維的,如上圖,Filter是3×3×3的立方體(tensor).

下面將Convolution層和Fully Connected連接對應理解。

將圖片拉直成一個列向量,上面的Filter連接的是1,2,3,7,8,9,13,14,15的輸入單元,而不是全連接,Filter的每一個分量可以看作是全連接網絡中的w和b。

這樣相比於全連接的網絡,就只需要更少的參數。

而且,之前討論過,檢測同一個特征只使用相同的Filter,所以每一個neuron共用相同的參數,這就是Shared weights。

這會使CNN的參數變得更少。

CNN – Max Pooling

將每一個Filter檢測后的結果,划分成2×2的小塊,在每一塊中可以取均值或最大值,代替這四個值,這樣就實現了Subsampling的功能。

取最大值的方法就是Maxpooling。

一副圖像,經過Conv和Maxpooling后,會變成一幅小的新圖像。可以再它之上繼續進行Conv和Maxpooling。

經過MaxPooling處理后會產生和Filter數目相同的“新圖像”,每一個Filter都可以看作是處理之前圖像的一個channel。

Flatten

最后的Flatten就是將上一層Maxpooling得到的image拉直成列向量,作為全連接網絡的輸入。

以上就是一個CNN神經網絡的所有模塊簡介。最后附一張全圖。

 


免責聲明!

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



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