GoogLeNet Incepetion V1
這是GoogLeNet的最早版本,出現在2014年的《Going deeper with convolutions》。之所以名為“GoogLeNet”而非“GoogleNet”,文章說是為了向早期的LeNet致敬。
深度學習以及神經網絡快速發展,人們不再只關注更給力的硬件、更大的數據集、更大的模型,而是更在意新的idea、新的算法以及模型的改進。
一般來說,提升網絡性能最直接的辦法就是增加網絡深度和寬度,這也就意味著巨量的參數。但是,巨量參數容易產生過擬合也會大大增加計算量。
文章認為解決上述兩個缺點的根本方法是將全連接甚至一般的卷積都轉化為稀疏連接。一方面現實生物神經系統的連接也是稀疏的,另一方面有文獻表明:對于大規模稀疏的神經網絡,可以通過分析激活值的統計特性和對高度相關的輸出進行聚類來逐層構建出一個最優網絡。這點表明臃腫的稀疏網絡可能被不失性能地簡化。 雖然數學證明有著嚴格的條件限制,但Hebbian準則有力地支持了這一點:fire together,wire together。
早些的時候,為了打破網絡對稱性和提高學習能力,傳統的網絡都使用了隨機稀疏連接。但是,計算機軟硬件對非均勻稀疏數據的計算效率很差,所以在AlexNet中又重新啟用了全連接層,目的是為了更好地優化并行運算。
所以,現在的問題是有沒有一種方法,既能保持網絡結構的稀疏性,又能利用密集矩陣的高計算性能。大量的文獻表明可以將稀疏矩陣聚類為較為密集的子矩陣來提高計算性能,據此論文提出了名為Inception 的結構來實現此目的。
Inception
Inception 結構的主要思路是怎樣用密集成分來近似最優的局部稀疏結構。
作者首先提出下圖這樣的基本結構:
對上圖做以下說明:
- 采用不同大小的卷積核意味著不同大小的感受,最后拼接意味著不同尺度特征的融合;
- 之所以卷積核大小采用1、3和5,主要是為了方便對齊。設定卷積步長stride=1之后,只要分別設定pad=0、1、2,那么卷積之后便可以得到相同維度的特征,然后這些特征就可以直接拼接在一起了;
- 文章說很多地方都表明pooling挺有效,所以Inception里面也嵌入了。
- 網絡越到后面,特征越抽象,而且每個特征所涉及的感受也更大了,因此隨著層數的增加,3x3和5x5卷積的比例也要增加。
但是,使用5x5的卷積核仍然會帶來巨大的計算量。 為此,文章借鑒NIN,采用1x1卷積核來進行降維。
例如:上一層的輸出為100x100x128,經過具有256個輸出的5x5卷積層之后(stride=1,pad=2),輸出數據為100x100x256。其中,卷積層的參數為128x5x5x256。假如上一層輸出先經過具有32個輸出的1x1卷積層,再經過具有256個輸出的5x5卷積層,那么最終的輸出數據仍為為100x100x256,但卷積參數量已經減少為128x1x1x32 + 32x5x5x256,大約減少了4倍。
具體改進后的Inception Module如下圖:
GoogLeNet
- GoogLeNet采用了模塊化的結構,方便增添和修改;
- 網絡最后采用了average pooling來代替全連接層,想法來自NIN,事實證明可以將TOP1 accuracy提高0.6%。但是,實際在最后還是加了一個全連接層,主要是為了方便以后大家finetune;
- 雖然移除了全連接,但是網絡中依然使用了Dropout ;
- 為了避免梯度消失,網絡額外增加了2個輔助的softmax用于向前傳導梯度。文章中說這兩個輔助的分類器的loss應該加一個衰減系數,但看caffe中的model也沒有加任何衰減。此外,實際測試的時候,這兩個額外的softmax會被去掉。
下圖是一個比較清晰的結構圖:
Top5錯誤率6.7%;使用9個inception模塊,改變CNN原串行結構,并行,共22層;使用平均池化替代FC層;參數量僅為AlexNet的1/12;使用softmax獲取平均結果;網絡結構的更新,性能比AlexNet要好;2014年ILSVRC冠軍
GoogLeNet借鑒了NIN的特性,在原先的卷積過程中附加了1*1的卷積核加上ReLU激活。
這不僅僅提升了網絡的深度,提高了representation power,而且文中還通過1*1的卷積來進行降維,減少了更新參數量 。
NIN模型
Network-in-Network主要思想是,用全連接的多層感知機去代替傳統的卷積過程,以獲取特征更加全面的表達,同時,因為前面已經做了提升特征表達的過程,傳統CNN最后的全連接層也被替換為一個全局平均池化層,因為作者認為此時的map已經具備分類足夠的可信度了,它可以直接通過softmax來計算loss了
結構
Conclusion
GoogLeNet是谷歌團隊為了參加ILSVRC 2014比賽而精心準備的,為了達到最佳的性能,除了使用上述的網絡結構外,還做了大量的輔助工作:包括訓練多個model求平均、裁剪不同尺度的圖像做多次驗證等等。詳細的這些可以參看文章的實驗部分。
本文的主要想法其實是想通過構建密集的塊結構來近似最優的稀疏結構,從而達到提高性能而又不大量增加計算量的目的。GoogleNet的caffemodel大小約50M,但性能卻很優異。
GoogLeNet Inception V2
GoogLeNet憑借其優秀的表現,得到了很多研究人員的學習和使用,因此Google團隊又對其進行了進一步發掘改進,產生了升級版本的GoogLeNet。這一節介紹的版本記為V2,文章為:《Rethinking the Inception Architecture for Computer Vision》。
Introduction
14年以來,構建更深的網絡逐漸成為主流,但是模型的變大也使計算效率越來越低。這里,文章試圖找到一種方法在擴大網絡的同時又盡可能地發揮計算性能。
首先,GoogLeNet V1出現的同期,性能與之接近的大概只有VGGNet了,并且二者在圖像分類之外的很多領域都得到了成功的應用。但是相比之下,GoogLeNet的計算效率明顯高于VGGNet,大約只有500萬參數,只相當于Alexnet的1/12(GoogLeNet的caffemodel大約50M,VGGNet的caffemodel則要超過600M)。