Batch Normalization論文解讀

作為讀paper系列的第一篇,算是給新年立個flag吧湃鹊。以前看東西不習(xí)慣整理,到現(xiàn)在遇到瓶頸了镣奋,很多東西你看懂了但是沒辦法說給別人聽懂币呵,那說明還是沒有理解到位,希望借博客來提高自己的表達和快速梳理的能力吧侨颈。本文也是供自己備忘查閱余赢,有錯誤和不到位的地方希望大家指出。

引言

神經(jīng)網(wǎng)絡(luò)雖然強大哈垢,但是其訓(xùn)練過程十分復(fù)雜妻柒,往往涉及到復(fù)雜的調(diào)參技巧,網(wǎng)絡(luò)越深就越難調(diào)耘分,業(yè)內(nèi)人士常常調(diào)侃自己是“煉丹師”举塔。優(yōu)化困難的原因之一就是網(wǎng)絡(luò)的輸入(或隱藏層輸出分布)在不斷變化,使得網(wǎng)絡(luò)得不斷地學(xué)習(xí)“新”的分布求泰,疲于奔命央渣,如果能把變化的數(shù)據(jù)映射到某個固定的分布上,這將更利于網(wǎng)絡(luò)的學(xué)習(xí)和收斂拜秧。圖像任務(wù)中我們會把輸入做一個減均值除以方差的預(yù)處理痹屹,實際上這就是將輸入數(shù)據(jù)映射到了一個更易學(xué)習(xí)的分布上,而Batch Normalization則是將這種操作拓展到了網(wǎng)絡(luò)的內(nèi)部枉氮。為了更好地理解Batch Normalization的思想志衍,我們簡單補充一下Covariate Shift、Internal Covariate Shift和Whitening的知識聊替,讀者也可以參考[2]的介紹楼肪。本文分成三個部分,前兩個部分作為鋪墊惹悄,若想直入主題的朋友可直接跳到最后的部分(Batch Normalization)春叫。

(一)Covariate Shift和Internal Covariate Shift

當(dāng)學(xué)習(xí)系統(tǒng)的輸入分布發(fā)生了變化,我們就稱發(fā)生了Covariate Shift(協(xié)變量漂移泣港,簡稱CS)暂殖。在模型的訓(xùn)練和測試兩個階段都可能發(fā)生CS,如果在訓(xùn)練過程當(dāng)中發(fā)生了CS当纱,那模型就需要不斷地去學(xué)習(xí)新的分布呛每,降低了學(xué)習(xí)效率,并且分布的復(fù)雜程度可能超過了模型容量坡氯,降低了學(xué)習(xí)效果晨横。如果在測試中發(fā)生了CS洋腮,則破壞了機器學(xué)習(xí)中的獨立同分布假設(shè)(IID),常規(guī)的機器學(xué)習(xí)是要假設(shè)訓(xùn)練數(shù)據(jù)和測試數(shù)據(jù)的分布是一致的手形,如果測試集分布和訓(xùn)練集的分布存在差異啥供,則模型精度將會下降,這就像給學(xué)生考了一道超綱的題库糠,沒學(xué)過自然做不出來伙狐。

我們可以將CS的問題推廣到網(wǎng)絡(luò)的中間層,[1]將Internal Covariate Shift(內(nèi)部協(xié)變量漂移瞬欧,簡稱ICS)定義成:由于網(wǎng)絡(luò)在訓(xùn)練過程中參數(shù)的更新而導(dǎo)致網(wǎng)絡(luò)隱藏層輸出分布的發(fā)生變化鳞骤。比如我們可以將l=F_{2}(F_{1}(u,\Theta_{1}),\Theta_{2})中的F_{1}(u,\Theta_{1})看作是F_{2}(\bullet ,\Theta_{2})的輸入,在網(wǎng)絡(luò)的訓(xùn)練過程中黍判,F_{1}(\bullet ,\Theta_{1})會隨著參數(shù)\Theta_{1}的變化而發(fā)生變化豫尽,導(dǎo)致F2難以學(xué)習(xí)。

(二)Whitening和Normalization

Whitening(白化)是一種數(shù)據(jù)預(yù)處理過程顷帖,其目的是降低輸入數(shù)據(jù)的冗余性美旧,因為白化后的數(shù)據(jù)具有白噪聲的特征,所以我們稱之為“whitening”贬墩。白化后的數(shù)據(jù)具有一致的分布榴嗅,能夠加快網(wǎng)絡(luò)收斂。

然而因為嚴(yán)格的Whitening涉及到矩陣分析陶舞,計算復(fù)雜嗽测,我們通常會用Normalization(歸一化)來替代白化,Normalization就是將分布變換為均值方差一致的分布肿孵,我們常用的減均值除以方差就是一種Normalization操作唠粥。雖然均值方差一致不等于分布一致,但是因為它也是對數(shù)據(jù)的分布做了簡單約束停做,能在一定程度上緩解CS或ICS問題晤愧,并且它的計算速度快和可微性好,所以Bath Normalization使用的是Normalization而不是嚴(yán)格的Whitening.

另外蛉腌,關(guān)于Normalization后為什么可以加快收斂官份,還可以參考李宏毅老師網(wǎng)課的BatchNormalization一節(jié),[3]是我在網(wǎng)上找到的一個網(wǎng)友的筆記烙丛。

Towards Reducing Internal Covariate Shift

在[1]中Towards Reducing Internal Covariate Shift章節(jié)舅巷,作者說了他們?yōu)槭裁词褂肗ormalization來緩解ICS的思路,我沒怎么讀懂河咽,網(wǎng)上相關(guān)的解讀也很少钠右,但我感覺這一段很重要,科研的過程不僅是要看結(jié)果库北,了解結(jié)果產(chǎn)生的過程和思路才是更重要的爬舰,比如[4]就接使用Whitening來緩解ICS。我有時間研究清楚之后再來更新寒瓦,我先把目前的思路寫在下面情屹。

既然前人的工作對輸入數(shù)據(jù)做了Whitening并取得了加速收斂的效果,那么一個拍腦袋的緩解ICS的辦法就是對每一層的輸出也使用Whitening杂腰。BN作者剛開始研究的時做了一個簡單嘗試垃你。考慮某一層的輸出為x=u+b喂很,u為該層輸入惜颇,b為可學(xué)習(xí)參數(shù),遍歷整個數(shù)據(jù)集得到\chi=x_{1},x_{2},...,x_{N}少辣。我們現(xiàn)在要將x白化得到\widehat{x}=x-E(x)(簡單起見凌摄,只考慮減均值的過程)。在反向傳播的時候我們需要更新參數(shù)b漓帅,得到b\leftarrow b+\Delta b锨亏,如果優(yōu)化器忽略掉E[x]b的相關(guān)性的話(顯然是有關(guān)的),會有\Delta b\propto -\partial l/\partial \widehat{x}忙干,那么在下一次訓(xùn)練時器予,u+(b+\Delta b)-E[u(b+\Delta b)]=u+b-E(u+b),在隨后的輸出中捐迫,歸一化就失效了乾翔。隨著訓(xùn)練的繼續(xù),b會越來越大施戴,如果加上尺度歸一化的話這個問題會更加嚴(yán)重反浓。

上述的問題就在于優(yōu)化過程沒有意識到歸一化。我們在求梯度的時候應(yīng)該把歸一化過程給考慮進去赞哗」聪埃考慮一個\widehat{x}=Norm(x,\chi),歸一化的輸出不僅依賴于當(dāng)前的輸入x懈玻,還依賴整個數(shù)據(jù)集\chi巧婶。如果要進行嚴(yán)格的白化操作,在反向傳播的時候我們就需要求兩個雅可比行列式:\frac{\partial Norm(x,\chi)}{\partial x}\frac{\partial Norm(x,\chi)}{\partial \chi}涂乌,忽略第二個式子就會導(dǎo)致前面說的問題艺栈。嚴(yán)格的白化會涉及到復(fù)雜計算,效率低湾盒,所以本文使用簡單的歸一化湿右,并且使用mini-batch代替整個數(shù)據(jù)集來加快計算。
(這一段我也是不知所云罚勾,如果誰讀懂了希望能夠給我指點一下)

Batch Normalization

本章會介紹BN的具體計算方法:歸一化+去歸一化毅人,然后結(jié)合我的實驗經(jīng)驗闡述訓(xùn)練和測試中的一些事項吭狡。

(一)計算方法

BN的計算可以分成兩個步驟:歸一化+去歸一化。首先是歸一化丈莺,為了減少ICS划煮,同時使得算法利于集成到訓(xùn)練過程中,Batch Normalization(BN)做了兩點簡化:1)使用特征Normalization代替Whitening缔俄;2)只mini-batch代替整個訓(xùn)練集來計算統(tǒng)計量弛秋。對于一個d維的特征x=(x^{(1)}...x^{(d)}),BN首先對其進行歸一化:\widehat{x}=\frac{x-E(x)}{\sqrt{Vax(x)+\varepsilon }}
\sigma_{B}^{2}為樣本方差俐载,Vax(x)=\frac{m}{m-1}E_{B}[\sigma_{B}^{2}]為方差的無偏估計蟹略,
m為batch size,\varepsilon是為了防止除以0的一個微小常數(shù)遏佣。這樣變換后得到的\widehat{x}服從均值為0挖炬,方差為1的分布。

然后是去歸一化状婶。去歸一化操作實際上就是一個縮放平移操作茅茂,如果把網(wǎng)絡(luò)每一層的特征都歸一化會限制網(wǎng)絡(luò)的學(xué)習(xí)能力,比如sigmod函數(shù)本來可以作為門限函數(shù)表示開/關(guān)的邏輯信息太抓,但是歸一化后就將只能將特征限定在線性區(qū)域了空闲,所以作者在歸一化后又進行了一次線性變換:y^{(k)}=\gamma^{(k)}x^{(k)}+\beta^{(k)},其中\beta\gamma都是可學(xué)習(xí)的走敌,當(dāng)\gamma^{(k)}=\sqrt{Var[x^{(k)}]}碴倾,\beta^{(k)}=E[x^{(k)}]時,整個BN層就是恒等變換掉丽。去歸一化操作還可以這么去理解跌榔,歸一化操作限制了網(wǎng)絡(luò)的學(xué)習(xí)能力,去歸一化操作引入了新的可學(xué)習(xí)參數(shù)捶障,把丟失的學(xué)習(xí)能力又補了上來僧须。
整個BN的算法流程如下:

BN算法

讀到這里,大家可能會有疑問项炼,因為最后的scale and shift的操作担平,使得BN的輸出并不是歸一化的,這不是與減少ICS的初衷相悖嗎锭部?同樣的問題也在[5]中被指出了暂论。而我的理解是,雖然BN的輸出不一定是歸一化的拌禾,但是它引入的中間量\widehat{x}是一個歸一化分布取胎,這個變量對于加速網(wǎng)絡(luò)收斂非常重要。我們可以這樣理解:如果把\widehat{x}看作輸入,將\gamma\beta以及后面的網(wǎng)絡(luò)都看作是一個用于學(xué)習(xí)\widehat{x}的分布的系統(tǒng)闻蛀,比起學(xué)習(xí)更復(fù)雜的x的分布匪傍,學(xué)習(xí)歸一化分布\widehat{x}自然更簡單。

(二)實驗啟發(fā)

1.關(guān)于BN參數(shù)的初始化觉痛。其實我自己在實驗過程中發(fā)現(xiàn)有很多工程實際上直接令BN層的beta=0和gamma=1役衡,然后凍結(jié)這兩個參數(shù),相當(dāng)于把BN退化成一個特征歸一化層秧饮,實際效果也很好。另外還有一個經(jīng)驗就是如果要在一些預(yù)訓(xùn)練模型上加入BN層泽篮,比如VGG出來的時候還沒有BN技術(shù)盗尸,如果我們直接在原有網(wǎng)絡(luò)上加BN,可能會破壞預(yù)訓(xùn)練的狀態(tài)帽撑,那我們可以將參數(shù)初始化成\gamma^{(k)}=\sqrt{Var[x^{(k)}]}泼各,\beta^{(k)}=E[x^{(k)}]
,這樣BN的初態(tài)就是一個恒等變換了亏拉,可以讓網(wǎng)絡(luò)可以有一個比較好的初態(tài)扣蜻。

2.關(guān)于測試階段。我們會希望測試樣本是獨立的及塘,也就是說測試樣本間不能互相影響莽使,比如我們不希望這次以batch size=1測試得到一個結(jié)果A,下次以batch size=2測試笙僚,卻得到不一樣的結(jié)果B芳肌。BN的計算過程中會涉及到兩個統(tǒng)計量:均值(mean)和方差(var)。我們在測試時要使用固定的mean和var肋层,測試階段一般是使用訓(xùn)練集的mean和var亿笤。主流的自動微分框架會在訓(xùn)練時用滑動平均的方式統(tǒng)計mean和var,當(dāng)你使用測試模式的時候栋猖,框架會自動載入統(tǒng)計好的mean與var净薛。比如MXNet會使用下式來統(tǒng)計均值與方差:

BatchNorm中的滑動平均

通常momentum會設(shè)得很大,比如0.99蒲拉,以便得到更準(zhǔn)確的統(tǒng)計值肃拜,如果你發(fā)現(xiàn)模型在訓(xùn)練和測試時表現(xiàn)差異太大,可以檢查下這個值雌团。

3.關(guān)于先激活再BN爆班,還是先BN再激活。我把前者簡稱后置BN辱姨,后者簡稱前置BN柿菩。[1]中采用的是前置BN,但實際實驗中我發(fā)現(xiàn)兩者差異并不大(有時后置BN效果反而更好一點)雨涛∈嗖埃可能有的人認(rèn)為只有前置BN才會輸出歸一化的值懦胞,才能有效果,但如我在(一)計算方法一節(jié)中說的那樣凉泄,這兩種方法的最終輸出都不是歸一化的躏尉,關(guān)鍵在于兩者都引入了歸一化的中間量\widehat{x}。我在文末提供了相關(guān)的拓展閱讀后众,[6]為網(wǎng)友討論胀糜,[7]提供了直觀的實驗結(jié)果。

4.關(guān)于BN為什么能夠加速收斂蒂誉。這個問題在[1]的Experiments部分有詳細的討論教藻。(1)BN可以將特征約束在激活函數(shù)的線性區(qū)域,緩解梯度消失右锨;(2)在網(wǎng)絡(luò)的多層都加入BN可以緩解訓(xùn)練的發(fā)散問題括堤,允許采用更大的學(xué)習(xí)率;(3)隨機采樣提供了一定的正則化約束绍移,有防過擬合的效果悄窃。

加入BN前后的訓(xùn)練曲線對比

總結(jié)

BN通過引入層內(nèi)的批歸一化操作對特征進行歸一化,減少ICS蹂窖,實現(xiàn)了加速網(wǎng)絡(luò)收斂的效果轧抗。但關(guān)于BN為什么不直接使用白化操作我還沒理解,可能進一步閱讀[4]和Group Normalization后能找到答案瞬测。

參考資料

[1]Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
[2]Internal Covariate Shift與Normalization
[3]12. 批標(biāo)準(zhǔn)化(Batch Normalization
[4]Decorrelated Batch Normalization
[5]Intro to Optimization in Deep Learning: Busting the Myth About Batch Normalization
[6]Batch Normalization before or after ReLU?
[7]caffenet-benchmark/batchnorm.md

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末家卖,一起剝皮案震驚了整個濱河市氯庆,隨后出現(xiàn)的幾起案子欺税,更是在濱河造成了極大的恐慌勿璃,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件狮斗,死亡現(xiàn)場離奇詭異绽乔,居然都是意外死亡,警方通過查閱死者的電腦和手機碳褒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門折砸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人沙峻,你說我怎么就攤上這事睦授。” “怎么了摔寨?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵去枷,是天一觀的道長。 經(jīng)常有香客問我,道長删顶,這世上最難降的妖魔是什么竖螃? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮逗余,結(jié)果婚禮上特咆,老公的妹妹穿的比我還像新娘。我一直安慰自己录粱,他們只是感情好腻格,可當(dāng)我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著啥繁,像睡著了一般菜职。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上输虱,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天些楣,我揣著相機與錄音脂凶,去河邊找鬼宪睹。 笑死,一個胖子當(dāng)著我的面吹牛蚕钦,可吹牛的內(nèi)容都是我干的亭病。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼嘶居,長吁一口氣:“原來是場噩夢啊……” “哼罪帖!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起邮屁,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤整袁,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后佑吝,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體坐昙,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年芋忿,在試婚紗的時候發(fā)現(xiàn)自己被綠了炸客。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡戈钢,死狀恐怖痹仙,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情殉了,我是刑警寧澤开仰,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響抖所,放射性物質(zhì)發(fā)生泄漏梨州。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一田轧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧傻粘,春花似錦每窖、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至稽莉,卻和暖如春瀑志,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背污秆。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工劈猪, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人良拼。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓战得,卻偏偏與公主長得像,于是被迫代替她去往敵國和親庸推。 傳聞我的和親對象是個殘疾皇子常侦,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容