深度神經網絡中的Inception模塊介紹

深度神經網絡(Deep Neural Networks, DNN)或深度卷積網絡中的Inception模塊是由Google的Christian Szegedy等人提出,包括Inception-v1、Inception-v2、Inception-v3、Inception-v4及Inception-ResNet系列。每個版本均是對其前一個版本的迭代改進。另外,依賴於你的數據,低版本可能實際上效果更好。這裏是整理的Inception的v1、v2、v3、v4內容。

對於深度神經網絡來說,提升網絡性能最直接的辦法就是增加網絡深度和寬度(網絡的深度指的是網絡的層數,寬度指的是每層的通道數),這就意味着網絡的參數數量會非常龐大。但是,海量的參數很容易產生過擬合,同時也會大大增加計算量。2014年,受Network in Network和稀疏網絡的啓發,Google公司提出了一個深度卷積神經網絡來解決這些問題。這個名叫GoogLeNet的網絡獲得了ILSVRC2014的冠軍。這個模型的設計理念認爲解決上述兩個缺點的根本方法是將全連接甚至一般的卷積結構都轉化爲稀疏連接。這樣做的理由是在現實中生物神經系統的連接也是稀疏的,另外一方面也有許多研究證明了對於大規模的稀疏神經網絡,可以通過分析激活值的統計特性和對高度相關的輸出進行聚類來逐層構建出一個最優網絡。以上這些表明了龐大臃腫的稀疏網絡可以被簡化並且性能不會受到太多影響。在早期深度學習的一些研究中,爲了使打破網絡對稱性和提高學習能力,很多網絡都採用了隨機稀疏連接的做法。但是,計算機對非均勻稀疏數據的計算效率很差。於是現在需要一種方法,既能保持網絡結構的稀疏性,又能使網絡利用到密集矩陣的高計算性能。許多研究已經表明可以將稀疏矩陣聚類爲較爲密集的子矩陣來提高計算性能,據此GoogLeNet網絡採用了Inception-v1模塊來實現此目的。GoogLeNet網絡有時又稱爲Inception-v1網絡,即GoogLeNet網絡中使用的是Inception-v1模塊。

Inception模塊的核心思想就是將不同的卷積層通過並聯的方式結合在一起,經過不同卷積層處理的結果矩陣在深度這個維度拼接起來,形成一個更深的矩陣。Inception模塊可以反覆疊堆形成更大的網絡,它可以對網絡的深度和寬度進行高效的擴充,在提升深度學習網絡準確率的同時防止過擬合現象的發生。Inception模塊的優點是可以對尺寸較大的矩陣先進行降維處理的同時,在不同尺寸上對視覺信息進行聚合,方便從不同尺度對特徵進行提取。

Inception-v1論文名爲《Going deeper with convolutions》,論文見:https://arxiv.org/pdf/1409.4842.pdf 。此模塊使用了3種不同尺寸的卷積核(1*1、3*3、5*5)和1個最大池化核(3*3),增加了網絡對不同尺度的適應性,論文截圖如下所示:當感興趣區域分佈更全局時,傾向選擇一個較大的核;當感興趣區域分佈的更局部時,傾向選擇一個較小的核。

上圖爲Inception模塊的原始版本:Inception模塊中包含卷積操作,但是不同於傳統卷積神經網絡,此模塊中可以設置多個通路,每個通路可以是不同的操作,相同的操作也可以設置不同的kernel size和stride。不同的卷積尺寸提供了不同的感受野,可以做不同級別上的特徵提取,池化操作本身有提取特徵的作用,而且因爲沒有參數不會產生過擬合,所以池化操作也作爲此模塊的一個通路。

此模塊採取了幾個措施來使密集的成分能夠近似最優的稀疏結構。首先,在同一層中採用了不同大小的卷積核來提取上一層的特徵,並在最後進行拼接。這樣意味着在同一層中網絡就能從感受不同大小的圖像局部區域,並對不同尺度的特徵進行融合。卷積核大小普遍採用1、3和5,再設定卷積步長爲1,只要圖像的填充值(padding)分別設置爲0、1、2,那麼卷積之後便可以得到相同維度的特徵,之後便可以將這些特徵值直接拼接在一起。此外,由於池化層在很多網絡中都起到相當大的作用,因此在Inception模塊中也嵌入了這一操作。最後由於神經網絡隨着深度的增加所提取的特徵也逐漸抽象,每個特徵涉及到更大的感受區域,因此在網絡的深層應該逐漸增加大尺寸卷積核的比例。

上圖爲降維(dimension reductions)後的最終Inception-v1版本:優點:(1).同時使用不同尺寸的卷積核可以提取到種類更加豐富的特徵;(2).使用稀疏矩陣分解爲密集矩陣計算的原理,增加了收斂速度。

由於5*5的卷積核仍然會帶來巨大的計算量,考慮到這一點,此模塊加入了1*1卷積核來進行降維即限制輸入通道數量。

