天天看點

inception-v1,v2,v3,v4----論文筆記Inception-v1Inception-v2Inception-v3Inception-v4參考

最近通讀了inception的四篇論文,在此做一下筆記。

先給出這四篇論文的位址:

Going deeper with convolutions:https://arxiv.org/pdf/1409.4842.pdf

Batch Normalization: https://arxiv.org/pdf/1502.03167.pdf

Rethinking the Inception Architecture for Computer Vision:https://arxiv.org/pdf/1512.00567.pdf

Inception-v4, Inception-ResNet: https://arxiv.org/pdf/1602.07261.pdf

Inception-v1

在這篇輪文之前,卷積神經網絡的性能提高都是依賴于提高網絡的深度和寬度,而這篇論文是從網絡結構上入手,改變了網絡結構,是以個人認為,這篇論文價值很大。

該論文的主要貢獻:提出了inception的卷積網絡結構。

從以下三個方面簡單介紹這篇論文:為什麼提出Inception,Inception結構,Inception作用

為什麼提出Inception

提高網絡最簡單粗暴的方法就是提高網絡的深度和寬度,即增加隐層和以及各層神經元數目。但這種簡單粗暴的方法存在一些問題:

  • 會導緻更大的參數空間,更容易過拟合
  • 需要更多的計算資源
  • 網絡越深,梯度容易消失,優化困難(這時還沒有提出BN時,網絡的優化極其困難)

基于此,我們的目标就是,提高網絡計算資源的使用率,在計算量不變的情況下,提高網絡的寬度和深度。

作者認為,解決這種困難的方法就是,把全連接配接改成稀疏連接配接,卷積層也是稀疏連接配接,但是不對稱的稀疏資料數值計算效率低下,因為硬體全是針對密集矩陣優化的,是以,我們要找到卷積網絡可以近似的最優局部稀疏結構,并且該結構下可以用現有的密度矩陣計算硬體實作,産生的結果就是Inception。

Inception結構
inception-v1,v2,v3,v4----論文筆記Inception-v1Inception-v2Inception-v3Inception-v4參考

首先看第一個結構,有四個通道,有1*1、3*3、5*5卷積核,該結構有幾個特點:

  • 使用這些大小卷積核,沒有什麼特殊含義,主要友善對齊,隻要padding = 0、1、2,就可以得到相同大小的特征圖,可以順利concat。
  • 采用大小不同的卷積核,意味着感受野的大小不同,就可以得到不同尺度的特征。
  • 采用比較大的卷積核即5*5,因為有些相關性可能隔的比較遠,用大的卷積核才能學到此特征。

但是這個結構有個缺點,5*5的卷積核的計算量太大。那麼作者想到了第二個結構,用1*1的卷積核進行降維。

這個1*1的卷積核,它的作用就是:

  • 降低次元,減少計算瓶頸
  • 增加網絡層數,提高網絡的表達能力

那麼在具體的卷積神經網絡中,Inception應該放在哪裡,作者的建議,在底層保持傳統卷積不變,在高層使用Inception結構。

Inception作用

作者指出了Inception的優點:

  • 顯著增加了每一步的單元數目,計算複雜度不會不受限制,尺度較大的塊卷積之前先降維
  • 視覺資訊在不同尺度上進行處理聚合,這樣下一步可以從不同尺度提取特征

但是具體,為什麼Inception會起作用,我一直想不明白,作者後面實驗也證明了GoogLeNet的有效性,但為什麼也沒有具體介紹。深度學習也是一個實踐先行的學科,實踐領先于理論,實踐證明了它的有效性。後來看到一個部落格,解開了我的謎團。在此貼出他的回答。

Inception的作用就是替代了人工确定卷積層中過濾器的類型或者是否建立卷積層和池化層,讓網絡自己學習它具體需要什麼參數。

Inception-v2

這篇論文主要思想在于提出了Batch Normalization,其次就是稍微改進了一下Inception。

