深度学习——卷积神经网络 的经典网络(LeNet-5、AlexNet、ZFNet、VGG-16、GoogLeNet、ResNet)
1. CNN卷積神經(jīng)網(wǎng)絡的經(jīng)典網(wǎng)絡綜述
下面圖片參照博客:http://blog.csdn.net/cyh_24/article/details/51440344
2. LeNet-5網(wǎng)絡
- 輸入尺寸:32*32
- 卷積層:2個
- 降采樣層(池化層):2個
- 全連接層:2個
- 輸出層:1個。10個類別(數(shù)字0-9的概率)
LeNet-5網(wǎng)絡是針對灰度圖進行訓練的,輸入圖像大小為32321,不包含輸入層的情況下共有7層,每層都包含可訓練參數(shù)(連接權重)。注:每個層有多個Feature Map,每個Feature Map通過一種卷積濾波器提取輸入的一種特征,然后每個Feature Map有多個神經(jīng)元。
1、C1層是一個卷積層(通過卷積運算,可以使原信號特征增強,并且降低噪音)
第一層使用55大小的過濾器6個,步長s = 1,padding = 0。即:由6個特征圖Feature Map構成,特征圖中每個神經(jīng)元與輸入中55的鄰域相連,輸出得到的特征圖大小為28286。C1有156個可訓練參數(shù)(每個濾波器55=25個unit參數(shù)和一個bias參數(shù),一共6個濾波器,共(55+1)6=156個參數(shù)),共156(28*28)=122,304個連接。
2、S2層是一個下采樣層(平均池化層)(利用圖像局部相關性的原理,對圖像進行子抽樣,可以1.減少數(shù)據(jù)處理量同時保留有用信息,2.降低網(wǎng)絡訓練參數(shù)及模型的過擬合程度)。
第二層使用22大小的過濾器,步長s = 2,padding = 0。即:特征圖中的每個單元與C1中相對應特征圖的22鄰域相連接,有6個1414的特征圖,輸出得到的特征圖大小為1414*6。池化層只有一組超參數(shù) f 和 s,沒有需要學習的參數(shù)。
3、C3層是一個卷積層
第三層使用55大小的過濾器16個,步長s = 1,padding = 0。即:由16個特征圖Feature Map構成,特征圖中每個神經(jīng)元與輸入中55的鄰域相連,輸出得到的特征圖大小為101016。C3有416個可訓練參數(shù)(每個濾波器55=25個unit參數(shù)和一個bias參數(shù),一共16個濾波器,共(55+1)*16=416個參數(shù))。
4、S4層是一個下采樣層(平均池化層)
第四層使用22大小的過濾器,步長s = 2,padding = 0。即:特征圖中的每個單元與C3中相對應特征圖的22鄰域相連接,有16個55的特征圖,輸出得到的特征圖大小為55*16。沒有需要學習的參數(shù)。
5、F5層是一個全連接層
有120個單元。每個單元與S4層的全部400個單元之間進行全連接。F5層有120*(400+1)=48120個可訓練參數(shù)。如同經(jīng)典神經(jīng)網(wǎng)絡,F5層計算輸入向量和權重向量之間的點積,再加上一個偏置。
6、F6層是一個全連接層
有84個單元。每個單元與F5層的全部120個單元之間進行全連接。F6層有84*(120+1)=10164個可訓練參數(shù)。如同經(jīng)典神經(jīng)網(wǎng)絡,F6層計算輸入向量和權重向量之間的點積,再加上一個偏置。
7、Output輸出層
輸出層由歐式徑向基函數(shù)(Euclidean Radial Basis Function)單元組成,每類一個單元,每個有84個輸入。 換句話說,每個輸出RBF單元計算輸入向量和參數(shù)向量之間的歐式距離。輸入離參數(shù)向量越遠,RBF輸出的越大。用概率術語來說,RBF輸出可以被理解為F6層配置空間的高斯分布的負log-likelihood。給定一個輸式,損失函數(shù)應能使得F6的配置與RBF參數(shù)向量(即模式的期望分類)足夠接近。
總結:
隨著網(wǎng)絡越來越深,圖像的寬度和高度都在縮小,信道數(shù)量一直在增加。目前,一個或多個卷積層后邊跟一個池化層,再接上一個全連接層的排列方式很常用。
3. AlexNet網(wǎng)絡
AlexNet網(wǎng)絡共有:卷積層 5個,池化層 3個,全連接層:3個(其中包含輸出層)。
卷積神經(jīng)網(wǎng)絡的結構并不是各個層的簡單組合,它是由一個個“模塊”有機組成的,在模塊內(nèi)部,
各個層的排列是有講究的。比如AlexNet的結構圖,它是由八個模塊組成的。
1、AlexNet——模塊一和模塊二
結構類型為:卷積-激活函數(shù)(ReLU)-降采樣(池化)-標準化
這兩個模塊是CNN的前面部分,構成了一個計算模塊,這個可以說是一個卷積過程的標配,從宏觀的角度來看,
就是一層卷積,一層降采樣這樣循環(huán)的,中間適當?shù)夭迦胍恍┖瘮?shù)來控制數(shù)值的范圍,以便后續(xù)的循環(huán)計算。
2、AlexNet——模塊三和模塊四
模塊三和四也是兩個same卷積過程,差別是少了降采樣(池化層),原因就跟輸入的尺寸有關,特征的數(shù)據(jù)量已經(jīng)比較小了,所以沒有降采樣。
3、AlexNet——模塊五
模塊五也是一個卷積和池化過程,和模塊一、二一樣的。模塊五輸出的其實已經(jīng)是6\6的小塊兒了。
(一般設計可以到1\1的小塊,由于ImageNet的圖像大,所以6\6也正常的。)
原來輸入的227\227像素的圖像會變成6*6這么小,主要原因是歸功于降采樣(池化層),
當然卷積層也會讓圖像變小,一層層的下去,圖像越來越小。
4、模塊六、七、八
模塊六和七就是所謂的全連接層了,全連接層就和人工神經(jīng)網(wǎng)絡的結構一樣的,結點數(shù)超級多,連接線也超多,
所以這兒引出了一個dropout層,來去除一部分沒有足夠激活的層。
模塊八是一個輸出的結果,結合上softmax做出分類。有幾類,輸出幾個結點,每個結點保存的是屬于該類別的概率值。
AlexNet總結:
- 輸入尺寸:2272273
- 卷積層:5個
- 降采樣層(池化層):3個
- 全連接層:2個
- 輸出層:1個。1000個類別
4. ZFNet
5. VGG-16網(wǎng)絡
VGGNet是牛津大學計算機視覺組(Visual Geometry Group)和Google DeepMind公司的研究員一起研發(fā)的深度卷積神經(jīng)網(wǎng)絡。
VGGNet探索了卷積神經(jīng)網(wǎng)絡的深度與其性能之間的關系,通過反復堆疊33的小型卷積核和22的最大池化層,
VGGNet成功地構筑了16~19層深的卷積神經(jīng)網(wǎng)絡。VGGNet相比之前state-of-the-art的網(wǎng)絡結構,錯誤率大幅下降,
VGGNet論文中全部使用了33的小型卷積核和22的最大池化核,通過不斷加深網(wǎng)絡結構來提升性能。
VGG-16和VGG-19結構如下:
總結:
(1)VGG-16網(wǎng)絡中的16代表的含義為:含有參數(shù)的有16個層,共包含參數(shù)約為1.38億。
(2)VGG-16網(wǎng)絡結構很規(guī)整,沒有那么多的超參數(shù),專注于構建簡單的網(wǎng)絡,都是幾個卷積層后面跟一個可以壓縮圖像大小的池化層。即:全部使用33的小型卷積核和22的最大池化層。
卷積層:CONV=3*3 filters, s = 1, padding = same convolution。
池化層:MAX_POOL = 2*2 , s = 2。
(3)優(yōu)點:簡化了卷積神經(jīng)網(wǎng)絡的結構;缺點:訓練的特征數(shù)量非常大。
(4)隨著網(wǎng)絡加深,圖像的寬度和高度都在以一定的規(guī)律不斷減小,每次池化后剛好縮小一半,信道數(shù)目不斷增加一倍。
6. Inception網(wǎng)絡(google公司)——GoogLeNet網(wǎng)絡
綜述
獲得高質(zhì)量模型最保險的做法就是增加模型的深度(層數(shù))或者是其寬度(層核或者神經(jīng)元數(shù)),
但是這里一般設計思路的情況下會出現(xiàn)如下的缺陷:
1.參數(shù)太多,若訓練數(shù)據(jù)集有限,容易過擬合;
2.網(wǎng)絡越大計算復雜度越大,難以應用;
3.網(wǎng)絡越深,梯度越往后穿越容易消失,難以優(yōu)化模型。
解決上述兩個缺點的根本方法是將全連接甚至一般的卷積都轉(zhuǎn)化為稀疏連接。 為了打破網(wǎng)絡對稱性和提高
學習能力,傳統(tǒng)的網(wǎng)絡都使用了隨機稀疏連接。但是,計算機軟硬件對非均勻稀疏數(shù)據(jù)的計算效率很差,
所以在AlexNet中又重新啟用了全連接層,目的是為了更好地優(yōu)化并行運算。現(xiàn)在的問題是有沒有一種方法,
既能保持網(wǎng)絡結構的稀疏性,又能利用密集矩陣的高計算性能。
Inception模塊介紹
Inception架構的主要思想是找出如何用密集成分來近似最優(yōu)的局部稀疏結。
對上圖做以下說明:
采用不同大小的卷積核意味著不同大小的感受野,最后拼接意味著不同尺度特征的融合;
之所以卷積核大小采用11、33和5*5,主要是為了方便對齊。設定卷積步長stride=1之后,只要分別設定padding =0、1、2,采用same卷積可以得到相同維度的特征,然后這些特征直接拼接在一起;
文章說很多地方都表明pooling挺有效,所以Inception里面也嵌入了pooling。
網(wǎng)絡越到后面特征越抽象,且每個特征涉及的感受野也更大,隨著層數(shù)的增加,3x3和5x5卷積的比例也要增加。
Inception的作用:代替人工確定卷積層中的過濾器類型或者確定是否需要創(chuàng)建卷積層和池化層,即:不需要人為的
決定使用哪個過濾器,是否需要池化層等,由網(wǎng)絡自行決定這些參數(shù),可以給網(wǎng)絡添加所有可能值,將輸出連接
起來,網(wǎng)絡自己學習它需要什么樣的參數(shù)。
naive版本的Inception網(wǎng)絡的缺陷:計算成本。使用5x5的卷積核仍然會帶來巨大的計算量,約需要1.2億次的計算量。
為減少計算成本,采用1x1卷積核來進行降維。 示意圖如下:
在3x3和5x5的過濾器前面,max pooling后分別加上了1x1的卷積核,最后將它們?nèi)恳酝ǖ?厚度為軸拼接起來,最終輸出大小為2828256,卷積的參數(shù)數(shù)量比原來減少了4倍,得到最終版本的Inception模塊:
GoogleNet介紹
GoogleNet——Inception V1結構
GoogleNet的主要思想就是圍繞這兩個思路去做的:
(1).深度,層數(shù)更深,文章采用了22層,為了避免上述提到的梯度消失問題,GoogleNet巧妙的 在不同深度處增加了兩個loss來保證梯度回傳消失的現(xiàn)象。
(2).寬度,增加了多種核 1x1,3x3,5x5,還有直接max pooling的,但是如果簡單的將這些應用到feature map上的話,concat起來的feature map厚度將會很大,所以在googlenet中為了避免這一現(xiàn)象提出的inception具有如下結構,在3x3前,5x5前,max pooling后分別加上了1x1的卷積核起到了降低feature map厚度的作用。
對上圖做如下說明:
(1)顯然GoogLeNet采用了Inception模塊化(9個)的結構,共22層,方便增添和修改;
(2)網(wǎng)絡最后采用了average pooling來代替全連接層,想法來自NIN,參數(shù)量僅為AlexNet的1/12,性能優(yōu)于AlexNet,
事實證明可以將TOP1 accuracy提高0.6%。但是,實際在最后還是加了一個全連接層,主要是為了方便finetune;
(3)雖然移除了全連接,但是網(wǎng)絡中依然使用了Dropout ;
(4)為了避免梯度消失,網(wǎng)絡額外增加了2個輔助的softmax用于向前傳導梯度。
文章中說這兩個輔助的分類器的loss應該加一個衰減系數(shù),但看caffe中的model也沒有加任何衰減。
此外,實際測試的時候,這兩個額外的softmax會被去掉。
(5)上述的GoogLeNet的版本成它使用的Inception V1結構。
Inception V2結構
大尺寸的卷積核可以帶來更大的感受野,也意味著更多的參數(shù),比如5x5卷積核參數(shù)是3x3卷積核的25/9=2.78倍。
為此,作者提出可以用2個連續(xù)的3x3卷積層(stride=1)組成的小網(wǎng)絡來代替單個的5x5卷積層,這便是Inception V2結構,保持感受野范圍的同時又減少了參數(shù)量,如下圖:
Inception V3結構
大卷積核完全可以由一系列的3x3卷積核來替代,那能不能分解的更小一點呢。
文章考慮了 nx1 卷積核,如下圖所示的取代3x3卷積:
于是,任意nxn的卷積都可以通過1xn卷積后接nx1卷積來替代。實際上,作者發(fā)現(xiàn)在網(wǎng)絡的前期使用這種分解效果并不好,還有在中度大小的feature map上使用效果才會更好,對于mxm大小的feature map,建議m在12到20之間。
用nx1卷積來代替大卷積核,這里設定n=7來應對17x17大小的feature map。該結構被正式用在GoogLeNet V2中。
Inception V4結構,它結合了殘差神經(jīng)網(wǎng)絡ResNet。
參考鏈接:http://blog.csdn.net/stdcoutzyx/article/details/51052847
http://blog.csdn.net/shuzfan/article/details/50738394#googlenet-inception-v2
7. 殘差神經(jīng)網(wǎng)絡——ResNet
綜述
深度學習網(wǎng)絡的深度對最后的分類和識別的效果有著很大的影響,所以正常想法就是能把網(wǎng)絡設計的越深越好,
但是事實上卻不是這樣,常規(guī)的網(wǎng)絡的堆疊(plain network)在網(wǎng)絡很深的時候,效果卻越來越差了。其中原因之一即是 網(wǎng)絡越深,梯度消失的現(xiàn)象就越來越明顯,網(wǎng)絡的訓練效果也不會很好。 但是現(xiàn)在淺層的網(wǎng)絡(shallower network)又無法明顯提升網(wǎng)絡的識別效果了,所以現(xiàn)在要解決的問題就是 怎樣在加深網(wǎng)絡的情況下又解決梯度消失的問題。
殘差模塊——Residual bloack
通過在一個淺層網(wǎng)絡基礎上疊加 y=x 的層(稱identity mappings,恒等映射),可以讓網(wǎng)絡隨深度增加而不退化。
這反映了多層非線性網(wǎng)絡無法逼近恒等映射網(wǎng)絡。但是,不退化不是我們的目的,我們希望有更好性能的網(wǎng)絡。
resnet學習的是殘差函數(shù)F(x) = H(x) - x, 這里如果F(x) = 0, 那么就是上面提到的恒等映射。事實上,resnet是“shortcut connections”的在connections是在恒等映射下的特殊情況,它沒有引入額外的參數(shù)和計算復雜度。
假如優(yōu)化目標函數(shù)是逼近一個恒等映射, 而不是0映射, 那么學習找到對恒等映射的擾動會比重新學習一個映射函數(shù)要容易。
殘差函數(shù)一般會有較小的響應波動,表明恒等映射是一個合理的預處理。
殘差模塊小結:
非常深的網(wǎng)絡很難訓練,存在梯度消失和梯度爆炸問題,學習 skip connection它可以從某一層獲得激活,然后迅速反饋給另外一層甚至更深層,利用 skip connection可以構建殘差網(wǎng)絡ResNet來訓練更深的網(wǎng)絡,ResNet網(wǎng)絡是由殘差模塊構建的。
上圖中,是一個兩層的神經(jīng)網(wǎng)絡,在l層進行激活操作,得到a[l+1],再次進行激活得到a[l+2]。由下面公式:
a[l+2]a[l+2]a[l+2]加上了a[l]a[l]a[l]的殘差塊,即:殘差網(wǎng)絡中,直接將a[l]a[l]a[l]向后拷貝到神經(jīng)網(wǎng)絡的更深層,在ReLU非線性激活前面加上a[l]a[l]a[l],a[l]a[l]a[l]的信息直接達到網(wǎng)絡深層。使用殘差塊能夠訓練更深層的網(wǎng)絡,構建一個ResNet網(wǎng)絡就是通過將很多這樣的殘差塊堆積在一起,形成一個深度神經(jīng)網(wǎng)絡。
殘差網(wǎng)絡——ResNet
上圖中是用5個殘差塊連接在一起構成的殘差網(wǎng)絡,用梯度下降算法訓練一個神經(jīng)網(wǎng)絡,若沒有殘差,會發(fā)現(xiàn)隨著網(wǎng)絡加深,訓練誤差先減少后增加,理論上訓練誤差越來越小比較好。而對于殘差網(wǎng)絡來講,隨著層數(shù)增加,訓練誤差越來越減小,這種方式能夠到達網(wǎng)絡更深層,有助于解決梯度消失和梯度爆炸的問題,讓我們訓練更深網(wǎng)絡同時又能保證良好的性能。
殘差網(wǎng)絡有很好表現(xiàn)的原因舉例:
假設有一個很大的神經(jīng)網(wǎng)絡,輸入矩陣為XXX,輸出激活值為a[l]a[l]a[l],加入給這個網(wǎng)絡額外增加兩層,最終輸出結果為a[l+2]a[l+2]a[l+2],可以把這兩層看做一個殘差模塊,在整個網(wǎng)絡中使用ReLU激活函數(shù),所有的激活值都大于等于0。
對于大型的網(wǎng)絡,無論把殘差塊添加到神經(jīng)網(wǎng)絡的中間還是末端,都不會影響網(wǎng)絡的表現(xiàn)。
殘差網(wǎng)絡起作用的主要原因是:It’s so easy for these extra layers to learn the itentity function.
這些殘差塊學習恒等函數(shù)非常容易。可以確定網(wǎng)絡性能不受影響,很多時候甚至可以提高學習效率。
模型構建好后進行實驗,在plain上觀測到明顯的退化現(xiàn)象,而且ResNet上不僅沒有退化,34層網(wǎng)絡的效果反而比18層的更好,而且不僅如此,ResNet的收斂速度比plain的要快得多。
實際中,考慮計算的成本,對殘差塊做了計算優(yōu)化,即將兩個3x3的卷積層替換為1x1 + 3x3 + 1x1, 如下圖。新結構中的中間3x3的卷積層首先在一個降維1x1卷積層下減少了計算,然后在另一個1x1的卷積層下做了還原,既保持了精度又減少了計算量。
這相當于對于相同數(shù)量的層又減少了參數(shù)量,因此可以拓展成更深的模型。于是作者提出了50、101、152層的ResNet,而且不僅沒有出現(xiàn)退化問題,錯誤率也大大降低,同時計算復雜度也保持在很低的程度。
這個時候ResNet的錯誤率已經(jīng)把其他網(wǎng)絡落下幾條街了,但是似乎還并不滿足,于是又搭建了更加變態(tài)的1202層的網(wǎng)絡,對于這么深的網(wǎng)絡,優(yōu)化依然并不困難,但是出現(xiàn)了過擬合的問題,這是很正常的,作者也說了以后會對這個1202層的模型進行進一步的改進。
總結
以上是生活随笔為你收集整理的深度学习——卷积神经网络 的经典网络(LeNet-5、AlexNet、ZFNet、VGG-16、GoogLeNet、ResNet)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 这么做科研你也能成功!
- 下一篇: JGG:青岛大学苏晓泉团队利用条件致病菌