積神經網絡GoogLeNet

NO IMAGE

1. 介紹

我們之前已經講解過 AlexNet,在這個基礎上我們來學習一下 GoogLeNet。 GoogLeNet 獲得了 2014 年 ImageNet 挑戰賽 (ILSVRC14) 的第一名。那麼 GoogLeNet 是如何提升網絡性能的呢?
       一般來說,提升網絡性能最直接的辦法就是增加網絡深度和寬度,深度指網絡層次數量、寬度指神經元數量。但這種方式存在以下問題:
(1)參數太多,如果訓練數據集有限,很容易產生過擬合;
(2)網絡越大、參數越多,計算複雜度越大,難以應用;
(3)網絡越深,容易出現梯度彌散問題(梯度越往後穿越容易消失),難以優化模型。
       解決這些問題的方法當然就是在增加網絡深度和寬度的同時減少參數,為了減少參數,自然就想到將全連接變成稀疏連接。但是在實現上,全連接變成稀疏連接後實際計算量並不會有質的提升,因為大部分硬件是針對密集矩陣計算優化的,稀疏矩陣雖然數據量少,但是計算所消耗的時間卻很難減少。
       那麼,有沒有一種方法既能保持網絡結構的稀疏性,又能利用密集矩陣的高計算性能。大量的文獻表明可以將稀疏矩陣聚類為較為密集的子矩陣來提高計算性能,就如人類的大腦是可以看做是神經元的重複堆積,因此,GoogLeNet 團隊提出了 Inception 網絡結構,就是構造一種“基礎神經元”結構,來搭建一個稀疏性、高計算性能的網絡結構。

2. 網絡結構特徵

2.1 1×1 Convolution

1×1 卷積的主要目的是為了減少維度,還用於修正線性激活(ReLU)。在 GoogLeNet 中,1×1 卷積用作降維模塊以減少計算。通過減少計算瓶頸,可以增加深度和寬度。
       我們通過一個小例子來解釋一下:
       假設我們需要在不使用 1×1 卷積的情況下執行 5×5 卷積,如下所示:

積神經網絡GoogLeNet

計算的次數 

積神經網絡GoogLeNet

       使用 1×1 卷積:

積神經網絡GoogLeNet

1×1 卷積操作計算的次數 

積神經網絡GoogLeNet

5×5 卷積操作計算的次數

積神經網絡GoogLeNet

總的計算次數

積神經網絡GoogLeNet

 遠小於

積神經網絡GoogLeNet


2.2 Inception Module

原始 Inception 模塊(初級版本,沒有 1×1 卷積)如下:

積神經網絡GoogLeNet

       該結構將 CNN 中常用的卷積(1×1,3×3,5×5)、池化操作(3×3)堆疊在一起(卷積、池化後的尺寸相同,將通道相加),一方面增加了網絡的寬度,另一方面也增加了網絡對尺度的適應性。
網絡卷積層中的網絡能夠提取輸入的每一個細節信息,同時 5×5 的濾波器也能夠覆蓋大部分接受層的的輸入。還可以進行一個池化操作,以減少空間大小,降低過度擬合。在這些層之上,在每一個卷積層後都要做一個 ReLU 操作,以增加網絡的非線性特徵。
       然而這個 Inception 原始版本,所有的卷積核都在上一層的所有輸出上來做,而那個 5×5 的卷積核所需的計算量就太大了,造成了特徵圖的厚度很大,為了避免這種情況,在 3×3 前、5×5 前、max pooling 後分別加上了 1×1 的卷積核,以起到了降低特徵圖厚度的作用,這也就形成了 Inception v1 的網絡結構,如下圖所示:

積神經網絡GoogLeNet

2.3 全局平均池化

積神經網絡GoogLeNet

       以前在網絡末端使用完全連接(FC)層,例如在 AlexNet 中所有輸入都連接到每個輸出,權重的數量

積神經網絡GoogLeNet


       在 GoogLeNet 中,通過將每個特徵映射從 7×7 到 1×1 平均,幾乎在網絡末端使用全局平均池,如上圖所示,權重的數量

積神經網絡GoogLeNet

。作者發現,從 FC 層到平均池的遷移將 top-1 精度提高了約 0.6%。此舉也有利於減少過擬合的發生。

2.4 輔助分類器

網絡中間引入了 softmax 分支,這些分支是輔助分類器,由 5×5 Average,Pooling (Stride 3),1×1 Conv (128 filters),1024 FC,1000 FC,Softmax 構成。它們只在訓練的時候用到,測試的時候不用。損失以 0.3 的權重加到總損失。用於對抗梯度消失問題,和提供正則化。

3. GoogLeNet 模型

積神經網絡GoogLeNet

對上圖說明如下:
(1)GoogLeNet 採用了模塊化的結構(Inception 結構),方便增添和修改;
(2)網絡最後採用了 average pooling(平均池化)來代替全連接層,該想法來自 NIN(Network in Network),事實證明這樣可以將準確率提高 0.6%。但是,實際在最後還是加了一個全連接層,主要是為了方便對輸出進行靈活調整;
(3)雖然移除了全連接,但是網絡中依然使用了 Dropout ;
(4)為了避免梯度消失,網絡額外增加了 2 個輔助的 softmax 用於向前傳導梯度(輔助分類器)。輔助分類器是將中間某一層的輸出用作分類,並按一個較小的權重(0.3)加到最終分類結果中,這樣相當於做了模型融合,同時給網絡增加了反向傳播的梯度信號,也提供了額外的正則化,對於整個網絡的訓練很有裨益。而在實際測試的時候,這兩個額外的 softmax 會被去掉。
GoogLeNet 的網絡結構圖細節:

