卷積神經網絡(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*圖像數目<內存總容量。
-
神經網絡
+關注
關注
42文章
4771瀏覽量
100766 -
人工智能
+關注
關注
1791文章
47279瀏覽量
238497
原文標題:圖文并茂地講解卷積神經網絡
文章出處:【微信號:Imgtec,微信公眾號:Imagination Tech】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論