網絡結構解讀之inception系列三:BN-Inception(Inception V2)
BN的出現大大解決了訓練收斂問題。作者主要圍繞歸一化的操作做了一系列優化思路的闡述,值得細看。
Batch Normalization: Accelerating Deep Network Training
by Reducing Internal Covariate Shift
-
深度網絡為什么難訓練?
因為internal covariate shift
- internal covariate shift:在訓練過程中,每層的輸入分布因為前層的參數變化而不斷變化
- 從不同的角度說明問題internal covariate shift
1.SGD訓練多層網絡
總損失是,當
,損失轉換為
梯度更新是
當x的分布固定時候,訓練是容易收斂的。而當x的分布不斷變化時候,
需要不斷調整去修正x分布的變化帶來的影響
2.易進入飽和狀態
什么是飽和狀態?以sigmoid為例,,當|x|增加,
趨向於0,稱為飽和狀態。(梯度消失,模型將緩慢訓練)。這里
x受W、b和前面層參數的影響,訓練期間前面層參數的變化可能會將x的許多維度移動到非線性的飽和狀態並收斂減慢。且這個前層的影響隨着網絡深度的增加而放大。
- BN之前的做法 :1.較低的學習率,但減慢了收斂速度。2.謹慎的參數初始化。3.ReLU代替sigmoid
-
如何解決internal covariate shift,BN的思考起源:
whitened(LeCun et al,1998b),對輸入進行白化即輸入線性變化為具有0均值和單位方差,並去相關。使用白化來進行標准化(normalization),以此來消除internal covariate shift的不良影響由於whitened需要計算協方差矩陣和它的平方根倒數,而且在每次參數更新后需要對整個訓練集進行分析,代價昂貴。因此尋求一種可替代的方案,BN。
-
Batch Normalization
在白化的基礎上做簡化:
簡化1,單獨標准化每個標量特征(每個通道)
簡單標准化可能改變該層的表達能力,以sigmoid層為例會把輸入約束到線性狀態。因此我們需要添加新的恆等變換去抵消這個(scale操作)。
簡化2,mini-batch方式進行normalization。計算過程如圖:
為了數值穩定, 是一個加到方差上的常量。
-
Batch Normalization的求導
-
BN的訓練和預測
訓練時取決於當前batch的輸入。
預測需要用總體統計來進行標准化。訓練完成后得到均值參數和方差參數
:
-
網絡中加入BN
仿射(線性)變換和非線性變換組成用下式表示:
其中g是非線性如sigmoid。當normalization非線性輸出時,它的分布形狀可能會改變無法消除internal covariate shift。
而線性更加具有對稱性,非稀疏分布 ,即更高斯。對其進行normalization更能產生穩定分布的激活。
因此BN的對象是線性變換的輸出。
這時中偏置可以忽略。
偏置b的作用可以被BN的中心化取消,且后面scale部分會有shift。最終的公式如下:
-
添加BN后可以采用更大學習
通過bn整個網絡的激活值,在數據通過深度網絡傳播時,它可以防止層參數的微小變化被放大。(梯度消失)
bn使參數縮放更有彈性。通常,大的學習率可能增加參數的縮放,這在BP時會放大梯度並導致梯度爆炸。通過BN,bp不受其參數縮放的影響。
-
實驗1:minist訓練
a圖是性能和迭代次數。b,c是某一層的激活值分布。添加bn訓練收斂更快且性能更優,且分布更加穩定。
-
實驗2:Imagenet Classfication
訓練tricks:1.提高學習率。大學習率依然能收斂。2.去掉dropout。刪除后獲得更高的驗證准確率。推測bn能提供類似dropout的正則化收益。(這里只測試了驗證集,感覺不夠嚴密)。3.更徹底的shuffle。防止同一類一起出現在同一個minibatch。驗證集提高了1%。4.減小L2正則權重。減小5倍后驗證集性能提高。(相當於caffe里deacy)。5.加速學習率衰減。訓練時間更短。6.去掉RPN。7.減少photometric distortions(光照扭曲)。
單模型實驗:
Inception
BN-Baseline:在Inception 基礎上加bn
BN-x5: 在BN-Baseline 基礎上增大5倍學習率到0.0075
BN-x30:在BN-Baseline 基礎上增大30倍學習率到0.045
BN-x5-Sigmoid:使用sigmoid替代ReLU
多模型實驗結果:
(BN-inception就是我們說的V2)
-
附錄BN-inception的結構
V1到BN的改動:1.2個3*3代替5*5。2.28*28 modules從2個增加到3個。3.在modules中,pooling有時average ,有時maximum 。4.
沒有across board pooling layers在任意兩個inception modules。只在3c,4e里會有stride-2的卷積和pooling。