深度學習——分類之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的標籤更合理一點。
網路設計原則
作者先是歸納總結了四條神經網路結構設計時候的原則:
- bottleneck可以降維降低計算量,但是也會丟失信息,所以要合適地降,別降太猛丟信息了;
- 更高維度的特徵表示,更稀疏,耦合更少,更好訓練;
- 空間聚合,比如用1x1卷積降低通道數,信息丟失很少,可能是因為通道間信息相關性比較高;
- 增加神經網路的深度和寬度,要協調起來,同時增加,效果最好;
上面僅作參考,實際上使用還是要各種嘗試,不過一般來說,就是網路看起來比較『漂亮』,網路形狀比較好看,沒有太寬或太深,也沒有突然來個猛的降維,大致就沒問題。
卷積分解
就是一層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 | 人工智能 | 神经网络 |