積神經網絡 GoogLeNet

1. 介紹

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

2. 網絡結構特徵

2.1 1×1 Convolution

1x1 卷積的主要目的是爲了減小維度,還用於修正線性激活(ReLU)。在 GoogLeNet 中,1×1 卷積用做降維模塊以減小計算。經過減小計算瓶頸,能夠增長深度和寬度。
       咱們經過一個小例子來解釋一下:
       假設咱們須要在不使用 1×1 卷積的狀況下執行 5×5 卷積,以下所示:
微信

image.png

計算的次數 

       使用 1×1 卷積:
image.png

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

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

總的計算次數
 遠小於

2.2 Inception Module

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

image.png

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

2.3 全局平均池化

image.png

       之前在網絡末端使用徹底鏈接(FC)層,例如在 AlexNet 中全部輸入都鏈接到每一個輸出,權重的數量

       在 GoogLeNet 中,經過將每一個特徵映射從 7×7 到 1×1 平均,幾乎在網絡末端使用全局平均池,如上圖所示,權重的數量
。做者發現,從 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 的權重加到總損失。用於對抗梯度消失問題,和提供正則化。 app

3. GoogLeNet 模型

141544_FfKB_876354.jpg

對上圖說明以下:
(1)GoogLeNet 採用了模塊化的結構(Inception 結構),方便增添和修改;
(2)網絡最後採用了 average pooling(平均池化)來代替全鏈接層,該想法來自 NIN(Network in Network),事實證實這樣能夠將準確率提升 0.6%。可是,實際在最後仍是加了一個全鏈接層,主要是爲了方便對輸出進行靈活調整;
(3)雖然移除了全鏈接,可是網絡中依然使用了 Dropout ;
(4)爲了不梯度消失,網絡額外增長了 2 個輔助的 softmax 用於向前傳導梯度(輔助分類器)。輔助分類器是將中間某一層的輸出用做分類,並按一個較小的權重(0.3)加到最終分類結果中,這樣至關於作了模型融合,同時給網絡增長了反向傳播的梯度信號,也提供了額外的正則化,對於整個網絡的訓練頗有裨益。而在實際測試的時候,這兩個額外的 softmax 會被去掉。
GoogLeNet 的網絡結構圖細節:
141605_c1XW_876354.png
注:上表中的「#3x3 reduce」,「#5x5 reduce」表示在 3x3,5x5 卷積操做以前使用了 1x1 卷積的數量。
GoogLeNet 網絡結構明細表解析以下:
0、輸入
原始輸入圖像爲 224x224x3,且都進行了零均值化的預處理操做(圖像每一個像素減去均值)。
一、第一層(卷積層)
使用 7x7 的卷積核(滑動步長 2,padding 爲 3),64 通道,輸出爲 112x112x64,卷積後進行 ReLU 操做
通過 3x3 的 max pooling(步長爲 2),輸出爲((112 - 3+1)/2)+1=56,即 56x56x64,再進行 ReLU 操做
三、第二層(卷積層)
使用 3x3 的卷積核(滑動步長爲 1,padding 爲 1),192 通道,輸出爲 56x56x192,卷積後進行 ReLU 操做
通過 3x3 的 max pooling(步長爲 2),輸出爲((56 - 3+1)/2)+1=28,即 28x28x192,再進行 ReLU 操做
3a、第三層(Inception 3a層)
分爲四個分支,採用不一樣尺度的卷積核來進行處理
(1)64 個 1x1 的卷積核,而後 ReLU ,輸出 28x28x64
(2)96 個 1x1 的卷積核,做爲 3x3 卷積核以前的降維,變成 28x28x96,而後進行 ReLU 計算,再進行 128 個 3x3 的卷積(padding 爲 1),輸出 28x28x128
(3)16 個 1x1 的卷積核,做爲 5x5 卷積核以前的降維,變成 28x28x16,進行 ReLU 計算後,再進行 32 個 5x5 的卷積(padding 爲 2),輸出 28x28x32
(4)pool 層,使用 3x3 的核(padding 爲 1),輸出 28x28x192,而後進行 32 個 1x1 的卷積,輸出 28x28x32。
將四個結果進行鏈接,對這四部分輸出結果的第三維並聯,即 64+128+32+32=256,最終輸出 28x28x256
3b、第三層(Inception 3b層)
(1)128 個 1x1 的卷積核,而後 ReLU,輸出 28x28x128
(2)128 個 1x1 的卷積核,做爲 3x3 卷積核以前的降維,變成 28x28x128,進行 ReLU,再進行 192 個 3x3 的卷積(padding 爲 1),輸出 28x28x192
(3)32 個 1x1 的卷積核,做爲 5x5 卷積核以前的降維,變成 28x28x32,進行 ReLU 計算後,再進行 96 個 5x5 的卷積(padding 爲 2),輸出 28x28x96
(4)pool 層,使用 3x3 的核(padding 爲 1),輸出 28x28x256,而後進行 64 個 1x1 的卷積,輸出 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…ide

關於咱們

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


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

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

image.png
相關文章
相關標籤/搜索