網絡結構解讀之inception系列二:GoogLeNet(Inception V1)
inception系列的開山之作,有網絡結構設計的初期思考。
Going deeper with convolutions
-
motivations:
- 提高模型性能的最直接方式:1.加深(增加層)2.加寬(增加單層的神經元個數)
- 帶來的兩個弊端:1.大規模的參數易導致過擬合且需要更多的訓練集 2.更多的計算資源消耗
- 解決基本思想是在fc層甚至conv層使用稀疏連接結構,原因是1.生物中神經網絡是稀疏的.2Arora的實驗說明了,優化大規模的稀疏神經網絡時,可以通過分析激活值的統計特性和聚類相關性高的神經元來逐層構建一個最優網絡。(block設計的來源)。3.Hebbian 原理:neurons that fire together,wire together(說明神經元相關性)
- 早期稀疏結構實現缺點,軟硬件對非均勻的稀疏數據計算效率差,反倒是對密集矩陣(dense matrix)效率較高。
- 思考:有沒有一種方法,既能保持網絡結構的稀疏性,又能利用密集矩陣(卷積)的高計算性能。而相關文獻表明可以將稀疏矩陣聚類為較為密集的子矩陣來提高計算性能
-
Inception最初原形:
第一作者Christian Szegedy,評估一個復雜的網絡拓撲結構構建算法的假設輸出,該網絡試圖逼近Arora提出的稀疏結構。
最初結構只是猜想,然而通過兩輪的迭代后,獲得了不錯的結果。(實驗證明有效) - naive inception module:
說明:1.1x1conv,用於對相關性高的神經元聚類 2.為了避免patch alignment問題,增加3X3,5X5(大感受野的聚類,這么設計更多的考慮是方便還不是必要性)3.Pool是cnn中有效的操作,因此也加入
- Naïve的問題,通道堆到后面會越來越多,借鑒NIN,1x1降維
作者說明,對一個壓縮且密集的特征信息進行建模是很難的,所以只在必要時才壓縮信號
- 考慮到目前計算條件,Inception置於較深層,淺層采用傳統卷積
-
網絡結構:
1.Block設計。2.Gap代替全連接。3.添加dropout(0.7)。4.輔助損失.(權重0.3,在inception 4a和4d的輸出接,作用a增強底層特征差異性b增強梯度信號c提高正則化)
- 輔助loss:4a和4d
-
實驗結果