摘要:神經(jīng)網(wǎng)絡(luò)的補(bǔ)充前篇后篇數(shù)據(jù)預(yù)處理權(quán)重初始化經(jīng)典神經(jīng)網(wǎng)絡(luò)搞明白后,我們接下來看看他的變種,也是本系列的主角卷積神經(jīng)網(wǎng)絡(luò)。卷積神經(jīng)網(wǎng)絡(luò)一個(gè)普通的卷積神經(jīng)網(wǎng)絡(luò)由各種層按順序堆疊而成,這些層主要分三類卷積層池化層和全連接層。
【DL-CV】神經(jīng)網(wǎng)絡(luò)的補(bǔ)充<前篇---后篇>【DL-CV】數(shù)據(jù)預(yù)處理&權(quán)重初始化
經(jīng)典神經(jīng)網(wǎng)絡(luò)搞明白后,我們接下來看看他的變種,也是本系列的主角——卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network/CNN)。
以往全連接層組成的神經(jīng)網(wǎng)絡(luò)有一個(gè)很氣人的缺點(diǎn)就是對付大圖像效果不好:圖像尺寸一大,因?yàn)闄?quán)重(形狀上的)大小與圖像尺寸有關(guān)系,參數(shù)量激增,導(dǎo)致效率低下。相比,卷積神經(jīng)網(wǎng)絡(luò)就沒有這種煩人的特性了,他大大降低了網(wǎng)絡(luò)中的參數(shù)量,而且能通過增加層數(shù)(加到數(shù)十層)提高性能,非常勝任圖像識別的任務(wù)。
一個(gè)普通的卷積神經(jīng)網(wǎng)絡(luò)由各種層按順序堆疊而成,這些層主要分三類:卷積層、池化層和全連接層。有時(shí)激活函數(shù)也算一層,它逐元素進(jìn)行激活函數(shù)操作。而且為了更好的理解如何組裝這個(gè)網(wǎng)絡(luò),我們先詳細(xì)介紹這幾種層的原理
卷積層注:以下例子輸入數(shù)據(jù),輸出數(shù)據(jù),卷積核的截面都是正方形(寬度和高度相等)
有一張 32x32 的圖像,我們保持輸入圖像數(shù)據(jù)的三維結(jié)構(gòu),則輸入是一個(gè) 32x32x3 的三維數(shù)組。我們有一個(gè)5x5x3的卷積核(kernel)/濾波器(filter),讓這個(gè)卷積核在寬度和高度上滑過整個(gè)數(shù)據(jù)空間,在每個(gè)位置,計(jì)算卷積核和數(shù)據(jù)的部分區(qū)域(兩者重合的部分)的內(nèi)積獲得一個(gè)值,這個(gè)值加上偏置值b后經(jīng)過激活函數(shù)作為輸出的激活值。當(dāng)卷積核完成這個(gè)操作后,會得到一個(gè)由激活值組成的二維的特征映射圖(feature map,簡稱特征圖)。
如上圖左,如果步長為1(每次移動一個(gè)像素),會得到一張 28x28x1 的特征圖,有28x28個(gè)神經(jīng)元。關(guān)于神經(jīng)元:
每個(gè)神經(jīng)元只與輸入數(shù)據(jù)的局部區(qū)域連接,該局部區(qū)域稱為該神經(jīng)元的感受野(receptive field)。感受野的大小(寬高)也就是卷積核的大小(寬高),通常為正方形(寬高相等);而卷積核的深度是和輸入數(shù)據(jù)的深度相等的。上圖的感受野大小是5x5。
同一個(gè)特征圖上的神經(jīng)元都公用一套權(quán)重,也就是那個(gè)卷積核。這稱為參數(shù)共享,是卷積層的特性,卷積層中的神經(jīng)元通過參數(shù)共享(而不像普通網(wǎng)絡(luò)中每個(gè)神經(jīng)元都有自己的一組參數(shù))大大減低參數(shù)量。
在一個(gè)卷積層中,通常會有多個(gè)卷積核,每個(gè)卷積核都生成一個(gè)特征圖,將這些特征圖在深度方向堆疊起來就得到輸出數(shù)據(jù),作為下一個(gè)卷積層的輸入或進(jìn)入池化層。
卷積核的理解:
卷積核就是卷積層的參數(shù),是我們要訓(xùn)練的參數(shù)。
筆者對卷積核一個(gè)直觀的理解是,訓(xùn)練好的卷積核相當(dāng)于特征提取器,他對整個(gè)圖進(jìn)行掃描,并在每個(gè)位置留下激活值(相當(dāng)于該位置擁有某特征的可能性),這些激活值組成的特征圖就相當(dāng)于某特征分布的概率圖。一個(gè)卷積核對應(yīng)一種特征,使用多個(gè)卷積核提取圖像的多個(gè)特征后,可以喂給下一層卷積層讓下一層的卷積核提取更深一層的特征(淺層特征間的關(guān)系與組合),直到最后可以得到輸入圖像各種類別的可能性。
下面回到卷積層,注意到在卷積層中,有幾個(gè)超參數(shù)影響著輸出數(shù)據(jù)的尺寸(至于參數(shù)設(shè)定,文章最后):
卷積核的大小(F):影響著輸出數(shù)據(jù)的寬高
卷積核數(shù)量(K):影響著輸出數(shù)據(jù)的深度,卷積核數(shù)量與輸出數(shù)據(jù)的深度在數(shù)值上相等
步長(S):影響著輸出數(shù)據(jù)的寬高,步長越大,輸出數(shù)據(jù)的寬高越小
零填充(P):零填充指在輸入數(shù)據(jù)的寬和高兩個(gè)維度上用零填充指定寬度。如輸入數(shù)據(jù)大小為32x32x3,填充為2,則輸入數(shù)據(jù)大小變?yōu)?4x34x3。零填充很重要,如果只進(jìn)行卷積而不使用零填充,那么輸出數(shù)據(jù)的尺寸會不斷縮小,導(dǎo)致特征丟失
知道這些參數(shù)后,根據(jù)輸入數(shù)據(jù)的尺寸W1 ? H1 ? D1,我們有公式計(jì)算輸出數(shù)據(jù)的尺寸W2 ? H2 ? D2:
寬:$W_2 = {(W_1-F+2P)over S}+1$
高:$H_2 = {(H_1-F+2P)over S}+1$
深度:$D_2=K$
其中$(W_1-F+2P)$與$S$、$(H_1-F+2P)$與$S$必須是整除關(guān)系,否則意味著卷積核會超出輸入數(shù)據(jù)的邊界(步長為一肯定沒問題,大于一其他參數(shù)就要小心設(shè)置了)
每個(gè)卷積核有 F ? F ? D1個(gè)權(quán)重,K 個(gè)卷積核,卷積層共有F ? F ? D1 ? K 個(gè)權(quán)重和K 個(gè)偏置值
$$$$
卷積操作的矩陣實(shí)現(xiàn)實(shí)際應(yīng)用中,我們很少像上圖一樣在高維數(shù)組中迭代點(diǎn)積,因?yàn)檫@樣正向反向傳播都不好做,我們喜歡的還是慣用的矩陣操作。好消息是這是可行的,卷積運(yùn)算本質(zhì)上就是在卷積核和輸入數(shù)據(jù)的局部區(qū)域間做點(diǎn)積,利用這一點(diǎn)我們可以把卷積操作轉(zhuǎn)化為矩陣乘法:
把每個(gè)卷積核都展開成行向量(每個(gè)深度切片都展開成一行,拼起來獲得一大行)作為卷積核矩陣的一行,獲得矩陣W
把卷積操作的每個(gè)點(diǎn)積區(qū)域展開成列向量(每個(gè)深度切片都展開成一列,拼起來獲得一大列)作為輸入矩陣的一列,獲得矩陣X
這樣卷積操作就相當(dāng)于X*W這個(gè)矩陣乘法了,輸出矩陣X*W的每一行對應(yīng)某個(gè)卷積核獲得的特征圖的展開(輸出數(shù)據(jù)每個(gè)深度切片的展開)
這里只簡單介紹實(shí)現(xiàn),帶圖的詳細(xì)說明請看此文章,很不錯(cuò)
池化層在連續(xù)的卷積層之間會周期性地插入一個(gè)池化層,它的作用是逐漸降低數(shù)據(jù)體的空間尺寸(數(shù)據(jù)降采樣),這樣的話就能減少網(wǎng)絡(luò)中參數(shù)的數(shù)量,使得計(jì)算資源耗費(fèi)變少,也能有效控制過擬合。
池化操作的對象是每一個(gè)特征圖,也就是輸入數(shù)據(jù)的每個(gè)深度切片。這里介紹常用的最大池化,對于每一個(gè)切片,會有一個(gè)掃描空間在寬度和高度上滑過整個(gè)切片,在每個(gè)位置選出空間內(nèi)的最大值作為輸出。如上圖,輸入4x4x4的數(shù)據(jù),使用最大池化,空間大小2x2,步長為2,則輸出2x2x4的數(shù)據(jù)。
根據(jù)輸入數(shù)據(jù)的尺寸W1 ? H1 ? D1,空間大小F和步長S,我們有公式計(jì)算輸出數(shù)據(jù)的尺寸W2 ? H2 ? D2:
寬:$W_2 = {(W_1-F)over S}+1$
高:$H_2 = {(H_1-F)over S}+1$
深度:$D_2=D_1$
池化層很少使用零填充
在實(shí)際使用中,最大池化通常采用$F=2,S=2$(無重疊,普通池化);較少用的有$F=3,S=2$(有重疊,重疊池化)
除了最大池化外,還有平均池化、隨機(jī)池化、lp池化等,這里就不深入了,交給讀者自行了解。在圖像識別這一塊,通常經(jīng)驗(yàn)性的使用最大池化(性能好,反向傳播也容易)。
另:一些學(xué)者認(rèn)為可以不使用池化層,轉(zhuǎn)而使用較大步長的卷積層來代替池化層實(shí)現(xiàn)數(shù)據(jù)尺寸的降低。一些發(fā)現(xiàn)也認(rèn)為在訓(xùn)練一個(gè)良好的生成模型(如變化自編碼器,生成性對抗網(wǎng)絡(luò))時(shí),棄用池化層也是很重要的。這樣看來的話,未來的卷積網(wǎng)絡(luò)可能會向無池化層的方向發(fā)展
全連接層卷積神經(jīng)網(wǎng)絡(luò)的最后一部分是全連接層組成的網(wǎng)絡(luò)(也就是前面講的普通的神經(jīng)網(wǎng)絡(luò))。圖像數(shù)據(jù)經(jīng)過多層卷積層和池化層后,會得到足夠小的特征數(shù)據(jù),把特征數(shù)據(jù)的每個(gè)切片展開成向量并拼成一個(gè)大向量,便可作為全連接層的輸入,最后輸出類別得分。
全連接層轉(zhuǎn)化為卷積層任何全連接層都可以被轉(zhuǎn)化為卷積層。只要把卷積核的尺寸改成和輸入數(shù)據(jù)尺寸一致就能實(shí)現(xiàn)全連接了。
舉個(gè)栗子,如上圖,如果最后池化層輸出數(shù)據(jù)大小為 4x4xD,我們要將其接入一個(gè)K = 4096 (神經(jīng)元個(gè)數(shù))的全連接層,則需要4096個(gè)尺寸為4x4xD的卷積核,卷積后的到1x1x4096的輸出就對應(yīng)著那個(gè)全連接層中的4096個(gè)神經(jīng)元的值。如果第二個(gè)全連接層K=1000,則另需要1000個(gè)尺寸為1x1x4096的卷積核,卷積后得到1x1x1000的輸出對應(yīng)著第二個(gè)全連接層中的1000個(gè)神經(jīng)元,如此類推。
這種轉(zhuǎn)化參數(shù)量是沒有改變的,看似沒有好處,但是在下面的情況,這種轉(zhuǎn)化能使計(jì)算高效化
現(xiàn)在有一張大尺寸圖像,我們有一個(gè)浮窗,讓浮窗在寬和高上滑過整張圖片,在每個(gè)位置浮窗圍住的子圖像將作為卷積神經(jīng)網(wǎng)絡(luò)的輸入,然后網(wǎng)絡(luò)輸出該子圖像的評分?jǐn)?shù)據(jù)。現(xiàn)在重點(diǎn)來了:
如果這是個(gè)原版的卷積神經(jīng)網(wǎng)絡(luò)(帶全連接層),因?yàn)榫W(wǎng)絡(luò)中的全連接層上改變了原先數(shù)據(jù)的維度,導(dǎo)致一次只能輸出某個(gè)子圖像的評分?jǐn)?shù)據(jù)(向量)。整個(gè)過程就需要迭代多次網(wǎng)絡(luò)才行
如果這是個(gè)改版的卷積神經(jīng)網(wǎng)絡(luò)(全連接層改成卷積層),因?yàn)楦〈靶袨榕c卷積層的共性,加之沒有全連接層,數(shù)據(jù)會維持三維結(jié)構(gòu);只需一次正向傳播便能得到所有評分?jǐn)?shù)據(jù)
相比之下,改版的卷積神經(jīng)網(wǎng)絡(luò)更高效,它在每個(gè)子圖像的計(jì)算中共享了計(jì)算資源。
另:這種帶浮窗的設(shè)定,就是目標(biāo)檢測的實(shí)現(xiàn)方法,通常在一個(gè)大圖像上,在不同的位置會有不同類別的物體,浮窗在每個(gè)位置都進(jìn)行一次識別,就能在一張圖中分辨出多個(gè)物體,所謂目標(biāo)檢測。
組裝卷積神經(jīng)網(wǎng)絡(luò)介紹完各種層的原理后,最后介紹如何用這些層組成一個(gè)完整的卷積神經(jīng)網(wǎng)絡(luò),并解析各層參數(shù)的選用
通常卷積層有以下結(jié)構(gòu):
輸入→→[ [卷積層→→激活函數(shù)層]*N →→池化層 ]*M →→[全連接層→→激活函數(shù)層]*K→→全連接層→→輸出
池化層是可以不用的,全連接層可以轉(zhuǎn)化為卷積層。*K、*N、*M 指重復(fù)若干次,其中N >=0,通常N<=3;M>=0;K>=0,通常K<3。N越大意味著池化前有更多的卷積層,這個(gè)思路適用于更大更深的網(wǎng)絡(luò),因?yàn)樵趫?zhí)行具有破壞性的池化操作前,多重的卷積層可以從輸入數(shù)據(jù)中學(xué)習(xí)到更多的復(fù)雜特征。
輸入層:圖像的尺寸應(yīng)該能被2整除多次,如32,64,96,224等。以方便池化操作
卷積層:
卷積核數(shù)量應(yīng)該為2n ,如64,128,512......
卷積核尺寸推薦選較小的(如3x3,5x5),對應(yīng)步長使用1。更大的卷積核尺寸(如7x7),通常只用在第一個(gè)面對原始圖像的卷積層上
使用零填充,如果步長為1,填充大小 $P =(F-1)/2$ 便能維持輸入輸出的寬高一致
池化層:
通常使用最大池化,并使用2x2空間,步長為2($F=2,S=2$)
較少用的有3x3空間,步長為2,重疊池化($F=3,S=2$)
更大的空間極少用,池化效果太強(qiáng),容易導(dǎo)致特征丟失
全連接層:就不多說了,就是普通的mlp
本文完:介紹了普通卷積神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)。在實(shí)際使用上,卷積神經(jīng)網(wǎng)絡(luò)因其不同的結(jié)構(gòu)又細(xì)分成不同網(wǎng)絡(luò)(如AlexNet,VGGNet,ResNet等),它們都是卷積神經(jīng)網(wǎng)絡(luò)的一種,這些以后再深入
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/42305.html
摘要:神經(jīng)網(wǎng)絡(luò)的補(bǔ)充前篇后篇數(shù)據(jù)預(yù)處理權(quán)重初始化經(jīng)典神經(jīng)網(wǎng)絡(luò)搞明白后,我們接下來看看他的變種,也是本系列的主角卷積神經(jīng)網(wǎng)絡(luò)。卷積神經(jīng)網(wǎng)絡(luò)一個(gè)普通的卷積神經(jīng)網(wǎng)絡(luò)由各種層按順序堆疊而成,這些層主要分三類卷積層池化層和全連接層。 【DL-CV】神經(jīng)網(wǎng)絡(luò)的補(bǔ)充【DL-CV】數(shù)據(jù)預(yù)處理&權(quán)重初始化 經(jīng)典神經(jīng)網(wǎng)絡(luò)搞明白后,我們接下來看看他的變種,也是本系列的主角——卷積神經(jīng)網(wǎng)絡(luò)(Convolution...
摘要:靚文推薦以上介紹的就是最原始最開始的,也叫,年提出的。在經(jīng)過多年的改進(jìn)后也有幾個(gè)延伸版本了如使用了的版本,借鑒了的版本,這里也不再細(xì)講,只推薦幾篇我認(rèn)為比較好的靚文各層的詳細(xì)設(shè)定及其延伸版本更多自尋 咕了一個(gè)多月后終于重新變成人,今天我們就來談?wù)? 咕咕net(GoogLeNet) 的結(jié)構(gòu),在下次咕咕(大表哥2)之前掙扎一下。 GoogLeNet初始的想法很簡單,大力出奇跡,即通過增...
摘要:靚文推薦以上介紹的就是最原始最開始的,也叫,年提出的。在經(jīng)過多年的改進(jìn)后也有幾個(gè)延伸版本了如使用了的版本,借鑒了的版本,這里也不再細(xì)講,只推薦幾篇我認(rèn)為比較好的靚文各層的詳細(xì)設(shè)定及其延伸版本更多自尋 咕了一個(gè)多月后終于重新變成人,今天我們就來談?wù)? 咕咕net(GoogLeNet) 的結(jié)構(gòu),在下次咕咕(大表哥2)之前掙扎一下。 GoogLeNet初始的想法很簡單,大力出奇跡,即通過增...
閱讀 2953·2021-09-26 10:18
閱讀 5279·2021-09-22 15:02
閱讀 2796·2019-08-30 15:53
閱讀 1841·2019-08-29 18:41
閱讀 2692·2019-08-27 10:58
閱讀 2623·2019-08-26 13:49
閱讀 2750·2019-08-26 12:17
閱讀 901·2019-08-26 11:49