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神經網絡的所有模塊簡介。最后附一張全圖。