導航:首頁 > 網路設置 > 卷積神經網路設置ai

卷積神經網路設置ai

發布時間:2023-05-12 09:36:53

㈠ PART 4 W1 卷積神經網路介紹

一個是圖像分類:如貓臉識別等;一個是目標檢測:如無人駕駛技術中的各種交通信號檢測技術

1. 卷積操作及過濾器/卷積核的概念

如上圖所示:最左側矩陣是一個灰度圖像,中間是一個3*3的小矩陣,稱為「卷積核」或「過濾器」。

卷積:先把卷積核放到灰度圖像左上角(綠色框),蓋住灰度圖像上一個3*3的矩陣區域,然後9對對應的元素相乘,然後求和(得到0),然後把卷積核逐漸移動一行一行的「掃描」,最終得到最右側矩陣。上述操作叫做「卷積」,最右側矩陣是卷積的輸出。

2. 垂直邊緣檢測

仍以上圖為例,可以看到3*3的卷積核具體的數值構成為「左邊一列1,中間一列0,右邊一列-1」,這種卷積核在「掃描」灰度圖像時,可以檢測到灰度圖像的垂直邊緣。分析如下:

1)假設正在掃描的灰度區域沒有垂直邊緣,意味著區域內的值在左右方向上分布差不多,與卷積核做完運算後,左邊的乘1,右邊的乘-1,相加正好有一定的抵消作用,其實計算出來的結果會接近0。即:卷積結果接近0代表沒有邊緣。

2)有垂直邊緣分為兩種情況:目標區域「左邊值較大,右邊值較小」 或「左邊值較小,右邊值較大」。前一種情況在卷積操作後會得到一個較大的正值,後一種情況卷積操作後會得到一個較大的負值。

可以看出,較大的正值代表著目標區域的變化趨勢與卷積核相同,即檢測到的是與卷積核相同的邊緣,而較大的負值代表目標區域的變化趨勢與卷積核相反,即檢測到的是與卷積核相反的邊緣。

3. 卷積應用在卷積神經網路中

卷積操作如何應用於神經網路中?簡言之,卷積核本身就是網路要學習的參數。如上圖所示,我們並不是事先設定好要檢測垂直邊緣或水平邊緣或其它什麼邊緣,而是要網路去學習要檢測什麼東西。

1. padding的原因

在上節展示的卷積操作中,可以看出,假設輸入圖像的大小為n*n,而卷積核的大小為f*f,那麼卷積核從輸入圖像的左上角掃描到右下角,最終得到的結果大小為(n-f+1)*(n-f+1),意味著如果一次次進行卷積,那麼結果的尺寸會越來越小

另外,顯然輸入圖像邊緣的像素被使用的較少(最邊緣的像素僅被使用一次),這顯然會造成信息的丟失。

2. 如何進行padding

非常簡單:把輸入圖像的四周補充p = (f-1)/2 圈的0,這樣輸入的圖像尺寸變成了(n+2p)*(n+2p),因此卷積後的大小變成了(n+2p -f + 1)*(n+2p -f + 1)=n*n,即與原始的圖像有了相同的大小,且原始圖像邊緣的像素也被較多的利用到。

3. 幾點補充

(1)卷積核的尺寸設置為 奇數 :因為① 這樣(f-1)/2就恰好是整數了,方便進行padding,② 有中心像素,便於表徵卷積核的位置,等。

(2)根據是否進行padding,分為 普通卷積(valid) 和 同尺寸卷積(same)

1. 步長概念

在上文中講到卷積,即使用一個卷積核對輸入圖像進行「掃描」並進行相應計算時,提到這個「掃描」是逐個像素逐個像素的邁進的。但是,並不一定非得這樣,也可以每次跨越兩個或更多個像素,這就是「步長」的概念,一般用s表示

2. 卷積結果尺寸與步長的關系

前文提到,若輸入圖像尺寸為n*n,卷積核尺寸為f*f,則卷積結果尺寸為(n+f-1)*(n+f-1),若算上padding操作,則結果為(n+2p -f + 1)*(n+2p -f + 1)。這是在步長s=1的前提下成立。若步長不為1,則結果為floor((n+2p-f)/s+1)**2

3. 其它:數學中的卷積和神經網路中的卷積

需要說明的是,神經網路中所說的卷積和數學中說的卷積不是一回事,但數學中的卷積是啥就不追究了。

神經網路中的卷積操作,在數學的描述上,更像是一種「交叉相關性」的計算,可以看出,若目標區域與卷積核有類似的分布,則會計算出較大的正值(正相關),若有相反的分布,則會計算出較大的負值(負相關),若沒什麼關系,則會計算出接近0的值(不相關)。卷積操作的確很像一種相關性的計算。

1. RGB圖像的數學構成

灰度圖像是一個n*n的二維矩陣,彩色圖像則是n*n*3 的三維矩陣,最外圍的三個維度分別代表了RGB三原色的值,其中數字「3」在卷積神經網路中被稱為通道數或信道數

2. 對RGB圖像進行卷積

在對灰度圖像進行卷積時,使用的是f*f的二維卷積核。在對RGB圖像進行卷積時,則卷積核的維度也+1,變成了f*f*3。一次卷積的結果仍然是把所有的值加起來輸出一個值。即: 一個三維的圖像,和一個三維的卷積核,在進行完卷積操作後,輸出的是一個二維的矩陣(如上圖) 。

3. 當使用多個卷積核時的輸出

如上圖所示,可以使用多個卷積核(一個亮黃色,一個屎黃色)。根據前文描述,一個立體的卷積核在一個立體的矩陣上掃描完,結果是一個二維的。但當使用多個卷積核時,則輸出了多個二維矩陣,這些二維矩陣沿著第三個維度排列到一起,使得結果重新變成了三維。此時,第三個維度的尺寸,反應的是卷積核數,也就是說 卷積核數就是信道數 。直觀理解,每一個卷積核代表著檢測了某一種特徵,多個卷積核就是同時檢測了多種特徵,傳遞了多種信息。

1. 一個卷積層的數據的基本流

如上圖所示,由於卷積核本身就是一堆待學參數w,所以卷積操作本質還是「加權求和」,之後會加入偏置值,然後進行非線性變換,然後輸出(到下一層),可見還是那一套。

需要提一下的是,卷積的輸入不一定是原始圖像構成的矩陣,還有可能是上一個卷積的結果。原始圖像是彩色的,有多個通道。卷積時可以用多個卷積核,最終產生的結果也是立體的。因此原始的輸入與中間卷積層的輸出,在數學形式上是統一的。因此可以「輸入->卷積層->卷積層->...」這樣操作。

2. 卷積層的參數規模

一個卷積層總的參數規模(包括w,不包括b)為: ,即:卷積核的大小的平方*上層輸出的通道數)*本層所用的卷積核數。與上層輸入的大小無關(但與通道數有關)

3. 一個卷積層涉及到的超參

卷積核的大小、是否padding、步長、卷積核數。

1. 一個示例

上圖為一個簡單的卷積神經網路示例: 一層一層的卷積,最後把所有的元素展開成一個一維向量,然後加一個全連接層。

2. 注意以下幾點:

1⃣️ 實際上CNN會有卷積層、池化層、全連接層,而非僅有卷積和全連接;

2⃣️ 從數據的構成形式上看,按照網路從前往後的順序,圖片尺寸不斷減小,信道數量不斷增加。一般遵從這個趨勢。

1. 池化

如上圖所示,假設輸入是一個4*4的矩陣,現在我們把它分割成2*2四個子矩陣(或者說使用一個2*2的核以2為步長掃描矩陣),對四個子區域分別求最大值,最終得到一個值為9、2、6、3的2*2的矩陣輸出。這種操作就叫池化,具體為最大值池化。

2. 池化的作用

