【深度神經網絡】五、GoogLeNet網絡詳解

概要

本篇文章的重點就是主要介紹GoogLeNet的網絡架構,這個網絡架構於2014年由Google團隊提出。
GoogLeNet的論文爲:Going deeper with convolutions

同時GoogLeNet也在經歷了從v1、v2、v3、v4幾個版本的改進過程。由於內容較多,因此將我也將在之後幾篇博客中進行詳細敘述。在本篇博客中主要將介紹GoogLeNet v1的網絡架構。


一、背景與動機

在2012年,AlexNet在ImageNet圖像分類競賽中獲得了冠軍,這也使得深度學習與卷積神經網絡開始了快速發展。在2014年的ImageNet圖像分類競賽中,GoogLeNet取得了第一名的成績,其模型參數參數但只有AlexNet的112\frac{1}{12}GoogLeNet的成功主要得益於Inception模塊,整個GoogLeNet的主體架構可以看成多個Inception模塊堆疊而成。

在GoogLeNet之前的卷積神經網絡基本都是由多個卷積層與池化層堆積而成,然後接入一個或者多個
全連接層來預測輸出。在卷積神經網絡的在全連接層之前的卷積層和池化層的目的提取各種圖像特徵,這些圖像特徵爲了適應全連接層的輸入都會拉成一維向量,通常這就導致了網絡模型參數主要集中在全連接層,因此爲了避免過擬合,在全連接層通常會使用dropout來降低過擬合的風險。

同時,池化層主要分類平均池化層和最大池化層兩種。平均池化層主要保留圖像的背景信息,最大池化層最要保留紋理信息沒,池化層的主要目的是減少特徵和網絡參數,在目前GoogLeNet之前通常使用的最大池化層。但是最大池化層可能會導致空間信息的損失,降低模型的表達能力。因此爲了解決這個問題,Lin等人在2013年提出了Inception——“Network in Network”。Inception模塊主要在CNN中添加一個額外的1X1卷積層,使用Relu作爲激活函數,其主要作用是在不犧牲網絡模型性能的前提下,即實現網絡特徵的降維、減少大量計算量,這有利用訓練更深更廣的網絡。


二、GoogLeNet詳解

提高深度網絡模型性能的常用方法就是提高網絡模型大小,網絡模型大小包括網絡深度與網絡寬度。在有足夠的有標籤數據的前提下,這是簡單和保險的訓練高性能模型的方法,但這會加大網絡模型參數,加大了模型過擬合的風險。同時這也大大降低的訓練週期,帶來了大量的計算開銷,尤其是在全連接層。解決上述兩個問題的可行方式就是利用稀疏連接來代替全連接層。

在《Provable bounds for learning some deep representations》這篇論文中提到對於大規模稀疏的神經網絡,可以通過分析激活值的統計特性和對高度相關的輸出進行聚類來逐層構建出一個最優網絡。所以,爲了既能保持網絡結構的稀疏性,又能利用密集矩陣的高計算性能,這篇論文提出了Inception的結構,這也是GoogLeNet的基礎模塊。

因此在這裏有必要對原始的Inception結構進行詳細敘述。Inception 結構的主要思路是用密集成分來近似最優的局部稀疏結構。原始Inception 結構如下圖所示。
在這裏插入圖片描述
顯然從上圖中可以看出,原始Inception 結構採用1×11\times13×33\times35×55\times5三種卷積核的卷積層進行並行提取特徵,這可以加大網絡模型的寬度,不同大小的卷積核也就意味着原始Inception 結構可以獲取到不同大小的感受野,上圖中的最後拼接就是將不同尺度特徵進行深度融合

同時在原始Inception 結構之所以卷積核大小採用1、3和5,主要是爲了方便對齊。設定卷積步長stride=1之後,只要分別設定pad=0、1、2,那麼卷積之後便可以得到相同維度的特徵,然後這些特徵就可以直接深度融合了。

最後文章說很多地方都表明pooling挺有效,所以原始Inception結構裏面也加入了最大池化層來降低網絡模型參數。特別重要的是網絡越到後面,特徵越抽象,而且每個特徵所涉及的感受野也更大了,因此隨着層數的增加,GoogLeNet中3x3和5x5卷積的比例也要增加。

但是原始Inception結構中5×55\times5卷積核仍然會帶來巨大的計算量。降低5×55\times5卷積核帶來的計算量,GoogLeNet中借鑑了NIN(Network in Network)的思想使用1×11\times1卷積層與5×55\times5卷積層相結合來實現參數降維。

對於1×11\times1卷積層與5×55\times5卷積層實現參數降維,在這裏也舉一個簡單的例子進行說明。假如上一層的輸出爲100×100×128100\times100\times128,經過具有256256個輸出的5×55\times5卷積層之後(stride=1,pad=2),輸出數據爲100×100×256100\times100\times256。其中,那麼卷積層的參數爲128×5×5×256128\times5\times5\times256。此時如果上一層輸出先經過具有3232個輸出的1×11\times1卷積層,再經過具有256256個輸出的5×55\times5卷積層,那麼最終的輸出數據仍爲爲100×100×256100\times100\times256,但卷積參數量已經減少爲128×1×1×32+32×5×5×256128\times1\times1\times32 + 32\times5\times5\times256,相比之下參數大約減少了4倍。

因此在3×33\times35×55\times5卷積層之前加入合適的1×11\times1卷積層可以在一定程度上減少模型參數,那麼在GoogLeNet中基礎Inception結構也就做出了相應的改進,改進後的Inception結構如下圖所示。
在這裏插入圖片描述
那麼GoogLeNet的整體網絡架構如下:
在這裏插入圖片描述顯然從上圖可以看出,GoogLeNet主體架構是利用改進之後的Inception結構堆積而成22層層卷積神經網絡。同時GoogLeNet在全連接層之前採用了平均池化層來降低特徵,該想法來自也NIN事實證明可以將TOP1 accuracy提高0.6%。從上圖也可以看出GoogLeNet網絡架構較深,如果梯度從最後一層傳遞到第一層,可能會出現梯度消失的情況。因此爲了避免梯度消失,網絡額外增加了2個輔助的softmax用於向前傳導梯度。

下面是GoogLeNet的各個模塊的參數示意表。從下圖也可看出,相比於AlexNet,GoogLeNet的網絡參數大幅度下降,只有AlexNet的112\frac{1}{12}
在這裏插入圖片描述
下面是GoogLeNet在ImageNet分類競賽相關指標的對比結果。可以看出,GoogLeNet在2014年ImageNet分類競賽獲得了6.67%的Top5的錯誤率,比VGG網絡的性能好一點。
在這裏插入圖片描述


**

我的博客即將同步至騰訊雲+社區,邀請大家一同入駐:https://cloud.tencent.com/developer/support-plan?invite_code=t0cl3g0ye684

**

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