batch normalization 批歸一化 --- 一個硬幣的兩面
本文主要是對BN(batch normalization)這篇論文的摘錄,加上一些其他論文,輔助理解。
批歸一化是在Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift 這篇論文中提出的,主要的思想就是要將每一個隱藏神經元的輸入變成是一個均值為0,方差為1的分佈,便於加快training過程。
----------------------------------作者這麼說----------------------------------------------------------------
具體實施是這樣的
對於每一次的mini-batch會去算一波均值和方差,當然,這些x是針對一個神經元的輸入了
在推斷的過程中,也要做歸一化,因為推斷的時候只有一個樣本輸入,方差和均值的計算其實是之前的若干個mini-batch的均值和方差的平均
這個地方需要注意的一點是,方差採用的是無偏估計,對每一個mini-batch,計算出來的方差用的是下面這個式子。不明白的是為什麼這個地方採用無偏估計,而之前不採用呢,估計是為了引入noise,有一個類似drop out的作用?
具體在使用的過程中,BN這一層呢,一般是加在非線性層之前,就是relu之類的之前。
對於CNN網路來說,BN是一個feature map共用一個gamma和beta,因為預設不光是一個神經元的輸入應該滿足同一個分佈,而是同一個feature map的都應該滿足,所以如果feature map是q*p的大小,對於大小為m的mini-batch而言,其實是計算m*p*q的整個的均值和方差,而不是像之前只要計算m個input值的。
--------------------------------------------其他論文這麼說-------------------------------------------------------------
下面看到的這個段落來自super resolution中著名的網路