NO IMAGE

之前也寫過GoogLeNet的筆記,但那個時候對Inception有些似懂非懂,這周重新看了一遍,覺得有了新的體會,特地重新寫一篇部落格與它再續前緣。

本文屬於論文筆記性質,特此宣告。

Network in Network

GoogLeNet提出之時,說到其實idea是來自NIN,NIN就是Network in Network了。

NIN有兩個特性,是它對CNN的貢獻:

  • MLP代替GLM
  • Global Average Pooling

mlpconv

普通的卷積可以看做是比較特殊的GLM,GLM就是廣義線性模型。那麼MLP是指,在做卷積操作的時候,把線性操作變為多層感知機。

這個idea的理論基礎是多層感知機的抽象能力更強。假如我們把從影象中抽取出來的特徵稱作是這個影象的隱含概念(只是一個名稱罷了,不要過度追究),那麼如果隱含概念是線性可分的,那麼,GLM抽取出來的特徵沒有問題,抽象表達能力剛剛好。但是假如隱含概念並不是線性可分的,那麼就悲劇了,在只使用GLM的情況下,不得不過度的使用filter來表現這個隱含概念的各個方面,然後在下一層卷積的時候重新將這些概念組合,形成更加抽象的概念。

所以,基於如上,可以認為,在抽特徵的時候直接做了非線性變換,可以有效的對影象特徵進行更好的抽象。

從而,Linear convolution layer就變成了Mlpconv layer。

值得一提的是,Mlpconv相當於在正常的卷積層後面,再新增一個1×1的卷積層。

Global Average Pooling

Global Average Pooling的做法是將全連線層去掉。

全連線層的存在有兩個缺點:

  • 全連線層是傳統的神經網路形式,使用了全連線層以為著卷積層只是作為特徵提取器來提取影象的特徵,而全連線層是不可解釋的,從而CNN也不可解釋了
  • 全連線層中的引數往往佔據CNN整個網路引數的一大部分,從而使用全連線層容易導致過擬合。

而Global Average Pooling則是在最後一層,將卷積層設為與類別數目一致,然後全域性pooling,從而輸出類別個數個結果。

使用了mlpconv和Global Average Pooling之後,網路結構如下:

Inception

讀google的論文,你立馬會感到一股工程的氣息撲面而來。像此時的春風一樣,凌厲中透著暖意。所謂凌厲,就是它能把一個idea給用到節省記憶體和計算量上來,太偏實現了,所謂暖意,就是真的灰常有效果。

自2012年AlexNet做出突破以來,直到GoogLeNet出來之前,大家的主流的效果突破大致是網路更深,網路更寬。但是純粹的增大網路有兩個缺點——過擬合和計算量的增加。

解決這兩個問題的方法當然就是增加網路深度和寬度的同時減少引數,為了減少引數,那麼自然全連線就需要變成稀疏連線,但是在實現上,全連線變成稀疏連線後實際計算量並不會有質的提升,因為大部分硬體是針對密集矩陣計算優化的,稀疏矩陣雖然資料量少,但是所耗的時間卻是很難缺少。

所以需要一種方法,既能達到稀疏的減少引數的效果,又能利用硬體中密集矩陣優化的東風。Inception就是在這樣的情況下應運而生。

第一步,將卷積分塊,所謂的分塊就是其實就是將卷積核分組,既然是分組索性就讓卷積和不一樣吧,索性使用了1×1,3×3,5×5的卷積核,又因為pooling也是CNN成功的原因之一,所以把pooling也算到了裡面,然後將結果在拼起來。這就是最naive版本的Inception。

對於這個Inception,有兩點需要注意:

  • 層級越高,所對應的原始圖片的視野就越大,同樣大小的卷積核就越難捕捉到特徵,因而層級越高,卷積核的數目就應該增加。
  • 1×1,3×3,5×5 只是隨意想出來的,不是必須這樣。

這個naive版的Inception,還有一個問題,因為所有的卷積核都在上一層的所有輸出上來做,那5×5的卷積核所需的計算量就太大了。因而,可以採用NIN中的方法對上一層的輸出進行Merge。這樣就衍生出了真正可用的Inception。

這個結構利用了NIN結構中非線性變換的強大表達能力。

同時,正如上一篇部落格決策森林和卷積神經網路二道歸一中的隱式資料路由,計算量也大大減少,因為四個分支之間是不需要做計算的。

再同時,還具有不同的視野尺度,因為不同尺寸的卷積核和pooling是在一起使用的。

旁白贊曰:其謀略不可為不遠,其心機不可謂不深啊。

之前心中一直有個疑問,那就是max-pooling之後的feature_map不是應該長寬都減半了麼,那怎麼與conv的輸出拼接。後來才想到,是自己被theano中的實現誤導了,theano的實現是自動就縮小了,但stride為1的時候,max_pooling的輸出還可以是長寬不變。

