始于LeNet-5,一個有着标準的堆疊式卷積層冰帶有一個或多個全連接配接層的結構的卷積神經網絡。通常使用dropout來針對過拟合問題。
為了提出一個更深的網絡,GoogLeNet做到了22層,利用inception結構,這個結構很好地利用了網絡中的計算資源,并且在不增加計算負載的情況下,增加網絡的寬度和深度。同時,為了優化網絡品質,采用了Hebbian原理和多尺度處理。GoogLeNet在分類和檢測上都取得了不錯的效果。

一、 基本思想及過程(Motivation)
深度學習以及神經網絡快速發展,人們不再隻關注更給力的硬體、更大的資料集、更大的模型,而是更在意新的idea、新的算法以及模型的改進。
一般來說,提升網絡性能最直接的方式就是加大神經網絡。
1、增加神經網絡的深度,也就是網絡層數。
2、增加神經網絡的寬度,也就是每一層的神經元個數。
但是這個會帶來兩個嚴重的缺點:
1、網絡參數增多,網絡會更加容易陷入過拟合。那這就又需要大量的訓練資料,而且高品質的額訓練資料的成本很高。
2、盲目的增加網絡大小之後,同時也會增加大量的計算成本。也易造成網絡計算資源的浪費
文章認為解決上述兩個缺點的根本方法是将全連接配接甚至一般的卷積都轉化為稀疏連接配接。一方面現實生物神經系統的連接配接也是稀疏的,另一方面有文獻表明:對于大規模稀疏的神經網絡,可以通過分析激活值的統計特性和對高度相關的輸出進行聚類來逐層建構出一個最優網絡。這點表明臃腫的稀疏網絡可能被不失性能地簡化。 雖然數學證明有着嚴格的條件限制,但Hebbian準則有力地支援了這一點:fire together,wire together。
總的來說就是, 将全連接配接的方式改為稀疏連接配接來解決這兩個問題。
inception架構的主要思想是建立在找到可以逼近的卷積視覺網絡内的最優局部稀疏結構,并可以通過易實作的子產品實作這種結構。
下面開始讨論幾個問題:
二、 inception子產品
明确目的:使用稀疏連接配接替代稠密結構。
理論依據(Arora):一個機率分布可以用一個大的稀疏的深度神經網絡表示,最優的結構的建構通過分析上層的激活狀态的統計相關性,并把輸出高度相關的神經元聚合。這與生物學中Hebbian法則“有些神經元響應基本一緻,即同時興奮或抑制”一緻。
存在問題:計算機的基礎結構在遇到稀疏資料計算時會很不高效,使用稀疏矩陣會使得效率大大降低。
目标:設計一種既能利用稀疏性,又可以利用稠密計算的網絡結構。
存在問題: 模型中是怎樣利用稀疏性的呢?稀疏性之後的計算量依然增加怎麼辦呢??
答: 某一層激活的神經元隻向下一層中特定的幾個神經元傳遞激活信号,而向其他神經元幾乎不傳遞資訊,即僅有少部分連接配接是真正有效的,這也是稀疏的含義。
然而另一方面,現代計算架構對稀疏的計算非常低效,更适合的是密集的計算,這樣便産生了沖突。而Inception單元的提出就是為了用密集的結構來近似稀疏結構,在模組化稀疏連接配接的同時又能利用密集計算的優勢。
總的來說就是, 在同一層利用了不同的核去對輸入的feature進行卷積把,分散成幾個小任務進行,然後再彙聚。 channel的意思其實就是神經元的個數,這裡降維的意思其實就是減少神經元的個數,比如原先的28*28*512 在1*1*256 之後 就是28*28*256(stride為1的情況), 這樣在整個網絡結構這一層就降維了,原作者發現在沒有1*1之前的參數空間存在很多稀疏的資料,這裡降維之後,參數空間會更dense,這樣就解決了文章說的痛點(也就是稀疏性增大計算困難的問題)
這兩個是最原始的模型。可以看出,因為卷積并不一定就改變大小,而通道數目由于分散的連接配接最終會增加,這樣很容易造成參數個數的指數級别的上升。論文中使用了NIN網絡中提到的利用1*1卷積核降維的作用,在卷積層處理前,先對特征圖層進行降維(注意是通道的降維,不是空間的降維),例如原本是M通道,降維到P通道後,在通過彙聚變成了M通道,這時參數的個數并沒有随着深度的加深而指數級的增長。
三、 Auxililary Classifier(輔助分類器)
這裡是本文的另一個貢獻,将監督資訊傳入中間的feature map,構成一個整合loss,作者認為這樣有助于淺層特征的學習。 即将中間某一層的輸出用作分類,并按一個較小的權重(0.3)加到最終分類結果中。這樣相當于做了模型融合,同時給網絡增加了反向傳播的梯度信号,也提供了額外的正則化,對于整個Inception Net的訓練很有裨益。 (在測試階段去除這個AC層)
四、GoogleNet架構與CNN源碼
下面的表顯示了GoogLeNet的整體架構,可以留意到Inception單元的堆疊和Channel數在子路徑中的變化。NetScope可視化可參見GoogLeNet Vis。源檔案位于awesome_cnn;