AlexNet
2012年,Hinton的學(xué)生Alex Krizhevsky提出了深度卷積神經(jīng)網(wǎng)絡(luò)模型AlexNet,獲得當(dāng)年ILSVRC(Image Large Scale Visual Recognition Challenge)比賽分類項(xiàng)目的冠軍。
AlexNet主要使用到的新技術(shù)如下:
a) 成功使用ReLU作為CNN的激活函數(shù),并驗(yàn)證了其在較深網(wǎng)絡(luò)中的有效性,解決了Sigmod在網(wǎng)絡(luò)較深時(shí)的梯度彌散問題。b) 訓(xùn)練時(shí)在最后幾個(gè)全連接層使用Dropout隨機(jī)忽略一部分神經(jīng)元以避免模型過擬合,c) 使用重疊的最大池化。AlexNet全部使用最大池化,避免平均池化的模糊效果;并提出讓步長(zhǎng)比池化核的尺寸小,這樣池化層的輸出之間會(huì)有重疊覆蓋,特升了特征的豐富性。d) 提出LRN(Local Response Normalization,局部響應(yīng)歸一化)層,如今已很少使用。e) 使用CUDA加速深度卷積神經(jīng)網(wǎng)絡(luò)的訓(xùn)練。當(dāng)初用的還是兩塊GRX 580 GPU,發(fā)展的好快呀。f)數(shù)據(jù)增強(qiáng),隨機(jī)從256*256的原始圖像中截取224*224大小的區(qū)域作為網(wǎng)絡(luò)輸入。
整個(gè)AlexNet有5個(gè)卷積層和3個(gè)全連接層。
其參數(shù)圖如下:
關(guān)于計(jì)算params和FLOPs的方法,參看Deep Learning for Computer Vision: Memory usage and computational considerations
使用tensorflow實(shí)現(xiàn)AlexNet
參考網(wǎng)址:https://github.com/tensorflow/models/tree/master/tutorials/image/alexnet
VGGNet
VGGNet結(jié)構(gòu)非常簡(jiǎn)潔,其特點(diǎn)如下:
a) 通過反復(fù)堆疊3*3的小型卷積核和2*2的最大池化層構(gòu)建。b) VGGNet擁有5段卷積,每一段卷積網(wǎng)絡(luò)都會(huì)將圖像的邊長(zhǎng)縮小一半,但將卷積通道數(shù)翻倍:64 —>128 —>256 —>512 —>512 。這樣圖像的面積縮小到1/4,輸出通道數(shù)變?yōu)?倍,輸出tensor的總尺寸每次縮小一半。c) 經(jīng)常多個(gè)完全一樣的3*3的卷積層堆疊在一起。這其實(shí)是非常有用的設(shè)計(jì):3個(gè)3*3的卷積層串聯(lián)相當(dāng)于1個(gè)7*7的卷積層,即一個(gè)像素會(huì)跟周圍7*7的像素產(chǎn)生關(guān)聯(lián),可以說感受野大小是7*7。而且前者擁有比后者更少的參數(shù)量,3×3×37×7=55%3×3×37×7=55%。更重要的是,3個(gè)3*3的卷積層擁有比1個(gè)7*7的卷積層更多的線性變換(前者可以使用三次ReLU激活函數(shù)),使得CNN對(duì)特征的學(xué)習(xí)能力更強(qiáng)。
d) 訓(xùn)練時(shí)有個(gè)小技巧:先訓(xùn)練級(jí)別A的簡(jiǎn)單網(wǎng)絡(luò),再復(fù)用A網(wǎng)絡(luò)的權(quán)重初始化后幾個(gè)復(fù)雜模型,這樣訓(xùn)練收斂的速度更快。
使用tensorflow實(shí)現(xiàn)VGGNet
參考網(wǎng)址:https://github.com/machrisaa/tensorflow-vgg
Google Inception Net
具有如下特點(diǎn):
a)在控制了計(jì)算量和參數(shù)量的同時(shí),獲得了非常好的分類性能。Inception V1有22層深,但其計(jì)算量只有15億次浮點(diǎn)運(yùn)算,同時(shí)只有500萬的參數(shù)量,即為AlexNet參數(shù)量(6000萬)的1/12。為什么要降低參數(shù)量?第一,參數(shù)越多模型越龐大,(同樣深度下)需要供模型學(xué)習(xí)的數(shù)據(jù)量就越大,而目前高質(zhì)量的數(shù)據(jù)又很貴;第二,參數(shù)越多,耗費(fèi)的計(jì)算資源也越大。Inception V1參數(shù)少但效果好的原因之一就在于其模型參數(shù)更深、表達(dá)能力更強(qiáng)。b)去除了最后的全連接層,使用1*1的卷積層來替代,這樣是模型訓(xùn)練更快并減輕了過擬合。關(guān)于這方面可參見:為什么使用卷積層替代CNN末尾的全連接層c)精心設(shè)計(jì)的Inception Module(Network In Network的思想)有選擇地保留不同層次的高階特征,最大程度地豐富網(wǎng)絡(luò)的表達(dá)能力。一般來說卷積層要提升表達(dá)能力,主要依靠增加輸出通道數(shù)(副作用是計(jì)算量大和過擬合)。因?yàn)槊恳粋€(gè)輸出通道對(duì)應(yīng)一個(gè)濾波器,同一個(gè)濾波器共享參數(shù)只能提取一類特征,因此一個(gè)輸出通道只能做一種特征處理。Inception Module一般情況下有4個(gè)分支:第一個(gè)分支為1*1卷積(性價(jià)比很高,低成本(計(jì)算量?。┑目缤ǖ捞卣髯儞Q,同時(shí)可以對(duì)輸出通道升維和降維),第二個(gè)分支為1個(gè)1*1卷積再接分解后(factorized)的1*n和n*1卷積 (Factorization into small convolutions的思想),第三個(gè)分支和第二個(gè)類似但一般更深一些,第四個(gè)分支為最大池化(增加了網(wǎng)絡(luò)對(duì)不同尺度的適應(yīng)性,Multi-Scale的思想)。因此Inception Module通過比較簡(jiǎn)單的特征抽象(分支1)、比較復(fù)雜的特征抽象(分支2和分支3)和一個(gè)簡(jiǎn)化結(jié)構(gòu)的池化層(分支4)有選擇地保留不同層次的高階特征,這樣可以最大程度地豐富網(wǎng)絡(luò)的表達(dá)能力。
d) Inception V2提出了著名的Batch Normalization方法。BN用于神經(jīng)網(wǎng)絡(luò)某層時(shí),會(huì)對(duì)每一個(gè)mini-batch數(shù)據(jù)內(nèi)部進(jìn)行標(biāo)準(zhǔn)化(normalization)處理,是輸出規(guī)范化到N(0, 1)的正態(tài)分布,減少了Internal Covariate shift。關(guān)于這方面可參見:為什么會(huì)出現(xiàn)Batch Normalization層e) Inception V3引入了Factorization into small convolutions的思想,將一個(gè)較大的二維卷積拆成兩個(gè)較小的一維卷積。比如,將7*7卷積拆成1*7和7*1兩個(gè)卷積。這樣做節(jié)約了大量參數(shù),加速運(yùn)算并減輕了過擬合(比將7*7卷積拆成3個(gè)3*3卷積更節(jié)約參數(shù));并且論文指出這種非對(duì)稱的卷積結(jié)構(gòu)拆分比對(duì)稱地拆分為幾個(gè)相同的小卷積核效果更明顯,可以處理更多、更豐富的空間特征,增加特征多樣性。
使用tensorflow實(shí)現(xiàn)inception_v3
參考網(wǎng)址:https://github.com/tensorflow/models/blob/master/slim/nets/inception_v3.py
ResNet
這是一種新的網(wǎng)絡(luò)思想,說一下我自己的理解。
為什么會(huì)出現(xiàn)Residual Learning
人們觀察到一個(gè)典型現(xiàn)象:當(dāng)網(wǎng)絡(luò)一直加深時(shí),準(zhǔn)確率會(huì)趨于峰值,然后再加深網(wǎng)絡(luò)準(zhǔn)確率反而會(huì)下降(在訓(xùn)練集和測(cè)試集上均是如此,這顯然就不是過擬合了)。ResNet作者把這種現(xiàn)象稱為degradation problem。
然后大家開始想,前向傳播過程中信息量越來越少是不錯(cuò),但也不至于逼近效果越來越差呀。聰明的小伙子(嚴(yán)肅來講應(yīng)該是大神)He提出:把新增加的層變?yōu)楹愕扔成洌╥dentity mappings),這樣至少效果不會(huì)越來越差吧。既然網(wǎng)絡(luò)能擬合函數(shù)H(x),是不是也能同樣擬合H(x)-x。說干就干,實(shí)驗(yàn)是檢驗(yàn)真理的唯一標(biāo)準(zhǔn)。于是得出結(jié)論“擬合H(x)-x比直接擬合H(x)更簡(jiǎn)單”(當(dāng)然理論上他也有一套自己的解釋:如果我們想要得到的最優(yōu)結(jié)果是x,擬合前者顯然更簡(jiǎn)單,權(quán)重直接為0即可;雖然現(xiàn)實(shí)中我們想要的并非x,但我們想要的更應(yīng)該接近x而非接近0吧)。哈哈,深度殘差網(wǎng)絡(luò)就這樣誕生了。
ResNet單元模塊
如上圖所示為兩種類型的block,block定義如下:
y=F(x,Wi)+xy=F(x,Wi)+x
對(duì)于block里只有兩個(gè)卷積的情況,
F=W2σ(W1x)F=W2σ(W1x)
上述公式里兩者相加存在一個(gè)問題:1. 各個(gè)維度相同,直接相加即可2. 維度不同(在第一張圖網(wǎng)絡(luò)的虛線處,feature map尺寸大小和通道數(shù)均發(fā)生變化),論文中說給x加個(gè)WsWs的映射。我的理解是對(duì)x加個(gè)池化(stride=2)即可滿足尺寸變化,然后再利用1*1小卷積升維即可。
ResNet網(wǎng)絡(luò)特點(diǎn)
a) 網(wǎng)絡(luò)較瘦,控制了參數(shù)數(shù)量;b) 存在明顯層級(jí),特征圖個(gè)數(shù)逐層遞進(jìn),保證輸出特征表達(dá)能力;c)沒有使用Dropout,利用BN和全局平均池化進(jìn)行正則化,加快了訓(xùn)練速度;d) 層數(shù)較高時(shí)減少了3x3卷積個(gè)數(shù),并用1x1卷積控制了3x3卷積的輸入輸出特征圖數(shù)量,稱這種結(jié)構(gòu)為“瓶頸”(bottleneck)。參考:https://zhuanlan.zhihu.com/p/22447440
使用tensorflow實(shí)現(xiàn)Resnet_v2
參考網(wǎng)址:https://github.com/tensorflow/models/blob/master/slim/nets/resnet_v2.py
參考:1.以上相關(guān)模型的論文,這里就不貼了2.書籍《Tensorflow實(shí)戰(zhàn)》
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4814瀏覽量
103691 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4381瀏覽量
64926
原文標(biāo)題:幾種經(jīng)典卷積神經(jīng)網(wǎng)絡(luò)介紹
文章出處:【微信號(hào):Imgtec,微信公眾號(hào):Imagination Tech】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
從AlexNet到ResNet的網(wǎng)絡(luò)架構(gòu)進(jìn)步

如何高效學(xué)習(xí)一門新技術(shù)
納米防水技術(shù)特點(diǎn)介紹(新技術(shù))
尋找電源領(lǐng)域的最新技術(shù)?
手機(jī)的新技術(shù)盤點(diǎn)
音頻創(chuàng)新技術(shù)主要應(yīng)用在哪些領(lǐng)域?
PyTorch教程8.1之深度卷積神經(jīng)網(wǎng)絡(luò)(AlexNet)

哪些材料需要使用到雙85恒溫恒濕試驗(yàn)箱做測(cè)試

評(píng)論