Batch Normalization

這個算法太牛了,使得訓練深度神經網絡成為了可能。從一下幾個方面來介紹。

  1. 為了解決什麼問題提出的BN
  2. BN的來源
  3. BN的本質
為了解決什麼問題提出的BN

訓練深度神經網絡時,作者提出一個問題,叫做“Internal Covariate Shift”。

這個問題是由于在訓練過程中,網絡參數變化所引起的。具體來說,對于一個神經網絡,第n層的輸入就是第n-1層的輸出,在訓練過程中,每訓練一輪參數就會發生變化,對于一個網絡相同的輸入,但n-1層的輸出卻不一樣,這就導緻第n層的輸入也不一樣,這個問題就叫做“Internal Covariate Shift”。

為了解決這個問題,提出了BN。

BN的來源

白化操作--在傳統機器學習中,對圖像提取特征之前,都會對圖像做白化操作,即對輸入資料變換成0均值、機關方差的正态分布。 卷積神經網絡的輸入就是圖像,白化操作可以加快收斂,對于深度網絡,每個隐層的輸出都是下一個隐層的輸入,即每個隐層的輸入都可以做白化操作。

在訓練中的每個mini-batch上做正則化:

inception-v1,v2,v3,v4----論文筆記Inception-v1Inception-v2Inception-v3Inception-v4參考
inception-v1,v2,v3,v4----論文筆記Inception-v1Inception-v2Inception-v3Inception-v4參考
BN的本質

我的了解BN的主要作用就是:

  • 加速網絡訓練
  • 防止梯度消失

如果激活函數是sigmoid,對于每個神經元,可以把逐漸向非線性映射的兩端飽和區靠攏的輸入分布,強行拉回到0均值機關方差的标準正态分布,即激活函數的興奮區,在sigmoid興奮區梯度大,即加速網絡訓練,還防止了梯度消失。

基于此,BN對于sigmoid函數作用大。

sigmoid函數在區間[-1, 1]中,近似于線性函數。如果沒有這個公式:

inception-v1,v2,v3,v4----論文筆記Inception-v1Inception-v2Inception-v3Inception-v4參考

就會降低了模型的表達能力,使得網絡近似于一個線性映射,是以加入了scale 和shift。

它們的主要作用就是找到一個線性和非線性的平衡點,既能享受非線性較強的表達能力,有可以避免非線性飽和導緻網絡收斂變慢問題。

Inception

把Inception-v1中5*5的卷積用2個3*3的卷積替換,這也是VGG那篇論文所提到的思想。這樣做法有兩個優點:

  • 保持相同感受野的同時減少參數
  • 加強非線性的表達能力

Inception-v3

這篇論文兩個思路:

  • 提出神經網絡結構的設計和優化思路
  • 改進Inception

設計準則

  1. 避免網絡表達瓶頸,尤其在網絡的前端。feature map急劇減小,這樣對層的壓縮過大,會損失大量資訊,模型訓練困難
  2. 高維特征的局部處理更困難
  3. 在較低次元空間聚合,不會損失表達能力。
  4. 平衡網絡的寬度和深度

改進Inception

首先Inception取得了很好的效果,它的主要特點就是:參數、記憶體和計算資源比傳統網絡小得多。 由于Inception特殊性,對它進行改進比較困難,最簡答直接的辦法,就是堆積更多的Inception子產品,但這樣就失去了它的特點,是以作者做了改進。牛掰呀!

改進有三個方面

分解卷積核尺寸

這個也有兩個辦法

  • 分解為對稱的小的卷積核
  • 分解為不對稱的卷積核

其實第一種方法,我覺得就是VGG中的思想,将5*5的卷積核替換成2個3*3的卷積核

inception-v1,v2,v3,v4----論文筆記Inception-v1Inception-v2Inception-v3Inception-v4參考
inception-v1,v2,v3,v4----論文筆記Inception-v1Inception-v2Inception-v3Inception-v4參考

