GoogLeNet系列解读
https://blog.csdn.net/shuzfan/article/details/50738394
本文介紹的是著名的網(wǎng)絡(luò)結(jié)構(gòu)GoogLeNet及其延伸版本,目的是試圖領(lǐng)會(huì)其中的思想而不是單純關(guān)注結(jié)構(gòu)。
- GoogLeNet Incepetion V1
- Motivation
- Architectural Details
- GoogLeNet
- Conclusion
- GoogLeNet Inception V2
- Introduction
- General Design Principles
- Factorizing Convolutions with Large Filter Size
- 未完待續(xù)
GoogLeNet Incepetion V1
這是GoogLeNet的最早版本,出現(xiàn)在2014年的《Going deeper with convolutions》。之所以名為“GoogLeNet”而非“GoogleNet”,文章說(shuō)是為了向早期的LeNet致敬。
Motivation
深度學(xué)習(xí)以及神經(jīng)網(wǎng)絡(luò)快速發(fā)展,人們不再只關(guān)注更給力的硬件、更大的數(shù)據(jù)集、更大的模型,而是更在意新的idea、新的算法以及模型的改進(jìn)。
一般來(lái)說(shuō),提升網(wǎng)絡(luò)性能最直接的辦法就是增加網(wǎng)絡(luò)深度和寬度,這也就意味著巨量的參數(shù)。但是,巨量參數(shù)容易產(chǎn)生過(guò)擬合也會(huì)大大增加計(jì)算量。
文章認(rèn)為解決上述兩個(gè)缺點(diǎn)的根本方法是將全連接甚至一般的卷積都轉(zhuǎn)化為稀疏連接。一方面現(xiàn)實(shí)生物神經(jīng)系統(tǒng)的連接也是稀疏的,另一方面有文獻(xiàn)1表明:對(duì)于大規(guī)模稀疏的神經(jīng)網(wǎng)絡(luò),可以通過(guò)分析激活值的統(tǒng)計(jì)特性和對(duì)高度相關(guān)的輸出進(jìn)行聚類來(lái)逐層構(gòu)建出一個(gè)最優(yōu)網(wǎng)絡(luò)。這點(diǎn)表明臃腫的稀疏網(wǎng)絡(luò)可能被不失性能地簡(jiǎn)化。 雖然數(shù)學(xué)證明有著嚴(yán)格的條件限制,但Hebbian準(zhǔn)則有力地支持了這一點(diǎn):fire together,wire together。
早些的時(shí)候,為了打破網(wǎng)絡(luò)對(duì)稱性和提高學(xué)習(xí)能力,傳統(tǒng)的網(wǎng)絡(luò)都使用了隨機(jī)稀疏連接。但是,計(jì)算機(jī)軟硬件對(duì)非均勻稀疏數(shù)據(jù)的計(jì)算效率很差,所以在AlexNet中又重新啟用了全連接層,目的是為了更好地優(yōu)化并行運(yùn)算。
所以,現(xiàn)在的問(wèn)題是有沒有一種方法,既能保持網(wǎng)絡(luò)結(jié)構(gòu)的稀疏性,又能利用密集矩陣的高計(jì)算性能。大量的文獻(xiàn)表明可以將稀疏矩陣聚類為較為密集的子矩陣來(lái)提高計(jì)算性能,據(jù)此論文提出了名為Inception 的結(jié)構(gòu)來(lái)實(shí)現(xiàn)此目的。
Architectural Details
Inception 結(jié)構(gòu)的主要思路是怎樣用密集成分來(lái)近似最優(yōu)的局部稀疏結(jié)構(gòu)。
作者首先提出下圖這樣的基本結(jié)構(gòu):
對(duì)上圖做以下說(shuō)明:
1 . 采用不同大小的卷積核意味著不同大小的感受野,最后拼接意味著不同尺度特征的融合;
2 . 之所以卷積核大小采用1、3和5,主要是為了方便對(duì)齊。設(shè)定卷積步長(zhǎng)stride=1之后,只要分別設(shè)定pad=0、1、2,那么卷積之后便可以得到相同維度的特征,然后這些特征就可以直接拼接在一起了;
3 . 文章說(shuō)很多地方都表明pooling挺有效,所以Inception里面也嵌入了。
4 . 網(wǎng)絡(luò)越到后面,特征越抽象,而且每個(gè)特征所涉及的感受野也更大了,因此隨著層數(shù)的增加,3x3和5x5卷積的比例也要增加。
但是,使用5x5的卷積核仍然會(huì)帶來(lái)巨大的計(jì)算量。 為此,文章借鑒NIN2,采用1x1卷積核來(lái)進(jìn)行降維。
例如:上一層的輸出為100x100x128,經(jīng)過(guò)具有256個(gè)輸出的5x5卷積層之后(stride=1,pad=2),輸出數(shù)據(jù)為100x100x256。其中,卷積層的參數(shù)為128x5x5x256。假如上一層輸出先經(jīng)過(guò)具有32個(gè)輸出的1x1卷積層,再經(jīng)過(guò)具有256個(gè)輸出的5x5卷積層,那么最終的輸出數(shù)據(jù)仍為為100x100x256,但卷積參數(shù)量已經(jīng)減少為128x1x1x32 + 32x5x5x256,大約減少了4倍。
具體改進(jìn)后的Inception Module如下圖:
GoogLeNet
GoogLeNet的整體結(jié)構(gòu)如下圖:
對(duì)上圖做如下說(shuō)明:
1 . 顯然GoogLeNet采用了模塊化的結(jié)構(gòu),方便增添和修改;
2 . 網(wǎng)絡(luò)最后采用了average pooling來(lái)代替全連接層,想法來(lái)自NIN,事實(shí)證明可以將TOP1 accuracy提高0.6%。但是,實(shí)際在最后還是加了一個(gè)全連接層,主要是為了方便以后大家finetune;
3 . 雖然移除了全連接,但是網(wǎng)絡(luò)中依然使用了Dropout ;
4 . 為了避免梯度消失,網(wǎng)絡(luò)額外增加了2個(gè)輔助的softmax用于向前傳導(dǎo)梯度。文章中說(shuō)這兩個(gè)輔助的分類器的loss應(yīng)該加一個(gè)衰減系數(shù),但看caffe中的model也沒有加任何衰減。此外,實(shí)際測(cè)試的時(shí)候,這兩個(gè)額外的softmax會(huì)被去掉。
下圖是一個(gè)比較清晰的結(jié)構(gòu)圖:
Conclusion
GoogLeNet是谷歌團(tuán)隊(duì)為了參加ILSVRC 2014比賽而精心準(zhǔn)備的,為了達(dá)到最佳的性能,除了使用上述的網(wǎng)絡(luò)結(jié)構(gòu)外,還做了大量的輔助工作:包括訓(xùn)練多個(gè)model求平均、裁剪不同尺度的圖像做多次驗(yàn)證等等。詳細(xì)的這些可以參看文章的實(shí)驗(yàn)部分。
本文的主要想法其實(shí)是想通過(guò)構(gòu)建密集的塊結(jié)構(gòu)來(lái)近似最優(yōu)的稀疏結(jié)構(gòu),從而達(dá)到提高性能而又不大量增加計(jì)算量的目的。GoogleNet的caffemodel大小約50M,但性能卻很優(yōu)異。
GoogLeNet Inception V2
GoogLeNet憑借其優(yōu)秀的表現(xiàn),得到了很多研究人員的學(xué)習(xí)和使用,因此Google團(tuán)隊(duì)又對(duì)其進(jìn)行了進(jìn)一步發(fā)掘改進(jìn),產(chǎn)生了升級(jí)版本的GoogLeNet。這一節(jié)介紹的版本記為V2,文章為:《Rethinking the Inception Architecture for Computer Vision》。
Introduction
14年以來(lái),構(gòu)建更深的網(wǎng)絡(luò)逐漸成為主流,但是模型的變大也使計(jì)算效率越來(lái)越低。這里,文章試圖找到一種方法在擴(kuò)大網(wǎng)絡(luò)的同時(shí)又盡可能地發(fā)揮計(jì)算性能。
首先,GoogLeNet V1出現(xiàn)的同期,性能與之接近的大概只有VGGNet了,并且二者在圖像分類之外的很多領(lǐng)域都得到了成功的應(yīng)用。但是相比之下,GoogLeNet的計(jì)算效率明顯高于VGGNet,大約只有500萬(wàn)參數(shù),只相當(dāng)于Alexnet的1/12(GoogLeNet的caffemodel大約50M,VGGNet的caffemodel則要超過(guò)600M)。
GoogLeNet的表現(xiàn)很好,但是,如果想要通過(guò)簡(jiǎn)單地放大Inception結(jié)構(gòu)來(lái)構(gòu)建更大的網(wǎng)絡(luò),則會(huì)立即提高計(jì)算消耗。此外,在V1版本中,文章也沒給出有關(guān)構(gòu)建Inception結(jié)構(gòu)注意事項(xiàng)的清晰描述。因此,在文章中作者首先給出了一些已經(jīng)被證明有效的用于放大網(wǎng)絡(luò)的通用準(zhǔn)則和優(yōu)化方法。這些準(zhǔn)則和方法適用但不局限于Inception結(jié)構(gòu)。
General Design Principles
下面的準(zhǔn)則來(lái)源于大量的實(shí)驗(yàn),因此包含一定的推測(cè),但實(shí)際證明基本都是有效的。
1 . 避免表達(dá)瓶頸,特別是在網(wǎng)絡(luò)靠前的地方。 信息流前向傳播過(guò)程中顯然不能經(jīng)過(guò)高度壓縮的層,即表達(dá)瓶頸。從input到output,feature map的寬和高基本都會(huì)逐漸變小,但是不能一下子就變得很小。比如你上來(lái)就來(lái)個(gè)kernel = 7, stride = 5 ,這樣顯然不合適。
另外輸出的維度channel,一般來(lái)說(shuō)會(huì)逐漸增多(每層的num_output),否則網(wǎng)絡(luò)會(huì)很難訓(xùn)練。(特征維度并不代表信息的多少,只是作為一種估計(jì)的手段)
2 . 高維特征更易處理。 高維特征更易區(qū)分,會(huì)加快訓(xùn)練。
3. 可以在低維嵌入上進(jìn)行空間匯聚而無(wú)需擔(dān)心丟失很多信息。 比如在進(jìn)行3x3卷積之前,可以對(duì)輸入先進(jìn)行降維而不會(huì)產(chǎn)生嚴(yán)重的后果。假設(shè)信息可以被簡(jiǎn)單壓縮,那么訓(xùn)練就會(huì)加快。
4 . 平衡網(wǎng)絡(luò)的寬度與深度。
上述的這些并不能直接用來(lái)提高網(wǎng)絡(luò)質(zhì)量,而僅用來(lái)在大環(huán)境下作指導(dǎo)。
Factorizing Convolutions with Large Filter Size
大尺寸的卷積核可以帶來(lái)更大的感受野,但也意味著更多的參數(shù),比如5x5卷積核參數(shù)是3x3卷積核的25/9=2.78倍。為此,作者提出可以用2個(gè)連續(xù)的3x3卷積層(stride=1)組成的小網(wǎng)絡(luò)來(lái)代替單個(gè)的5x5卷積層,(保持感受野范圍的同時(shí)又減少了參數(shù)量)如下圖:
然后就會(huì)有2個(gè)疑問(wèn):
1 . 這種替代會(huì)造成表達(dá)能力的下降嗎?
后面有大量實(shí)驗(yàn)可以表明不會(huì)造成表達(dá)缺失;
2 . 3x3卷積之后還要再加激活嗎?
作者也做了對(duì)比試驗(yàn),表明添加非線性激活會(huì)提高性能。
從上面來(lái)看,大卷積核完全可以由一系列的3x3卷積核來(lái)替代,那能不能分解的更小一點(diǎn)呢。文章考慮了 nx1 卷積核。
如下圖所示的取代3x3卷積:
于是,任意nxn的卷積都可以通過(guò)1xn卷積后接nx1卷積來(lái)替代。實(shí)際上,作者發(fā)現(xiàn)在網(wǎng)絡(luò)的前期使用這種分解效果并不好,還有在中度大小的feature map上使用效果才會(huì)更好。(對(duì)于mxm大小的feature map,建議m在12到20之間)。
總結(jié)如下圖:
(1) 圖4是GoogLeNet V1中使用的Inception結(jié)構(gòu);
(2) 圖5是用3x3卷積序列來(lái)代替大卷積核;
(3) 圖6是用nx1卷積來(lái)代替大卷積核,這里設(shè)定n=7來(lái)應(yīng)對(duì)17x17大小的feature map。該結(jié)構(gòu)被正式用在GoogLeNet V2中。
未完待續(xù)
總結(jié)
以上是生活随笔為你收集整理的GoogLeNet系列解读的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 排除网络故障课后习题参考答案
- 下一篇: ESP8266-01学习笔记01:如何使