1. 程式人生 > 其它 >1、Batch Normalization

1、Batch Normalization

背景:由於Internal Covariate Shift(Google)【內部協變數轉移, ICS】效應,即深度神經網路涉及到很多層的疊加,而每一層的引數更新會導致上層的輸入資料分佈發生變化,通過層層疊加,高層的輸入分佈變化會非常劇烈,這就使得高層需要不斷去重新適應底層的引數更新。隨著網路加深,引數分佈不斷往啟用函式兩端移動(梯度變小),導致反向傳播出現梯度消失,收斂困難。

大家都知道在統計機器學習中的一個經典假設是“源空間(source domain)和目標空間(target domain)的資料分佈(distribution)是一致的”。如果不一致,那麼就出現了新的機器學習問題,如 transfer learning / domain adaptation 等。而 covariate shift 就是分佈不一致假設之下的一個分支問題,它是指源空間和目標空間的條件概率是一致的,但是其邊緣概率不同,即:

對所有,但是。大家細想便會發現,的確,對於神經網路的各層輸出,由於它們經過了層內操作作用,其分佈顯然與各層對應的輸入訊號分佈不同,而且差異會隨著網路深度增大而增大,可是它們所能“指示”的樣本標記(label)仍然是不變的,這便符合了covariate shift的定義。由於是對層間訊號的分析,也即是“internal”的來由。

原理:可在每層的啟用函式前,加入BN,將引數重新拉回0-1正態分佈,加速收斂。(理想情況下,Normalize的均值和方差應當是整個資料集的,但為了簡化計算,就採用了mini_batch的操作)