卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)是一種前饋神經(jīng)網(wǎng)絡(luò),它的人工神經(jīng)元可以響應(yīng)一部分覆蓋范圍內(nèi)的周圍單元,對于大型圖像處理有出色表現(xiàn)。 它包括卷積層(convolutional layer)和池化層(pooling layer)。
對比:卷積神經(jīng)網(wǎng)絡(luò)、全連接神經(jīng)網(wǎng)絡(luò)
左圖:全連接神經(jīng)網(wǎng)絡(luò)(平面),組成:輸入層、激活函數(shù)、全連接層
右圖:卷積神經(jīng)網(wǎng)絡(luò)(立體),組成:輸入層、卷積層、激活函數(shù)、池化層、全連接層
在卷積神經(jīng)網(wǎng)絡(luò)中有一個重要的概念:深度
卷積層
卷積:在原始的輸入上進(jìn)行特征的提取。特征提取簡言之就是,在原始輸入上一個小區(qū)域一個小區(qū)域進(jìn)行特征的提取,稍后細(xì)致講解卷積的計(jì)算過程。
上圖中,左方塊是輸入層,尺寸為32*32的3通道圖像。右邊的小方塊是filter,尺寸為5*5,深度為3。將輸入層劃分為多個區(qū)域,用filter這個固定尺寸的助手,在輸入層做運(yùn)算,最終得到一個深度為1的特征圖。
上圖中,展示出一般使用多個filter分別進(jìn)行卷積,最終得到多個特征圖。
上圖使用了6個filter分別卷積進(jìn)行特征提取,最終得到6個特征圖。將這6層疊在一起就得到了卷積層輸出的結(jié)果。
卷積不僅限于對原始輸入的卷積。藍(lán)色方塊是在原始輸入上進(jìn)行卷積操作,使用了6個filter得到了6個提取特征圖。綠色方塊還能對藍(lán)色方塊進(jìn)行卷積操作,使用了10個filter得到了10個特征圖。每一個filter的深度必須與上一層輸入的深度相等。
直觀理解卷積
以上圖為例:
第一次卷積可以提取出低層次的特征。
第二次卷積可以提取出中層次的特征。
第三次卷積可以提取出高層次的特征。
特征是不斷進(jìn)行提取和壓縮的,最終能得到比較高層次特征,簡言之就是對原式特征一步又一步的濃縮,最終得到的特征更可靠。利用最后一層特征可以做各種任務(wù):比如分類、回歸等。
卷積計(jì)算流程
左區(qū)域的三個大矩陣是原式圖像的輸入,RGB三個通道用三個矩陣表示,大小為7*7*3。
Filter W0表示1個filter助手,尺寸為3*3,深度為3(三個矩陣);Filter W1也表示1個filter助手。因?yàn)榫矸e中我們用了2個filter,因此該卷積層結(jié)果的輸出深度為2(綠色矩陣有2個)。
Bias b0是Filter W0的偏置項(xiàng),Bias b1是Filter W1的偏置項(xiàng)。
OutPut是卷積后的輸出,尺寸為3*3,深度為2。
計(jì)算過程:
輸入是固定的,filter是指定的,因此計(jì)算就是如何得到綠色矩陣。第一步,在輸入矩陣上有一個和filter相同尺寸的滑窗,然后輸入矩陣的在滑窗里的部分與filter矩陣對應(yīng)位置相乘:
即與
對應(yīng)位置相乘后求和,結(jié)果為0
即與
對應(yīng)位置相乘后求和,結(jié)果為2
即與
對應(yīng)位置相乘后求和,結(jié)果為0
第二步,將3個矩陣產(chǎn)生的結(jié)果求和,并加上偏置項(xiàng),即0+2+0+1=3,因此就得到了輸出矩陣的左上角的3:
第三步,讓每一個filter都執(zhí)行這樣的操作,變可得到第一個元素:
第四步,滑動窗口2個步長,重復(fù)之前步驟進(jìn)行計(jì)算
第五步,最終可以得到,在2個filter下,卷積后生成的深度為2的輸出結(jié)果:
思考:
①為什么每次滑動是2個格子?
滑動的步長叫stride記為S。S越小,提取的特征越多,但是S一般不取1,主要考慮時間效率的問題。S也不能太大,否則會漏掉圖像上的信息。
②由于filter的邊長大于S,會造成每次移動滑窗后有交集部分,交集部分意味著多次提取特征,尤其表現(xiàn)在圖像的中間區(qū)域提取次數(shù)較多,邊緣部分提取次數(shù)較少,怎么辦?
一般方法是在圖像外圍加一圈0,細(xì)心的同學(xué)可能已經(jīng)注意到了,在演示案例中已經(jīng)加上這一圈0了,即+pad 1。 +pad n表示加n圈0.
③一次卷積后的輸出特征圖的尺寸是多少呢?
請計(jì)算上圖中Output=?
注意:在一層卷積操作里可以有多個filter,他們是尺寸必須相同。
卷積參數(shù)共享原則
在卷積神經(jīng)網(wǎng)絡(luò)中,有一個非常重要的特性:權(quán)值共享。
所謂的權(quán)值共享就是說,給一張輸入圖片,用一個filter去掃這張圖,filter里面的數(shù)就叫權(quán)重,這張圖每個位置是被同樣的filter掃的,所以權(quán)重是一樣的,也就是共享。
池化層
上圖顯示,池化就是對特征圖進(jìn)行特征壓縮,池化也叫做下采樣。選擇原來某個區(qū)域的max或mean代替那個區(qū)域,整體就濃縮了。下面演示一下pooling操作,需要制定一個filter的尺寸、stride、pooling方式(max或mean):
卷積神經(jīng)網(wǎng)絡(luò)的組成
卷積——激活——卷積——激活——池化——......——池化——全連接——分類或回歸
前向傳播與反向傳播
之前已經(jīng)講解了卷積層前向傳播過程,這里通過一張圖再回顧一下:
下面講解卷積層的反向傳播過程:
反向傳播的目的:更新參數(shù)w。因此要先算出dJ/dw。假設(shè)上一層會傳過來一個梯度dJ/dout,根據(jù)鏈?zhǔn)角髮?dǎo)法則,因此dJ/dw = dJ/dout * dout/dw =dJ/dout * x 。在計(jì)算機(jī)中方便為變量命名的緣故,將dJ/dout記為dout,dJ/dw記為dw,即圖中的情況。后面也用這個記號來講。
首先要清楚:dw 和 w 的尺寸是一樣的。一個點(diǎn)乘以一個區(qū)域還能得到一個區(qū)域。那么反向傳播過程就相當(dāng)于:用dout中的一個元素乘以輸入層劃窗里的矩陣便得到一個dw矩陣;然后滑動滑窗,繼續(xù)求下一個dw,依次下去,最后將得到的多個dw相加,執(zhí)行 w = w - dw 就完成了反向傳播的計(jì)算。
上面的反向傳播可以更新一個filter中的參數(shù),還要求其他的filter。
下面用圖示來看一下2種不同的pooling過程——池化層的前向傳播:
在池化層進(jìn)行反向傳播時,max-pooling和mean-pooling的方式也采用不同的方式。
對于max-pooling,在前向計(jì)算時,是選取的每個2*2區(qū)域中的最大值,這里需要記錄下最大值在每個小區(qū)域中的位置。在反向傳播時,只有那個最大值對下一層有貢獻(xiàn),所以將殘差傳遞到該最大值的位置,區(qū)域內(nèi)其他2*2-1=3個位置置零。具體過程如下圖,其中4*4矩陣中非零的位置即為前邊計(jì)算出來的每個小區(qū)域的最大值的位置
對于mean-pooling,我們需要把殘差平均分成2*2=4份,傳遞到前邊小區(qū)域的4個單元即可。具體過程如圖:
卷積網(wǎng)絡(luò)架構(gòu)實(shí)例
VGGNet深度更多,有很多卷積層和池化層。一個版本有16層,另一個版本有19層(較常用)。
VGGNet的特點(diǎn):
filter只有3*3的,意味著計(jì)算的特征較多,粒度更細(xì)。同時pooling的參數(shù)也有固定。
注意:傳統(tǒng)的卷積神經(jīng)網(wǎng)絡(luò)層數(shù)越多并以意味著效果更好。而在2016年推出了深度殘差網(wǎng)絡(luò)達(dá)到了152層。后續(xù)講介紹。
那么訓(xùn)練一個VGGNet有多少內(nèi)存開銷呢?
從圖可得知,訓(xùn)練過程中一張224*224*3的圖像會有138M個參數(shù)會占93MB的內(nèi)存。因此每個batch中圖像的數(shù)目應(yīng)該受內(nèi)存的約束,即 93*圖像數(shù)目<內(nèi)存總?cè)萘俊?/span>
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4819瀏覽量
106066 -
人工智能
+關(guān)注
關(guān)注
1811文章
49497瀏覽量
258192
原文標(biāo)題:圖文并茂地講解卷積神經(jīng)網(wǎng)絡(luò)
文章出處:【微信號:Imgtec,微信公眾號:Imagination Tech】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
卷積神經(jīng)網(wǎng)絡(luò)如何使用
卷積神經(jīng)網(wǎng)絡(luò)一維卷積的處理過程
卷積神經(jīng)網(wǎng)絡(luò)模型發(fā)展及應(yīng)用
想了解卷積神經(jīng)網(wǎng)絡(luò)看這篇就夠了

一文帶你徹底了解卷積神經(jīng)網(wǎng)絡(luò)

評論