1⃣️ 一般來說,較大的值往往代表學到了一個重要或典型的特徵,把原始輸入以某種方式濾除掉一些不重要的值,只保留一些較大的值,相當於 強化了一些重要信息的表達 。2⃣️ 降低圖片的尺寸,可以節省空間、加速運算等。

3. 池化的特點

並沒有需要學習的參數(w、b之類的),也因此「池化層」一般並不被稱為單獨的一層。在卷積神經網路中,通常把一個卷積層+一個池化層的組合叫一層。

4. 池化的超參數及經驗值

池化層沒有要學習的參數,只有核心的兩個超參:池化核的大小、池化步長。此外還有池化所用的rece操作:最大或者平均(沒有其它選項)。

一般把池化核的大小設置為3或2,步長為2。注意:步長為2意味著把圖片減小到原來的一半。

rece操作最常用最大池化,偶爾用平均池化,不會用其它操作。

上圖為一個典型的卷積神經網路示例,描述如下:

輸入層 :彩色的手寫數字圖片,數學構成為32*32*3的矩陣,其中3為通道數。

Layer 1-卷積層 :1)使用6個5*5*3的卷積核,以步長為1對輸入層進行卷積,輸出28*28*6的矩陣,2)然後使用2*2的最大池化,步長為2,最終輸出14*14*6的矩陣。其中14為圖片尺寸,6為信道數。

Layer2-卷積層 :1)使用16個5*5*3的卷積核以步長1對上層輸出進行卷積,輸出10*10*16的矩陣,2)然後使用2*2的最大池化,步長為2,最終輸出5*5*16的矩陣。

Layer3-全連接層: 把上層輸出的5*5*16矩陣展開成1*400的一維向量,以120*400的權重矩陣送入本層120個神經元,激活後輸出。

Layer4-全連接層: 120->84,激活後輸出

輸出層 :84 -> 10,然後softmax後輸出。

1. 參數少

假如原始圖片尺寸為100*100*3,假設使用全連接,即使第二層僅用100個神經元,那也已經產生了100*100*3*100 = 300w個參數,難以想像。

假設使用卷積層,使用10個10*10*3的卷積核,那就是只有3000個參數,而能輸出的矩陣規模是91*91*10=81000

2. 參數少的原因

1)稀疏連接:卷積核掃描矩陣產生輸出,這個過程就從「神經元連接」的角度看,輸入的左上角只連著輸出的左上角,右上角只連右上角,而非「全連接」,參數就會少很多。2)參數共享:這么稀疏的連接,還是使用了同一套參數,進一步減少了參數的量。

3. 參數共享的其它好處

如果圖片上有一隻貓,那麼不管這個貓在圖片的什麼位置,都不改變「這是一張貓的照片」。使用參數共享時,相當於用同樣的特徵提取作用到整個圖片的各個區域,適應平移不變性,增強魯棒性。

㈡ 卷積神經網路

關於花書中卷積網路的筆記記錄於 https://www.jianshu.com/p/5a3c90ea0807 。

卷積神經網路(Convolutional Neural Network,CNN或ConvNet)是一種具有 局部連接、權重共享 等特性的深層前饋神經網路。卷積神經網路是受生物學上感受野的機制而提出。 感受野(Receptive Field) 主要是指聽覺、視覺等神經系統中一些神經元的特性,即 神經元只接受其所支配的刺激區域內的信號

卷積神經網路最早是主要用來處理圖像信息。如果用全連接前饋網路來處理圖像時,會存在以下兩個問題:

目前的卷積神經網路一般是由卷積層、匯聚層和全連接層交叉堆疊而成的前饋神經網路,使用反向傳播演算法進行訓練。 卷積神經網路有三個結構上的特性:局部連接,權重共享以及匯聚 。這些特性使卷積神經網路具有一定程度上的平移、縮放和旋轉不變性。

卷積(Convolution)是分析數學中一種重要的運算。在信號處理或圖像處理中,經常使用一維或二維卷積。

一維卷積經常用在信號處理中,用於計算信號的延遲累積。假設一個信號發生器每個時刻t 產生一個信號 ,其信息的衰減率為 ,即在 個時間步長後,信息為原來的 倍。假設 ,那麼在時刻t收到的信號 為當前時刻產生的信息和以前時刻延遲信息的疊加:

我們把 稱為 濾波器(Filter)或卷積核(Convolution Kernel) 。假設濾波器長度為 ,它和一個信號序列 的卷積為:

信號序列 和濾波器 的卷積定義為:

一般情況下濾波器的長度 遠小於信號序列長度 ,下圖給出一個一維卷積示例,濾波器為 :

二維卷積經常用在圖像處理中。因為圖像為一個兩維結構,所以需要將一維卷積進行擴展。給定一個圖像 和濾波器 ,其卷積為:

下圖給出一個二維卷積示例:

注意這里的卷積運算並不是在圖像中框定卷積核大小的方框並將各像素值與卷積核各個元素相乘並加和,而是先把卷積核旋轉180度,再做上述運算。

在圖像處理中,卷積經常作為特徵提取的有效方法。一幅圖像在經過卷積操作後得到結果稱為 特徵映射(Feature Map)

最上面的濾波器是常用的高斯濾波器,可以用來對圖像進行 平滑去噪 ;中間和最下面的過濾器可以用來 提取邊緣特徵

在機器學習和圖像處理領域,卷積的主要功能是在一個圖像(或某種特徵)上滑動一個卷積核(即濾波器),通過卷積操作得到一組新的特徵。在計算卷積的過程中,需要進行卷積核翻轉(即上文提到的旋轉180度)。 在具體實現上,一般會以互相關操作來代替卷積,從而會減少一些不必要的操作或開銷。

互相關(Cross-Correlation)是一個衡量兩個序列相關性的函數,通常是用滑動窗口的點積計算來實現 。給定一個圖像 和卷積核 ,它們的互相關為:

互相關和卷積的區別僅在於卷積核是否進行翻轉。因此互相關也可以稱為不翻轉卷積 。當卷積核是可學習的參數時,卷積和互相關是等價的。因此,為了實現上(或描述上)的方便起見,我們用互相關來代替卷積。事實上,很多深度學習工具中卷積操作其實都是互相關操作。

在卷積的標準定義基礎上,還可以引入濾波器的 滑動步長 零填充 來增加卷積多樣性,更靈活地進行特徵抽取。

濾波器的步長(Stride)是指濾波器在滑動時的時間間隔。

零填充(Zero Padding)是在輸入向量兩端進行補零。

假設卷積層的輸入神經元個數為 ,卷積大小為 ,步長為 ,神經元兩端各填補 個零,那麼該卷積層的神經元數量為 。

一般常用的卷積有以下三類:

因為卷積網路的訓練也是基於反向傳播演算法,因此我們重點關注卷積的導數性質:

假設 。

, , 。函數 為一個標量函數。

則由 有:

可以看出, 關於 的偏導數為 和 的卷積

同理得到:

當 或 時, ,即相當於對 進行 的零填充。從而 關於 的偏導數為 和 的寬卷積

用互相關的「卷積」表示,即為(注意 寬卷積運算具有交換性性質 ):

在全連接前饋神經網路中,如果第 層有 個神經元,第 層有 個神經元,連接邊有 個,也就是權重矩陣有 個參數。當 和 都很大時,權重矩陣的參數非常多,訓練的效率會非常低。

如果採用卷積來代替全連接,第 層的凈輸入 為第 層活性值 和濾波器 的卷積,即:

根據卷積的定義,卷積層有兩個很重要的性質:

由於局部連接和權重共享,卷積層的參數只有一個m維的權重 和1維的偏置 ,共 個參數。參數個數和神經元的數量無關。此外,第 層的神經元個數不是任意選擇的,而是滿足 。

卷積層的作用是提取一個局部區域的特徵,不同的卷積核相當於不同的特徵提取器。

特徵映射(Feature Map)為一幅圖像(或其它特徵映射)在經過卷積提取到的特徵,每個特徵映射可以作為一類抽取的圖像特徵。 為了提高卷積網路的表示能力,可以在每一層使用多個不同的特徵映射,以更好地表示圖像的特徵。

在輸入層,特徵映射就是圖像本身。如果是灰度圖像,就是有一個特徵映射,深度 ;如果是彩色圖像,分別有RGB三個顏色通道的特徵映射,深度 。

不失一般性,假設一個卷積層的結構如下:

為了計算輸出特徵映射 ,用卷積核 分別對輸入特徵映射 進行卷積,然後將卷積結果相加,並加上一個標量偏置 得到卷積層的凈輸入 再經過非線性激活函數後得到輸出特徵映射 。

在輸入為 ,輸出為 的卷積層中,每個輸出特徵映射都需要 個濾波器以及一個偏置。假設每個濾波器的大小為 ,那麼共需要 個參數。

匯聚層(Pooling Layer)也叫子采樣層(Subsampling Layer),其作用是進行特徵選擇,降低特徵數量,並從而減少參數數量。

常用的匯聚函數有兩種:

其中 為區域 內每個神經元的激活值。

可以看出,匯聚層不但可以有效地減少神經元的數量,還可以使得網路對一些小的局部形態改變保持不變性,並擁有更大的感受野。

典型的匯聚層是將每個特徵映射劃分為 大小的不重疊區域,然後使用最大匯聚的方式進行下采樣。匯聚層也可以看做是一個特殊的卷積層,卷積核大小為 ,步長為 ,卷積核為 函數或 函數。過大的采樣區域會急劇減少神經元的數量,會造成過多的信息損失。

一個典型的卷積網路是由卷積層、匯聚層、全連接層交叉堆疊而成。

目前常用卷積網路結構如圖所示,一個卷積塊為連續 個卷積層和 個匯聚層( 通常設置為 , 為 或 )。一個卷積網路中可以堆疊 個連續的卷積塊,然後在後面接著 個全連接層( 的取值區間比較大,比如 或者更大; 一般為 )。

目前,整個網路結構 趨向於使用更小的卷積核(比如 和 )以及更深的結構(比如層數大於50) 。此外,由於卷積的操作性越來越靈活(比如不同的步長),匯聚層的作用變得也越來越小,因此目前比較流行的卷積網路中, 匯聚層的比例也逐漸降低,趨向於全卷積網路

在全連接前饋神經網路中,梯度主要通過每一層的誤差項 進行反向傳播,並進一步計算每層參數的梯度。在卷積神經網路中,主要有兩種不同功能的神經層:卷積層和匯聚層。而參數為卷積核以及偏置,因此 只需要計算卷積層中參數的梯度。

不失一般性,第 層為卷積層,第 層的輸入特徵映射為 ,通過卷積計算得到第 層的特徵映射凈輸入 ,第 層的第 個特徵映射凈輸入

由 得:

同理可得,損失函數關於第 層的第 個偏置 的偏導數為:

在卷積網路中,每層參數的梯度依賴其所在層的誤差項 。

卷積層和匯聚層中,誤差項的計算有所不同,因此我們分別計算其誤差項。

第 層的第 個特徵映射的誤差項 的具體推導過程如下:

其中 為第 層使用的激活函數導數, 為上采樣函數(upsampling),與匯聚層中使用的下采樣操作剛好相反。如果下采樣是最大匯聚(max pooling),誤差項 中每個值會直接傳遞到上一層對應區域中的最大值所對應的神經元,該區域中其它神經元的誤差項的都設為0。如果下采樣是平均匯聚(meanpooling),誤差項 中每個值會被平均分配到上一層對應區域中的所有神經元上。

第 層的第 個特徵映射的誤差項 的具體推導過程如下:

其中 為寬卷積。

LeNet-5雖然提出的時間比較早,但是是一個非常成功的神經網路模型。基於LeNet-5 的手寫數字識別系統在90年代被美國很多銀行使用,用來識別支票上面的手寫數字。LeNet-5 的網路結構如圖:

不計輸入層,LeNet-5共有7層,每一層的結構為:

AlexNet是第一個現代深度卷積網路模型,其首次使用了很多現代深度卷積網路的一些技術方法,比如採用了ReLU作為非線性激活函數,使用Dropout防止過擬合,使用數據增強來提高模型准確率等。AlexNet 贏得了2012 年ImageNet 圖像分類競賽的冠軍。

AlexNet的結構如圖,包括5個卷積層、3個全連接層和1個softmax層。因為網路規模超出了當時的單個GPU的內存限制,AlexNet 將網路拆為兩半,分別放在兩個GPU上,GPU間只在某些層(比如第3層)進行通訊。

AlexNet的具體結構如下:

在卷積網路中,如何設置卷積層的卷積核大小是一個十分關鍵的問題。 在Inception網路中,一個卷積層包含多個不同大小的卷積操作,稱為Inception模塊。Inception網路是由有多個inception模塊和少量的匯聚層堆疊而成

v1版本的Inception模塊,採用了4組平行的特徵抽取方式,分別為1×1、3× 3、5×5的卷積和3×3的最大匯聚。同時,為了提高計算效率,減少參數數量,Inception模塊在進行3×3、5×5的卷積之前、3×3的最大匯聚之後,進行一次1×1的卷積來減少特徵映射的深度。如果輸入特徵映射之間存在冗餘信息, 1×1的卷積相當於先進行一次特徵抽取

㈢ 卷積神經網路(Convolutional Neural Networks, CNN)——更有效率地提取特徵

卷積神經網路(Convolutional Neural Networks, CNN)——更有效率地提取特徵

圖像識別問題本質上就是分類問題,比如我們要區分貓和狗,那麼我們就需要構建一個模型,將照片丟進去後,模型能輸出貓或者狗的概率有多大。在做圖像識別時首要的就是要提取圖片的特徵,那麼如何提取圖片的特徵呢?前面講到了前向全連接網路,我們可以嘗試用前向全連接網路提取。假設圖片的像素是100*100,如果如片是彩色的,每個像素都有RGB三種顏色的數值。因此,一張圖片是有一個三維向量構成的,一維是長100,一維是寬100,還有一維是R、G、B 3個通道(channels)。把這個三維向量拉直作為一個一維向量,長度就是100*100*3。

我們在區分一張圖片時,我們觀察的往往是圖片的局部的、最重要的特徵。 比如圖片上是一隻鳥,我們可能通過嘴巴、眼睛、爪子等就可以判斷出是一隻鳥了。因此,輸入層的每一個神經元沒有必要看圖片的全局,只需要看一個局部就行了。

在兩張不同的圖片上,同一個特徵區域可能處於不同位置。 比如鳥嘴的局部特徵區域在下面這兩張圖上就處在不同的位置上。那麼如何才能讓兩個不同的神經元在看到這兩個不同的感受野時,能產生一致的特徵值呢?

