卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)是一種被廣泛應(yīng)用于圖像識(shí)別、語(yǔ)音識(shí)別和自然語(yǔ)言處理等領(lǐng)域的深度學(xué)習(xí)模型。與RNN、Transformer模型組成AI的三大基石。
在卷積神經(jīng)網(wǎng)絡(luò)中,相比較普通的神經(jīng)網(wǎng)絡(luò),增加了卷積層(Convolution)和池化層(Pooling)。其結(jié)構(gòu)一般將會(huì)是如下:
CNN的層連接順序是"Convolution - ReLU - (Pooling)"(Pooling層有時(shí)候可以省略)。
圖中的Affine層,也被稱為全連接層(Dense層)或仿射層,作用是將輸入數(shù)據(jù)(input)與權(quán)重矩陣(W)相乘,然后添加偏置(B),從而進(jìn)行線性變換。這個(gè)線性變換是神經(jīng)網(wǎng)絡(luò)中的一個(gè)基本操作,用來實(shí)現(xiàn)特征映射和模型參數(shù)的學(xué)習(xí)。在幾何學(xué)領(lǐng)域,Affine層進(jìn)行的矩陣乘積運(yùn)算被稱為“仿射變換”。仿射變換包括一次線性變換和一次平移,分別對(duì)應(yīng)神經(jīng)網(wǎng)絡(luò)的加權(quán)和運(yùn)算與加偏置運(yùn)算。
卷積層
傳統(tǒng)的全連接神經(jīng)網(wǎng)絡(luò)(Full-Connected)中忽略了數(shù)據(jù)的形狀,比如,輸入數(shù)據(jù)是圖像時(shí),圖像通常是高、長(zhǎng)、通道三個(gè)方向上的3維形狀。但是向全連接層(FC)輸入時(shí),需要將3維數(shù)據(jù)拉平為1維數(shù)據(jù)。全連接層會(huì)忽視形狀,將全部的輸入數(shù)據(jù)作為相同的神經(jīng)元(同一緯度的神經(jīng)元)處理,所以無法利用與形狀相關(guān)的信息。
卷積層可以保持形狀不變。當(dāng)輸入數(shù)據(jù)是圖像時(shí),卷積層會(huì)以3維數(shù)據(jù)的形式接受輸入數(shù)據(jù),并以3維數(shù)據(jù)的形式輸出至下一層。因此,CNN架構(gòu)的網(wǎng)絡(luò)可以正確理解圖像等具有形狀的數(shù)據(jù)。
卷積層進(jìn)行的處理就是卷積運(yùn)算。卷積運(yùn)算相當(dāng)于圖像處理中的"濾波器運(yùn)算"。而這個(gè)"濾波器"也就是卷積層的卷積核。正是通過它在輸入數(shù)據(jù)上的滑動(dòng)來提取特征。其運(yùn)算過程如下所示:
將各個(gè)位置上濾波器的元素與輸入的對(duì)應(yīng)元素相乘,然后再求和。最后將結(jié)果保存到輸出的對(duì)應(yīng)位置。將這個(gè)過程在所有的位置運(yùn)算一遍,就可以得到卷積運(yùn)算的輸出。
注意,這里的計(jì)算是把輸入的行 乘 卷積核的行; 然后再依次累加,得到最終值。
卷積操作可以分為以下幾個(gè)步驟:
-
將卷積核與輸入數(shù)據(jù)的一個(gè)小區(qū)域進(jìn)行逐元素相乘。
-
將相乘得到的結(jié)果求和,得到卷積操作的輸出值。
-
將卷積核在輸入數(shù)據(jù)上滑動(dòng)一個(gè)固定的步長(zhǎng),重復(fù)上述操作,直到覆蓋整個(gè)輸入數(shù)據(jù)。
通過卷積操作,卷積核可以提取輸入數(shù)據(jù)中的局部特征。這是因?yàn)榫矸e核的每個(gè)權(quán)重都對(duì)應(yīng)著輸入數(shù)據(jù)中的一個(gè)局部區(qū)域,通過逐元素相乘和求和的操作,卷積核可以將這個(gè)局部區(qū)域的特征信息進(jìn)行提取。
卷積核具有以下幾個(gè)重要的特點(diǎn):
-
特征提取:卷積核通過滑動(dòng)窗口的方式在輸入數(shù)據(jù)上進(jìn)行卷積操作,從而提取輸入數(shù)據(jù)中的局部特征。這些特征可以用于后續(xù)的分類、檢測(cè)和識(shí)別等任務(wù)。
-
參數(shù)共享:卷積核的權(quán)重是共享的,即在卷積操作中使用的同一個(gè)卷積核對(duì)輸入數(shù)據(jù)的不同區(qū)域進(jìn)行卷積操作時(shí),使用的是相同的權(quán)重。這種參數(shù)共享的方式大大減少了模型的參數(shù)量,提高了模型的訓(xùn)練效率。
-
空間不變性:卷積操作具有平移不變性,即對(duì)于輸入數(shù)據(jù)中的特征在空間上的平移,卷積操作的輸出結(jié)果不會(huì)發(fā)生變化。這種空間不變性使得卷積神經(jīng)網(wǎng)絡(luò)能夠更好地處理圖像等具有平移不變性的數(shù)據(jù)。
填充
在卷積層處理之前,支持對(duì)輸入數(shù)據(jù)做填充,即在輸入數(shù)據(jù)的周圍填入固定的數(shù)據(jù)(比如0,1等)。而輸入數(shù)據(jù)的形狀改變就會(huì)影響到輸出數(shù)據(jù)的大小,這也是使用填充的作用,通過填充輸入數(shù)據(jù)的周圍數(shù)據(jù),保持輸出數(shù)據(jù)的大小,因此將數(shù)據(jù)傳入到下一層時(shí)就不會(huì)出現(xiàn)丟失或數(shù)據(jù)不全。
向輸入數(shù)據(jù)的周圍填入0,圖中用虛線表示填充,并省略了填充內(nèi)容"0".
步幅
應(yīng)用卷積核的位置間隔即為步幅。默認(rèn)一般都是1,也可以調(diào)整為2或是其它的。步幅可以減少輸出的高、寬。
輸出數(shù)據(jù)的計(jì)算
有個(gè)公式可以算出經(jīng)過卷積核運(yùn)算后的輸出數(shù)據(jù)高與寬, 假設(shè)輸入大小為(H,W),卷積核大小為(FH,FW),輸出大小為(OH,OW),填充為P,步幅為S:
三維卷積
圖像是3維數(shù)據(jù),除了高、長(zhǎng)方向還有通道方向。增加了通道,會(huì)按通道進(jìn)行輸入數(shù)據(jù)與濾波器的卷積運(yùn)算。
需要注意的是,三維卷積的運(yùn)算中,輸入數(shù)據(jù)和卷積核的通道數(shù)要設(shè)置為相同的值。
三維數(shù)據(jù)的書寫格式為(channel, height, width),卷積核的書寫格式也是如此,其運(yùn)算可簡(jiǎn)化如下:
輸出是1個(gè)通道的特征,如果需要多通道,可以疊加起來,其表現(xiàn)形式如下:
應(yīng)該應(yīng)用N個(gè)卷積核,輸出特征數(shù)也生成了N個(gè)。
多維的數(shù)據(jù)在不同的框架(pytorch、TensorFlow)中其表現(xiàn)形式也是不一樣的,一般都是按照張量的階度來標(biāo)識(shí)數(shù)據(jù)維度。CNN的四維數(shù)據(jù),其格式可以表示為(batch_num,channel, height, width)
其它
在某些CNN框架中,會(huì)應(yīng)用小卷積核運(yùn)算,比如1×1卷積,3×3卷積;還有一種分組卷積;一個(gè)卷積層中多尺寸的卷積核等等。這些算是卷積神經(jīng)網(wǎng)絡(luò)中的深入知識(shí)點(diǎn),也可以了解下。
分組卷積
在同一個(gè)卷積層中,能否使用不同尺寸的卷積核呢
CNN中神奇的1x1卷積
池化層
池化是縮小高、長(zhǎng)方向上的空間的運(yùn)算;對(duì)輸入的特征圖進(jìn)行降采樣,減少特征圖的維度,同時(shí)保留重要的特征信息。
池化層的計(jì)算有兩種: 最大池化(Max Pooling)和平均池化(Average Pooling)。最大池化選擇窗口內(nèi)的最大值作為輸出,而平均池化則計(jì)算窗口內(nèi)值的平均值。這兩種方式都能有效地減少特征圖的尺寸,進(jìn)而降低計(jì)算復(fù)雜度。
如下,按步幅為2,進(jìn)行2*2窗口的Max池化,在上一層的輸出數(shù)據(jù)上應(yīng)用窗口,滑動(dòng),每次取窗口內(nèi)的最大值。
這篇博文寫得不錯(cuò),可以更深入的了解池化層:文章來源:http://www.zghlxwxcb.cn/news/detail-747598.html
深入解析卷積神經(jīng)網(wǎng)絡(luò)的池化層:提升特征提取與降低計(jì)算復(fù)雜度文章來源地址http://www.zghlxwxcb.cn/news/detail-747598.html
到了這里,關(guān)于聊聊卷積神經(jīng)網(wǎng)絡(luò)CNN的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!