1. 程式人生 > >深度學習--說一說卷積和池化

深度學習--說一說卷積和池化

hang .com image .html 特性 3*3 方法 pool 維度

卷積是神經網絡的基礎,算是大廈的地基,卷積實際上來說就是兩個數列之間的相互處理。池化的作用我感覺主要就是減小圖像或者說矩陣的大小,並且不同的池化方法選取不同的信息作為保存信息。

轉載:http://www.cnblogs.com/zf-blog/p/6075286.html


卷積神經網絡(CNN)由輸入層、卷積層、激活函數、池化層、全連接層組成,即INPUT-CONV-RELU-POOL-FC

(1)卷積層:用它來進行特征提取,如下:

技術分享圖片

輸入圖像是32*32*3,3是它的深度(即R、G、B),卷積層是一個5*5*3的filter(感受野),這裏註意:感受野的深度必須和輸入圖像的深度相同。通過一個filter與輸入圖像的卷積可以得到一個28*28*1的特征圖,上圖是用了兩個filter得到了兩個特征圖;

我們通常會使用多層卷積層來得到更深層次的特征圖。如下:

技術分享圖片

技術分享圖片

關於卷積的過程圖解如下:

技術分享圖片

輸入圖像和filter的對應位置元素相乘再求和,最後再加上b,得到特征圖。如圖中所示,filter w0的第一層深度和輸入圖像的藍色方框中對應元素相乘再求和得到0,其他兩個深度得到2,0,則有0+2+0+1=3即圖中右邊特征圖的第一個元素3.,卷積過後輸入圖像的藍色方框再滑動,stride=2,如下:

技術分享圖片

如上圖,完成卷積,得到一個3*3*1的特征圖;在這裏還要註意一點,即zero pad項,即為圖像加上一個邊界,邊界元素均為0.(對原輸入無影響)一般有

F=3 => zero pad with 1

F=5 => zero pad with 2

F=7=> zero pad with 3,邊界寬度是一個經驗值,加上zero pad這一項是為了使輸入圖像和卷積後的特征圖具有相同的維度,如:

輸入為5*5*3,filter為3*3*3,在zero pad 為1,則加上zero pad後的輸入圖像為7*7*3,則卷積後的特征圖大小為5*5*1((7-3)/1+1),與輸入圖像一樣;

而關於特征圖的大小計算方法具體如下:

技術分享圖片

卷積層還有一個特性就是“權值共享”原則。如下圖:

技術分享圖片

如沒有這個原則,則特征圖由10個32*32*1的特征圖組成,即每個特征圖上有1024個神經元,每個神經元對應輸入圖像上一塊5*5*3的區域,即一個神經元和輸入圖像的這塊區域有75個連接,即75個權值參數,則共有75*1024*10=768000個權值參數,這是非常復雜的,因此卷積神經網絡引入“權值”共享原則,即一個特征圖上每個神經元對應的75個權值參數被每個神經元共享,這樣則只需75*10=750個權值參數,而每個特征圖的閾值也共享,即需要10個閾值,則總共需要750+10=760個參數。

池化層:對輸入的特征圖進行壓縮,一方面使特征圖變小,簡化網絡計算復雜度;一方面進行特征壓縮,提取主要特征,如下:

技術分享圖片

池化操作一般有兩種,一種是Avy Pooling,一種是max Pooling,如下:

技術分享圖片

同樣地采用一個2*2的filter,max pooling是在每一個區域中尋找最大值,這裏的stride=2,最終在原特征圖中提取主要特征得到右圖。

(Avy pooling現在不怎麽用了,方法是對每一個2*2的區域元素求和,再除以4,得到主要特征),而一般的filter取2*2,最大取3*3,stride取2,壓縮為原來的1/4.

註意:這裏的pooling操作是特征圖縮小,有可能影響網絡的準確度,因此可以通過增加特征圖的深度來彌補(這裏的深度變為原來的2倍)。

全連接層:連接所有的特征,將輸出值送給分類器(如softmax分類器)。

總的一個結構大致如下:

技術分享圖片

另外:CNN網絡中前幾層的卷積層參數量占比小,計算量占比大;而後面的全連接層正好相反,大部分CNN網絡都具有這個特點。因此我們在進行計算加速優化時,重點放在卷積層;進行參數優化、權值裁剪時,重點放在全連接層。

深度學習--說一說卷積和池化