對上面的內容進行一個總結:
(1)我們設置一個局部感受野,假設感受野的大小為W*H*C,其中W表示感受野的寬度,H表示感受野的高度,C表示感受野的通道數。那麼對應的神經元的參數的個數就為:W*H*C個權值加1個偏置。在卷積神經網路中,我們稱這樣一個神經元為一個 濾波器(filter)
(3)我們通過滑動的方式讓感受野鋪滿整個圖片,假設圖片的尺寸是W1*H1*C,滑動步長為S,零填充的數量為P。假設感受野的個數是W2*H2,其中,
(4)我們讓所有感受野的觀測濾波器參數進行共享,即相當於一個濾波器通過滑動掃描的方式掃描了所有感受野。
(5)我們設置多個濾波器,假設濾波器的個數為K,這K個濾波器都通過滑動掃描的方式掃過整個圖片。此時參數的個數為:(W*H*C+1)*K。
(6)由於每個濾波器每經過一個感受野都會進行一次計算輸出一個值,所以輸出的維度為:W2*H2*K。我們將這個輸出稱為特徵圖,所以特徵圖寬度為W2,高度為H2,通道數C2=K。
舉個例子: 假設某個圖片的大小是100*100*3,設置濾波器的大小為3*3*3,濾波器的個數為64,設置步長S=1,設置零填充的數量為P=0。那麼卷積神經網路的參數為, 相比前向全連接 個參數,參數的個數縮小了幾個數量級。
輸出特徵圖的寬度和高度均為, 輸出特徵圖的通道數為, 所以輸出特徵圖的維度為98*98*64。
如果在上面輸出的基礎上再疊加一層卷積神經網路,濾波器的設置寬和高可以不變,但是通道數不再是3了,而是變成64了,因為輸入特徵圖的通道數已經變64了。假設濾波器的大小為3*3*64,濾波器的個數為32,設置步長S=1,設置零填充的數量為P=0。可以計算出來,新的輸出特徵圖的維度是96*96*32。

以上就是卷積神經網路(CNN)的解析。但是CNN一般不是單獨用的,因為一般提取圖片的特徵是為了分類,還需要進一步處理,常見的形式如下圖所示。

㈣ CNN(卷積神經網路)演算法

基礎知識講解:
卷積:通過兩個函數f 和g 生成第三個函數的一種數學運算元,表徵函數f 與g經過翻轉和平移的重疊部分函數值乘積對重疊長度的積分。
前饋神經網路:各神經元分層排列,每個神經元只與前一層的神經元相連,接收前一層的輸出,並輸出給下一層.各層間沒有反饋。
卷積神經網路:是一類包含卷積計算且具有深度結構的前饋神經網路
卷積核:就是圖像處理時,給定輸入圖像,輸入圖像中一個小區域中像素加權平均後成為輸出圖像中的每個對應像素,其中權值由一個函數定義,這個函數稱為卷積核。
下采樣:對於一個樣值序列間隔幾個樣值取樣一次,這樣得到新序列就是原序列的下采樣。
結構介紹
輸入層:用於數據輸入
卷積層:利用卷積核進行特徵提取和特徵映射
激勵層:非線性映射,卷積是線性映射,彌補不足
池化層:進行下采樣,對特徵圖稀疏處理,減少數據運算量
全連接層:在CNN的尾部進行重新擬合,減少特徵信息的損失

輸入層:
在CNN的輸入層中,(圖片)數據輸入的格式 與 全連接神經網路的輸入格式(一維向量)不太一樣。CNN的輸入層的輸入格式保留了圖片本身的結構。
對於黑白的 28×28 的圖片,CNN的輸入是一個 28×28 的的二維神經元:
而對於RGB格式的28×28圖片,CNN的輸入則是一個 3×28×28 的三維神經元(RGB中的每一個顏色通道都有一個 28×28 的矩陣)

卷積層:

左邊是輸入,中間部分是兩個不同的濾波器Filter w0、Filter w1,最右邊則是兩個不同的輸出。
ai.j=f(∑m=02∑n=02wm,nxi+m,j+n+wb)
wm,n:filter的第m行第n列的值
xi,j: 表示圖像的第i行第j列元素
wb:用表示filter的偏置項
ai,j:表示Feature Map的第i行第j列元素
f:表示Relu激活函數

激勵層:
使用的激勵函數一般為ReLu函數:
f(x)=max(x,0)
卷積層和激勵層通常合並在一起稱為「卷積層」。

池化層:
當輸入經過卷積層時,若感受視野比較小,布長stride比較小,得到的feature map (特徵圖)還是比較大,可以通過池化層來對每一個 feature map 進行降維操作,輸出的深度還是不變的,依然為 feature map 的個數。
池化層也有一個「池化視野(filter)」來對feature map矩陣進行掃描,對「池化視野」中的矩陣值進行計算,一般有兩種計算方式:
Max pooling:取「池化視野」矩陣中的最大值
Average pooling:取「池化視野」矩陣中的平均值

訓練過程:
1.前向計算每個神經元的輸出值aj( 表示網路的第j個神經元,以下同);
2.反向計算每個神經元的誤差項σj,σj在有的文獻中也叫做敏感度(sensitivity)。它實際上是網路的損失函數Ed對神經元加權輸入的偏導數
3.計算每個神經元連接權重wi,j的梯度( wi,j表示從神經元i連接到神經元j的權重)
1.最後,根據梯度下降法則更新每個權重即可。
參考: https://blog.csdn.net/love__live1/article/details/79481052

㈤ 【閱讀筆記】改進卷積神經網路的14個小技巧

原文: https://mp.weixin.qq.com/s/Lh_lJNvV9BGhc6no2ln-_g

原題目誤導性太大

1)架構要遵循應用

你也許會被 Google Brain 或者 DeepMind 這些奇特的實驗室所發明的那些耀眼的新模型所吸引,但是其中許多在你的用例或者業務環境中要麼是不可能實現,要麼是實現起來非常不現實。你應該使用對你的特定應用最有意義的模型,這種模型或許比較簡單,但是仍然很強大,例如 VGG。

2)網路路徑的激增

每年的 ImageNet Challenge 的冠軍都會使用比上一屆冠軍更加深層的網路。從 AlexNet 到 Inception,再到 ResNet,Smith 注意到了「網路中路徑數量倍增」的趨勢,並且「ResNet 可以是不同長度的網路的指數集合」。

3)爭取簡單

然而,更大的並不一定是更好的。在名為「Bigger is not necessarily better」的論文中,Springenberg 等人演示了如何用更少的單元實現最先進的結果。參考:https://arxiv.org/pdf/1412.6806.pdf

4)增加對稱性

無論是在建築上,還是在生物上,對稱性被認為是質量和工藝的標志。Smith 將 FractalNet 的優雅歸功於網路的對稱性。

5)金字塔式的形狀

你也許經常在表徵能力和減少冗餘或者無用信息之間權衡。卷積神經網路通常會降低激活函數的采樣,並會增加從輸入層到最終層之間的連接通道。

6)過度訓練

另一個權衡是訓練准確度和泛化能力。用類似 drop-out 或者 drop-path 的方法進行正則化可以提高泛化能力,這是神經網路的重要優勢。請在比你的實際用例更加苛刻的問題下訓練你的網路,以提高泛化性能。

7)全面覆蓋問題空間

為了擴展你的訓練數據和提升泛化能力,請使用雜訊和數據增強,例如隨機旋轉、裁剪和一些圖像操作。

8)遞增的特徵構造

隨著網路結構越來越成功,它們進一部簡化了每一層的「工作」。在非常深層的神經網路中,每一層僅僅會遞增的修改輸入。在 ResNets 中,每一層的輸出和它的輸入時很相似的,這意味著將兩層加起來就是遞增。實踐中,請在 ResNet 中使用較短的跳變長度。

9)標准化層的輸入

標准化是另一個可以使計算層的工作變得更加容易的方法,在實踐中被證明可以提升訓練和准確率。批量標准化(batch normalization)的發明者認為原因在於處理內部的協變數,但是 Smith 認為,「標准化把所有層的輸入樣本放在了一個平等的基礎上(類似於一種單位轉換),這允許反向傳播可以更有效地訓練」。

10)輸入變換

研究表明,在 Wide ResNets 中,性能會隨著連接通道的增加而增強,但是你需要權衡訓練代價與准確度。AlexNet、VGG、Inception 和 ResNets 都在第一層使用了輸入變換以讓輸入數據能夠以多種方式被檢查。

11)可用的資源決指引著層的寬度

然而,可供選擇的輸出數量並不是顯而易見的,這依賴於你的硬體能力以及期望的准確度。

12)Summation Joining

