深度學習 卷積神經網路初識 2

2021-08-14 01:41:26 字數 4503 閱讀 4229

技交部 潘震宇

從之前的了解中,我們初步知道了卷積運算的含義。也知道了濾波器的作用。

在此前,我們在將濾波器蓋在矩陣上,進行邊移動邊計算的時候,移動步長都是預設的一步,那或許有些人就會問了,能不能一次走倆步、三步、甚至更多步呢?答案當然是可以的。

在這個矩陣中,我們可以發現,將步長stride設定為2後,每一次移動都是倆步。不論是左右還是上下。

並且,在移動的過程中我們得注意,當覆蓋區域有一部分在矩陣外時,這個移動就是非法的。我們就應該跳過。

假設矩陣為n * n,濾波器為f * f,padding為p,stride 為s:

則,卷積運算後的維度為floor((n + 2p - f)/s + 1) * floor((n + 2p - f)/ s + 1)

事實上,在機器學習中,卷積運算的說法僅限於上述運算,但是真正在數學領域中,中間還應該有一步與翻轉濾波器相乘。

具體詳細,感興趣的可以自行查詢相關資料,這裡就不加以介紹。

在之前的講解中,咱們都是利用的二維影象的灰度圖矩陣進行舉例。那麼,若為rgb三色圖所對應的三維矩陣呢?它的卷積又與二維卷積運算有哪些區別呢?

上圖所示,假設咱們有一副6*6*3的影象,3代表著rgb三種通道。它對應的過濾器假設為3*3*3,最終卷積後得出乙個二維的4*4矩陣。

過濾器:3 * 3 * 3

這裡的綠色的3,代表著對應影象的三種通道,它的值應該和影象的通道值一致。就好像是三層二維的過濾器,分別對應著每乙個色通道。再把他們壓在一起。因此,黃色的3*3,也就是之前二維的概念。

我們把它用一種更好看的形式來表現。

如上圖所示的運算當中,第一次計算便時將三維濾波器放在rgb影象的外部定點處。並且對應數字相乘,27個乘積再相加,就得到了結果矩陣中的第乙個值,然後類似於二維運算一樣,往右移動一步,計算,再移動,再計算,到達邊緣後,往下走一步,計算……最終得出來的結果就為4*4的矩陣。

這裡計算過程其實並不複雜,僅僅多了一維。對於過濾器來說,我們該怎麼選擇呢?

假如我們想只檢測紅色層的垂直邊緣,那就可以設定為如下:

那假如想三種顏色同時檢測呢,那就可以:

總而言之,咱們可以通過設定不同層的過濾器數值來決定檢測依據。

那,我們能不能與多個過濾器相卷積呢?當然也可以啦:

大家光看圖應該都能理解這個意思啦吧,乙個6*6*3的影象,與倆個3*3*3的過濾器做卷積,得到倆張4*4的矩陣,再加他倆並在一起,就得到了乙個4*4*2的結果矩陣。

這裡的過濾器的個數我們可以自由定義,想同時檢測垂直邊緣和水平邊緣,那就用倆個,想檢測更多的特徵,那就多加。

最後我們可以得出乙個維度計算公式:

假如影象為n * n * nc 濾波器為f * f * nc 那麼結果就為 n – f + 1 * n – f + 1 * nc』

其中nc為通道數,濾波器的通道數必須與影象的相同,而nc』則為濾波器的個數,也就是特徵數。

有了前倆段的理解我們可以開始引入簡單的卷積網路。

首先,拿出卷積總引數:

從此圖中,咱們先看第零層,假設長和寬為39 * 39,通道數為10。假設有10個過濾器,3*3,步長為1,padding為0,神經網路的下一層為37 * 37 * 10, 37 為((n + 2p - f)/s ) + 1的計算結果。

第一層的標記為nh[1] = nw[1] = 37, nc[1] = 10

下一層中濾波器的個數為20,5*5,步長為2,padding為0

得到的新影象為17 * 17 * 20,nh[2] = nw[2] = 17,nc[2] = 20,因為步長為2,所以大小從37減少到了17,縮小了一半還要多。過濾器為20個,所以它的通道數量也為20。

緊接著同樣的操作,得到的7*7*40.最後,將所有的特徵排成一列,為1960*1的列向量,通過logistic/softmax 得到最終輸出的y^值。此時,我們就完成了一次卷積網路的過程。

對於卷積網路來說,一般包含三個

分別為卷積層,池化層,滿連線層。

在剛剛我們在討論的都是卷積層(conv),其實,一般來說也只需要這一層就可以達到效果了,不過對於完善的網路架構來說,還是應該加入另外倆層。

卷積神經網路,固然是由一層層的單元群構成。池化層便為其中之一,那麼,池化層與卷積層有什麼區別呢?

池化層可以分為很多種,比如最大池化層,平均池化層,均方根池化層……等等等等。我們舉幾個例子來解釋池化層的意義。

最大池化層:

由上圖所示,左邊為乙個4*4的矩陣,被四種顏色分為了四塊,而右邊為乙個2*2的矩陣,同樣被分為了四份。

我們可以發現四份的顏色都是一一對應的,那最大這個形容詞體現在哪呢?

先取第乙個灰藍色部分中最大值,放入右邊灰藍色框中,依次下去,將所有的部分裡最大值都找出,都放入右側。這樣就實現了乙個池化的過程。

由上圖所示,假如左側為乙個多維矩陣,那就將每一層進行分別最大池化,再將所有結果層疊在一起,就實現了多維池化。

而這裡可以通過之前的維度公式來計算,此處的f = 3, s = 1,p = 0(大多數)

最終維floor( (n + 2p - f) / s + 1 )。

