導航:首頁 > 網路問題 > cnn網路還能如何改進

cnn網路還能如何改進

發布時間:2023-02-15 19:08:47

㈠ 為什麼不同的機器學習領域都可以使用CNN,CNN解決了這些領域的哪些共性問題是如何解決的

卷積神經網路 (CNN) 是一種神經網路,特別適用於涉及處理和分析具有網格狀結構的數據(如圖像)的任務。CNN能夠通過對數據應用一組學習的過濾器來處理和分析圖像,這使他們能夠學習不同尺度的特徵和模式,並自動識別圖像中的對象和特徵。
CNN在各種任務上取得成功的關鍵原因之一是因為它們能夠自動從數據中學習特徵,這使他們能夠在各種任務上表現良好,而無需大量的手動調整或特徵工程。這對於圖像分類、對象檢測和分割等任務特別有用,在這些任務中,模型需要能夠識別和分類圖像中的對象和特徵。
CNN被廣泛使用的另一個原因是,它們能夠在整個輸入中使用共享權重和偏差來有效地處理數據,這使他們能夠學習與整個輸入相關的特徵。這對於圖像分類等任務特別有用,在這些任務中,模型需要能夠識別和分類對象和特徵,而不管它們在圖像中的位置如何。
總體而言,CNN在廣泛的任務上取得了成功,因為它們能夠自動從數據中學習特徵,並且因為它們能夠在整個輸入中使用共享權重和偏差來有效地處理數據。這使它們成為涉及處理和分析具有網格狀結構的數據(如圖像)的任務的強大工具。

㈡ 卷積神經網路Convolutional Neural Network(CNNs/ConvNets)

