Inception-v2/v3結構解析(原創)

https://arxiv.org/pdf/1512.00567.pdf

Szegedy在2015年發表了論文Rethinking the Inception Architecture for Computer Vision,該論文對之前的Inception結構提出了多種優化方法,來達到儘可能高效的利用計算資源的目的。作者認為隨意增大Inception的複雜度,後果就是Inception的錯誤率很容易飆升,還會成倍的增加計算量,所以必須按照一套合理的規則來優化Inception結構,具體如下:

一、基本規則

規則1:要防止出現特徵描述的瓶頸(representational bottleneck)。所謂特徵描述的瓶頸就是中間某層對特徵在空間維度進行較大比例的壓縮(比如使用pooling時),導致很多特徵丟失。雖然Pooling是CNN結構中必須的功能,但我們可以通過一些優化方法來減少Pooling造成的損失。

規則2:特徵的數目越多收斂的越快。相互獨立的特徵越多,輸入的信息就被分解的越徹底,分解的子特徵間相關性低,子特徵內部相關性高,把相關性強的聚集在了一起會更容易收斂。這點就是Hebbin原理:fire together, wire together。規則2和規則1可以組合在一起理解,特徵越多能加快收斂速度,但是無法彌補Pooling造成的特徵損失,Pooling造成的representational bottleneck要靠其他方法來解決。

規則3:可以壓縮特徵維度數,來減少計算量。inception-v1中提出的用1x1卷積先降維再作特徵提取就是利用這點。不同維度的信息有相關性,降維可以理解成一種無損或低損壓縮,即使維度降低了,仍然可以利用相關性恢復出原有的信息。

規則4:整個網路結構的深度和寬度(特徵維度數)要做到平衡。只有等比例的增大深度和維度才能最大限度的提升網路的性能。

二、優化方法

以下優化方法就是根據前面的規則總結出的:

方法1:可以將大尺度的卷積分解成多個小尺度的卷積來減少計算量。比如將1個5x5的卷積分解成兩個3x3的卷積串聯,從圖1左側可以看出兩級3x3的卷積的覆蓋範圍就是5x5,兩者的覆蓋範圍沒有區別。假設5x5和兩級3x3卷積輸出的特徵數相同,那兩級3x3卷積的計算量就是前者的(3x3+3x3)/5x5=18/25。

圖1:5x5卷積等效於2級3x3卷積串聯 (左),3x3卷積可以分解為3x1和1x3卷積 (右)

方法2:可以使用非對稱卷積。將nxn的卷積分解成1xn和nx1卷積的串聯,例如n=3,分解後就能節省33%的計算量(圖1右側)。作者通過測試發現非對稱卷積用在網路中靠中間的層級才有較好的效果(特別是feature map的大小在12x12~20x20之間時)。

方法3:可以使用並行結構來優化Pooling。前面的規則1提到Pooling會造成represtation bottleneck,一種解決辦法就是在Pooling前用1x1卷積把特徵數加倍(見圖2右側),這種加倍可以理解加入了冗餘的特徵,然後再作Pooling就只是把冗餘的信息重新去掉,沒有減少信息量。這種方法有很好的效果但因為加入了1x1卷積會極大的增大 計算量。替代的方法是使用兩個並行的支路,一路1x1卷積,由於特徵維度沒有加倍計算量相比之前減少了一倍,一路是Pooling,最後再在特徵維度拼合到一起(見圖3)。這種方法即有很好的效果,又沒有增大計算量。

圖2

圖3

方法4:使用Label Smoothing來對網路輸出進行正則化。

Softmax層的輸出可以用下面圖4公式表示,損失loss可以用圖5表示。假設分類的標籤是獨熱碼錶示(正確分類是1,其他類別是0),從公式4可以反推出整個訓練過程收斂時Softmax的正確分類的輸入Zk是無窮大,這是一種極其理想的情況,如果讓所有的輸入都產生這種極其理想的輸出,就會造成overfit(回想一下overfit的概念:能對所有的輸入進行最理想的分類,魯棒性差)。所以為了克服overfit,防止最終出來的正確分類p(k)=1,在輸出p(k)時加了個參數delta(圖6),生成新的q(k),再用它替換公式5中的q(k)來計算loss。

圖4:Softmax層的輸出

圖5:loss

圖6:使用了label smoothing方法

作者還對自己在GoogLeNet論文中提出的 分支分類器(Auxiliary Classifiers)效果進行了糾正。Szegedy認為自己當時的結論就是錯誤的,特別是靠近輸入側的那個Auxiliary Classifier,加不加完全沒區別,但如果在靠近輸出的那個Auxiliary Classifier的全連接層後加個BN,會起到正則化的作用,所有 第二個Auxiliary Classifier還是可以保留。起正則化作用的原因Szegedy完全沒解釋。。。

把上述的方法1~方法4組合到一起,就有了inceptio-v2結構(圖7),圖7中的三種inception模塊的具體構造見圖8。inception-v2的結構中如果Auxiliary Classifier上加上BN,就成了inception-v3。

圖7:inception-v2

圖8: (左)第一級inception結構 (中)第二級inception結構 (右)第三級inception結構

總結:個人覺得Rethinking the Inception Architecture for Computer Vision這篇論文沒有什麼特別突破性的成果,只是對之前的GoogLeNet作些小修小補,近年來真正有突破性的還是BN、ResNet這樣的成果。


推薦閱讀:

TAG:深度學習DeepLearning | 計算機視覺 | 神經網路 |