當前位置:
首頁 > 最新 > 圖文並茂地講解卷積神經網路

圖文並茂地講解卷積神經網路

卷積神經網路(Convolutional Neural Network,CNN)是一種前饋神經網路,它的人工神經元可以響應一部分覆蓋範圍內的周圍單元,對於大型圖像處理有出色表現。 它包括卷積層(convolutional layer)和池化層(pooling layer)。

對比:卷積神經網路、全連接神經網路

左圖:全連接神經網路(平面),組成:輸入層、激活函數、全連接層

右圖:卷積神經網路(立體),組成:輸入層、卷積層、激活函數、池化層、全連接層

在卷積神經網路中有一個重要的概念:深度

卷積層

卷積:在原始的輸入上進行特徵的提取。特徵提取簡言之就是,在原始輸入上一個小區域一個小區域進行特徵的提取,稍後細緻講解卷積的計算過程。

上圖中,左方塊是輸入層,尺寸為32*32的3通道圖像。右邊的小方塊是filter,尺寸為5*5,深度為3。將輸入層劃分為多個區域,用filter這個固定尺寸的助手,在輸入層做運算,最終得到一個深度為1的特徵圖。

上圖中,展示出一般使用多個filter分別進行卷積,最終得到多個特徵圖。

上圖使用了6個filter分別卷積進行特徵提取,最終得到6個特徵圖。將這6層疊在一起就得到了卷積層輸出的結果。

卷積不僅限於對原始輸入的卷積。藍色方塊是在原始輸入上進行卷積操作,使用了6個filter得到了6個提取特徵圖。綠色方塊還能對藍色方塊進行卷積操作,使用了10個filter得到了10個特徵圖。每一個filter的深度必須與上一層輸入的深度相等。

直觀理解卷積

以上圖為例:

第一次卷積可以提取出低層次的特徵。

第二次卷積可以提取出中層次的特徵。

第三次卷積可以提取出高層次的特徵。

特徵是不斷進行提取和壓縮的,最終能得到比較高層次特徵,簡言之就是對原式特徵一步又一步的濃縮,最終得到的特徵更可靠。利用最後一層特徵可以做各種任務:比如分類、回歸等。

卷積計算流程

左區域的三個大矩陣是原式圖像的輸入,RGB三個通道用三個矩陣表示,大小為7*7*3。

Filter W0表示1個filter助手,尺寸為3*3,深度為3(三個矩陣);Filter W1也表示1個filter助手。因為卷積中我們用了2個filter,因此該卷積層結果的輸出深度為2(綠色矩陣有2個)。

Bias b0是Filter W0的偏置項,Bias b1是Filter W1的偏置項。

OutPut是卷積後的輸出,尺寸為3*3,深度為2。

計算過程:

輸入是固定的,filter是指定的,因此計算就是如何得到綠色矩陣。

第一步,在輸入矩陣上有一個和filter相同尺寸的滑窗,然後輸入矩陣的在滑窗里的部分與filter矩陣對應位置相乘:

即與對應位置相乘後求和,結果為0

即與對應位置相乘後求和,結果為2

即與對應位置相乘後求和,結果為0

第二步,將3個矩陣產生的結果求和,並加上偏置項,即0+2+0+1=3,因此就得到了輸出矩陣的左上角的3:

第三步,讓每一個filter都執行這樣的操作,變可得到第一個元素:

第四步,滑動窗口2個步長,重複之前步驟進行計算

第五步,最終可以得到,在2個filter下,卷積後生成的深度為2的輸出結果:

思考:

①為什麼每次滑動是2個格子?

滑動的步長叫stride記為S。S越小,提取的特徵越多,但是S一般不取1,主要考慮時間效率的問題。S也不能太大,否則會漏掉圖像上的信息。

②由於filter的邊長大於S,會造成每次移動滑窗後有交集部分,交集部分意味著多次提取特徵,尤其表現在圖像的中間區域提取次數較多,邊緣部分提取次數較少,怎麼辦?

一般方法是在圖像外圍加一圈0,細心的同學可能已經注意到了,在演示案例中已經加上這一圈0了,即+pad 1。 +pad n表示加n圈0.

③一次卷積後的輸出特徵圖的尺寸是多少呢?

請計算上圖中Output=?

注意:在一層卷積操作里可以有多個filter,他們是尺寸必須相同。

卷積參數共享原則

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

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

池化層

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

卷積神經網路的組成

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

前向傳播與反向傳播

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

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

反向傳播的目的:更新參數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。

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

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

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

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

卷積網路架構實例

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

VGGNet的特點:

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

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

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

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

權威發布有關Imagination公司CPU,GPU以及連接IP、無線IP最新資訊,提供有關物聯網、可穿戴、通信、汽車電子、醫療電子等應用信息,每日更新大量信息,讓你緊跟技術發展,歡迎關注!伸出小手按一下二維碼我們就是好朋友!


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Imagination Tech 的精彩文章:

如何理解深度學習?
自動駕駛時代的車載顯示演進

TAG:Imagination Tech |