積神經網絡GoogLeNet

注:上表中的“#3×3 reduce”,“#5×5 reduce”表示在 3×3,5×5 卷積操作之前使用了 1×1 卷積的數量。
GoogLeNet 網絡結構明細表解析如下:
0、輸入
原始輸入圖像為 224x224x3,且都進行了零均值化的預處理操作(圖像每個像素減去均值)。
1、第一層(卷積層)
使用 7×7 的卷積核(滑動步長 2,padding 為 3),64 通道,輸出為 112x112x64,卷積後進行 ReLU 操作
經過 3×3 的 max pooling(步長為 2),輸出為((112 – 3+1)/2)+1=56,即 56x56x64,再進行 ReLU 操作
3、第二層(卷積層)
使用 3×3 的卷積核(滑動步長為 1,padding 為 1),192 通道,輸出為 56x56x192,卷積後進行 ReLU 操作
經過 3×3 的 max pooling(步長為 2),輸出為((56 – 3+1)/2)+1=28,即 28x28x192,再進行 ReLU 操作
3a、第三層(Inception 3a層)
分為四個分支,採用不同尺度的卷積核來進行處理
(1)64 個 1×1 的卷積核,然後 ReLU ,輸出 28x28x64
(2)96 個 1×1 的卷積核,作為 3×3 卷積核之前的降維,變成 28x28x96,然後進行 ReLU 計算,再進行 128 個 3×3 的卷積(padding 為 1),輸出 28x28x128
(3)16 個 1×1 的卷積核,作為 5×5 卷積核之前的降維,變成 28x28x16,進行 ReLU 計算後,再進行 32 個 5×5 的卷積(padding 為 2),輸出 28x28x32
(4)pool 層,使用 3×3 的核(padding 為 1),輸出 28x28x192,然後進行 32 個 1×1 的卷積,輸出 28x28x32。
將四個結果進行連接,對這四部分輸出結果的第三維並聯,即 64+128+32+32=256,最終輸出 28x28x256
3b、第三層(Inception 3b層)
(1)128 個 1×1 的卷積核,然後 ReLU,輸出 28x28x128
(2)128 個 1×1 的卷積核,作為 3×3 卷積核之前的降維,變成 28x28x128,進行 ReLU,再進行 192 個 3×3 的卷積(padding 為 1),輸出 28x28x192
(3)32 個 1×1 的卷積核,作為 5×5 卷積核之前的降維,變成 28x28x32,進行 ReLU 計算後,再進行 96 個 5×5 的卷積(padding 為 2),輸出 28x28x96
(4)pool 層,使用 3×3 的核(padding 為 1),輸出 28x28x256,然後進行 64 個 1×1 的卷積,輸出 28x28x64。
將四個結果進行連接,對這四部分輸出結果的第三維並聯,即 128+192+96+64=480,最終輸出輸出為 28x28x480
第四層(4a,4b,4c,4d,4e)、第五層(5a,5b)……,與 3a、3b 類似,在此就不再重複。

4. 總結與展望

目前,您可以在 Mo 平臺中找到基於 GoogLeNet 模型實現的 17 種花卉識別的 Flower 項目。您在學習的過程中,遇到困難或者發現我們的錯誤,可以通過 Mo 平臺或微信公眾號 MomodelAI 聯繫我們。
項目源碼地址:momodel.cn/explore/5d2…
       總結一下 GoogLeNet 的主要貢獻:

  • 提出 Inception 模塊並對其優化
  • 取消全連接層
  • 運用輔助分類器加速網絡收斂

5. 參考資料

論文:arxiv.org/abs/1409.48…
博客:blog.csdn.net/Quincuntial…
數據集:www.robots.ox.ac.uk/~vgg/data/f…
博客:my.oschina.net/u/876354/bl…
博客:medium.com/coinmonks/p…

關於我們

Mo(網址:momodel.cn)是一個支持 Python 的人工智能在線建模平臺,能幫助你快速開發、訓練並部署模型。


Mo 人工智能俱樂部 是由網站的研發與產品設計團隊發起、致力於降低人工智能開發與使用門檻的俱樂部。團隊具備大數據處理分析、可視化與數據建模經驗,已承擔多領域智能項目,具備從底層到前端的全線設計開發能力。主要研究方向為大數據管理分析與人工智能技術,並以此來促進數據驅動的科學研究。

目前俱樂部每週六在杭州舉辦以機器學習為主題的線下技術沙龍活動,不定期進行論文分享與學術交流。希望能匯聚來自各行各業對人工智能感興趣的朋友,不斷交流共同成長,推動人工智能民主化、應用普及化。

積神經網絡GoogLeNet

相關文章

場景文本識別——基於圖像序列識別的端到端可訓練神經網絡模型

交通量預測——極端情況下的預測算法

使用Seq2Seq實現中英文翻譯

電商購物評論的情感分析