Batch normalization 起源于一個非常簡單橘券,已被證實有效的idea:對數(shù)據(jù)進行whitening preprocessing可以加快訓練以及收斂净刮。而BN就是把這個idea應用到網(wǎng)絡(luò)中間,而不僅僅是網(wǎng)絡(luò)的input端悔捶。
一般的响迂,如果讓我實現(xiàn)這個idea拜马,我可能就把第M-1層的ouput歸一化,然后傳給M層沐绒。但是這樣會有兩個問題俩莽,1. 經(jīng)過M層的linear變換之后/進行activation之前,這個數(shù)據(jù)的分布可能還是存在相當?shù)膇nternal covariant shift乔遮,從而導致sigmoid activate的時候集中在兩端扮超,造成梯度消失,如此又要normalize一回蹋肮;2. 倘若完全normalize又有可能失去表達力出刷,因為以前的那種分布才有可能攜帶足夠信息。
由此坯辩,作者進行了如下improvement:1. 在activate之前進行normalize馁龟,對于一個batch size為m的batch,每個神經(jīng)元都將得到m個數(shù)字漆魔,基于此進行normalize坷檩;2.normalize之后又進行l(wèi)inear transformation:X' = gamma * X + beta, 這兩個參數(shù)由網(wǎng)絡(luò)學習出來,讓網(wǎng)絡(luò)自己找到最佳的shift改抡。
training沒問題后inference有個小問題矢炼,infer的時候只有一個instance,無法normalize阿纤。solution很簡單句灌,計算全局mean與variance,代替之前train時compute的batch中的mean與variance欠拾。
以上胰锌。