深度學習——分類之Inception v3——factorized convolution

論文:Rethinking the Inception Architecture for Computer Vision

作者:Christian Szegedy, Vincent Vanhoucke, Sergey Ioffe, Jonathon Shlens, Zbigniew Wojna

ImageNet Top5錯誤率:3.5%

主要思想:通過對卷積的分解來進一步降低計算量。例如一層5x5卷積可以用兩層3x3卷積替代,而一層3x3卷積又可以用一層1x3卷積和3x1卷積替代,大大減小計算量。另外還提出了Label-smoothing regularation(LSR),平滑標籤,比hard的標籤更合理一點。

網路設計原則

作者先是歸納總結了四條神經網路結構設計時候的原則:

  1. bottleneck可以降維降低計算量,但是也會丟失信息,所以要合適地降,別降太猛丟信息了;
  2. 更高維度的特徵表示,更稀疏,耦合更少,更好訓練;
  3. 空間聚合,比如用1x1卷積降低通道數,信息丟失很少,可能是因為通道間信息相關性比較高;
  4. 增加神經網路的深度和寬度,要協調起來,同時增加,效果最好;

上面僅作參考,實際上使用還是要各種嘗試,不過一般來說,就是網路看起來比較『漂亮』,網路形狀比較好看,沒有太寬或太深,也沒有突然來個猛的降維,大致就沒問題。

卷積分解

就是一層5x5卷積可以用兩層3x3卷積替代,感受野相同,參數變少;而一層3x3卷積又可以進一步用1x3卷積和3x1卷積替代,感受野相同,參數變少。

這個看cs231n的課程裡面講解得很清楚。

三層3x3卷積相當於一層7x7卷積:

而一層3x3卷積又可以用一層1x3卷積和3x1卷積來替代:

通過卷積分解,可以大大減少計算量,給網路瘦身。

具體的卷積分解後的Inception模塊示例:

Auxiliary Classifier

作者稱側枝的輔助分類器,並不會幫助更快收斂,但是能起到正則化的作用,中間加個監督信號,能稍微好一點,可以理解。然後兩個輔助分類器扔掉底層那個沒什麼影響,可以去掉。

而使用了BN的輔助分類器,能讓主分支更加好一點。

降尺寸增通道

原來的降維增通道,先stride 1卷積,再池化,計算量浪費了,或者直接stride 2卷積,信息浪費了。所以作者搞了一個複雜的組合來實現降尺寸升通道:

Inception v2

按照作者的官方說法,上一篇Batch Normalization里提到的Inception改進,叫做BN-Inception,而下面這種新設計的結構才叫Inception v2:

不過Inception v2和Inception v3沒太大區別,BN-Inception更像是第二版,不過只是個稱呼問題啦。

Label-smoothing regularation

本文的另一大改進是引入了標籤平滑正則。原來,每個類別對應一個編號,給的樣本只對應一個唯一的ground truth,則對應的target就是1,其它都是0,然後算交叉熵。

現在,作者說,這樣的分布( Dirac delta),只在目標點為1,其它地方為0,太hard了,直觀上看起來這樣的理論target分布也太尖銳了,所以有軟標籤的概念,把全部的100%的概率給其它標籤平均分配一點點,不要讓網路太自信了去預測100%就是某一類。軟標籤如下:

ε是一個較小的數,這樣ground truth對應的標籤有大部分的概率,而其它類別也有一小丟丟的概率。可以避免過擬合,防止網路對於某一個類別預測過於自信。

這樣,新的交叉熵損失變為了:

即每一樣本對應分布的交叉熵損失加權求和。

LSR直覺上很make sense,之後在不少的論文裡面也看到過他的身影,是一個很有效的改進,作者稱——consistent improvement of about 0.2% absolute both for top-1 error and the top-5 error。雖然提升不大,但是始終有效,實際上,把標籤平均分配一點置信度給其它類別的做法也不是最好的,能根據類別的相似性、語義上的相似易混淆程度,分配軟標籤,應該是一個更合理的做法。

Inception v3

前面的標籤平滑、輔助分類器、卷積分解等加在一起,就可以得到Inception v3了。

按照下表,從上往下,一項一項依次累加,得到最後的網路,就是Inception v3了:


推薦閱讀:

【重磅】LeCun 卸任! Facebook 人工智慧實驗室換帥
人工智慧對銀行推動的展望
PyTorch 這一年——十佳開源項目

TAG:深度学习DeepLearning | 人工智能 | 神经网络 |