GoogLeNet網絡模型

一、GoogleNet模型簡介
  GoogleNet和VGG是2014年imagenet競賽的雙雄,這兩類模型結構有一個共同特點是go deeper。跟VGG不同的是,GoogleNet做了更大膽的網絡上的嘗試而不是像VGG繼承了Lenet以及AlexNet的一些框架,該模型雖然有22層,但大小卻比AlexNet和VGG都小很多,性能優越。
深度學習以及神經網絡快速發展,人們容易通過更高性能的硬件,更龐大的帶標籤數據和更深更寬的網絡模型等手段來獲得更好的預測識別效果,但是這一策略帶來了兩個重要的缺陷。
  (1)更深更寬的網絡模型會產生巨量參數,從而容易出現過擬合現象。
  (2)網絡規模加大會極大增加計算量,消耗更多的計算資源。
  解決這兩個缺陷的根本方法就是將全連接甚至一般的卷積都轉化爲稀疏連接。一方面現實生物神經系統的連接也是稀疏的,另一方面有文獻表明:對於大規模稀疏的神經網絡,可以通過分析激活值的統計特性和對高度相關的輸出進行聚類來逐層構建出一個最優網絡。這點表明臃腫的稀疏網絡可能被不失性能地簡化。 雖然數學證明有着嚴格的條件限制,但Hebbian定理有力地支持了這一結論。
  由於計算機軟硬件對非均勻稀疏數據的計算效率很差,所以在AlexNet模型重新啓用了全連接層,其目的是爲了更好地優化並行運算。所以,現在的問題是否有一種方法,既能保持網絡結構的稀疏性,又能利用密集矩陣的高計算性能。事實上可以將稀疏矩陣聚類爲較爲密集的子矩陣來提高計算性能,具體方法是採用將多個稀疏矩陣合併成相關的稠密子矩陣的方法來提高計算性能,Google團隊沿着這個思路提出了名爲Inception 結構來實現此目的。

二、Inception 結構
2.1 Inception模型 A
  Inception結構的主要思想是找出如何讓已有的稠密組件接近與覆蓋卷積視覺網絡中的最佳局部稀疏結構。有文獻提出一個層與層的結構,在結構的最後一層進行相關性統計,將高相關性的聚集到一起。這些聚類構成下一層的單元,且與上一層單元連接。假設前面層的每個單元對應於輸入圖像的某些區域,這些單元被分爲濾波器組。低層的單元集中在某些局部區域,最終得到在單個區域中的大量聚類,它們能在下一層通過1x1的卷積覆蓋。
  總的來說,Inception結構的主要思路是用密集成分來近似最優的局部稀疏結構。Google團隊首先提出來的是Inception模型A,如下圖所示:

這裏寫圖片描述

  這個模型意在強化基本特徵提取模塊的功能,一般的卷積層只是增加捲積層的深度和個數,但是在單層上卷積核卻只有一種,比如對於VGG,單層卷積核只有3x3大小的,這樣特徵提取的功能可能就比較弱。GoogLenet想的就是能不能增加單層卷積層的寬度,即在單層卷積層上使用不同尺度的卷積核,如上圖所示基本的Inception module中有1x1卷積核,3x3卷積核,5x5卷積核還有一個3x3下采樣。這樣尺寸不同的卷積核就可以提取不同尺寸的特徵,單層的特徵提取能力增強了。
  但是此時會有個疑問,對於像VGG這種網絡,自己同樣可以通過卷積-下采樣-卷積這種方式提取不同尺寸的信息,所以爲什麼Inception module這種網絡會有很好的效果的,具體的原因是採用卷積-下采樣-卷積這種方式雖然能夠提取不同尺寸的信息,但是由於是通過下采樣這種方式實現的,所以必會帶來信息的丟失,和Inception module這種方式相比,顯然丟失的信息更多。
  針對上面的模型進行一下注釋:
  (1)採用不同大小的卷積核意味着不同大小的感受野,最後拼接意味着不同尺度特徵的融合;
  (2)之所以卷積核大小採用1、3和5,主要是爲了方便對齊。設定卷積步長stride=1之後,只要分別設定pad=0、1、2,那麼卷積之後便可以得到相同維度的特徵,然後這些特徵就可以直接拼接在一起了;
  (3)很多文獻都表明pooling挺有效,所以Inception模型嵌入了poolong層;
  (4)網絡越到後面,特徵越抽象,空間集中性會降低,所以每個特徵所涉及的感受野需要更大,因此隨着層數的增加,3x3和5x5卷積的比例也要增加。
