論文閱讀筆記:GoogLeNet Inception 網絡

論文閱讀筆記:GoogLeNet Inception 網絡

inception_v1 論文下載地址:inception_v1 Going deeper with convolutions
inception_v2 論文下載地址:inception_v2 Accelerating Deep Network Training by Reducing Internal Covariate Shift
inception_v3 論文下載地址:inception_v3 Rethinking the Inception Architecture for Computer Vision
inception_v4 論文下載地址:inception_v4 Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning

  本篇博客主要講解四篇來自 Google 的論文,即 inception 網絡


本文主要包含如下內容:


inception_v1 Going deeper with convolutions


核心思想


  論文將1x1,3x3,5x5的 conv 和3x3的 pooling,stack 堆疊在一起,一方面增加了網絡的 width 寬度,另一方面增加了網絡對尺度的適應性;
  論文將全連接和一般的卷積轉換爲稀疏連接,構建了 inception 結構。一方面是因爲現實中的生物神經系統的連接是係數的,另一方面對大規模神經網絡,可以通過分析激活值的統計特性和對高度相關的輸出進行聚類來逐層構建出一個最優網絡。Hebbian赫補原則有力地支持了這一點: fire together,wire together。即如果神經元的激活條件相同,它們會彼此互聯。


網絡結構


  我們常說的 inception 基礎網絡結構如下:
  inception網絡結構
  網絡結構說明:這種網絡結構,一方面增加了網絡的寬度,另一方面增加了網絡對尺度的適應性。
1. 採用不同大小的卷積核意味着不同大小的感受野,最後合併爲單一向量作爲輸出,即融合不同的尺度特徵。主要考慮多個不同size的卷積核能夠增強網絡的適應力。
2. 卷積核大小爲1*1,3*3和5*5,設定卷積步長stride=1之後,只要分別設定pad=0、1、2,那麼卷積之後便可以得到相同維度的特徵,然後就可以通過聚合操作合併。
3. 由於池化網絡的重要性,所以inception網絡嵌入了pooling

inception網絡結構
  改進後網絡結構如上圖:這裏主要使用了1*1的卷積操作,這裏我們詳細介紹一下1*1卷積操作的作用:
1. 採用1*1卷積核進行降維,例如:上一層的輸出爲100x100x128,經過具有256個輸出的5x5卷積層之後(stride=1,pad=2),輸出數據爲100x100x256。其中,卷積層的參數爲128x5x5x256。假如上一層輸出先經過具有32個輸出的1x1卷積層,再經過具有256個輸出的5x5卷積層,那麼最終的輸出數據仍爲爲100x100x256,但卷積參數量已經減少爲128x1x1x32 + 32x5x5x256,大約減少了4倍。
2. 1*1卷積核還有一個作用就是線性修正激活。


GoogleNet


  在介紹了相關網絡的模型之後,我們定義網絡 GoogleNet,這個網絡使用傳統的網絡和 Inception 塊堆疊而成,具體操作如下:
網絡結構
  在底層時候仍然用傳統的方式,高層用Inception塊疊加。
  用Average pooling代替傳統的FC層。
  爲了解決梯度彌散的問題,在4a4d的後面添加輔助loss,該loss僅在訓練的時候以一定的weight參與梯度傳遞,而在test的時候不用。


inception_v2 Accelerating Deep Network Training by Reducing Internal Covariate Shift


核心思想


  論文中加入了BN層,減少了InternalCovariate Shift(內部neuron的數據分佈發生變化),使每一層的輸出都規範化到一個N(0, 1)的高斯,從而增加了模型的魯棒性,可以以更大的學習速率訓練,收斂更快,初始化操作更加隨意,同時作爲一種正則化技術,可以減少dropout層的使用。

  用2個連續的3*3 conv替代inception模塊中的5*5,從而實現網絡深度的增加,網絡整體深度增加了9層,缺點就是增加了25%的weights和30%的計算消耗。
  用2個3x3的conv替代inception模塊中的5x5
  參考博客

  使用 Batch Normalization 的原因:在訓練深層神經網絡的過程中,由於輸入層的參數在不停的變化。因此,導致了當前層的分佈在不停的變化,這就導致了在訓練的過程中,要求learning rate要設置的非常小。另外,對參數的初始化的要求也很高。作者把這種現象稱爲internal convariate shift
  Batch Normalization的提出就是爲了解決這個問題的。BN 在每一個 training mini-batch 中對每一個 feature 進行 normalize。通過這種方法,使得網絡可以使用較大的 learning rate。總結起來:BN解決了反向傳播中的梯度彌散和爆炸問題,同時使得weight的更新更加穩健,從而使網絡的學習更加容易,減少了對weight初始化的依賴和可以使用更大的學習速率。(擴大網絡的同時又儘可能地發揮計算性能)

算法結構框圖

  論文通過 mini-batch 來對相應的 activation 做規範化操作,使得結果(輸出信號各個維度)的均值爲0,方差爲1. (即將某一層輸出歸一化)而最後的 scale and shift 操作則是爲了讓因訓練所需而“刻意”加入的BN能夠有可能還原最初的輸入,從而保證整個 networkcapacity

  源碼解析:caffe官方將BN層拆成兩個層來實驗,一個是batch_norm_layer.c
pp,一個是scale_layer.hpp。相關源碼可以在caffe源碼中查看。

/*************************/
//將BN層加入到conv層和Relu層之間即可
layer {
    bottom: "res2a_branch2a"
    top: "res2a_branch2b"
    name: "res2a_branch2b"
    type: "Convolution"
    convolution_param {
        num_output: 64
        kernel_size: 3
        pad: 1
        stride: 1
        bias_term: false
    }
}
layer {
    bottom: "res2a_branch2b"
    top: "res2a_branch2b"
    name: "bn2a_branch2b"
    type: "BatchNorm"
    batch_norm_param {
        use_global_stats: true
    }
}
layer {
    bottom: "res2a_branch2b"
    top: "res2a_branch2b"
    name: "scale2a_branch2b"
    type: "Scale"
    scale_param {
        bias_term: true
    }
}
layer {
    bottom: "res2a_branch2b"
    top: "res2a_branch2b"
    name: "res2a_branch2b_relu"
    type: "ReLU"
}

inception_v3 Rethinking the Inception Architecture for Computer Vision


核心思想


  論文將7*7分解成兩個一維的卷積(1*7,7*1),3*3也是一樣(1*3,3*1),這樣的好處,既可以加速計算(多餘的計算能力可以用來加深網絡),又可以將1個conv拆成2個conv,使得網絡深度進一步增加,增加了網絡的非線性,更加精細設計了35*35/17*17/8*8的模塊。
  論文增加網絡寬度,網絡輸入從224*224變爲了299*299。
inception_v3 網絡結構
  具體的相關操作,讀者可以參考原文。


inception_v4 Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning


核心思想


  Inception v4主要利用殘差連接(Residual Connection)來改進v3結構,代表作爲,Inception-ResNet-v1,Inception-ResNet-v2,Inception-v4

  resnet中的殘差結構如下,這個結構設計的就很巧妙,簡直神來之筆,使用原始層和經過2個卷基層的 feature map 做 Eltwise

  


實驗結果


  將 Inception 模塊和 ResidualConnection 結合,提出了Inception-ResNet-v1,Inception-ResNet-v2,使得訓練加速收斂更快,精度更高。
  
  
  設計了更深的Inception-v4版本,效果和Inception-ResNet-v2相當。
  Inception-v4 網絡的輸入大小和V3一樣,還是299*299

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