取最大的含義,通常是:

在乙個範圍內,取出最大的數,能夠將特徵進行保留,防止後面處理中丟失,假如此處本來也沒有特徵,那麼就算取最大,其值也肯定很小,這就是它的作用。

平均池化層:

根據上面最大池化層的含義,或許大家也能夠很快理解什麼是平均池化層了吧。沒錯,就是把乙個框內的平均數計算出來然後放在對應顏色的框裡。

根據這些例子,之後的不管什麼池化層,大概都是這種意思。

在這裡我們用到了這些超參:

過濾器的大小

步長s最大或平均池化

對於最大來說,引數設定為2,2 相當於每次都將矩陣縮小一半

也可以設定為3,2.

而在池化層中,我們不需要學習任何引數,所有的都是預設好了。

弄清楚了卷積層,池化層,我們接下來直接用乙個簡單的識別手寫數字的網路來鞏固一下。

首先一開始,是一副32 * 32 * 3的rbg三色圖,我們在其中通過乙個大小為5*5,步長為1的卷積層進行處理,緊接著跟著乙個f=2,s=2的池化層。

這裡我們需要注意事情,就是在卷積網路中,層的定義,通常在文獻中,有倆種定義方式:

1、 卷積層為一層、池化層也為單獨的一層。

因為每一次處理都應該算做一層。

2、 卷積層+池化層 為一層

這是為什麼呢?因為我們知道,池化層中,沒有需要學習的引數,每乙個都是預設的。當反向傳播時,也不會進行更新。因此大家都不把它看作單獨的一層。

在本介紹中,將卷積+池化看作一層。

緊接著,便來到了第二次卷積層(conv2)f=5,s=1,維度也變成了10 *10*16,隨後便通過乙個最大池化層,維度縮小一半,為5*5*16。

到了最後,我們將著5*5*16個特徵值,扁平化處理為乙個400*1維度的列向量。

然後,類似普通的神經網路,在第三層我們假設有120個單元,那麼對應的通過函式處理,進入到了滿鏈結層3.再進入滿連線層4,最後通過softmax單元輸出對應的十個值(0,1,2,3……9).整體便為乙個卷積神經網路。

conv-pool-conv-pool-fc-fc-fc-sofmax.

從此表中我們可以看出來,總特徵數是在逐漸遞減,一直到輸出softmax。

對於引數個數的計算

conv1:208 = (5 * 5 + 1)* 8

其中5*5為濾波器的size,1為bias,6為6通道濾波器。

餘下的演算法同上,就不寫出來啦~

而引數個數,可以看出來,需要引數最多的就是在全連線層當中,相似與一般神經網路,而在卷積和池化層中,需要的引數個數,與輸入的特徵數,毫無關係,無論你輸入的圖時32*32*3還是1000*1000*3甚至時5000*5000*3,當最後反向傳播更新引數時,也僅僅只需更新這一小堆。

對比來看,以前學的網路結構中,假如為1000*1000*3,我們之前已經計算過,在反向更新時,會涉及到超過30億個引數值的計算,這也就是為什麼我們選擇卷積網路的原因,能夠大大降低記憶體需求與運算速度。

卷積神經網路與單純的滿連線層構成的網路最大的差異就在於引數的數量。

對於乙個32*32*3的來說,通過卷積層,最多也就是(5*5+1)*6 = 156個引數

而假如是通過滿連線來處理,則需要32*32*3*28*28*6=14million個引數。儘管現在的計算機硬體水平也足夠支撐我們對1400萬個引數的處理,但是假如更大呢?為什麼不使用更加方便高效的卷積網路呢。

除此之外,對於卷積的優劣,大致可分為倆個來權衡。

1、 引數共享

2、 稀疏連線

這倆個是什麼意思呢?我們用一張圖來說明

在此圖中,我們先解釋什麼是引數共享,在矩陣中,假如乙個濾波器對於乙個特徵的檢測有效,那麼它也會對影象中其他部分有效。就比如說現在有乙個3*3的垂直邊緣檢測器,能夠檢測出左上角的特徵,那麼同樣的引數,也會對附件的區域產生效果。這也就是引數共享。

並且,它不僅僅適合低階特徵,類似於眼睛、鼻子、貓咪,這種高階     特徵,也會有同樣的效果。

再者,稀疏連線是個什麼概念呢?我們可以這樣來連線:

對於左邊矩陣被綠色框住的部分,與右邊結果矩陣中左上角那乙個值。我們可以知道,0只與綠框中9個數值有關係,而與矩陣中其他值毫無關聯,不受影響,同樣的,紅色框中也是如此。這就是稀疏連線。

更詳細的解釋,以後再發吧

深度學習 卷積神經網路

一 卷積神經網路基礎 二 lenet 三 常見的一些卷積神經網路 卷積層的超引數 填充和步幅。步幅 stride 每次卷積核在輸入陣列上滑動的行數與列數。多輸入與輸出通道 將3維陣列除寬高外的一維稱為通道維。1 1卷積層 包含1 1的卷積核的卷積層。1 1卷積核在不改變輸入高寬的情況下調整通道數。如...

深度學習 卷積神經網路

卷積神經網路 convolutional neural networks,cnn 是一類包含卷積計算且具有深度結構的前饋神經網路 feedforward neural networks 是深度學習 deep learning 的代表演算法之一。卷積神經網路具有表徵學習 representation ...

初識卷積神經網路

lenet網路有五層。兩個卷積層,三個全連線層。這裡說的卷積層包括啟用層和池化層,全連線層包括連線層和啟用層。self.conv torch.nn.sequential torch.nn.conv2d in channels 1,out channels 6,kernel size 5,stride...