GoogLeNet的模型引數詳細如下:

結構如下:

需要注意的是,為了避免梯度消失,網路額外增加了2個輔助的softmax用於向前傳導梯度。文章中說這兩個輔助的分類器的loss應該加一個衰減係數,實際測試的時候,這兩個額外的softmax會被去掉。

Inception-V2

Google的論文還有一個特點,那就是把一個idea發揮到極致,不挖乾淨絕不罷手。所以第二版的更接近實現的Inception又出現了。Inception-V2這就是文獻[3]的主要內容。

Rethinking這篇論文中提出了一些CNN調參的經驗型規則,暫列如下:

  • 避免特徵表徵的瓶頸。特徵表徵就是指影象在CNN某層的啟用值,特徵表徵的大小在CNN中應該是緩慢的減小的。
  • 高維的特徵更容易處理,在高維特徵上訓練更快,更容易收斂
  • 低維嵌入空間上進行空間匯聚,損失並不是很大。這個的解釋是相鄰的神經單元之間具有很強的相關性,資訊具有冗餘。
  • 平衡的網路的深度和寬度。寬度和深度適宜的話可以讓網路應用到分散式上時具有比較平衡的computational budget。

Smaller convolutions

簡而言之,就是將尺寸比較大的卷積,變成一系列3×3的卷積的疊加,這樣既具有相同的視野,還具有更少的引數。

這樣可能會有兩個問題,
– 會不會降低表達能力?
– 3×3的卷積做了之後還需要再加啟用函式麼?(使用ReLU總是比沒有要好)

實驗表明,這樣做不會導致效能的損失。

個人覺得,用大視野一定會比小視野要好麼? 疊加的小視野還具有NIN的效果。所以,平分秋色我覺得還不能說是因為某個原因。

於是Inception就可以進化了,變成了

Asymmetric Convoluitons

使用3×3的已經很小了,那麼更小的2×2呢?2×2雖然能使得引數進一步降低,但是不如另一種方式更加有效,那就是Asymmetric方式,即使用1×3和3×1兩種來代替3×3. 如下圖所示:

使用2個2×2的話能節省11%的計算量,而使用這種方式則可以節省33%。

於是,Inception再次進化。

注意:實踐證明,這種模式的Inception在前幾層使用並不會導致好的效果,在feature_map的大小比較中等的時候使用會比較好

Auxiliary Classifiers

在GoogLeNet中,使用了多餘的在底層的分類器,直覺上可以認為這樣做可以使底層能夠在梯度下降中學的比較充分,但在實踐中發現兩條:

  • 多餘的分類器在訓練開始的時候並不能起到作用,在訓練快結束的時候,使用它可以有所提升
  • 最底層的那個多餘的分類器去掉以後也不會有損失。
  • 以為多餘的分類器起到的是梯度傳播下去的重要作用,但通過實驗認為實際上起到的是regularizer的作用,因為在多餘的分類器前新增dropout或者batch normalization後效果更佳。

Grid Size Reduction

Grid就是影象在某一層的啟用值,即feature_map,一般情況下,如果想讓影象縮小,可以有如下兩種方式:

右圖是正常的縮小,但計算量很大。左圖先pooling會導致特徵表徵遇到瓶頸,違反上面所說的第一個規則,為了同時達到不違反規則且降低計算量的作用,將網路改為下圖:

使用兩個並行化的模組可以降低計算量。

V2-Inception

經過上述各種Inception的進化,從而得到改進版的GoogLeNet,如下:

圖中的Figure 4是指沒有進化的Inception,Figure 5是指smaller conv版的Inception,Figure 6是指Asymmetric版的Inception。

Label Smoothing

除了上述的模型結構的改進以外,Rethinking那篇論文還改進了目標函式。

原來的目標函式,在單類情況下,如果某一類概率接近1,其他的概率接近0,那麼會導致交叉熵取log後變得很大很大。從而導致兩個問題:

  • 過擬合
  • 導致樣本屬於某個類別的概率非常的大,模型太過於自信自己的判斷。

所以,使用了一種平滑方法,可以使得類別概率之間的差別沒有那麼大,

用一個均勻分佈做平滑,從而導致目標函式變為:

該項改動可以提升0.2%。

Rethinking 那篇論文裡還有關於低解析度的輸入的影象的處理,在此不贅述了。

參考文獻

[1]. Lin M, Chen Q, Yan S. Network in network[J]. arXiv preprint arXiv:1312.4400, 2013.

[2]. Szegedy C, Liu W, Jia Y, et al. Going deeper with convolutions[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2015: 1-9.

[3]. Szegedy C, Vanhoucke V, Ioffe S, et al. Rethinking the Inception Architecture for Computer Vision[J]. arXiv preprint arXiv:1512.00567, 2015.