計算機視覺面試考點(7)Batch Normalization

計算機視覺工程師在面試過程中主要考察三個內容:圖像處理、機器學習、深度學習。然而,各類資料紛繁複雜,或是簡單的知識點羅列,或是有着詳細數學推導令人望而生畏的大部頭。爲了督促自己學習,也爲了方便後人,決心將常考必會的知識點以通俗易懂的方式設立專欄進行講解,努力做到長期更新。此專欄不求甚解,只追求應付一般面試。希望該專欄羽翼漸豐之日,可以爲大家免去尋找資料的勞累。每篇介紹一個知識點,沒有先後順序。想了解什麼知識點可以私信或者評論,如果重要而且恰巧我也能學會,會盡快更新。最後,每一個知識點我會參考很多資料。考慮到簡潔性,就不引用了。如有冒犯之處,聯繫我進行刪除或者補加引用。在此先提前致歉了!

Batch Normalization
神經網絡中的一個層,被稱爲BN層

原理

訓練網絡的時候要對數據進行歸一化
原因:使輸入數據的分佈是相同的
分佈不相同的話,舉個例子:
同樣的圖像內容,網絡對暗一點的和亮一點的圖像的理解也就不同了

以上做法只考慮了網絡的輸入,沒有考慮網絡中每一層的輸入
BN層就是對每一層的分佈進行調整

對每一層分佈歸一化的好處:

  • 加快訓練速度。對於每一個神經元來說,每次的分佈都類似,那麼神經元不用總是大幅度調整去適應不同的輸入分佈。也就是加快了網絡訓練速度。
  • 緩解梯度消失。經過BN層的數據會大概率落在sigmoid激活函數導數較大的區域,緩解了梯度消失。
  • 緩解過擬合。因爲過擬合往往都是網絡爲了去擬合偏差較大或者極端的數據。使用BN層後,輸入的分佈是相似的,所以不容易發生過擬合。
  • 增大學習率。如果每層的分佈都不一致,每層需要的學習率也就不同。實際中一般設置一個統一的學習率。如果每層適用的學習率是0.1,0.01,0.001,那我們只能使用0.001去照顧所有的層。如果分佈都類似,各層的學習率就不會差距那麼大,學習率也就提高了。

在上述的描述中,我一直用的是“類似的分佈”而不是“相同的分佈”?
如果只做歸一化,數據的分佈是相同的,那麼數據會大概率落在下圖所示的sigmoid函數的不嚴格的線性區間中(紅色虛線)。
神經網絡是靠激活函數的非線性能力實現強大的表達能力。
如果激活函數類似於線性的,網絡會變成線性的,那麼神經網絡的深度將失去意義。
原因是,線性的表達我們用一層就足夠了呀。
所以我們不能讓數據大概率落在紅色虛線部分。
在這裏插入圖片描述
所以,我們對歸一化的數據進行一個簡單的變換。
使其分佈發生微小的變化,不完全落在紅色虛線中。
有人覺得,跌跌撞撞又回到了原點?
可以認爲,這個變換是對歸一化過於粗暴的彌補。

最後,算法流程如下圖:

  1. 計算一個batch的均值
  2. 計算一個batch的方差
  3. 數據歸一化
  4. 歸一化數據的變換,其中兩個參數是可學習的

在這裏插入圖片描述

細節

BN是針對每一個神經元的
我們看第t層的最左側神經元
它接收了4個輸入,x1,x2,x3,x4
BN是針對這4個數據操作的,和其餘神經元接收的數據沒有關係
在這裏插入圖片描述

測試如何使用?
測試的時候常常使用一個樣本
一個樣本無法計算均值、方差,就不用談BN了
解決方法:
每個batch,記錄均值和方差
所有數據訓練完成後,利用記錄的均值和方差計算數據總體的均值和方差
新的均值和方差在測試過程中保持不變
公式如下:
在這裏插入圖片描述
改變分佈的變換參數是訓練中學習到的,就不用再考慮了

公式的變化?
看別的博客可能會看到這個公式
在這裏插入圖片描述
和算法流程中的最終公式不同,其實就是把歸一化的過程融合進來了
將算法中的公式3和公式4聯立即可

拓展

講BN通常結合sigmoid函數,是因爲BN很適合sigmoid函數
當然也適用於別的激活函數,具體情況具體分析
比如,上述的這一點對於relu激活函數就不適用了
緩解梯度消失。經過BN層的數據會大概率落在sigmoid激活函數導數較大的區域,緩解了梯度消失。
但是分佈相似的好處依然適用
看完這篇博客應該可以根據具體的激活函數具體分析了吧?


歡迎討論 歡迎吐槽

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章