Summation 是一種常用的合並分支的方式。在 ResNets 中,使用總和作為連接的機制可以讓每一個分支都能計算殘差和整體近似。如果輸入跳躍連接一直存在,那麼 summation 會讓每一層學到正確地東西(例如與輸入的差別)。在任何分支都可以被丟棄的網路(例如 FractalNet)中,你應該使用這種方式類保持輸出的平滑。

13)下采樣變換

在池化的時候,利用級聯連接(concatenation joining)來增加輸出的數量。當使用大於 1 的步長時,這會同時處理連接並增加連接通道的數量。

14)用於競爭的 Maxout

Maxout 被用在你只需要選擇一個激活函數的局部競爭網路中。使用求和以及平均值會包含所有的激活函數,所以不同之處在於 maxout 只選擇一個「勝出者」。Maxout 的一個明顯的用例是每個分支具有不同大小的內核,而 Maxout 可以包含尺度不變性。

1)使用調優過的預訓練網路

「如果你的視覺數據和 ImageNet 相似,那麼使用預訓練網路會幫助你學習得更快」,機器學習公司 Diffbot 的 CEO Mike Tung 解釋說。低水平的卷積神經網路通常可以被重復使用,因為它們大多能夠檢測到像線條以及邊緣這些模式。將分類層用你自己的層替換,並且用你特定的數據去訓練最後的幾個層。

2)使用 freeze-drop-path

Drop-path 會在訓練的迭代過程中隨機地刪除一些分支。Smith 測試了一種相反的方法,它被稱為 freeze-path,就是一些路徑的權重是固定的、不可訓練的,而不是整體刪除。因為下一個分支比以前的分支包含更多的層,並且正確的內容更加容易近似得到,所以網路應該會得到更好的准確度。

3)使用循環的學習率

關於學習率的實驗會消耗大量的時間,並且會讓你遇到錯誤。自適應學習率在計算上可能是非常昂貴的,但是循環學習率不會這樣。使用循環學習率(CLR)時,你可以設置一組最大最小邊界,在邊界范圍內改變學習率。Smith 甚至還在論文《Cyclical Learning Rates for Training Neural Networks》中提供了計算學習率的最大值和最小值的方法。參考:https://arxiv.org/pdf/1506.01186.pdf

4)在有雜訊的標簽中使用 bootstrapping 

在現實中,很多數據都是混亂的,標簽都是主觀性的或者是缺失的,而且預測的對象可能是訓練的時候未曾遇到過的。Reed 等人在文章《TRAINING DEEP NEURAL NETWORKS ON NOISY LABELS WITH BOOTSTRAPPING》中描述了一種給網路預測目標注入一致性的方法。直觀地講,這可以奏效,通過使網路利用對環境的已知表示(隱含在參數中)來過濾可能具有不一致的訓練標簽的輸入數據,並在訓練時清理該數據。參考:https://arxiv.org/pdf/1412.6596

5)採用有 Maxout 的 ELU,而不是 ReLU

ELU 是 ReLU 的一個相對平滑的版本,它能加速收斂並提高准確度。與 ReLU 不同,ELU 擁有負值,允許它們以更低的計算復雜度將平均單位激活推向更加接近 0 的值,就像批量標准化一樣參考論文《FAST AND ACCURATE DEEP NETWORK LEARNING BY EXPONENTIAL LINEAR UNITS (ELUS)》,https://arxiv.org/pdf/1511.07289.pdf。如果您使用具有全連接層的 Maxout,它們是特別有效的。

㈥ 卷積神經網路

1、二維互相關運算

二維互相關(cross-correlation)運算的輸入是一個二維輸入數組和一個二維核(kernel)數組,輸出也是一個二維數組,其中核數組通常稱為卷積核或過濾器(filter)。卷積核的尺寸通常小於輸入數組,卷積核在輸入數組上滑動,在每個位置上,卷積核與該位置處的輸入子數組按元素相乘並求和,得到輸出數組中相應位置的元素。圖1展示了一個互相關運算的例子,陰影部分分別是輸入的第一個計算區域、核數組以及對應的輸出。

2、二維卷積層

卷積層得名於卷積運算,但卷積層中用到的並非卷積運算而是互相關運算。我們將核數組上下翻轉、左右翻轉,再與輸入數組做互相關運算,這一過程就是卷積運算。由於卷積層的核數組是可學習的,所以使用互相關運算與使用卷積運算並無本質區別。

二維卷積層將輸入和卷積核做互相關運算,並加上一個標量偏置來得到輸出。卷積層的模型參數包括卷積核和標量偏置。

3、特徵圖與感受野

二維卷積層輸出的二維數組可以看作是輸入在空間維度(寬和高)上某一級的表徵,也叫特徵圖(feature map)。影響元素x的前向計算的所有可能輸入區域(可能大於輸入的實際尺寸)叫做x的感受野(receptive field)。

以圖1為例,輸入中陰影部分的四個元素是輸出中陰影部分元素的感受野。我們將圖中形狀為2×2的輸出記為Y,將Y與另一個形狀為2×2的核數組做互相關運算,輸出單個元素z。那麼,z在Y上的感受野包括Y的全部四個元素,在輸入上的感受野包括其中全部9個元素。可見,我們可以通過更深的卷積神經網路使特徵圖中單個元素的感受野變得更加廣闊,從而捕捉輸入上更大尺寸的特徵。

4、填充和步幅

我們介紹卷積層的兩個超參數,即填充和步幅,它們可以對給定形狀的輸入和卷積核改變輸出形狀。

4.1 填充(padding)

是指在輸入高和寬的兩側填充元素(通常是0元素),圖2里我們在原輸入高和寬的兩側分別添加了值為0的元素。

如果原輸入的高和寬是 和 ,卷積核的高和寬是 和 ,在高的兩側一共填充 行,在寬的兩側一共填充 列,則輸出形狀為:

                                                               )

我們在卷積神經網路中使用奇數高寬的核,比如3×3,5×5的卷積核,對於高度(或寬度)為大小為2k+1的核,令步幅為1,在高(或寬)兩側選擇大小為k的填充,便可保持輸入與輸出尺寸相同。

4.2 步幅(stride)

在互相關運算中,卷積核在輸入數組上滑動,每次滑動的行數與列數即是步幅(stride)。此前我們使用的步幅都是1,圖3展示了在高上步幅為3、在寬上步幅為2的二維互相關運算。

一般來說,當高上步幅為 ,寬上步幅為 時,輸出形狀為:

                                         

如果  ,那麼輸出形狀將簡化為:

                                                          

更進一步,如果輸入的高和寬能分別被高和寬上的步幅整除,那麼輸出形狀將是:(nh/sh)×(nw/sw)

                                                                              

當 時,我們稱填充為p;當 時,我們稱步幅為s。

5、多輸入通道和多輸出通道

之前的輸入和輸出都是二維數組,但真實數據的維度經常更高。例如,彩色圖像在高和寬2個維度外還有RGB(紅、綠、藍)3個顏色通道。假設彩色圖像的高和寬分別是h和w(像素),那麼它可以表示為一個3×h×w的多維數組,我們將大小為3的這一維稱為通道(channel)維。

5.1 多輸入通道

卷積層的輸入可以包含多個通道,圖4展示了一個含2個輸入通道的二維互相關計算的例子。

5.2 多輸出通道

卷積層的輸出也可以包含多個通道,設卷積核輸入通道數和輸出通道數分別為ci和co,高和寬分別為kh和kw。如果希望得到含多個通道的輸出,我們可以為每個輸出通道分別創建形狀為ci×kh×kw的核數組,將它們在輸出通道維上連結,卷積核的形狀即co×ci×kh×kw。

對於輸出通道的卷積核,我們提供這樣一種理解,一個ci×kh×kw的核數組可以提取某種局部特徵,但是輸入可能具有相當豐富的特徵,我們需要有多個這樣的ci×kh×kw的核數組,不同的核數組提取的是不同的特徵。