上圖左邊是原來的Inception,右圖是改進的Inception。

第二種方法就是将n*n的卷積核替換成 1*n 和 n*1 的卷積核堆疊,計算量又會降低。

但是第二種分解方法在大次元的特征圖上表現不好,在特征圖12-20次元上表現好。

不對稱分解方法有幾個優點:

  • 節約了大量的參數
  • 增加一層非線性,提高模型的表達能力
  • 可以處理更豐富的空間特征,增加特征的多樣性
inception-v1,v2,v3,v4----論文筆記Inception-v1Inception-v2Inception-v3Inception-v4參考
inception-v1,v2,v3,v4----論文筆記Inception-v1Inception-v2Inception-v3Inception-v4參考

上圖是不對稱分解的兩種方式。

使用輔助分類器

其實在第一篇論文中GoogLeNet中就使用了輔助分類器,使用了2個,那麼它的優勢就是

  • 把梯度有效的傳遞回去,不會有梯度消失問題,加快了訓練
  • 中間層的特征也有意義,空間位置特征比較豐富,有利于提成模型的判别力

改變降低特征圖尺寸的方式

設計準則的第一條,就是避免表達瓶頸。那麼傳統的卷積神經網絡的做法,當有pooling時(pooling層會大量的損失資訊),會在之前增加特征圖的厚度(就是雙倍增加濾波器的個數),通過這種方式來保持網絡的表達能力,但是計算量會大大增加。

inception-v1,v2,v3,v4----論文筆記Inception-v1Inception-v2Inception-v3Inception-v4參考

上圖就是作者的改進方式。有兩個通道,一個是卷積層,一個是pooling層,兩個通道生成的特征圖大小一樣,concat在一起即可。

Inception-v4

這篇論文,沒有公式,全篇都是畫圖,就是網絡結構。

主要思想很簡單:Inception表現很好,很火的ResNet表現也很好,那就想辦法把他們結合起來呗。

Inception v4

inception-v1,v2,v3,v4----論文筆記Inception-v1Inception-v2Inception-v3Inception-v4參考

Inception-ResNet v1

inception-v1,v2,v3,v4----論文筆記Inception-v1Inception-v2Inception-v3Inception-v4參考

Inception-ResNet v2

inception-v1,v2,v3,v4----論文筆記Inception-v1Inception-v2Inception-v3Inception-v4參考

還有幾個作者通過實驗總結的幾個知識點:

1、Residual Connection

作者認為殘差連接配接并不是深度網絡所必須的(PS:ResNet的作者說殘差連接配接時深度網絡的标配),沒有殘差連接配接的網絡訓練起來并不困難,因為有好的初始化以及Batch Normalization,但是它确實可以大大的提升網路訓練的速度。

2、Residual Inception Block

inception-v1,v2,v3,v4----論文筆記Inception-v1Inception-v2Inception-v3Inception-v4參考

可以看到我畫圈的部分,那個1*1的卷積層并沒有激活函數,這個作用主要是次元對齊。

3、Scaling of the Residual

當過濾器的數目超過1000個的時候,會出現問題,網絡會“壞死”,即在average pooling層前都變成0。即使降低學習率,增加BN層都沒有用。這時候就在激活前縮小殘差可以保持穩定。即下圖

inception-v1,v2,v3,v4----論文筆記Inception-v1Inception-v2Inception-v3Inception-v4參考

4、網絡精度提高原因

殘差連接配接隻能加速網絡收斂,真正提高網絡精度的還是“更大的網絡規模”。

參考

https://blog.csdn.net/loveliuzz/article/details/79135583

https://blog.csdn.net/kangroger/article/details/69218625

https://blog.csdn.net/wspba/article/details/68065564

還有一些其他的,我看到一兩個點,但是忘記收藏網站了,如看到會加上,如看到請@我謝謝!

繼續閱讀