淺識 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 | 算法 |