徹底瞭解卷積神經網絡CNN(二)

在卷積神經網絡中,有一個非常重要的特性:權值共享。

所謂的權值共享就是說,給一張輸入圖片,用一個filter去掃這張圖,filter裡面的數就叫權重,這張圖每個位置是被同樣的filter掃的,所以權重是一樣的,也就是共享。

池化層

徹底瞭解卷積神經網絡CNN(二)

上圖顯示,池化就是對特徵圖進行特徵壓縮,池化也叫做下采樣。選擇原來某個區域的max或mean代替那個區域,整體就濃縮了。下面演示一下pooling操作,需要制定一個filter的尺寸、stride、pooling方式(max或mean):

徹底瞭解卷積神經網絡CNN(二)

卷積神經網絡的組成

徹底瞭解卷積神經網絡CNN(二)

卷積——激活——卷積——激活——池化——......——池化——全連接——分類或迴歸

前向傳播與反向傳播

之前已經講解了卷積層前向傳播過程,這裡通過一張圖再回顧一下:

徹底瞭解卷積神經網絡CNN(二)

下面講解卷積層的反向傳播過程:

徹底瞭解卷積神經網絡CNN(二)

反向傳播的目的:更新參數w。因此要先算出dJ/dw。假設上一層會傳過來一個梯度dJ/dout,根據鏈式求導法則,因此dJ/dw = dJ/dout * dout/dw =dJ/dout * x 。在計算機中方便為變量命名的緣故,將dJ/dout記為dout,dJ/dw記為dw,即圖中的情況。後面也用這個記號來講。

首先要清楚:dw 和 w 的尺寸是一樣的。一個點乘以一個區域還能得到一個區域。那麼反向傳播過程就相當於:用dout中的一個元素乘以輸入層劃窗裡的矩陣便得到一個dw矩陣;然後滑動滑窗,繼續求下一個dw,依次下去,最後將得到的多個dw相加,執行 w = w - dw 就完成了反向傳播的計算。

上面的反向傳播可以更新一個filter中的參數,還要求其他的filter。

徹底瞭解卷積神經網絡CNN(二)

徹底瞭解卷積神經網絡CNN(二)

下面用圖示來看一下2種不同的pooling過程——池化層的前向傳播:

徹底瞭解卷積神經網絡CNN(二)

在池化層進行反向傳播時,max-pooling和mean-pooling的方式也採用不同的方式。

對於max-pooling,在前向計算時,是選取的每個2*2區域中的最大值,這裡需要記錄下最大值在每個小區域中的位置。在反向傳播時,只有那個最大值對下一層有貢獻,所以將殘差傳遞到該最大值的位置,區域內其他2*2-1=3個位置置零。具體過程如下圖,其中4*4矩陣中非零的位置即為前邊計算出來的每個小區域的最大值的位置

徹底瞭解卷積神經網絡CNN(二)

對於mean-pooling,我們需要把殘差平均分成2*2=4份,傳遞到前邊小區域的4個單元即可。具體過程如圖:

徹底瞭解卷積神經網絡CNN(二)

卷積網絡架構實例

徹底瞭解卷積神經網絡CNN(二)

VGGNet深度更多,有很多卷積層和池化層。一個版本有16層,另一個版本有19層(較常用)。

VGGNet的特點:

filter只有3*3的,意味著計算的特徵較多,粒度更細。同時pooling的參數也有固定。

注意:傳統的卷積神經網絡層數越多並以意味著效果更好。而在2016年推出了深度殘差網絡達到了152層。後續講介紹。

那麼訓練一個VGGNet有多少內存開銷呢?

徹底瞭解卷積神經網絡CNN(二)

從圖可得知,訓練過程中一張224*224*3的圖像會有138M個參數會佔93MB的內存。因此每個batch中圖像的數目應該受內存的約束,即 93*圖像數目


分享到:


相關文章: