網絡結構解讀之inception系列三:BN-Inception(Inception V2)


網絡結構解讀之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。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM