導航:首頁 > 網路問題 > 卷積神經網路結構包括什麼層

卷積神經網路結構包括什麼層

發布時間:2023-12-16 23:55:36

A. 卷積神經網路(CNN)基礎

在七月初七情人節,牛郎織女相見的一天,我終於學習了CNN(來自CS231n),感覺感觸良多,所以趕快記下來,別忘了,最後祝大家情人節快樂5555555.正題開始!

CNN一共有卷積層(CONV)、ReLU層(ReLU)、池化層(Pooling)、全連接層(FC(Full Connection))下面是各個層的詳細解釋。

卷積,尤其是圖像的卷積,需要一個濾波器,用濾波器對整個圖像進行遍歷,我們假設有一個32*32*3的原始圖像A,濾波器的尺寸為5*5*3,用w表示,濾波器中的數據就是CNN的參數的一部分,那麼在使用濾波器w對A進行濾波的話,可以用下面的式子表示:

其中x為原始圖像的5*5*3的一部分,b是偏置項置為1。在對A進行濾波之後,產生的是一個28*28*1的數據。那麼假設我們存在6個濾波器,這六個濾波器之間彼此是獨立的,也就是他們內部的數據是不同的且沒有相關性的。可以理解為一個濾波器查找整幅圖像的垂直邊緣,一個查找水平邊緣,一個查找紅色,一個查找黑色這樣。那麼我就可以產生6個28*28*1的數據,將它們組合到一起就可以產生28*28*6的數據,這就是卷積層主要做的工作。

CNN可以看作一系列的卷積層和ReLU層對原始數據結構進行處理的神經網路,處理的過程可以用下面這幅圖表示

特別要注意的是濾波器的深度一定要與上一層傳來的數據的深度相同,就像上圖的第二個卷積層在處理傳來的28*28*6的數據時要使用5*5*6的濾波器.

濾波器在圖像上不斷移動對圖像濾波,自然存在步長的問題,在上面我們舉的例子都是步長為1的情況,如果步長為3的話,32*32*3的圖像經過5*5*3的濾波器卷積得到的大小是(32-5)/3+1=10, 註:步長不能為2因為(32-5)/2+1=14.5是小數。

所以當圖像大小是N,濾波器尺寸為F時,步長S,那麼卷積後大小為(N-F)/S+1

我們從上面的圖中可以看到圖像的長和寬在逐漸的減小,在經過超過5層之後極可能只剩下1*1的空間尺度,這樣是十分不好的,而且也不利於我們接下來的計算,所以我們想讓卷積層處理完之後圖像在空間尺度上大小不變,所以我們引入了pad the border的操作。pad其實就是在圖像周圍補0,擴大圖像的尺寸,使得卷積後圖像大小不變。在CNN中,主要存在4個超參數,濾波器個數K,濾波器大小F,pad大小P和步長S,其中P是整數,當P=1時,對原始數據的操作如圖所示:

那麼在pad操作後卷積後的圖像大小為:(N-F+2*P)/S+1
而要想讓卷積層處理後圖像空間尺度不變,P的值可以設為P=(F-1)/2

卷積層輸入W 1 *H 1 *D 1 大小的數據,輸出W 2 *H 2 *D 2 的數據,此時的卷積層共有4個超參數:
K:濾波器個數
P:pad屬性值
S:濾波器每次移動的步長
F:濾波器尺寸
此時輸出的大小可以用輸入和超參計算得到:
W 2 =(W 1 -F+2P)/S+1
H 2 =(H 1 -F+2P)/S+1
D 2 =D 1

1*1的濾波器也是有意義的,它在深度方向做卷積,例如1*1*64的濾波器對56*56*64的數據卷積得到56*56的數據

F通常是奇數,這樣可以綜合考慮上下左右四個方向的數據。

卷積層從神經元的角度看待可以有兩個性質: 參數共享和局域連接 。對待一個濾波器,例如5*5*3的一個濾波器,對32*32*3的數據卷積得到28*28的數據,可以看作存在28*28個神經元,每個對原圖像5*5*3的區域進行計算,這28*28個神經元由於使用同一個濾波器,所以參數相同,我們稱這一特性為 參數共享

針對不同的濾波器,我們可以看到他們會看到同一區域的圖像,相當於在深度方向存在多個神經元,他們看著相同區域叫做 局域連接

參數共享減少了參數的數量,防止了過擬合
局域連接為查找不同特徵更豐富的表現圖像提供了可能。
卷積就像是對原圖像的另一種表達。

激活函數,對於每一個維度經過ReLU函數輸出即可。不改變數據的空間尺度。

通過pad操作,輸出圖像在控制項上並沒有變化,但是深度發生了變化,越來越龐大的數據給計算帶來了困難,也出現了冗餘的特徵,所以需要進行池化操作,池化不改變深度,只改變長寬,主要有最大值和均值兩種方法,一般的池化濾波器大小F為2步長為2,對於最大值池化可以用下面的圖像清晰的表示:

卷積層輸入W 1 *H 1 *D 1 大小的數據,輸出W 2 *H 2 *D 2 的數據,此時的卷積層共有2個超參數:
S:濾波器每次移動的步長
F:濾波器尺寸
此時輸出的大小可以用輸入和超參計算得到:
W 2 =(W 1 -F)/S+1
H 2 =(H 1 -F)/S+1
D 2 =D 1

將最後一層(CONV、ReLU或Pool)處理後的數據輸入全連接層,對於W 2 *H 2 *D 2 數據,我們將其展成1*1*W 2 *H 2 *D 2 大小的數據,輸入層共有W 2 *H 2 *D 2 個神經元,最後根據問題確定輸出層的規模,輸出層可以用softmax表示。也就是說,全連接層就是一個常見的BP神經網路。而這個網路也是參數最多的部分,是接下來想要去掉的部分。完整的神經網路可以用下面的圖表示:

[(CONV-ReLU)*N-POOL?]*M-(FC-RELU)*K,SoftMax

1.更小的濾波器與更深的網路
2.只有CONV層而去掉池化與全鏈接

最早的CNN,用於識別郵編,結構為:
CONV-POOL-CONV-POOL-CONV-FC
濾波器大小5*5,步長為1,池化層2*2,步長為2

2012年由於GPU技術所限,原始AlexNet為兩個GPU分開計算,這里介紹合起來的結構。

輸入圖像為227*227*3

1.首次使用ReLU
2.使用Norm layers,現在已經拋棄,因為效果不大
3.數據經過預處理(例如大小變化,顏色變化等)
4.失活比率0.5
5.batch size 128
6.SGD Momentum 參數0.9(SGD和Momentum見我的其他文章)
7.學習速率 0.01,准確率不在提升時減少10倍,1-2次後達到收斂
8.L2權重減少0.0005
9.錯誤率15.4%

改進自AlexNet,主要改變:
1.CONV1的濾波器從11*11步長S=4改為7*7步長為2.
2.CONV3,4,5濾波器數量有384,384,256改為512,1024,512(濾波器數量為2的n次冪有利於計算機計算可以提高效率)
錯誤率:14.8%後繼續改進至11.2%

當前最好的最易用的CNN網路,所有卷積層濾波器的大小均為3*3,步長為1,pad=1,池化層為2*2的最大值池化,S=2。

主要參數來自全連接層,這也是想要去掉FC的原因。

具有高度的統一性和線性的組合,易於理解,十分方便有VGG-16,VGG-19等多種結構。
錯誤率7.3%

完全移除FC層,參數只有500萬,使用Inception模塊(不太理解,有時間繼續看)
准確率6.67%

准確率3.6%
擁有極深的網路結構,且越深准確率越高。是傳統CNN不具備的特點,傳統CNN並非越深越准確。需要訓練時間較長但是快於VGG

1.每個卷積層使用Batch Normalization
2.Xavier/2初始化
3.SGD+Momentum(0.9)
4.Learning rate:0.1,准確率不變減小10倍(因為Batch Normalization所以比AlexNet大)
5.mini-batch size 256
6.Weight decay of 0.00001
7.不適用失活(因為Batch Normalization)

具體的梯度過程學完ResNet再說吧。

B. 34-卷積神經網路(Conv)

深度學習網路和普通神經網路的區別

全連接神經網路的缺點

卷積神經網路的錯誤率

卷積神經網路的發展歷程

卷積神經網路的結構

結構特點:
神經網路(neural networks)的基本組成包括輸入層、隱藏層、輸出層。而卷積神經網路的特點在於隱藏層分為卷積層和池化層(pooling layer,又叫下采樣層)。

卷積過程

糾正:卷積層的過濾器,就是一個矩陣,裡面的元素是對應掃描時每個像素點的權重

即:每個過濾器會產生一張feature map

0填充的兩種方式
卷積核在提取特徵映射時的動作稱之為padding(零填充),由於移動步長不一定能整出整張圖的像素寬度。其中有兩種方式,SAME和VALID

彩色圖片的卷積過程

由於彩色圖片有3個通道,即3張表,所以filter需要分3次去分別觀察,每次觀察的結果直接相加作為最後的結果

過濾器的個數

有幾個過濾器,就會生成幾張表。eg:
對於[28, 28, 1]的圖片,如果有32個過濾器,就會卷積的結果就為[28, 28, 32],相當於圖片被「拉長」了

觀察結果大小的計算

面試可能考

注意:如果計算結果出現小數,需要結合情況具體考慮,而不是說直接四捨五入

卷積的api

在卷積神經網路中,主要使用Relu函數作為激活函數

即在這里使用relu函數去掉了像素中小於0的值

神經網路中為什麼要使用激活函數

為什麼使用relu而不再使用sigmoid函數?

api

卷積就是進行特徵的提取,觀察更加仔細,然而,觀察仔細就意味著數據多,運算量增加,這就需要使用池化層以減少計算量

Pooling層主要的作用是特徵提取,通過去掉Feature Map中不重要的樣本,進一步減少參數數量。Pooling的方法很鄭扒多,最常用的是Max Pooling。

池化層也有一個窗口大小(過濾器)

即:池化過程遲叢洞讓圖片變得更「窄」

即:卷積層使得圖片變長,池化層使得圖片變窄,所以經過卷積,圖片越來越「細長」

api

池化中SAME的計算方式與卷積過程中SAME的計算方式一樣。eg:
[None, 28, 28, 32]的數據,經過2x2,步長為2,padding為SAME的池化,碼枯變成了[None, 14, 14, 32]

分析:前面的卷積和池化相當於做特徵工程,後面的全連接相當於做特徵加權。最後的全連接層在整個卷積神經網路中起到「分類器」的作用。

所以神經網路也相當於是一個特徵選擇的方式

C. 卷積神經網路的 卷積層、激活層、池化層、全連接層

數據輸入的是一張圖片(輸入層),CONV表示卷積層,RELU表示激勵層,POOL表示池化層,Fc表示全連接層

全連接神經網路需要非常多的計算資源才能支撐它來做反向傳播和前向傳播,所以說全連接神經網路可以存儲非常多的參數,如果你給它的樣本如果沒有達到它的量級的時候,它可以輕輕鬆鬆把你給他的樣本全部都記下來,這會出現過擬合的情況。

所以我們應該把神經元和神經元之間的連接的權重個數降下來,但是降下來我們又不能保證它有較強的學習能力,所以這是一個糾結的地方,所以有一個方法就是 局部連接+權值共享 ,局部連接+權值共享不僅權重參數降下來了,而且學習能力並沒有實質的降低,除此之外還有其它的好處,下來看一下,下面的這幾張圖片:

一個圖像的不同表示方式

這幾張圖片描述的都是一個東西,但是有的大有的小,有的靠左邊,有的靠右邊,有的位置不同,但是我們構建的網路識別這些東西的時候應該是同一結果。為了能夠達到這個目的,我們可以讓圖片的不同位置具有相同的權重(權值共享),也就是上面所有的圖片,我們只需要在訓練集中放一張,我們的神經網路就可以識別出上面所有的,這也是 權值共享 的好處。

而卷積神經網路就是局部連接+權值共享的神經網路。

現在我們對卷積神經網路有一個初步認識了,下面具體來講解一下卷積神經網路,卷積神經網路依舊是層級結構,但層的功能和形式做了改變,卷積神經網路常用來處理圖片數據,比如識別一輛汽車:

在圖片輸出到神經網路之前,常常先進行圖像處理,有 三種 常見的圖像的處理方式:

均值化和歸一化

去相關和白化

圖片有一個性質叫做局部關聯性質,一個圖片的像素點影響最大的是它周邊的像素點,而距離這個像素點比較遠的像素點二者之間關系不大。這個性質意味著每一個神經元我們不用處理全局的圖片了(和上一層全連接),我們的每一個神經元只需要和上一層局部連接,相當於每一個神經元掃描一小區域,然後許多神經元(這些神經元權值共享)合起來就相當於掃描了全局,這樣就構成一個特徵圖,n個特徵圖就提取了這個圖片的n維特徵,每個特徵圖是由很多神經元來完成的。

在卷積神經網路中,我們先選擇一個局部區域(filter),用這個局部區域(filter)去掃描整張圖片。 局部區域所圈起來的所有節點會被連接到下一層的 一個節點上 。我們拿灰度圖(只有一維)來舉例:

局部區域

圖片是矩陣式的,將這些以矩陣排列的節點展成了向量。就能更好的看出來卷積層和輸入層之間的連接,並不是全連接的,我們將上圖中的紅色方框稱為filter,它是2*2的,這是它的尺寸,這不是固定的,我們可以指定它的尺寸。

我們可以看出來當前filter是2*2的小窗口,這個小窗口會將圖片矩陣從左上角滑到右下角,每滑一次就會一下子圈起來四個,連接到下一層的一個神經元,然後產生四個權重,這四個權重(w1、w2、w3、w4)構成的矩陣就叫做卷積核。

卷積核是演算法自己學習得到的,它會和上一層計算,比如,第二層的0節點的數值就是局部區域的線性組合(w1 0+w2 1+w3 4+w4 5),即被圈中節點的數值乘以對應的權重後相加。

卷積核計算

卷積操作

我們前面說過圖片不用向量表示是為了保留圖片平面結構的信息。 同樣的,卷積後的輸出若用上圖的向量排列方式則丟失了平面結構信息。 所以我們依然用矩陣的方式排列它們,就得到了下圖所展示的連接,每一個藍色結點連接四個黃色的結點。

卷積層的連接方式

圖片是一個矩陣然後卷積神經網路的下一層也是一個矩陣,我們用一個卷積核從圖片矩陣左上角到右下角滑動,每滑動一次,當然被圈起來的神經元們就會連接下一層的一個神經元,形成參數矩陣這個就是卷積核,每次滑動雖然圈起來的神經元不同,連接下一層的神經元也不同,但是產生的參數矩陣確是一樣的,這就是 權值共享

卷積核會和掃描的圖片的那個局部矩陣作用產生一個值,比如第一次的時候,(w1 0+w2 1+w3 4+w4 5),所以,filter從左上到右下的這個過程中會得到一個矩陣(這就是下一層也是一個矩陣的原因),具體過程如下所示:

卷積計算過程

上圖中左邊是圖矩陣,我們使用的filter的大小是3 3的,第一次滑動的時候,卷積核和圖片矩陣作用(1 1+1 0+1 1+0 0+1 1+1 0+0 1+0 0+1 1)=4,會產生一個值,這個值就是右邊矩陣的第一個值,filter滑動9次之後,會產生9個值,也就是說下一層有9個神經元,這9個神經元產生的值就構成了一個矩陣,這矩陣叫做特徵圖,表示image的某一維度的特徵,當然具體哪一維度可能並不知道,可能是這個圖像的顏色,也有可能是這個圖像的輪廓等等。

單通道圖片總結 :以上就是單通道的圖片的卷積處理,圖片是一個矩陣,我們用指定大小的卷積核從左上角到右下角來滑動,每次滑動所圈起來的結點會和下一層的一個結點相連,連接之後就會形成局部連接,每一條連接都會產生權重,這些權重就是卷積核,所以每次滑動都會產生一個卷積核,因為權值共享,所以這些卷積核都是一樣的。卷積核會不斷和當時卷積核所圈起來的局部矩陣作用,每次產生的值就是下一層結點的值了,這樣多次產生的值組合起來就是一個特徵圖,表示某一維度的特徵。也就是從左上滑動到右下這一過程中會形成一個特徵圖矩陣(共享一個卷積核),再從左上滑動到右下又會形成另一個特徵圖矩陣(共享另一個卷積核),這些特徵圖都是表示特徵的某一維度。

三個通道的圖片如何進行卷積操作?

至此我們應該已經知道了單通道的灰度圖是如何處理的,實際上我們的圖片都是RGB的圖像,有三個通道,那麼此時圖像是如何卷積的呢?

彩色圖像

filter窗口滑的時候,我們只是從width和height的角度來滑動的,並沒有考慮depth,所以每滑動一次實際上是產生一個卷積核,共享這一個卷積核,而現在depth=3了,所以每滑動一次實際上產生了具有三個通道的卷積核(它們分別作用於輸入圖片的藍色、綠色、紅色通道),卷積核的一個通道核藍色的矩陣作用產生一個值,另一個和綠色的矩陣作用產生一個值,最後一個和紅色的矩陣作用產生一個值,然後這些值加起來就是下一層結點的值,結果也是一個矩陣,也就是一張特徵圖。

三通道的計算過程

要想有多張特徵圖的話,我們可以再用新的卷積核來進行左上到右下的滑動,這樣就會形成 新的特徵圖

三通道圖片的卷積過程

也就是說增加一個卷積核,就會產生一個特徵圖,總的來說就是輸入圖片有多少通道,我們的卷積核就需要對應多少通道,而本層中卷積核有多少個,就會產生多少個特徵圖。這樣卷積後輸出可以作為新的輸入送入另一個卷積層中處理,有幾個特徵圖那麼depth就是幾,那麼下一層的每一個特徵圖就得用相應的通道的卷積核來對應處理,這個邏輯要清楚,我們需要先了解一下 基本的概念:

卷積計算的公式

4x4的圖片在邊緣Zero padding一圈後,再用3x3的filter卷積後,得到的Feature Map尺寸依然是4x4不變。

填充

當然也可以使用5x5的filte和2的zero padding可以保持圖片的原始尺寸,3x3的filter考慮到了像素與其距離為1以內的所有其他像素的關系,而5x5則是考慮像素與其距離為2以內的所有其他像素的關系。

規律: Feature Map的尺寸等於

(input_size + 2 * padding_size − filter_size)/stride+1

我們可以把卷積層的作用 總結一點: 卷積層其實就是在提取特徵,卷積層中最重要的是卷積核(訓練出來的),不同的卷積核可以探測特定的形狀、顏色、對比度等,然後特徵圖保持了抓取後的空間結構,所以不同卷積核對應的特徵圖表示某一維度的特徵,具體什麼特徵可能我們並不知道。特徵圖作為輸入再被卷積的話,可以則可以由此探測到"更大"的形狀概念,也就是說隨著卷積神經網路層數的增加,特徵提取的越來越具體化。

激勵層的作用可以理解為把卷積層的結果做 非線性映射

激勵層

上圖中的f表示激勵函數,常用的激勵函數幾下幾種:

常用的激勵函數

我們先來看一下激勵函數Sigmoid導數最小為0,最大為1/4,

激勵函數Sigmoid

Tanh激活函數:和sigmoid相似,它會關於x軸上下對應,不至於朝某一方面偏向

Tanh激活函數

ReLU激活函數(修正線性單元):收斂快,求梯度快,但較脆弱,左邊的梯度為0

ReLU激活函數

Leaky ReLU激活函數:不會飽和或者掛掉,計算也很快,但是計算量比較大

Leaky ReLU激活函數

一些激勵函數的使用技巧 :一般不要用sigmoid,首先試RELU,因為快,但要小心點,如果RELU失效,請用Leaky ReLU,某些情況下tanh倒是有不錯的結果。

這就是卷積神經網路的激勵層,它就是將卷積層的線性計算的結果進行了非線性映射。可以從下面的圖中理解。它展示的是將非線性操作應用到一個特徵圖中。這里的輸出特徵圖也可以看作是"修正"過的特徵圖。如下所示:

非線性操作

池化層:降低了各個特徵圖的維度,但可以保持大分重要的信息。池化層夾在連續的卷積層中間,壓縮數據和參數的量,減小過擬合,池化層並沒有參數,它只不過是把上層給它的結果做了一個下采樣(數據壓縮)。下采樣有 兩種 常用的方式:

Max pooling :選取最大的,我們定義一個空間鄰域(比如,2x2 的窗口),並從窗口內的修正特徵圖中取出最大的元素,最大池化被證明效果更好一些。

Average pooling :平均的,我們定義一個空間鄰域(比如,2x2 的窗口),並從窗口內的修正特徵圖算出平均值

Max pooling

我們要注意一點的是:pooling在不同的depth上是分開執行的,也就是depth=5的話,pooling進行5次,產生5個池化後的矩陣,池化不需要參數控制。池化操作是分開應用到各個特徵圖的,我們可以從五個輸入圖中得到五個輸出圖。

池化操作

無論是max pool還是average pool都有分信息被舍棄,那麼部分信息被舍棄後會損壞識別結果嗎?

因為卷積後的Feature Map中有對於識別物體不必要的冗餘信息,我們下采樣就是為了去掉這些冗餘信息,所以並不會損壞識別結果。

我們來看一下卷積之後的冗餘信息是怎麼產生的?

我們知道卷積核就是為了找到特定維度的信息,比如說某個形狀,但是圖像中並不會任何地方都出現這個形狀,但卷積核在卷積過程中沒有出現特定形狀的圖片位置卷積也會產生一個值,但是這個值的意義就不是很大了,所以我們使用池化層的作用,將這個值去掉的話,自然也不會損害識別結果了。

比如下圖中,假如卷積核探測"橫折"這個形狀。 卷積後得到3x3的Feature Map中,真正有用的就是數字為3的那個節點,其餘數值對於這個任務而言都是無關的。 所以用3x3的Max pooling後,並沒有對"橫折"的探測產生影響。 試想在這里例子中如果不使用Max pooling,而讓網路自己去學習。 網路也會去學習與Max pooling近似效果的權重。因為是近似效果,增加了更多的參數的代價,卻還不如直接進行最大池化處理。

最大池化處理

在全連接層中所有神經元都有權重連接,通常全連接層在卷積神經網路尾部。當前面卷積層抓取到足以用來識別圖片的特徵後,接下來的就是如何進行分類。 通常卷積網路的最後會將末端得到的長方體平攤成一個長長的向量,並送入全連接層配合輸出層進行分類。比如,在下面圖中我們進行的圖像分類為四分類問題,所以卷積神經網路的輸出層就會有四個神經元。

四分類問題

我們從卷積神經網路的輸入層、卷積層、激活層、池化層以及全連接層來講解卷積神經網路,我們可以認為全連接層之間的在做特徵提取,而全連接層在做分類,這就是卷積神經網路的核心。

D. 卷積神經網路

一般由卷積層,匯聚層,和全連接層交叉堆疊而成,使用反向傳播演算法進行訓練(反向傳播,再重新看一下)
卷積神經網路有三個結構上的特性:局部連接,權重共享以及子采樣

濾波器filter 卷積核convolution kernel
局部連接,其實就是根據時間,權重遞減 最後為0 參數就傳播不到遠處了

局部連接 乘以 濾波器 得特徵映射

互相關,是一個衡量兩個序列相關性的函數,
互相關和卷積的區別在於 卷積核僅僅是否進行翻轉,因此互相關也可以稱為 不翻轉卷積
使用卷積 是為了進行特徵抽取,卷積核 是否進行翻轉和其特徵抽取的能力無關。
當卷積核是可以學習的參數,卷積和互相關是等價的,因此,其實兩者差不多。

Tips:P是代表特徵映射

閱讀全文

與卷積神經網路結構包括什麼層相關的資料

熱點內容
通過網路表達哪些民情民意 瀏覽:977
山上網路聯通和電信哪個好 瀏覽:280
安徽無線網路代碼 瀏覽:919
網路配件哪個平台好 瀏覽:899
哪個網路電視機資源多 瀏覽:860
榮耀8a手機能用電信網路嗎 瀏覽:307
華為手機丟了沒有網路能找回來嗎 瀏覽:374
蘋果8p怎麼黑解網路鎖 瀏覽:237
移動聯通電信網路電視有無線的嗎 瀏覽:516
沈陽理工大學計算機網路原理 瀏覽:43
電腦網路顯示鏈接但無網路 瀏覽:751
海珠網路營銷哪裡靠譜 瀏覽:698
華為電視盒子和網路電視哪個好 瀏覽:278
廣發網路提現密碼 瀏覽:719
縮寫網路語言有哪些 瀏覽:241
聯通手機卡網路連接不可用 瀏覽:748
近段手機網路非常不好是怎麼回事 瀏覽:618
多少網路詐騙 瀏覽:784
網路臨時故障什麼意思 瀏覽:861
虎門服裝網路營銷哪裡有 瀏覽:10

友情鏈接