編者按:DRDO研究人員Ayoosh Kathuria深入介紹了批歸一化的概念,終結(jié)了廣泛流傳的批歸一化降低內(nèi)部協(xié)方差偏移的流言。
認(rèn)出上面的人了嗎?這是探索頻道的《留言終結(jié)者》。
今天,我們也要分辨一下,批歸一化到底能不能解決內(nèi)部協(xié)方差偏移的問題?盡管批歸一化(Batch Normalization)提出已經(jīng)有一些年了,已經(jīng)成為深度架構(gòu)的主要部件,它仍然是深度學(xué)習(xí)中最容易誤解的概念之一。
批歸一化真的可以解決內(nèi)部協(xié)方差偏移問題?如果不能解決,那它的作用是什么?你所接受的整個(gè)深度學(xué)習(xí)教育是一個(gè)謊言嗎?讓我們來尋找答案吧!
開始之前……
我想提醒一下,本文是深度學(xué)習(xí)優(yōu)化算法系列的第四篇,前三篇文章討論了:
隨機(jī)梯度下降如何克服深度學(xué)習(xí)中的局部極小值和鞍點(diǎn)問題?
動(dòng)量和Adam等方法如何加強(qiáng)原始梯度下降,以應(yīng)對(duì)優(yōu)化曲面上的病態(tài)曲率問題?
如何使用不同的激活函數(shù)處理梯度消失問題?
上一篇文章中,我們學(xué)到的一點(diǎn)是,為了讓神經(jīng)網(wǎng)絡(luò)高效學(xué)習(xí),傳入網(wǎng)絡(luò)層的輸入應(yīng)該大致符合:
零中心化
不同batch和不同網(wǎng)絡(luò)層的數(shù)據(jù)分布,應(yīng)保持一定程度上的一致
第二個(gè)條件的一種反例是epoch和epoch間的分布劇烈變動(dòng)。
內(nèi)部協(xié)方差偏移
批歸一化的論文題為Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift(批歸一化:通過降低內(nèi)部協(xié)方差偏移加速深度網(wǎng)絡(luò)訓(xùn)練),從標(biāo)題就可以看出,這篇論文的假定是批歸一化可以解決內(nèi)部協(xié)方差偏移的問題。
那么,內(nèi)部協(xié)方差偏移,簡(jiǎn)稱ICS,到底是什么?ICS指神經(jīng)網(wǎng)絡(luò)層間的輸入分布搖擺不定。內(nèi)部指這種搖擺不定發(fā)生在神經(jīng)網(wǎng)絡(luò)的中間層(視作網(wǎng)絡(luò)的內(nèi)部)。協(xié)方差指以權(quán)重為參數(shù)的分布在網(wǎng)絡(luò)層之間的差異。偏移指分布在改變。
讓我們嘗試描述下事情是怎么發(fā)生的。同樣,想象一個(gè)盡可能簡(jiǎn)單的網(wǎng)絡(luò),線性堆疊的神經(jīng)元,你可以通過用網(wǎng)絡(luò)層替換神經(jīng)元來擴(kuò)展這一類比。
假設(shè)我們優(yōu)化上述網(wǎng)絡(luò)的損失函數(shù)L,那么神經(jīng)元d的權(quán)重ωd的更新規(guī)則為:
這里,zd= ωdzc,為神經(jīng)元d的激活值。因此,上式可以化簡(jiǎn)為:
所以,我們看到,網(wǎng)絡(luò)層d的權(quán)重的梯度取決于網(wǎng)絡(luò)層c的輸出。神經(jīng)網(wǎng)絡(luò)中的每一層同理。神經(jīng)元的權(quán)重梯度取決于它的輸入,即后一層的輸出。
接著,梯度反向傳播,權(quán)重更新,這一過程不斷重復(fù)。現(xiàn)在,讓我們回到網(wǎng)絡(luò)層d.
由于我們?cè)赿上進(jìn)行了梯度更新,我們現(xiàn)在期望ωd能得到更低的損失。然而結(jié)果也許不符合我們的期望。為什么?讓我們仔細(xì)看下。
我們?cè)诘鷌時(shí)進(jìn)行了初次更新,讓我們將此時(shí)c在迭代i的輸出分布記為pci。現(xiàn)在,d的更新假定輸入為pci。
然而,在反向傳播階段,c的權(quán)重ωc也得到了更新。這導(dǎo)致c的輸出分布發(fā)生了偏移。
假設(shè)在下一次迭代i+1中,zc的分布偏移至pci+1。由于網(wǎng)絡(luò)層d的權(quán)重之前是根據(jù)pci更新的,但現(xiàn)在網(wǎng)絡(luò)層d面臨的輸入分布卻是pci+1。這一顯著差異可能導(dǎo)致網(wǎng)絡(luò)層生成的輸出損失不下降。
現(xiàn)在,我們有兩個(gè)問題。
為什么輸入分布偏移讓網(wǎng)絡(luò)層更難學(xué)習(xí)?
這個(gè)偏移是否大到足以導(dǎo)致上面描述的場(chǎng)景?
我們先回答第一個(gè)問題。
為什么內(nèi)部協(xié)方差偏移會(huì)成為問題?
神經(jīng)網(wǎng)絡(luò)所做的是生成輸入x到輸出y之間的映射f。為什么x的分布改變會(huì)造成問題?
例如,假設(shè)x從正態(tài)分布
變?yōu)榉钦龖B(tài)分布:
假設(shè)我們嘗試擬合的映射是f = 2x. 那x分布的密度向左偏移,還是均勻散布,又有什么區(qū)別?
然而,由于神經(jīng)網(wǎng)絡(luò),更準(zhǔn)確的說,現(xiàn)代的深度網(wǎng)絡(luò)是極為強(qiáng)大的曲線擬合器,這樣的分布偏移確實(shí)有影響。正像《蜘蛛俠》所言:“能力越大,責(zé)任越大?!?/p>
假設(shè)網(wǎng)絡(luò)層l面對(duì)的x有著如下圖所示的分布,并且,到目前為止,通過訓(xùn)練,網(wǎng)絡(luò)層學(xué)習(xí)到的函數(shù)可以用下圖中的虛線表示。
現(xiàn)在,假設(shè)梯度更新后,下一個(gè)minibatch的x分布變化了:
注意到?jīng)]有?和之前相比,這一mini-batch的損失變大了。
讓我們回過頭去看原先的圖形。如你所見,我們?cè)緦W(xué)習(xí)的映射f在降低前一個(gè)mini-batch的損失方面做的不錯(cuò)。同樣,還有許多其他函數(shù)在這方面的表現(xiàn)也不錯(cuò)。
如果我們當(dāng)初選擇的是紅色虛線,那么下一mini-batch的損失也不會(huì)大。
很明顯,現(xiàn)在我們需要回答的問題是如何修改算法,使得我們最終學(xué)習(xí)到紅色虛線而不是黑色虛線?簡(jiǎn)單的回答是,這個(gè)問題不存在簡(jiǎn)單的答案。在這一點(diǎn)上,與其嘗試找到解決這類情況的方案,不如集中精力避免這類情況發(fā)生。
ICS最終擾亂學(xué)習(xí)的原因是神經(jīng)網(wǎng)絡(luò)總是在輸入分布的稠密區(qū)表現(xiàn)較好。稠密區(qū)的數(shù)據(jù)點(diǎn)的損失下降得更多,因?yàn)槌砻軈^(qū)的數(shù)據(jù)點(diǎn)統(tǒng)治了平均損失,而我們?cè)噲D最小化的正是平均損失。
然而,如果在訓(xùn)練期間ICS最終改變了后續(xù)batch的輸入分布的稠密區(qū),那么網(wǎng)絡(luò)從之前的迭代中學(xué)到的權(quán)重就不再是最優(yōu)的了。這大概需要非常小心地調(diào)整超參數(shù)才能合理地學(xué)習(xí)。這解釋了為什么ICS可能造成問題。
當(dāng)然,mini-batch內(nèi)部還是要有適當(dāng)差異的。差異可以確保映射沒有過度擬合輸入分布的單個(gè)區(qū)域。另外,我們也想要輸入的均值在零左右,原因詳見本系列的上一篇文章。
歸一化輸入
應(yīng)對(duì)這一問題的一種方法是歸一化神經(jīng)網(wǎng)絡(luò)的輸入,使輸入分布均值為零,方差為單位方差。然而,只有當(dāng)網(wǎng)絡(luò)不夠深的時(shí)候這個(gè)方法才有效果。當(dāng)網(wǎng)絡(luò)變得越來越深,例如,20層以上,即使輸入經(jīng)過了歸一化,20多層權(quán)重的微小波動(dòng)可能造成深層輸入分布的巨大改變。
一個(gè)不太正確的類比是語言的變化。隨著我們旅行距離的增加,語言也發(fā)生了變化。然而,距離較近的地方,語言有很多相似性。比如,西班牙語和葡萄牙語。這兩種語言都源自原始印歐語。然而,8000公里之外的印度人說的印度斯坦語,同樣源自原始印歐語,和西班牙的差別卻遠(yuǎn)大于西班牙語和葡萄牙語的差別。原因是短距離內(nèi)的微小變動(dòng)隨著距離的增加而逐漸放大。深度網(wǎng)絡(luò)同理。
進(jìn)入批歸一化
現(xiàn)在我們介紹批歸一化(BN)的概念,BN歸一化網(wǎng)絡(luò)層的激活輸出,同時(shí)進(jìn)行了其他一些操作。
上面的公式描述了批歸一化層做了什么。等式2-4描述了mini-batch間的激活的均值、方差是如何計(jì)算的,以及通過減去均值除以標(biāo)準(zhǔn)差歸一化分布。
等式5是關(guān)鍵部分。γ和β是所謂的批歸一化層的參數(shù),等式5的輸出均值為β,標(biāo)準(zhǔn)差為γ。從效果上說,批歸一化層有助于優(yōu)化算法控制網(wǎng)絡(luò)層輸出的均值和方差。
ICS袪魅
引入批歸一化的論文將批歸一化的成功歸功于擺脫了內(nèi)部協(xié)方差偏移。然而,這是一個(gè)荒謬的陳述,批歸一化根本沒有防止ICS。
內(nèi)部協(xié)方差偏移是指網(wǎng)絡(luò)訓(xùn)練過程中輸入分布的改變。批歸一化的參數(shù)γ和β是為了調(diào)整激活的均值和方差。然而,這意味著這兩個(gè)參數(shù)是可訓(xùn)練的,也就是是說,將隨著訓(xùn)練的進(jìn)行而改變,那么批歸一化自身就會(huì)導(dǎo)致激活分布的改變,也就是內(nèi)部協(xié)方差偏移。如果它防止了內(nèi)部協(xié)方差偏移,參數(shù)γ和β毫無意義。
為何批歸一化有效?
既然批歸一化沒能克服內(nèi)部協(xié)方差偏移,那么批歸一化是怎么起效的呢?
GAN之父Ian Goodfellow曾經(jīng)在一個(gè)講座中提出過一種可能的解釋(講座的網(wǎng)址見文末)。我必須提醒你注意,到目前為止,盡管來自深度學(xué)習(xí)的權(quán)威,這仍然只是一項(xiàng)未經(jīng)證明的猜測(cè)。
Goodfellow認(rèn)為原因在于批歸一化層的兩個(gè)參數(shù)。
讓我們?cè)俅慰紤]之前的超級(jí)簡(jiǎn)單的玩具網(wǎng)絡(luò)。
這里,當(dāng)我們更新a的權(quán)重的時(shí)候,僅僅計(jì)算?L/?a,即損失函數(shù)在a上的反應(yīng)。然而,我們沒有考慮改變a的權(quán)重同時(shí)也將改變后續(xù)層b、c、d的輸出。
這實(shí)際上是因?yàn)樗懔ο拗?,我們無法利用二階以上的優(yōu)化方法。梯度下降及其變體只能捕捉一階交互(我們?cè)诒鞠盗械牡诙恼轮猩钊胗懻摿诉@一點(diǎn))。
深度神經(jīng)網(wǎng)絡(luò)具有高階交互,這意味著改變某一層的權(quán)重也許會(huì)在損失函數(shù)之外影響其他層的統(tǒng)計(jì)特征。如果不考慮這樣的跨層交互,就會(huì)產(chǎn)生內(nèi)部協(xié)方差偏移。每次更新一個(gè)網(wǎng)絡(luò)層的權(quán)重,都有可能對(duì)之后的網(wǎng)絡(luò)層的統(tǒng)計(jì)特征造成不利影響。
在這樣的情形下,可能需要精心的初始化、超參數(shù)調(diào)整、長時(shí)間的訓(xùn)練才能收斂。然而,當(dāng)我們?cè)趯娱g添加批歸一化層之后,網(wǎng)絡(luò)層的統(tǒng)計(jì)特征只受γ、β這兩個(gè)參數(shù)的影響。
現(xiàn)在,優(yōu)化算法只需調(diào)整兩個(gè)參數(shù)即可控制任意層的統(tǒng)計(jì)特征,而不需要調(diào)整之前層的所有權(quán)重。這大大加速了收斂,并免去了精心初始化和超參數(shù)調(diào)整的需要。因此,批歸一化更多地起到設(shè)置檢查點(diǎn)的作用。
注意,具備任意設(shè)定網(wǎng)絡(luò)層的均值和標(biāo)準(zhǔn)差的能力同時(shí)意味著我們可以恢復(fù)原分布,如果恢復(fù)原分布足以使訓(xùn)練正常的話。
在激活前還是激活后進(jìn)行批歸一化
盡管原始論文在激活函數(shù)之前應(yīng)用批歸一化,在實(shí)踐中發(fā)現(xiàn)在激活之后應(yīng)用批歸一化能得到更好的結(jié)果。這看起來很有道理,因?yàn)槿绻覀冊(cè)谂鷼w一化之后放置激活,那么由于批歸一化層的輸出還需要經(jīng)過激活,批歸一化就無法完全控制下一層的輸入。
推理階段的批歸一化
在推理階段使用批歸一化有一定技巧性。這是因?yàn)樵谕评黼A段我們不一定有批次可言。例如,進(jìn)行實(shí)時(shí)目標(biāo)檢測(cè)時(shí),每次只處理一幀,并不存在批次。
而沒有批次,我們就無法計(jì)算均值和方差,也就無法得到批歸一化層的輸出。在這一情形下,我們維持一個(gè)訓(xùn)練階段的均值、方差的移動(dòng)平均,然后在推理階段使用這一移動(dòng)平均。這是大多數(shù)自帶批歸一化層的深度學(xué)習(xí)庫的做法。
這一做法的依據(jù)是大數(shù)定律。在樣本足夠的的情況下,批統(tǒng)計(jì)量趨向于收斂至真實(shí)統(tǒng)計(jì)量。移動(dòng)平均也有助于消除mini batch自帶的噪聲。
如果測(cè)試階段可以使用批次,那么我們使用和上文提到的幾乎一模一樣的公式,只有一處例外。我們不使用
而使用如下公式:
為何分母使用m-1而不是m是因?yàn)榫狄呀?jīng)是我們估計(jì)的,mini batch中只有m-1個(gè)項(xiàng)獨(dú)立觀測(cè)了。用術(shù)語來說,就是自由度只有m-1,具體細(xì)節(jié)的討論超出了本文的范圍。
起正則作用的批歸一化
批歸一化同時(shí)也起到了正則化的作用。相比真實(shí)均值和方差,為每個(gè)批次估計(jì)的均值和方差是一個(gè)加噪的版本,這給優(yōu)化搜索過程引入了隨機(jī)性,從而起到了正則化的作用。
結(jié)語
盡管批歸一化已經(jīng)成為當(dāng)今深度架構(gòu)的標(biāo)準(zhǔn)元素,直到最近研究方向才轉(zhuǎn)向理解批歸一化到底為何有效。最近受到很多關(guān)注的一篇論文,直接以How Does Batch Normalization Help Optimization? (No, It Is Not About Internal Covariate Shift)為題(批歸一化如何幫助優(yōu)化?不,它和內(nèi)部協(xié)方差偏移無關(guān))。這篇論文揭示了,和沒有使用批歸一化的網(wǎng)絡(luò)相比,批歸一化實(shí)際上增加了內(nèi)部協(xié)方差。論文的主要洞見在于,批歸一化平滑了損失曲面,所以批歸一化才這么有效。2017年,有人提出了SELU(擴(kuò)展指數(shù)線性激活單元)激活函數(shù),隱式地歸一化其激活(批歸一化顯式地進(jìn)行了這一點(diǎn))。SELU的原論文包含100頁數(shù)學(xué)精確說明這一切是如何發(fā)生的,偏愛數(shù)學(xué)的讀者應(yīng)該讀一下。
優(yōu)化是深度學(xué)習(xí)中一個(gè)激動(dòng)人心的領(lǐng)域。這些年來,許多深度學(xué)習(xí)應(yīng)用得到了加強(qiáng),已經(jīng)可以實(shí)用,但直到最近我們才開始探索誘人的深度學(xué)習(xí)理論部分。
最后,讓我們說……流言終結(jié)!
進(jìn)一步閱讀
批歸一化論文:https://arxiv.org/abs/1502.03167
How Does Batch Normalization Help Optimization? (No, It Is Not About Internal Covariate Shift): https://arxiv.org/abs/1805.11604
擴(kuò)展指數(shù)線性激活單元論文:https://arxiv.org/abs/1706.02515
Ian Goodfellow關(guān)于批歸一化的講座:https://youtu.be/Xogn6veSyxA
Reddit上關(guān)于把批歸一化放在ReLU前面還是后面的討論:https://www.reddit.com/comments/67gonq/
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4765瀏覽量
100566 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5493瀏覽量
120999
原文標(biāo)題:優(yōu)化算法入門:四、批歸一化揭秘
文章出處:【微信號(hào):jqr_AI,微信公眾號(hào):論智】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論