1. 程式人生 > >深度解讀GoogleNet之Inception V1

深度解讀GoogleNet之Inception V1

能力 翻轉 浪費 對齊 並行運算 bubuko AD 好的 減少

GoogleNet設計的目的

GoogleNet設計的初衷是為了提高在網絡裏面的計算資源的利用率。

Motivation

網絡越大,意味著網絡的參數較多,尤其當數據集很小的時候,網絡更容易發生過擬合。網絡越大帶來的另一個缺點就是計算資源的利用率會急劇增加。例如,如果兩個卷積層是串聯的,他們濾波器數量中任何一個均勻增加都會導致計算資源的二次方浪費。解決這兩個問題的方法是用稀疏連接的結構代替全連接。在早期為了打破網絡的對稱性和提高學習能力,傳統的網絡都使用隨機的稀疏連接,但是計算機硬件對非均勻的稀疏連接的計算效率很差,所以在Alexnet中又啟用了全連接,為的是更好的優化並行運算。Incpetion結構因此被提出,它既能保持網絡結構的稀疏性,又能利用密集矩陣的高性能計算。

Inception結構

a

技術分享圖片

1.該結構采用了不同大小的卷積核,較小的卷積能夠提取局部特征,較大的卷積能夠漸近全局特征,而且不同大小的卷積有不同的感受野,能夠提高網絡的魯棒性,最後通過concatenate合並這些特征。

2.之所以用1x1,3x3,5x5的卷積是為了方便對齊,假設卷積核的步長為1,則只需pad=0、1、2,卷積之後便可得到相同維度的特征映射,就可以直接將他們拼接起來。

3.在該結構中還加入最大池化,最大池化作用的是之前層的輸出,目的應該是提供轉移翻轉不變性。

4.在網絡的較高層,特征越抽象,並且網絡的感受野變大,所以通常3x3和5x5的卷積數量會增加,會引入大量的參數。當引入池化單元後,參數更多,因為輸出濾波器的數量等於前一個階段濾波器的數量,會導致不可避免的參數膨脹。

b

技術分享圖片

為了解決參數過多的問題,在Inception中引入了1x1的卷積。1x1的卷積有以下兩個好處:

(1) 最重要的是1x1的卷積起到了維度衰減的作用,移除了計算瓶頸。假設原來Inception模塊的輸入特征映射為28x28x192,其中1x1卷積的通道數為64,3x3卷積通道數為128,5x5卷積通道數為32,則卷積核的參數為1x1x192x64+3x3x192x128+5x5x192x32,而在b結構中加入通道數為96和16的1x1卷積,則參數為1x1x192x64+(1x1x192x96+3x3x96x128)+(1x1x192x16+5x5x16x32),參數減少到了原來的1/3。

(2) 通常在1x1的卷積後面會引入一個非線性激活函數,也就是Relu,相當於引入了更多的非線性變換,提高了網絡的表示能力。

GoogleNet

技術分享圖片

由圖可知,Googlenet是由多個Inception模塊堆疊而成,它的深度達到了22層,並且網絡最後沒有使用全連接層而是采用了平均池化層,這樣做的好處是減少了參數,防止過擬合。並且為了避免梯度消失,網絡額外增加了2個輔助的softmax用於向前傳播梯度,在測試階段這兩個softmax會被移除。至於為什麽不是在一開始就堆疊Inception模塊,而是用幾個卷積層加池化層是因為在網絡的早期,輸出的特征映射尺度通常很大,使用單獨的卷積層和池化層能夠降低特征映射的大小,減少參數,防止過擬合。

深度解讀GoogleNet之Inception V1