深度學習之BatchNormalization

首先關於BN的文章是這一篇,大家可以下載下來看一下。

《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》

貌似是兩位google的大佬寫的。

總結一下BN的好處:

  • 加速訓練收斂速度;
  • 可以使用較大的學習率;
  • 允許在深層網絡中使用sigmoid這種易導致梯度消失的激活函數,當然用relu最好,文章中也提到了;
  • 具有輕微地正則化效果,以此可以降低dropout的使用。

Convariate shift是BN論文作者提出來的概念,其意是指具有不同分佈的輸入值對深度網絡學習的影響。(原文: When the input distribution to a learning system changes, it is said to experience covariate shift)

文章中提到,加快收斂速度可以對輸入進行以下操作:

白化,線性變換0均值和單位標準差,去相關(PCA)

 

e是一個無窮小非0量,在tensorflow裏面,默認是10-6,防止除0

 

輸入值的分佈不同,也可以理解爲輸入特徵值的scale差異較大,與權重進行矩陣相乘後,會產生一些偏離較大地差異值;而深度學習網絡需要通過訓練不斷更新完善,那麼差異值產生的些許變化都會深深影響後層,偏離越大表現越爲明顯;因此,對於反向傳播來說,這些現象都會導致梯度發散,從而需要更多的訓練步驟來抵消scale不同帶來的影響,也需要更多地步驟才能最終收斂。

  而BN的作用就是將這些輸入值進行標準化,降低scale的差異至同一個範圍內。這樣做的好處在於一方面提高梯度的收斂程度,加快訓練速度;另一方面使得每一層可以儘量面對同一特徵分佈的輸入值,減少了變化帶來的不確定性,也降低了對後層網路的影響,各層網路變得相對獨立。

 

參考文章:https://www.cnblogs.com/hutao722/p/9842199.html

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