2.2 Inception模型 B
  上面Inception module A結構會存在一個問題,就是前一層的輸出不經任何處理直接輸入到下一層的卷積層中,這樣如果前一層的特徵圖數量很多,有經過5x5這種大尺寸的卷積,帶來的計算量也是非常大,所以在修正過後的Inception module在輸出到下一層卷積之前,會對數據進行一次降維,那麼怎麼來實現數據降維,方法是採用1x1卷積核來實現。例如:上一層的輸出爲100x100x128,經過具有256個輸出的5x5卷積層之後(stride=1,pad=2),輸出數據爲100x100x256。其中,卷積層的參數爲128x5x5x256。假如上一層輸出先經過具有32個輸出的1x1卷積層,再經過具有256個輸出的5x5卷積層,那麼最終的輸出數據仍爲爲100x100x256,但卷積參數量已經減少爲128x1x1x32 + 32x5x5x256,大約減少了4倍。
  改進後的 Inception模型B如下圖所示:

這裏寫圖片描述

  改進後的Inception module既能大大提升卷積提取特徵的能力,又不會使計算量提升很多。實驗表明,採用了Inception模塊的網絡要比沒有采用Inception模塊的同樣架構的網絡快2~3倍。

三、GoogLeNet模型
  GoogLeNet共有22層,原始輸入數據的大小爲224*224*3。
  GoogLeNet 網絡結構如下圖所示:

這裏寫圖片描述

  GoogLeNet網絡模型參數變化如下圖所示:

這裏寫圖片描述

總體結構:
  (1)包括Inception模塊的所有卷積,都用了修正線性單元(ReLU);
  (2)網絡的感受野大小是224x224,採用RGB彩色通道,且減去均值;
  (3)#3x3 reduce和#5x5 reduce分別表示3x3和5x5的卷積前縮減層中1x1濾波器的個數;pool proj表示嵌入的max-pooling之後的投影層中1x1濾波器的個數;縮減層和投影層都要用ReLU;
  (4)網絡包含22個帶參數的層(如果考慮pooling層就是27層),獨立成塊的層總共有約有100個;
  (5)網絡中間的層次生成的特徵會非常有區分性,給這些層增加一些輔助分類器。這些分類器以小卷積網絡的形式放在Inception(4a)和Inception(4b)的輸出上。在訓練過程中,損失會根據折扣後的權重(折扣權重爲0.3)疊加到總損失中。

四、GoogLeNet模型特點
  GoogLeNet模型採用了Inception結構,不僅進一步提升了預測分類的準確率,而且極大的減小了參數量,分析其原因如下:
  (1)GoogLeNet採用了模塊化的結構,方便增添和修改;
  (2)網絡最後採用了average pooling來代替全連接層,但是,實際在最後還是加了一個全連接層,主要是爲了方便以後大家finetune;
  (3)雖然移除了全連接,但是網絡中依然使用了Dropout ;
  (4)爲了避免梯度消失,網絡額外增加了2個輔助的softmax用於向前傳導梯度。
  本文的主要想法其實是想通過構建密集的塊結構來近似最優的稀疏結構,從而達到提高性能而又不大量增加計算量的目的,上面的這些模型特點很好的實現了這個想法。GoogleNet的caffemodel大小約50M,性能很優異。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章