1. 程式人生 > >Inception系列和ResNet的成長之路

Inception系列和ResNet的成長之路

小總結一下Inception v1——Inception v4的發展歷程

1.Inception V1

通過設計一個係數網路結構,但是能夠產生稠密的資料,既能增加神經網路的表現,又能保證計算資源的使用效率。

通過Split-Merge包含了1 * 1,3 * 3,5 * 5的卷積,3*3的池化,可以增加網路對多尺度的適應性,當然,增加了網路的寬度。

這裡v1網路給人眼前一亮的是有一個Bottleneck layer,就是使用了NiN的1*1的卷積進行了特徵降維,減少了維度,還能修正非線性啟用relu,還提高了CNN的區域性感知區域,降低了計算量。以上就是1 * 1卷積核的作用。

首次提出了取消全連線層,這樣引數量就不會很大,取而代之的是全域性平均池化。當然,這裡最後好像還有一層全連線層,因為最後要softmax分類嘛。

還提出了輔助分類器的結構,為的是解決前幾層梯度消失的問題。下面是Inception Architecture:

在這裡插入圖片描述
論文:https://arxiv.org/abs/1409.4842

2.Inception V2

這個版本其實是出現了Batch Normalization才定義的,是為了解決Internal Covaviate Shift問題(內部neuron資料分佈發生變化)

白化:使每一層的輸出都規範化到N(0,1),而且允許較高的學習率,可以取代部分dropout

首次提出了5 * 5卷積核可以被兩個3 * 3的卷積核取代。

下面是詳細的優勢,借鑑:http://blog.csdn.net/happynear/article/details/44238541
 論文中將Batch Normalization的作用說得突破天際,好似一下解決了所有問題,下面就來一一列舉一下:
  (1) 可以使用更高的學習率。如果每層的scale不一致,實際上每層需要的學習率是不一樣的,同一層不同維度的scale往往也需要不同大小的學習率,通常需要使用最小的那個學習率才能保證損失函式有效下降,Batch Normalization將每層、每維的scale保持一致,那麼我們就可以直接使用較高的學習率進行優化。
  (2) 移除或使用較低的dropout。 dropout是常用的防止overfitting的方法,而導致overfit的位置往往在資料邊界處,如果初始化權重就已經落在資料內部,overfit現象就可以得到一定的緩解。論文中最後的模型分別使用10%、5%和0%的dropout訓練模型,與之前的40%-50%相比,可以大大提高訓練速度。
  (3) 降低L2權重衰減係數。 還是一樣的問題,邊界處的區域性最優往往有幾維的權重(斜率)較大,使用L2衰減可以緩解這一問題,現在用了Batch Normalization,就可以把這個值降低了,論文中降低為原來的5倍。
  (4) 取消Local Response Normalization層。 由於使用了一種Normalization,再使用LRN就顯得沒那麼必要了。而且LRN實際上也沒那麼work。
  (5) 減少影象扭曲的使用。 由於現在訓練epoch數降低,所以要對輸入資料少做一些扭曲,讓神經網路多看看真實的資料。

上面這個博主的文章中還寫道了配對使用scale & shift。

在這裡插入圖片描述

3.Inception V3

V2有兩3 * 3的卷積核代替了一個55的,但是有沒有可能分解的更加徹底呢?有,
那就是N * N分解為1 * N和N * 1,不僅降低了引數的數量,還降低了計算量。

在這裡插入圖片描述
這麼做工程味兒很濃。最重要的還是卷積的分解。
在這裡插入圖片描述
一共有三種網路結構,如下:好處多多。

在這裡插入圖片描述

4.ResNet登場

在V1—>V3之後,ResNet殘差網路出場了,下圖左邊的叫Plain net,對映他可以擬合出任意目標對映H(x),出來了一個Residual net,右下圖擬合出F(x),H(x) = F(x)+x,其中F(x)殘差對映,當H(x)最優對映接近identity時,很容易捕捉到小的擾動。

在這裡插入圖片描述

在這裡插入圖片描述
根據bootleneck優化殘差對映網路。
可以優化的更好。
在這裡插入圖片描述

5.Inception V4

其實,做到現在,inception模組感覺已經做的差不多了,再做下去準確率應該也不會有大的改變。但是谷歌這幫人還是不放棄,非要把一個東西做到極致,改變不了inception模組,就改變其他的。

因此,作者Christian Szegedy設計了inception v4的網路,將原來卷積、池化的順次連線(網路的前幾層)替換為stem模組,來獲得更深的網路結構。stem模組結構如下
在這裡插入圖片描述
stem之後的,同v3,是inception模組和reduction模組,如下圖:
inception v4 中的inception模組(分別為inception A inception B inception C)
inception v4中的reduction模組(分別為reduction A reduction B)

最終結構
在這裡插入圖片描述

6.Inception-ResNet-v2

ResNet的結構既可以加速訓練,還可以提升效能(防止梯度彌散);Inception模組可以在同一層上獲得稀疏或非稀疏的特徵。有沒有可能將兩者進行優勢互補呢?

Christian Szegedy等人將兩個模組的優勢進行了結合,設計出了Inception-ResNet網路。(inception-resnet有v1和v2兩個版本,v2表現更好且更復雜,這裡只介紹了v2)inception-resnet的成功,主要是它的inception-resnet模組。inception-resnet v2中的Inception-resnet模組如下圖:
在這裡插入圖片描述
Inception-resnet模組之間特徵圖尺寸的減小如下圖。(類似於inception v4)
在這裡插入圖片描述
最終得到的Inception-ResNet-v2網路結構如圖(stem模組同inception v4)。
在這裡插入圖片描述
經過這兩種網路的改進,使得模型對影象識別的錯誤率進一步得到了降低。Inception、resnet網路結果對比如表所示。
在這裡插入圖片描述
如表,Inception V4與Inception-ResNet-v2網路較之前的網路,誤差率均有所下降。

參考:https://zhuanlan.zhihu.com/p/30756181