淺識 Batch Normalization

  • Trainingnthe neural network

基於對數據分布的不同假設,通過人為對代價函數的設計,神經網路對樣本的學習本質上體現為一個優化過程。

nn

如何改善尋優過程,使其收斂速度快、容易找到最優值,有兩方面工作可以做:優化演算法(L-BFGS,及其他基於momentum、對learning rate做調整的方法)、優化策略(weightnnormalization、batch normalization)。

nn

其中Batch normalization 是現在最常用的優化策略,可以讓模型更加容易優化,訓練加快,泛化能力提高。幾乎所有網路設計時都會考慮BN。

  • Covariatenshift

在神經網路的SGD訓練中,我們假定數據分布是保持不變的,訓練數據和測試數據應大致符合同一個分布。

nn

神經網路隨著層數加深,每層進行非線性變換,顯然數據分布與之前的差異逐層變大。

  • Whitening

在此前的研究工作中,我們會對輸入數據進行白化(whitening),使得每個成分與其他成分獨立(去除相關性),降低輸入冗餘度。這可以使得學習更簡單,網路收斂更快。(PCA即可用來白化。)

nn

那麼現在,我們為何不在過每一層網路之前,都把輸入數據白化,改善神經網路訓練困難的問題。

nn

答案是nope,因為這個操作本身計算量比較大,對於大數據集訓練的nn代價太高。

  • Batchnnormalization

我們不對整個數據數據做白化,退而求其次在batch的範圍內做,只考慮每一維度(激活神經元的輸出)各自normalize,均值0方差1. 然後再輸入給下一層。實際上相當於給原來的網路中間加了一層BN層。

  • γ β

但是強行對神經網路做這種粗暴干涉,會影響其表達能力。為此我們再引入一些微調,也就是給BN層賦予參數γ β,也與其他層間的權值參數一起進行學習。

nn

在SGD訓練過程結束後,再進行後訓練,計算全數據集上該維的均值和方差(無偏估計),將BN層中已訓練好的γ β替換修正。

注意由於給網路新加入了一層,反向傳播的計算有所改變。

  • Experiments

BN有效提升網路訓練速度以及準確率,並使得分布更加穩定,降低internal covariate shift。

實驗過程詳見原文

Ioffe S, Szegedy C. Batch normalization: Accelerating deep network training by reducing internal covariate shift[J]. arXiv preprint arXiv:1502.03167, 2015.

  • Batch Normalization 是必需的么?

BN原理實現簡單,performance提升明顯,自提出後幾乎所有網路的設計都會考慮。但BN是否一定work

留坑待填

推薦閱讀:

機器學習的平台化發展趨勢
【觀點】從優化盛會SIAM OP17看運籌學及AI發展趨勢
Patchouli的機器學習系列教程二:目標函數(Objective Functions)——『器』
<模型匯總_2>深度學習加速神器-BNN

TAG:机器学习 | 深度学习DeepLearning | 算法 |