5.3 1x1卷積層

最後討論形狀為1×1的卷積核,我們通常稱這樣的卷積運算為1×1卷積,稱包含這種卷積核的卷積層為1×1卷積層。圖5展示了使用輸入通道數為3、輸出通道數為2的1×1卷積核的互相關計算。

1×1卷積核可在不改變高寬的情況下,調整通道數。1×1卷積核不識別高和寬維度上相鄰元素構成的模式,其主要計算發生在通道維上。假設我們將通道維當作特徵維,將高和寬維度上的元素當成數據樣本,那麼1×1卷積層的作用與全連接層等價。

6、卷積層與全連接層的對比

二維卷積層經常用於處理圖像,與此前的全連接層相比,它主要有兩個優勢:

一是全連接層把圖像展平成一個向量,在輸入圖像上相鄰的元素可能因為展平操作不再相鄰,網路難以捕捉局部信息。而卷積層的設計,天然地具有提取局部信息的能力。

二是卷積層的參數量更少。不考慮偏置的情況下,一個形狀為(ci,co,h,w)的卷積核的參數量是ci×co×h×w,與輸入圖像的寬高無關。假如一個卷積層的輸入和輸出形狀分別是(c1,h1,w1)和(c2,h2,w2),如果要用全連接層進行連接,參數數量就是c1×c2×h1×w1×h2×w2。使用卷積層可以以較少的參數數量來處理更大的圖像。

X=torch.rand(4,2,3,5)

print(X.shape)

conv2d=nn.Conv2d(in_channels=2,out_channels=3,kernel_size=(3,5),stride=1,padding=(1,2))

Y=conv2d(X)

print('Y.shape: ',Y.shape)

print('weight.shape: ',conv2d.weight.shape)

print('bias.shape: ',conv2d.bias.shape)

輸出:

torch.Size([4, 2, 3, 5])

Y.shape:  torch.Size([4, 3, 3, 5])

weight.shape:  torch.Size([3, 2, 3, 5])

bias.shape:  torch.Size([3])

7、池化

7.1 二維池化層

池化層主要用於緩解卷積層對位置的過度敏感性。同卷積層一樣,池化層每次對輸入數據的一個固定形狀窗口(又稱池化窗口)中的元素計算輸出,池化層直接計算池化窗口內元素的最大值或者平均值,該運算也分別叫做最大池化或平均池化。圖6展示了池化窗口形狀為2×2的最大池化。

二維平均池化的工作原理與二維最大池化類似,但將最大運算符替換成平均運算符。池化窗口形狀為p×q的池化層稱為p×q池化層,其中的池化運算叫作p×q池化。

池化層也可以在輸入的高和寬兩側填充並調整窗口的移動步幅來改變輸出形狀。池化層填充和步幅與卷積層填充和步幅的工作機制一樣。

在處理多通道輸入數據時,池化層對每個輸入通道分別池化,但不會像卷積層那樣將各通道的結果按通道相加。這意味著池化層的輸出通道數與輸入通道數相等。

CNN網路中另外一個不可導的環節就是Pooling池化操作,因為Pooling操作使得feature map的尺寸變化,假如做2×2的池化,假設那麼第l+1層的feature map有16個梯度,那麼第l層就會有64個梯度,這使得梯度無法對位的進行傳播下去。其實解決這個問題的思想也很簡單,就是把1個像素的梯度傳遞給4個像素,但是需要保證傳遞的loss(或者梯度)總和不變。根據這條原則,mean pooling和max pooling的反向傳播也是不同的。

7.2 mean pooling

mean pooling的前向傳播就是把一個patch中的值求取平均來做pooling,那麼反向傳播的過程也就是把某個元素的梯度等分為n份分配給前一層,這樣就保證池化前後的梯度(殘差)之和保持不變,還是比較理解的,圖示如下:

mean pooling比較容易讓人理解錯的地方就是會簡單的認為直接把梯度復制N遍之後直接反向傳播回去,但是這樣會造成loss之和變為原來的N倍,網路是會產生梯度爆炸的。

7.3 max pooling

max pooling也要滿足梯度之和不變的原則,max pooling的前向傳播是把patch中最大的值傳遞給後一層,而其他像素的值直接被舍棄掉。那麼反向傳播也就是把梯度直接傳給前一層某一個像素,而其他像素不接受梯度,也就是為0。所以max pooling操作和mean pooling操作不同點在於需要記錄下池化操作時到底哪個像素的值是最大,也就是max id。

源碼中有一個max_idx_的變數,這個變數就是記錄最大值所在位置的,因為在反向傳播中要用到,那麼假設前向傳播和反向傳播的過程就如下圖所示。

7.4 Pytorch 實現池化層

我們使用Pytorch中的nn.MaxPool2d實現最大池化層,關注以下構造函數參數:

kernel_size – the size of the window to take a max over

stride – the stride of the window. Default value is kernel_size

padding – implicit zero padding to be added on both sides

forward函數的參數為一個四維張量,形狀為 ,返回值也是一個四維張量,形狀為 ,其中N是批量大小,C,H,W分別表示通道數、高度、寬度。

X=torch.arange(32,dtype=torch.float32).view(1,2,4,4)

pool2d=nn.MaxPool2d(kernel_size=3,padding=1,stride=(2,1))

Y=pool2d(X)

print(X)

print(Y)

練習

1、假如你用全連接層處理一張256 \times 256256×256的彩色(RGB)圖像,輸出包含1000個神經元,在使用偏置的情況下,參數數量是:

     答:圖像展平後長度為3×256×256,權重參數和偏置參數的數量是3× 256× 256 × 1000 + 1000 =196609000。

2、假如你用全連接層處理一張256×256的彩色(RGB)圖像,卷積核的高寬是3×3,輸出包含10個通道,在使用偏置的情況下,這個卷積層共有多少個參數:

    答:輸入通道數是3,輸出通道數是10,所以參數數量是10×3×3×3+10=280。

3、conv2d = nn.Conv2d(in_channels=3, out_channels=4, kernel_size=3, padding=2),輸入一張形狀為3×100×100的圖像,輸出的形狀為:

    答:輸出通道數是4,上下兩側總共填充4行,卷積核高度是3,所以輸出的高度是104 - 3 + 1=102104−3+1=102,寬度同理可得。

4、關於卷積層,以下哪種說法是錯誤的:

A.1×1卷積可以看作是通道維上的全連接

B.某個二維卷積層用於處理形狀為3×100×100的輸入,則該卷積層無法處理形狀為3×256×256的輸入

C.卷積層通過填充、步幅、輸入通道數、輸出通道數等調節輸出的形狀

D .兩個連續的3×3卷積核的感受野與一個5×5卷積核的感受野相同

答:選B,對於高寬維度,只要輸入的高寬(填充後的)大於或等於卷積核的高寬即可進行計算。

the first layer is a 3 × 3 convolution, the second is a fully connected layer on top of the 3 × 3 output grid of the first layer (see Figure 1). Sliding this small network over the input activation grid boils down to replacing the 5 × 5 convolution with two layers of 3 × 3 convolution.

我們假設圖片是5*5的

我們使用5*5的卷積核對其卷積,步長為1,得到的結果是:(5-5)/1+1=1

然後我們使用2個卷積核為3*3的,這里的兩個是指2層:

第一層3*3:

得到的結果是(5-3)/1+1=3

第二層3*3:

得到的結果是(3-3)/1+1=1

所以我們的最終得到結果感受野大小和用5*5的卷積核得到的結果大小是一樣的!!!

5、關於池化層,以下哪種說法是錯誤的:

A.池化層不參與反向傳播

B.池化層沒有模型參數

C.池化層通常會減小特徵圖的高和寬

D.池化層的輸入和輸出具有相同的通道數

答:A

選項1:錯誤,池化層有參與模型的正向計算,同樣也會參與反向傳播

選項2:正確,池化層直接對窗口內的元素求最大值或平均值,並沒有模型參數參與計算

選項3:正確

選項4:正確

參考文獻:

https://www.boyuai.com/

https://blog.csdn.net/qq_21578849/article/details/94667699

https://www.hu.com/question/265791259/answer/298610437

https://blog.csdn.net/zouxiaolv/article/details/97366681

㈦ Lecture 9 卷積神經網路架構

首先回顧一下在數字識別領域有巨大成功的LeNet-5,該網路結構為 [CONV-POOL-CONV-POOL-FC-FC]。卷積層使用5x5的卷積核,步長為1;池化層使用2x2的區域,步長為2;後面是全連接層。如下圖所示:

而2012年的 AlexNet 是第一個在ImageNet大賽上奪冠的大型CNN網路,它的結構和LeNet-5很相似,只是層數變多了——[CONV1-MAX POOL1-NORM1-CONV2-MAX POOL2-NORM2-CONV3-CONV4-CONV5-Max POOL3-FC6-FC7-FC8],共有5個卷積層、3個池化層、2個歸一化層和三個全連接層。如下圖所示:

之所以分成上下兩個部分,是因為當時的GPU容量太小,只能用兩個來完成。還有一些細節是:

AlexNet奪得ImageNet大賽2012的冠軍時,將正確率幾乎提高了10%,2013年的冠軍是ZFNet,和AlexNet使用相同的網路架構,只是對超參數進一步調優:

這樣將錯誤率從16.4%降低到11.7%

14年的冠亞軍GoogLeNet和VGG分別有22層和19層,下面來分別介紹。

VGG 相對於AlexNet使用更小的卷積核,層數也更深。VGG有16層和19層兩種。卷積核只使用3x3,步長為1,pad為1;池化區域2x2,步長為2。

那麼為什麼使用3x3的小卷積核呢?

下面看一下VGG-16的參數和內存使用情況:

VGG網路的一些細節是:

下面來看一下分類的第一名,GoogLeNet。

先說明 GoogLeNet 的一些細節:

「Inception」模塊 是一種設計的比較好的區域網拓撲結構,然後將這些模塊堆疊在一起。

這種拓撲結構對來自前一層的輸入,並行應用多種不同的濾波操作,比如1x1卷積、3x3卷積、5x5卷積和3x3池化。然後將所有濾波器的輸出在深度上串聯在一起。如下圖所示:

但是這種結構的一個問題是計算復雜度大大增加。比如考慮下面的網路設置

輸入為28x28x256,而串聯後的輸出為28x28x672。(假設每個濾波操作都通過零填充保持輸入尺寸)並且運算花費也非常高:

由於池化操作會保持原輸入的深度,所以網路的輸出一定會增加深度。解決辦法是在進行卷積操作前添加一個「瓶頸層」,該層使用1x1卷積,目的是保留原輸入空間尺寸的同時,減小深度,只要卷積核的數量小於原輸入的深度即可。

使用這種結構,同樣的網路參數設置下,的確會減少計算量:

最終得到的輸出為28x28x480。此時總運算量為:

Inception mole堆疊成垂直結構,這里方便描述,將模型水平放置:

所以含參數的層總計3+18+1 = 22層。此外,橙色部分的層不計入總層數,這兩塊的結構都是:AveragePool 5x5+3(V) - Conv 1x1+1(S) - FC - FC - SoftmaxActivation - Output。「該相對較淺的網路在此分類任務上的強大表現表明,網路中間層產生的特徵應該是非常有區別性的。 通過添加連接到這些中間層的輔助分類器,我們期望在分類器的較低階段中鼓勵區分,增加回傳的梯度信號,並提供額外的正則化。 這些輔助分類器採用較小的卷積核,置於第三和第六個Inception mole的輸出之上。 在訓練期間,它們的損失會加到折扣權重的網路總損失中(輔助分類的損失加權為0.3)。 在預測時,這些輔助網路被丟棄。」——引自原論文

從2015年開始,網路的層數爆發式的增長,15-17年的冠軍都是有152層,開始了「深度革命」!

ResNet 是一種非常深的網路,使用了殘差連接。細節是:

表現這么好的ResNet僅僅是因為深嗎?答案是否定的,研究表明一個56層的卷積層堆疊網路訓練誤差和測試誤差都比一個20層的網路要大,並且不是過擬合的原因,而是更深的網路優化更難。但是一個更深的模型至少能和一個較淺的模型表現一樣好,如果想把一個較淺的層變成較深的層,可以用下面的方式來構建:將原來比較淺的層拷貝到較深的層中,然後添加一些等於本身的映射層。現在較深的模型可以更好的學習。

ResNet通過使用多個有參層來學習輸入與輸入輸出之間的 殘差映射( resial mapping ) ,而非像一般CNN網路(如AlexNet/VGG等)那樣使用有參層來直接學習輸入輸出之間的 底層映射( underlying mapping)

若將輸入設為X,將某一有參網路層映射設為H,那麼以X為輸入的該層的輸出將為H(X)。通常的CNN網路會直接通過訓練學習出參數函數H的表達式,從而直接得到 X 到 H(X) 的映射。而 殘差學習 則是致力於使用多個有參網路層來學習輸入到輸入、輸出間的殘差(H(X) - X)的映射,即學習 X -> (H(X) - X) ,然後加上X的 自身映射(identity mapping) 。也就是說網路的輸出仍然是 H(X) - X + X = H(X),只是學習的只是 (H(X) - X),X部分直接是本身映射。

殘差學習單元通過本身映射的引入在輸入、輸出之間建立了一條直接的關聯通道,從而使得強大的有參層集中精力學習輸入、輸出之間的殘差。一般我們用 來表示殘差映射,那麼殘差學習單元的輸出即為: 。當輸入、輸出通道數相同時,自然可以直接使用 X 進行相加。而當它們之間的通道數目不同時,我們就需要考慮建立一種有效的自身映射函數從而可以使得處理後的輸入 X 與輸出 Y 的通道數目相同即 。

當X與Y通道數目不同時,有兩種自身映射方式。一種是簡單地將X相對Y缺失的通道直接補零從而使其能夠相對齊,另一種則是通過使用1x1的卷積來表示 Ws 映射從而使得最終輸入與輸出的通道一致。

實驗表明使用一般意義上的有參層來直接學習殘差比直接學習輸入、輸出間映射要容易得多(收斂速度更快),也有效得多(可通過使用更多的層來達到更高的分類精度)。比如在極端情況下,如果自身映射是最優的,那麼將殘差設為零比通過使用一堆非線性層進行自身映射更容易。

完整的網路結構如下:

對於ResNet-50+的網路,為提高計算效率,使用類似GoogLeNet的「瓶頸層」。像Inception模塊那樣通過使用1x1卷積來巧妙地縮減或擴張特徵圖維度從而使得3x3 卷積的卷積核數目不受上一層輸入的影響,它的輸出也不會影響到下一層。不過它純是為了節省計算時間進而縮小整個模型訓練所需的時間而設計的,對最終的模型精度並無影響。

ResNet的實際訓練如下:

實際的訓練效果為可以堆疊很多的層而不使准確率下降:152在ImageNet上, 1202層在CIFAR上。現在和預想中的一致,網路越深,訓練准確率越高。橫掃了2015年所有的獎項,第一次超過人類的識別率。

下面左圖通過Top1准確率來比較各種網路的准確性;右圖是不同網路的運算復雜度,橫軸為計算量,圓圈大小表示內存佔用。其中 Inception-v4是 Resnet + Inception。

圖中可以看出:

還可以比較前向傳播時間和功率消耗:

㈧ 卷積神經網路CNN(Convolutional Neural Network)

