《Rethinking the Inception Architecture for Computer Vision》筆記
介紹
深度學習在計算機視覺方面取得了很大突破。在2014ILSVRC分類比賽中中,VGG和GoogLeNet取得了優異成績。卷積網路架構上的改進可以提升計算機視覺各類任務的效能。
VGG以很樸素的方式描述了特徵,但有很大的計算量。GoogLeNet中的Inception結構設計的目的就是減少計算量和記憶體。GoogLeNet中只有5百萬引數,是AlexNet的1/12(6千萬引數),VGG引數是AlexNet的3倍多。
Inception的計算量小,效能優異。可以把它應用到對計算和視訊記憶體有嚴格要求的一些場景中。但是Inception結構的複雜性使得網路難改進。如果只是單純放大網路,計算量的增加帶來的增益會立刻消失。GoogLeNet的論文沒有描述清楚決定其多樣性設計的因素,使得它難以拓展到新的用例上。如果增大Inception型別模型的容量,如果只是double濾波器組的數量,引數量和計算量將會增大4倍;在許多場景中,不允許這樣設計。
下面講解幾個增大卷積網路的原則和優化方法。
通用設計原則
這些原則只是原理性的,基於實驗結果。
1、避免表示瓶頸,尤其是在網路的前面。前向傳播網路可以看做一個有向無環圖,從輸入到輸出。一般來說,representation size從輸入到輸出特徵應該緩慢減小。理論上來說,不能僅僅通過維度得到資訊,因為它已經丟棄了許多重要特徵例如相關結構,維度只能代表資訊的粗略估計。
2、高維度特徵在網路區域性處理更加容易。在卷積網路中增加非線性可以解耦合特徵,訓練更快。
3、空間聚合可以以低緯度嵌入進行,這樣不會影響representational power。例如,在進行大尺度卷積(3x3)時,在空間聚合前,先對輸入進行降維,這樣不會帶來嚴重影響。我們猜測原因為:如果輸出是為了空間聚合,那麼臨近單元的強相關性在降維過程中資訊損失會很少。考慮到這些訊號容易壓縮,降維會加速學習過程。
4、平衡寬度和深度。增加寬度或深度都會帶來效能上的提升,兩者同時增加帶了並行提升,但是要考慮計算資源的合理分配。
分解大的卷積核
GoogLeNet效能優異很大程度在於使用了降維。降維可以看做卷積網路的因式分解。例如1x1卷積層後跟著3x3卷積層。在網路角度看,啟用層的輸出是高相關的;因此在聚合前進行降維,可以得到類似的區域性表示效能。
這裡,考慮計算效能,我們探索其他形式的卷積因式分解。因為Inception結構是全卷積,每一個啟用值對應的每一個權重,都對應一個乘法運算。因此減小計算量意味著減少引數。所以通過解耦和引數,可以加快訓練。利用節省下來的計算和記憶體增加filter-bank大小,來提升網路效能。
分解為更小的卷積
大的卷積計算量更大,例如filter相同情況下,5x5卷積核比3x3卷積核計算量大25/9=2.78倍。5x5卷積核相比3x3卷積核有廣闊“視野”,可以捕捉到更多資訊,單純減小卷積核大小會造成資訊損失。是否可以通過多層網路替代5x5卷積。把5x5網路看做全卷積,每個輸出是卷積核在輸入上滑動;可以通過2層的3x3的全卷積網路替換。如下圖:
原來的Inception結構:
使用2個3x3替換5x5後的Inception結構:
對於分解的卷積層,使用線性啟用還是非線性啟用,實驗表明,非線性啟用效能更好。
空間上分解為非對稱卷積
大於3x3的卷積層,都可以分解為連續的3x3的卷積層,那麼是不是可以分解為更小的卷積核呢?實際上分解為非對稱的更好。例如一個3x1卷積,後面跟一個1x3卷積,相當於3x3的卷積。如下圖:
兩層結構計算量減少33%;而2x2卷積代替的話計算量僅僅減少11%。
理論上,nxn卷積可以通過1xn->nx1卷積代替,隨著n增大,能減少更多計算量。在實踐中,在網路前幾層這樣的分解效果並不好;但是在中等網路中,有這不錯的效能(mxm大的feature map,m介於12到20)。在這等尺寸下,1x7->7x1有著非常好的卷積效果。
使用輔助分類器
GoogLeNet引入了附加分類器,其目的是想把有效梯度傳遞回去,從而加快訓練。我們發現輔助分類器扮演著regularizer的角色;因為當輔助分類器使用了batch-normalized或dropout時,主分類器效果會更好。
降低特徵圖大小
pooling層用來減小feature map大小。為了避免出現representational bottleneck,在使用pooling前常常增加feature map個數。例如k個dxd的feature map,pooling後為k個
Inception-V2
我們提出Inception-V2模型。結構圖下圖所示:
把7x7卷積替換為3個3x3卷積。包含3個Inception部分。第一部分是35x35x288,使用了2個3x3卷積代替了傳統的5x5;第二部分減小了feature map,增多了filters,為17x17x768,使用了nx1->1xn結構;第三部分增多了filter,使用了卷積池化並行結構。網路有42層,但是計算量只有GoogLeNet的2.5倍。
通過平滑標籤正則化模型
輸入
假設真實分佈為
最小化交叉熵等價最大化似然函式。交叉熵函式對邏輯輸出求導
假設
為了避免模型過於自信,引入一個獨立於樣本分佈的變數
實驗中使用均勻分佈代替
訓練方法
batch-size=32,epoch=100。SGD+momentum,momentum=0.9。使用RMSProp,decay=0.9,
低解析度影象的識別
對於低分辨有影象,使用“高解析度”receptive field。實踐中:1、減小前2個卷積層的stride,2、去掉第一個pooling層。
實驗結果
單模型,single crop得到的結果