Inception-v1中使用了多個1*1卷積核,其作用:(1).在大小相同的感受野上疊加更多的卷積核,可以讓模型學習到更加豐富的特徵。傳統的卷積層的輸入數據只和一種尺寸的卷積核進行運算,而Inception-v1結構是Network in Network(NIN),就是先進行一次普通的卷積運算(比如5*5),經過激活函數(比如ReLU)輸出之後,然後再進行一次1*1的卷積運算,這個後面也跟着一個激活函數。1*1的卷積操作可以理解爲feature maps個神經元都進行了一個全連接運算。(2).使用1*1的卷積核可以對模型進行降維,減少運算量。當一個卷積層輸入了很多feature maps的時候,這個時候進行卷積運算計算量會非常大,如果先對輸入進行降維操作,feature maps減少之後再進行卷積運算,運算量會大幅減少。

Inception模塊中,1*1、3*3、5*5的卷積核並不是固定的,可以根據實驗進行調整。

下圖來自於https://blog.csdn.net/fengbingchun/article/details/80786455 ,可以形象地說明Inception-v1模塊內是如何能夠拼接在一起的:

Inception-v2、Inception-v3論文名爲《Rethinking the inception architecture for computer vision》,論文見:https://arxiv.org/pdf/1512.00567.pdf 。 此模塊在Inception-v1的基礎上進行了改進。

Inception-v2:有三種形式,論文截圖如下所示:

Figure 5:參考VGG,用兩個3*3的卷積核代替5*5的大卷積核,這樣在保持相同感受野的同時減少了參數,而且加強了非線性表達能力,還可以提升速度。

Figure 6:引入了factorization into asymmetric convolutions的思想,就是用兩個1*n和n*1的卷積核替換一個較大的n*n卷積核。這種分解方法減少了大量參數,並且可以提高運算速度,減輕過擬合,同時給模型增加了一層非線性結構,提升了模型的表達能力,讓模型可以處理更豐富的空間特徵,增加了特徵的多樣性。但經過試驗發現,在網絡的前期用這種分解效果並不好,而且這種分解在中等大小的特徵圖上使用效果最好,如n=7。

Figure 7:模塊中的濾波器組(filter banks)被擴展(使得更寬而不是更深),以消除representational bottleneck(降低representational bottleneck:其思路是,當卷積不會大幅改變輸入尺寸,神經網絡的性能會更好。減少維度會造成信息大量損失,也就是所說的 representational bottleneck)。如果模塊變得更深,尺度將會過度縮小,從而導致信息的丟失。較適合於高維特徵。

Inception-v2還提出了Batch Normalization(BN)方法。深度神經網絡的訓練過程十分複雜,如果前面幾層發生微小的變化,這個微小的變化經過後面幾層的傳遞會被放大。神經網絡在訓練的時候參數會不斷更新,前面層訓練參數的變化會導致後面層的輸入數據分佈發生改變。網絡中間層在訓練過程中數據分佈發生改變,這種現象稱之爲”Internal Covariate Shift”。BN算法就是爲了解決這個現象被提出來的。BN算法的核心原理就是:在網絡的每一層的前面,插入一個歸一化層,也就是上一層的輸出數據先經過歸一化處理,然後再輸入到下一層,但是這個歸一化層不是簡單的歸一化層,而是可以學習並且有參數的歸一化層。如果只是使用簡單的歸一化,就是對網絡某一層的輸出數據進行歸一化處理,然後輸入到下一層神經網絡,這樣會對這一層神經網絡學習到的特徵造成影響。BN算法對每一個經過激活函數的值都引入了可以學習的參數γ、β,這兩個參數可以對經過歸一化處理後的輸入進行縮放和平移。

Inception-v3:針對Inception-v2的升級,增加了以下內容:(1).RMSProp優化器。(2).分解爲7*7卷積。(3).輔助分類BatchNorm。(4).標籤平滑(Label Smoothing,添加到損失公式中的正則化組件類型,防止網絡過於準確,防止過度擬合)。

Inception-v4、Inception-ResNet論文名爲《Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning》,論文見:https://arxiv.org/pdf/1602.07261.pdf

Inception-v4:將原來卷積、池化的順次連接(網絡的前幾層)替換爲stem模塊,即Inception模塊之前執行的最初一組操作,來獲得更深的網絡結構,論文截圖如下所示爲stem模塊結構:

Inception-v4有三個主要的Inception模塊,分別爲A、B、C,論文截圖如下所示:依次爲Inception-A、Inception-B、Inception-C

Inception-v4採用專門的Reduction Blocks用於更改網絡的寬度和高度。論文截圖如下所示:

上圖爲Reduction Block A,將35*35尺寸縮小至17*17。

上圖爲Reduction Block B,將17*17尺寸縮小至8*8。

Inception-v4的整個網絡佈局,論文截圖如下所示:

注:以上所有的內容的整理均來自網絡,除參考原始論文外,還主要參考:

1. https://medium.com/m/global-identity?redirectUrl=https%3A%2F%2Ftowardsdatascience.com%2Fa-simple-guide-to-the-versions-of-the-inception-network-7fc52b863202

2. https://cloud.tencent.com/developer/article/1166837

3. 《基於卷積神經網絡的多目標定位研究》,2019,碩論,長安大學

4. 《基於深度學習的細粒度圖像識別研究》,2018,碩論,北京郵電大學

GitHubhttps://github.com/fengbingchun/NN_Test

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