cnn主要適合處理圖片,比如給圖片分類、給圖片自動打標簽、無人駕駛等。一般2D的cnn用來處理圖片,3D的cnn用來處理視頻。近來也有人開始用於nlp自然語言處理 (參考閱讀) 。cnn卷積神經網路是對傳統神經網路的改進,改進點包括:
1,提出卷積層convolutional layers layer和池化層max-pooling layer(subsampling layer),替代全連層fully connected layer。
2,將層之間的全連接改成非全連接,從而降低運算量,也降低過擬合的發生。
3,卷積層用的激活函數是ReLU或者tanh。
cnn的原理詳細介紹參見 (colah's blog)

cnn架構圖 ,
架構詳細分析 ,cnn的層有三類:Convolutional Layer, Pooling Layer和Fully-Connected Layer。其典型架構為[INPUT - CONV - RELU - POOL - FC]。

如何理解卷積的概念,可以參照 (這兒) 。更詳細更深入的解釋卷積參照 Chris Olah』s post on the topic 。卷積可以用來作圖片模糊處理、探測圖片邊緣。

也叫softmax layer,最後一層通常選用softmax激活函數。

cnn可以用於nlp自然語言處理,包括文本分類、情感分析、垃圾郵件監測、主題分類、關系抽取、信息抽取、信息推薦、等。cnn for nlp的原理參見 Understanding Convolutional Neural Networks for NLP 。
使用tensorflow實現一個文本分類cnn模型。具體參見 Implementing a CNN for Text Classification in TensorFlow 。

tensorflow實現cnn實例 (github源碼)
cnn用於文本分類實例 (github源碼)

sennchi

㈢ 卷積神經網路 有哪些改進的地方

卷積神經網路的研究的最新進展引發了人們完善立體匹配重建熱情。從概念看,基於學習演算法能夠捕獲全局的語義信息,比如基於高光和反射的先驗條件,便於得到更加穩健的匹配。目前已經探求一些兩視圖立體匹配,用神經網路替換手工設計的相似性度量或正則化方法。這些方法展現出更好的結果,並且逐步超過立體匹配領域的傳統方法。事實上,立體匹配任務完全適合使用CNN,因為圖像對是已經過修正過的,因此立體匹配問題轉化為水平方向上逐像素的視差估計。
與雙目立體匹配不同的是,MVS的輸入是任意數目的視圖,這是深度學習方法需要解決的一個棘手的問題。而且只有很少的工作意識到該問題,比如SurfaceNet事先重建彩色體素立方體,將所有像素的顏色信息和相機參數構成一個3D代價體,所構成的3D代價體即為網路的輸入。然而受限於3D代價體巨大的內存消耗,SurfaceNet網路的規模很難增大:SurfaceNet運用了一個啟發式的「分而治之」的策略,對於大規模重建場景則需要花費很長的時間。

㈣ 吳恩達 卷積神經網路 CNN

應用計算機視覺時要面臨的一個挑戰是數據的輸入可能會非常大。例如一張 1000x1000x3 的圖片,神經網路輸入層的維度將高達三百萬,使得網路權重 W 非常龐大。這樣會造成兩個後果:

神經網路結構復雜,數據量相對較少,容易出現過擬合;
所需內存和計算量巨大。
因此,一般的神經網路很難處理蘊含著大量數據的圖像。解決這一問題的方法就是使用卷積神經網路

我們之前提到過,神經網路由淺層到深層,分別可以檢測出圖片的邊緣特徵、局部特徵(例如眼睛、鼻子等),到最後面的一層就可以根據前面檢測的特徵來識別整體面部輪廓。這些工作都是依託卷積神經網路來實現的。

卷積運算(Convolutional Operation)是卷積神經網路最基本的組成部分。我們以邊緣檢測為例,來解釋卷積是怎樣運算的。

圖片最常做的邊緣檢測有兩類:垂直邊緣(Vertical Edges)檢測和水平邊緣(Horizontal Edges)檢測。

比如檢測一張6x6像素的灰度圖片的vertical edge,設計一個3x3的矩陣(稱之為filter或kernel),讓原始圖片和filter矩陣做卷積運算(convolution),得到一個4x4的圖片。 具體的做法是,將filter矩陣貼到原始矩陣上(從左到右從上到下),依次可以貼出4x4種情況。 讓原始矩陣與filter重合的部分做element wise的乘積運算再求和 ,所得的值作為4x4矩陣對應元素的值。如下圖是第一個元素的計算方法,以此類推。

可以看到,卷積運算的求解過程是從左到右,由上到下,每次在原始圖片矩陣中取與濾波器同等大小的一部分,每一部分中的值與濾波器中的值對應相乘後求和,將結果組成一個矩陣。

下圖對應一個垂直邊緣檢測的例子:

如果將最右邊的矩陣當作圖像,那麼中間一段亮一些的區域對應最左邊的圖像中間的垂直邊緣。

下圖3x3濾波器,通常稱為垂直 索伯濾波器 (Sobel filter):

看看用它來處理知名的Lena照片會得到什麼:

現在可以解釋卷積操作的用處了:用輸出圖像中更亮的像素表示原始圖像中存在的邊緣。

你能看出為什麼邊緣檢測圖像可能比原始圖像更有用嗎?

回想一下MNIST手寫數字分類問題。在MNIST上訓練的CNN可以找到某個特定的數字。比如發現數字1,可以通過使用邊緣檢測發現圖像上兩個突出的垂直邊緣。

通常,卷積有助於我們找到特定的局部圖像特徵(如邊緣),用在後面的網路中。

假設輸入圖片的大小為 n×n,而濾波器的大小為 f×f,則卷積後的輸出圖片大小為 (n−f+1)×(n−f+1)。

這樣就有兩個問題:

為了解決這些問題,可以在進行卷積操作前,對原始圖片在邊界上進行填充(Padding),以增加矩陣的大小。通常將 0 作為填充值。

設每個方向擴展像素點數量為 p,則填充後原始圖片的大小為 (n+2p)×(n+2p),濾波器大小保持 f×f不變,則輸出圖片大小為 (n+2p−f+1)×(n+2p−f+1)。

因此,在進行卷積運算時,我們有兩種選擇:

在計算機視覺領域,f通常為奇數。原因包括 Same 卷積中 p=(f−1)/ 2 能得到自然數結果,並且濾波器有一個便於表示其所在位置的中心點。

卷積過程中,有時需要通過填充來避免信息損失,有時也需要通過設置 步長(Stride) 來壓縮一部分信息。

步長表示濾波器在原始圖片的水平方向和垂直方向上每次移動的距離。之前,步長被默認為 1。而如果我們設置步長為 2,則卷積過程如下圖所示:

設步長為 s,填充長度為p, 輸入圖片大小為n x n, 濾波器大小為f x f, 則卷積後圖片的尺寸為:

注意公式中有一個向下取整的符號,用於處理商不為整數的情況。向下取整反映著當取原始矩陣的圖示藍框完全包括在圖像內部時,才對它進行運算。

如果我們想要對三通道的 RGB 圖片進行卷積運算,那麼其對應的濾波器組也同樣是三通道的。過程是將每個單通道(R,G,B)與對應的濾波器進行卷積運算求和,然後再將三個通道的和相加,將 27 個乘積的和作為輸出圖片的一個像素值。

如果想同時檢測垂直和水平邊緣,或者更多的邊緣檢測,可以增加更多的濾波器組。例如設置第一個濾波器組實現垂直邊緣檢測,第二個濾波器組實現水平邊緣檢測。設輸入圖片的尺寸為 n×n×nc(nc為通道數),濾波器尺寸為 f×f×nc,則卷積後的輸出圖片尺寸為 (n−f+1)×(n−f+1)×n′c,n′c為濾波器組的個數。

與之前的卷積過程相比較,卷積神經網路的單層結構多了激活函數和偏移量;而與標准神經網路相比,濾波器的數值對應著權重 W[l],卷積運算對應著 W[l]與 A[l−1]的乘積運算,所選的激活函數變為 ReLU。

對於一個 3x3x3 的濾波器,包括偏移量 b(27+1)在內共有 28 個參數。不論輸入的圖片有多大,用這一個濾波器來提取特徵時,參數始終都是 28 個,固定不變。即選定濾波器組後,參數的數目與輸入圖片的尺寸無關。因此,卷積神經網路的參數相較於標准神經網路來說要少得多。這是 CNN 的優點之一。

圖像中的相鄰像素傾向於具有相似的值,因此通常卷積層相鄰的輸出像素也具有相似的值。這意味著,卷積層輸出中包含的大部分信息都是冗餘的。如果我們使用邊緣檢測濾波器並在某個位置找到強邊緣,那麼我們也可能會在距離這個像素1個偏移的位置找到相對較強的邊緣。但是它們都一樣是邊緣,我們並沒有找到任何新東西。池化層解決了這個問題。這個網路層所做的就是通過減小輸入的大小降低輸出值的數量。池化一般通過簡單的最大值、最小值或平均值操作完成。以下是池大小為2的最大池層的示例:

在計算神經網路的層數時,通常只統計具有權重和參數的層,因此池化層通常和之前的卷積層共同計為一層。

圖中的 FC3 和 FC4 為全連接層,與標準的神經網路結構一致。

個人推薦 一個直觀感受卷積神經網路的網站 。

相比標准神經網路,對於大量的輸入數據,卷積過程有效地減少了 CNN 的參數數量,原因有以下兩點:

-參數共享(Parameter sharing):特徵檢測如果適用於圖片的某個區域,那麼它也可能適用於圖片的其他區域。即在卷積過程中,不管輸入有多大,一個特徵探測器(濾波器)就能對整個輸入的某一特徵進行探測。

-稀疏連接(Sparsity of connections):在每一層中,由於濾波器的尺寸限制,輸入和輸出之間的連接是稀疏的,每個輸出值只取決於輸入在局部的一小部分值。

池化過程則在卷積後很好地聚合了特徵,通過降維來減少運算量。

由於 CNN 參數數量較小,所需的訓練樣本就相對較少,因此在一定程度上不容易發生過擬合現象。並且 CNN 比較擅長捕捉區域位置偏移。即進行物體檢測時,不太受物體在圖片中位置的影響,增加檢測的准確性和系統的健壯性。

在神經網路可以收斂的前提下,隨著網路深度增加,網路的表現先是逐漸增加至飽和,然後迅速下降

需要注意,網路退化問題不是過擬合導致的,即便在模型訓練過程中,同樣的訓練輪次下,退化的網路也比稍淺層的網路的訓練錯誤更高,如下圖所示。

這一點並不符合常理:如果存在某個 K層網路是當前F的最優的網路,我們構造更深的網路。那麼K之後的層數可以擬合成恆等映射,就可以取得和F一直的結果。如果K不是最佳層數,那麼我們比K深,可以訓練出的一定會不差於K的。總而言之,與淺層網路相比,更深的網路的表現不應該更差。因此,一個合理的猜測就是, 對神經網路來說,恆等映射並不容易擬合。

也許我們可以對網路單元進行一定的改造,來改善退化問題?這也就引出了殘差網路的基本思路

既然神經網路不容易擬合一個恆等映射,那麼一種思路就是構造天然的恆等映射。

實驗表明,殘差網路 很好地解決了深度神經網路的退化問題 ,並在ImageNet和CIFAR-10等圖像任務上取得了非常好的結果,同等層數的前提下殘差網路也 收斂得更快 。這使得前饋神經網路可以採用更深的設計。除此之外, 去除個別神經網路層,殘差網路的表現不會受到顯著影響 ,這與傳統的前饋神經網路大相徑庭。

2018年的一篇論文,The Shattered Gradients Problem: If resnets are the answer, then what is the question,指出了一個新的觀點,盡管殘差網路提出是為了解決梯度彌散和網路退化的問題, 它解決的實際上是梯度破碎問題

作者通過可視化的小型實驗(構建和訓練一個神經網路發現,在淺層神經網路中,梯度呈現為棕色雜訊(brown noise),深層神經網路的梯度呈現為白雜訊。在標准前饋神經網路中,隨著深度增加, 神經元梯度的相關性(corelation)按指數級減少 (1 / 2^L) ;同時, 梯度的空間結構也隨著深度增加被逐漸消除 。這也就是梯度破碎現象。

梯度破碎為什麼是一個問題呢?這是因為許多優化方法假設梯度在相鄰點上是相似的,破碎的梯度會大大減小這類優化方法的有效性。另外,如果梯度表現得像白雜訊,那麼某個神經元對網路輸出的影響將會很不穩定。

相較標准前饋網路, 殘差網路中梯度相關性減少的速度從指數級下降到亞線性級 ) (1 / sqrt(L)) ,深度殘差網路中,神經元梯度介於棕色雜訊與白雜訊之間(參見上圖中的c,d,e);殘差連接可以 極大地保留梯度的空間結構 。殘差結構緩解了梯度破碎問題。

1x1 卷積指濾波器的尺寸為 1。當通道數為 1 時,1x1 卷積意味著卷積操作等同於乘積操作。
而當通道數更多時,1x1 卷積的作用實際上類似全連接層的神經網路結構,從而降低(或升高,取決於濾波器組數)數據的維度。

池化能壓縮數據的高度(nH)及寬度(nW),而 1×1 卷積能壓縮數據的通道數(nC)。在如下圖所示的例子中,用 filters個大小為 1×1×32 的濾波器進行卷積,就能使原先數據包含的 32個通道壓縮為 filters 個。

在這之前,網路大都是這樣子的:

也就是卷積層和池化層的順序連接。這樣的話,要想提高精度,增加網路深度和寬度是一個有效途徑,但也面臨著參數量過多、過擬合等問題。(當然,改改超參數也可以提高性能)

有沒有可能在同一層就可以提取不同(稀疏或不稀疏)的特徵呢(使用不同尺寸的卷積核)?於是,2014年,在其他人都還在一味的增加網路深度時(比如vgg),GoogleNet就率先提出了卷積核的並行合並(也稱Bottleneck Layer),如下圖。

和卷積層、池化層順序連接的結構(如VGG網路)相比,這樣的結構主要有以下改進:

按照這樣的結構來增加網路的深度,雖然可以提升性能,但是還面臨計算量大(參數多)的問題。為改善這種現象,GooLeNet借鑒Network-in-Network的思想,使用1x1的卷積核實現降維操作(也間接增加了網路的深度),以此來減小網路的參數量(這里就不對兩種結構的參數量進行定量比較了),如圖所示。

最後實現的inception v1網路是上圖結構的順序連接

由於卷積這門課的其他內容和計算機視覺關系比較密切。對我理解推薦系統幫助不大。所以這個系列就到這里。吳恩達的課還是很好的,作業和課和測驗我都認真做啦。

㈤ 吳教授的CNN課堂:進階 | 從LeNet到殘差網路(ResNet)和Inception Net

第二周是關於卷積網路(CNN)進階部分,學到挺多新東西。因為之前了解過CNN基礎後,就大多在用RNN進行自然語言處理方面的研究,很多CNN的最新進展雖有耳聞,但是並不清楚。

特別是各個論文模型又喜歡取一些奇怪的名字(比如昨天讀的兩篇論文,一個叫NTT,一個叫TMD),如果沒讀過論文,不了解一些緣由,真是傻傻分不清。

之前看視覺問答時,預處理圖片部分需選擇訓練好的網路,結果一看,一大堆什麼 VGG、Res、Incept 這些看不懂的名詞,而且後面還加著16、19、101等數字和V1、V2、V3這樣的版本數。結果只能兩眼一抹黑,參考別人的論文,瞎選了一個。

閑話不多說,開始吧。

在提到之後的ResNet和Inception Net前,最好先回顧一下CNN裡面成功架構的發展,這樣就可以把握住一條清晰的發展脈絡,之後講解進階網路的時候也能很快理解。

首先是爺爺級的 LeNet-5 ,因為這大概是20年前提出來的了。是當時尚且青澀,而現在已是深度學習四大天王里的LeCun提出的,LeNet也是取自他名字前半截,5表示只有五層,當時用於處理MNIST這樣的手寫數字識別。

在基礎課裡面吳教授也有親手把整個架構畫出來,所以並不是很復雜。分別卷積和池化兩次後,然後直接輸入全連接網路就可以了。

LeNet後,因為人工智慧寒冬,所以很長時間並沒有太大發展。

直到13年的時候,後起之秀Alex Krizhevsky (相信不少人也看過他的博客,聽過他有名的Stanford cs231) 提出了AlexNet,在ImageNet比賽上取得了很大的成功,向大家展示了深度學習的力量,從此掀起一次浪潮。

AlexNet和LeNet差別並不是很大,主要不同有以下三點。

在AlexNet展示了深度學習在圖像處理上的成功後,大家也就開始不斷在其之上完善圖像處理的CNN構架。而VGG就是第一個 非常簡潔又系統化,提出了一套怎麼使用更深的網路來訓練的網路架構

VGG的創舉之點在於,比起之前那些網路其中參數的混雜,它很有計劃和條理地布置了架構中各個層的結構。比如說可以列舉出一下幾點:

VGG是當時參賽組(Visual Geometry Group)的名稱。一般現在大家用到的都是VGG-16或者VGG-19,16和19也正如所想,分別是對應的VGG版本中的層數。

看上去16和19層好像也很多了,但和之後ResNet這樣的動不動就101,152層的巨無霸相比,還是小巫見大巫。

那為什麼不也增加VGG的層數呢?

這里要提到深層神經網路訓練中的一個大問題了,那就是當層數過大時,會產生所謂的 梯度爆炸(Exploding Gradients)和梯度消失(Vanishing Gradients) 現象。

打個比方,如果每次的梯度相乘的系數都是小於1的數,假如說0.6, 那麼19 層算下來,0.6的19次方就已經是0.00061了,更別提上百層了。這樣傳播到最底層的時候,能夠 學習到的參數就很小 了,這就是梯度消失。

反過來,梯度爆炸的情況,如果系數大於1,多次累乘後就會得到一個很大的數,也會造成不好的結果。有點像是復利的概念,也就是那個和國王打賭要一棋盤稻子的故事。

梯度爆炸還好解決,可以用 梯度修剪(Gradient Clipping) 修剪一下就好了。而梯度消失就有點難解決了。

因為這樣的問題,所以雖然理論上普通的深處網路是越深學的越好,但是實際上卻事與願違。下圖橫軸是網路層數,豎軸是訓練誤差(越小越好)。 理論上隨著層數增加,誤差就減小,但是實際是過了某個點之後,誤差反而會增大。

那麼ResNet是怎麼訓練到上百層的呢,難道它就不怕上面的問題嗎?

它用一個很簡單的方法解決了上面的問題。

有很多很棒的論文,沒讀之前,看名字覺得很厲害的。但結果一看論文,才發現方法非常之簡潔,特別是有一些利用數學知識推導出的簡單解決方法,讓人不得不一邊拍手稱贊,一邊感嘆自己數學渣。

ResNet也是這樣子的,看名字很酷炫,但是打開論文一看,才發現原來是這樣啊。

ResNet的最主要就是 Shortcut(捷徑) 這個概念。來看看這到底是什麼吧,首先假設我們從一個神經網路中取出兩層,當做是一個塊(block),先不管中間是MLP或者是CNN。

而shortcut就如下圖一樣,從第一層的輸入直接建立一條捷徑到第二層的輸出,激活函數前。

也就是說第二層激活後的輸出可以會發生這樣的變化。

變成

這樣子處理之後,我們得到的這一小塊就叫做 Resial Block(殘差塊) ,而把這些塊堆疊起來就是我們的殘差網路了。很簡單吧,像下面這樣,一個34層的殘差網路。

這樣子我們就得到殘差網路,那麼實際上訓練會怎麼樣呢。

正是我們想要的模型,也非常符合理論。

最後再提一下殘差網路背後的原理,為什麼這樣簡單改一下就能夠有這么好的表現呢。

原因是捷徑的建立,使得每一個殘差塊可以 很容易地學習到恆等函數 ,也就是f(x)=x。也就是說加入殘差塊之後,再差也能學會恆等函數,保留信息,把之前的結果直接這樣傳下去,所以也就不用擔心之前提到的 梯度消失 問題了。

介紹Inception網路前,先介紹一下其中一個很重要的概念1x1卷積。

初看1x1卷積的概念會覺得很奇怪,這樣子每次對一個像素進行卷積有什麼用,我們本來不就是想檢測局部的特徵嗎。但是如果理解了 通道 概念的話,就能很好理解了。

因為,如果說普通的 大窗口卷積更注重一個通道內各個特徵的互動 的話,那麼1x1卷積就是只在通道與通道進行卷積運算,加強了通道之間的互動。

這就是第一點, 加強了通道與通道之間的交流 。用這個就可以只對通道進行一些操作,如用1x1卷積增加通道數,減少通道數,也可以不增不減,但是對之前的通道進行整理。

1x1卷積網路還有一個好處,那就是 通過合理運用可以減少整體網路的運算量

還是來舉例子吧,假設有以下一個卷積過程。

那麼上面這個過程所需要的運算量大約一億兩千萬次。

而如果我們巧妙地利用1x1卷積來對通道進行合理處理的話,像下面這樣。

運算量會變得只有大概一千二百萬左右,一下子就縮小了十倍。

有了上面的知識以後,一切就簡單多了。Inception網路的核心概念是,既然在選擇CNN架構的時候要為了過濾器的窗口大小考慮半天,那麼 何不把各個尺寸都用上去,最後再把結果接起來就好了呢

於是就有了下面這樣的 Inception模塊 。有用1x1、3x3、5x5各個尺寸的卷積,而且還用到之前講到的利用1x1卷積減少運算量的技巧。

最後至於整個Inception網路,就像之前殘差網路一樣,把 Inception模塊 堆疊起來就好了。

當然論文中還有一些次要細節,這里就不多說了。

而且自最初的論文之後,Inception網路也有很多改進,加入了很多技巧,比如之前的殘差網路中的技巧。所以現在網上的Inception網路,後面會有V1、V2、V3之類後綴,表示的就是各個版本。

最後,作為余談,說說為什麼Inception網路要叫做 Inception 網路。

因為在這篇正經的學術論文裡面,作者引用了一個鏈接,點開後會出現這張圖片。

㈥ 卷積神經網路(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再說吧。

閱讀全文

與cnn網路還能如何改進相關的資料

熱點內容
網路共享中心沒有網卡 瀏覽:493
電腦無法檢測到網路代理 瀏覽:1350
筆記本電腦一天會用多少流量 瀏覽:476
蘋果電腦整機轉移新機 瀏覽:1349
突然無法連接工作網路 瀏覽:962
聯通網路怎麼設置才好 瀏覽:1191
小區網路電腦怎麼連接路由器 瀏覽:933
p1108列印機網路共享 瀏覽:1187
怎麼調節台式電腦護眼 瀏覽:603
深圳天虹蘋果電腦 瀏覽:841
網路總是異常斷開 瀏覽:584
中級配置台式電腦 瀏覽:895
中國網路安全的戰士 瀏覽:605
同志網站在哪裡 瀏覽:1380
版觀看完整完結免費手機在線 瀏覽:1432
怎樣切換默認數據網路設置 瀏覽:1080
肯德基無線網無法訪問網路 瀏覽:1254
光纖貓怎麼連接不上網路 瀏覽:1377
神武3手游網路連接 瀏覽:938
局網列印機網路共享 瀏覽:975