目的:
提升深度神經網絡的性能。
一般方法帶來的問題:
增加網絡的深度與寬度。
帶來兩個問題:
(1)參數增加,數據不足的情況容易導致過擬合
(2)計算資源要求高,而且在訓練過程中會使得很多參數趨向於0,浪費計算資源。
解決方法:
使用稀疏連接替代稠密結構。
理論依據(Arora):一個概率分布可以用一個大的稀疏的深度神經網絡表示,最優的結構的構建通過分析上層的激活狀態的統計相關性,並把輸出高度相關的神經元聚合。這與生物學中Hebbian法則“有些神經元響應基本一致,即同時興奮或抑制”一致。
存在問題:計算機的基礎結構在遇到稀疏數據計算時會很不高效,使用稀疏矩陣會使得效率大大降低。
目標:設計一種既能利用稀疏性,又可以利用稠密計算的網絡結構。
Inception 模型:
究竟模型中是怎樣利用稀疏性的呢?我也說不清楚,但估計是在同一層利用了不同的核去對輸入的feature進行卷積把,分散成幾個小任務進行,然后再匯聚。如下圖:
@2016/08/24 更新對稀疏性的理解
知乎上摘自 段石石的解答:
對的 channel的意思其實就是神經元的個數,這里降維的意思其實就是減少神經元的個數,比如原先的28*28*512 在1*1*256 之后 就是28*28*256(stride為1的情況), 這樣在整個網絡結構這一層就降維了,原作者發現在沒有1*1之前的參數空間存在很多稀疏的數據,這里降維之后,參數空間會更dense,這樣就解決了文章說的痛點(也就是稀疏性增大計算困難的問題)
這是最原始的模型。可以看出,因為卷積並不一定就改變大小,而通道數目由於分散的連接最終會增加,這樣很容易造成參數個數的指數級別的上升。論文中使用了NIN網絡中提到的利用1*1卷積核降維的作用,在卷積層處理前,先對特征圖層進行降維(注意是通道的降維,不是空間的降維),例如原本是M通道,降維到P通道后,在通過匯聚變成了M通道,這時參數的個數並沒有隨着深度的加深而指數級的增長,如下圖:
這樣做的合理性在於,Hebbin法則說的“有些神經元同時興奮或抑制”,而在區域中同一節點對應的區域可能一樣,認為它們是相關的,所以通過1*1的卷積核將它們聚合(信息壓縮)后再卷積,符合Arora的理論。同時,注意到還有一個最大化池化層。
這樣處理的好處是(1)深度增加,節點數目可控(2)出現多個尺度如3*3,1*1,5*5,7*7等。
GoogLeNet結構:
GoogLeNet網絡有22層,最后一層使用了NIN網絡中的全局平均池化層,但還是會加上FC層,再輸入到softmax函數中。如下圖:
在深度加深的情況下,在BP算法執行時可能會使得某些梯度為0,這會使得網絡的收斂變慢。論文中使用的方法是增加兩個輸出層(Auxiliary Classifiers),這樣一些權值更新的梯度就會來自於多個部分的疊加,加速了網絡的收斂。但預測時會吧AC層去掉。