上圖計算過程為,首先我們可以將右邊進行卷積的可以稱為過濾器也可以叫做核,覆蓋到左邊第一個區域,然後分別按照對應位置相乘再相加,3*1+1*1+2*1+0*0+0*0+0*0+1*(-1)+8*(-1)+2*(-1)=-5;
按照上述的計算方法逐步按右移一個步長(步長可以設定為1,2,...等),然後按往下移,逐漸計算相應的值,得出最終的值。

如上圖顯示,對於第一個圖像矩陣對應的圖,一邊是白色,一邊是黑色,那麼中間就會存在一個垂直的邊緣,我們可以選擇一個垂直邊緣檢測過濾器,如乘法右邊的矩陣,那麼兩者做卷積後得出的圖會顯示如等號右邊的結果矩陣對應的灰度圖中間會有一個白色的中間帶,也就是檢測出來的邊緣,那為什麼感覺中間邊緣帶會比較寬呢?而不是很細的一個局域呢?原因是我們輸入的圖像只有6*6,過於小了,如果我們選擇輸出更大的尺寸的圖,那麼結果來說就是相對的一個細的邊緣檢測帶,也就將我們的垂直邊緣特徵提取出來了。
上述都是人工選擇過濾器的參數,隨著神經網路的發展我們可以利用反向傳播演算法來學習過濾器的參數

我們可以將卷積的顧慮器的數值變成一個參數,通過反向傳播演算法去學習,這樣學到的過濾器或者說卷積核就能夠識別到很多的特徵,而不是依靠手工選擇過濾器。

- padding 操作,卷積經常會出現兩個問題:
1.每經過一次卷積圖像都會縮小,如果卷積層很多的話,後面的圖像就縮的很小了;
2.邊緣像素利用次數只有一次,很明顯少於位於中間的像素,因此會損失邊緣圖像信息。
為了解決上述的問題,我們可以在圖像邊緣填充像素,也就是 padding 操作了。

如果我們設置在圖像邊緣填充的像素數為p,那麼經過卷積後的圖像是:(n+2p-f+1)x(n+2p-f+1).
如何去選擇p呢
通常有兩種選擇:
-Valid:也就是說不填充操作(no padding),因此如果我們有nxn的圖像,fxf的過濾器,那麼我們進行卷積nxn fxf=(n-f+1)x(n-f+1)的輸出圖像;
-Same:也就是填充後是輸出圖像的大小的與輸入相同,同樣就有(n+2p)x(n+2p)
fxf=nxn,那麼可以算,n+2p-f+1=n,得到p=(f-1)/2。
通常對於過濾器的選擇有一個默認的准則就是選擇過濾器的尺寸是奇數的過濾器。
- 卷積步長設置(Strided COnvolution)
卷積步長也就是我們進行卷積操作時,過濾器每次移動的步長,上面我們介紹的卷積操作步長默認都是1,也就是說每次移動過濾器時我們是向右移動一格,或者向下移動一格。
但是我們可以對卷積進行步長的設置,也就是我們能夠對卷積移動的格數進行設置。同樣假如我們的圖像是nxn,過濾器是fxf,padding設置是p,步長strided設置為s,那麼我們進行卷積操作後輸出的圖像為((n+2p-f)/s+1)x((n+2p-f)/s+1),那麼這樣就會出現一個問題,如果計算結果不是整數怎麼辦?

一般是選擇向下取整,也就是說明,只有當我們的過濾器完全在圖像上能夠覆蓋時才對它進行計算,這是一個慣例。
實際上上述所述的操作在嚴格數學角度來說不是卷積的定義,卷積的定義上我們計算的時候在移動步長之前也就是對應元素相乘之前是需要對卷積核或者說我們的過濾器進行鏡像操作的,經過鏡像操作後再把對應元素進行相乘這才是嚴格意義上的卷積操作,在數學角度上來說這個操作不算嚴格的卷積操作應該是屬於互相關操作,但是在深度學習領域中,大家按照慣例都省略了反轉操作,也把這個操作叫做卷積操作

我們知道彩色圖像有RGB三個通道,因此對於輸入來說是一個三維的輸入,那麼對三維輸入的圖像如何進行卷積操作呢?

例子,如上圖我們輸入圖像假設為6×6×3,3代表有RGB三個通道channel,或者可以叫depth深度,過濾器的選擇為3×3×3,其中需要規定的是,顧慮器的channel必須與輸入圖像的channel相同,長寬沒有限制,那麼計算過程是,我們將過濾器的立體覆蓋在輸入,這樣對應的27個數對應相乘後相加得到一個數,對應到我們的輸出,因此這樣的方式進行卷積後我們得出的輸出層為4×4×1。如果我們有多個過濾器,比如我們分別用兩個過濾器一個提取垂直特徵,一個提取水平特徵,那麼輸出圖4×4×2 。也就是代表我們輸出的深度或者說通道與過濾器的個數是相等的。

第l層的卷積標記如下:

加入我們的過濾器是3×3×3規格的,如果我們設定10個過濾器,那麼需要學習的參數總數為每個過濾器為27個參數然後加上一個偏差bias那麼每個過濾器的參數為28個,所以十個過濾器的參數為280個。從這里也就可以看出,不管我們輸入的圖片大小是多大,我們都只需要計算這些參數,因此參數共享也就很容易理解了。

為了縮減模型的大小,提高計算速度,同時提高所提取特徵的魯棒性,我們經常會使用池化層。池化層的計算方式與卷積類似,只是我們需要對每一個通道都進行池化操作。
池化的方式一般有兩種:Max Pooling和Average Pooling。

上面為Max Pooling,那麼計算方法與卷積類似,首先設定超參數比如過濾器的大小與步長,然後覆蓋到對應格子上面,用最大值取代其值作為輸出的結果,例如上圖為過濾器選擇2×2,步長選擇為2,因此輸出就是2×2的維度,每個輸出格子都是過濾器對應維度上輸入的最大值。如果為平均池化,那麼就是選擇其間的平均值作為輸出的值。
因此從上面的過程我們看到,通過池化操作能夠縮小模型,同時能讓特徵值更加明顯,也就提高了提取特徵的魯棒性。

㈨ 卷積神經網路標簽怎麼設置

標簽顫談設置是深度學習模型的重要組成部分,其目的茄梁碰是使模型能夠准確地預測所給輸入的標簽。因此,設置卷積神經網路(CNN)標簽時,需要考慮到訓練數據中每個樣本的標簽,以及模型的任務等因素。首先,要確保標簽與模型的任務相關,以確保模型可以正確預測標簽。其次,要確保標簽有意義,以便模型能夠准確地將輸入與正確的標簽進行匹配。最後,標簽必須是可量化的,以便模型能夠更好地理渣扮解輸入。

閱讀全文

與卷積神經網路設置ai相關的資料

熱點內容
如何構建綠色健康的網路環境 瀏覽:569
哪個網路大學是開卷考試 瀏覽:712
校園網路硬體設備有哪些 瀏覽:952
恢復網路信號的方法 瀏覽:398
金屬外殼筆記本網路信號差 瀏覽:392
網路延時信號強度 瀏覽:658
網橋用來傳輸網路要怎麼修改 瀏覽:622
怎麼設置網路驅動 瀏覽:583
神經網路的權重大小多少合適 瀏覽:285
深圳新微物聯網是哪個網路 瀏覽:82
網路惡意評論有多少 瀏覽:293
奶茶店網路營銷 瀏覽:894
wifi可用網路主頁連不上 瀏覽:259
網路機頂盒哪裡有的買 瀏覽:330
寧德羅江科目三預約老是網路異常 瀏覽:209
珠海網路營銷服務費 瀏覽:133
馬來西亞無線通信網路有限公司 瀏覽:463
計算機網路isr是什麼意思 瀏覽:546
山西省網路安全知識答題答案 瀏覽:272
東台手機電信4g網路 瀏覽:403

友情鏈接