Batch Normalization在2015年被谷歌提出,因?yàn)槟軌蚣铀儆?xùn)練及減少學(xué)習(xí)率的敏感度而被廣泛使用。
但論文中對(duì)Batch Norm工作原理的解釋在2018年被MIT的研究人員推翻,雖然這篇論文在2018年就已經(jīng)提出了,但是我相信還有很多人和我一樣,在網(wǎng)上看相關(guān)博客及paper時(shí),大部分內(nèi)容還是論文提出前寫下的。
現(xiàn)在DL逐漸變成了實(shí)驗(yàn)科學(xué),一般在發(fā)現(xiàn)性能上的提升后去分析其產(chǎn)生的原因,但這片論文的思想很好,從數(shù)據(jù)、公式等一系列角度去推理,分析出來了為什么batch Normalization能work。
batch Normalization的提出
拋開Norm,我們?cè)谧鎏卣鞴こ虝r(shí),經(jīng)常會(huì)將輸入進(jìn)行歸一化,否則如果某個(gè)特征數(shù)特別大(比如說一個(gè)特征是0-1,一個(gè)特征是0-1000),那第二個(gè)特征很有可能會(huì)對(duì)整個(gè)模型參數(shù)造成很大的影響?;蛘哒f,當(dāng)訓(xùn)練集數(shù)據(jù)的分布不一致時(shí),例如前一個(gè)輸入的各特征范圍是0-1,后一個(gè)是0-100,網(wǎng)絡(luò)的訓(xùn)練效果也不會(huì)很好。
所以,就像很多人說的一樣,我們希望在deep learn中,整個(gè)網(wǎng)絡(luò)中流過的數(shù)據(jù)都是獨(dú)立同分布的。
為什么需要獨(dú)立同分布?
我覺得這事可以從兩方面去解釋,
一方面我們希望對(duì)訓(xùn)練集進(jìn)行訓(xùn)練后,在測試集上能夠發(fā)揮很好的性能。那么我們就需要保證訓(xùn)練集和測試集是來自同一個(gè)空間,準(zhǔn)確來說,是符合同一分布,這對(duì)同分布提出了要求。此外,在雖然數(shù)據(jù)來自同一個(gè)空間,但我們并不希望所有數(shù)據(jù)都聚集在空間中的某一小撮,而是希望所有數(shù)據(jù)對(duì)于整個(gè)空間來說都具有一定代表性,因此在采樣的過程中我們希望是獨(dú)立得去采樣所有的數(shù)據(jù)。
另一方面,其實(shí)是從另一個(gè)角度來闡述上一段話,如果數(shù)據(jù)之間不是同分布的,比如說樣本1所有的特征都處于0-1之間,樣本2處于10-100,那么網(wǎng)絡(luò)的參數(shù)其實(shí)很難去同時(shí)迎合兩類分布的數(shù)據(jù)。
batch Normalization做了什么?
上面講到了數(shù)據(jù)在最初進(jìn)來的時(shí)候,都希望是獨(dú)立同分布的。但是batch Normalization的作者覺得不夠,應(yīng)該在deep learning中的每層都進(jìn)行一次處理,保證在每層都是同分布。
他是這么想的:假設(shè)網(wǎng)絡(luò)有n層,網(wǎng)絡(luò)正在訓(xùn)練,還沒有收斂。這時(shí)候x1被輸入,經(jīng)過了第一層,但是第一層還沒有學(xué)到正確的weight,所以經(jīng)過weight的矩陣乘法后,第二層的數(shù)會(huì)不會(huì)很亂?會(huì)不會(huì)第二層有些節(jié)點(diǎn)值是個(gè)位數(shù),有些節(jié)點(diǎn)值蹦到好幾百?細(xì)想一下,確實(shí)挺有可能啊,內(nèi)部的參數(shù)都是隨機(jī)初始化的,那蹦啥結(jié)果確實(shí)不好說啊。然后恐怖的事情來了,第二層這些亂蹦的數(shù),又輸?shù)搅说谌龑樱堑谌龑拥妮斎刖褪莵y蹦的數(shù),輸出當(dāng)然好不了,以此類推。
所以主要產(chǎn)生了兩個(gè)問題:
1.所以在前面的網(wǎng)絡(luò)沒有收斂的時(shí)候,后面的網(wǎng)絡(luò)其實(shí)并學(xué)不到什么。一棟大樓底部都是晃的,那上面也好不了。所以必須要等前面的層收斂后,后面層的訓(xùn)練才有效果。
2.因?yàn)橐话銇碚f網(wǎng)絡(luò)內(nèi)部每層都需要加一層激活來增加非線性化嘛,那么如果值比較大,它通過激活以后在S曲線上會(huì)比較接近0或1,梯度很小,收斂會(huì)很慢。
所以batch Normalization就想在每層都加一個(gè)norm進(jìn)行標(biāo)準(zhǔn)化,讓每層的數(shù)分布相同,變成均值0,方差1的標(biāo)準(zhǔn)分布。高斯分布的標(biāo)準(zhǔn)化公式就是下面式子中括號(hào)內(nèi)的部分。值減去均值再除以方差,能夠得到均值為0,方差為1的標(biāo)準(zhǔn)正態(tài)分布。至于γ和β,是需要學(xué)習(xí)的兩個(gè)參數(shù),γ對(duì)數(shù)據(jù)的方差再進(jìn)行一個(gè)縮放,β對(duì)數(shù)據(jù)的均值產(chǎn)生一個(gè)偏移。
為什么歸一化成均值0,方差1后,還要再修改方差和均值?那歸一化還有意義嗎?
這是因?yàn)槲覀儾⒉荒鼙WC這層網(wǎng)絡(luò)學(xué)到的特征是什么,如果簡單的歸一化,很有可能會(huì)被破壞。比如說S型激活函數(shù),如果這層學(xué)到的特征在S的頂端那塊,那么我們做歸一化以后,強(qiáng)行把特征帶到了S的中間位置,特征就被破壞了。要注意γ和β是被訓(xùn)練的參數(shù),且每層都不一樣,所以針對(duì)每一層的實(shí)際情況,它會(huì)去嘗試恢復(fù)這層網(wǎng)絡(luò)所學(xué)到的特征。
結(jié)果
使用VGG網(wǎng)路,CIFAR10數(shù)據(jù)集(下圖),可以看到與不加相比:
1.訓(xùn)練前期的準(zhǔn)確率要高,也就是收斂更快。
2.減少對(duì)learning rate的敏感度,圖二在lr=0.5時(shí),不加norm的網(wǎng)絡(luò)直接震蕩了,但加nrom的仍然表現(xiàn)良好。
所以batch normalization其實(shí)原理不是很高深,只是在每層都加了一個(gè)標(biāo)準(zhǔn)化,使得數(shù)據(jù)同分布,再對(duì)其方差和均值進(jìn)行一個(gè)變換以恢復(fù)該層捕捉到的特征。最后產(chǎn)生了兩大改變,首先收斂更快,其次對(duì)lr的敏感度降低。
那網(wǎng)絡(luò)內(nèi)每層進(jìn)行一個(gè)歸一化,為啥這么簡單的一個(gè)思想,一直沒有被運(yùn)用呢?是researcher想不到嗎?
我相信有很多researcher都嘗試過將各層都重新標(biāo)準(zhǔn)化,但我相信最后的效果一定不太好,因?yàn)楹芏嗵卣髦匦滦薷臑榫?方差1后,特征的信息會(huì)被丟失。所以作者理論的突破性在歸一化以后又使用γ和β重新將數(shù)據(jù)的分布進(jìn)行了一個(gè)修改,以此來找回丟失的特征,當(dāng)然了,只要讓這兩個(gè)參數(shù)能夠自學(xué)習(xí)就可以了。
其實(shí)現(xiàn)在大部分博客沿用的解釋,都是上面這種。包括我之前一直也認(rèn)為是這樣。
但是《How Does Batch Normalizetion Help Optimization》這篇論文認(rèn)為,使用norm后的網(wǎng)絡(luò)收斂更快,lr敏感度更低是對(duì)的,但不是因?yàn)檎撐睦镎f的這種原因,而是因?yàn)槊繉拥臉?biāo)準(zhǔn)化使得最后的loss函數(shù)變成了一個(gè)光滑的曲面而造成的最后性能提優(yōu)。下面來闡述一下思想:
batch Normalization 解釋的反駁
實(shí)驗(yàn)測試
MIT的研究人員并沒有在論文的一開始就提出了自己的解釋。而是說,如果原作者說的是對(duì)的,那我們就先按照原作者的思路去驗(yàn)證一下(因?yàn)樯婕皟善猵aper,所以本文將batch normalization的提出者寫為原作者,How Does Batch Normalizetion Help Optimization的作者寫為來自MIT的研究人員):
原作者認(rèn)為是因?yàn)榫W(wǎng)絡(luò)中各層都標(biāo)準(zhǔn)化后使得分布相同,因此造成的性能提優(yōu)。
來自MIT的研究人員做了三個(gè)實(shí)驗(yàn)作為對(duì)比:不適使用norm的普通網(wǎng)絡(luò)、使用nrom的普通網(wǎng)絡(luò)及添加噪音的Norm網(wǎng)絡(luò)。
Norm網(wǎng)絡(luò)添加噪音是考慮到原作者認(rèn)為是同分布造成的性能提優(yōu)。那么來自MIT的研究人員就在Norm網(wǎng)絡(luò)的基礎(chǔ)上,給各層再手動(dòng)添加噪音,這樣使得第三個(gè)網(wǎng)絡(luò)雖然使用了norm,但每層的分布已經(jīng)被打亂,不再滿足同分布的情況。
下圖中的實(shí)驗(yàn)結(jié)果表明,即使nrom網(wǎng)絡(luò)添加了噪音,但性能仍然和添加norm的網(wǎng)絡(luò)差不多。
那么最后造成性能提升的原因,肯定不是數(shù)據(jù)同分布這一解釋,也就是說原作者給出的解釋是錯(cuò)的,一定有其他的原因。
batch Normalization新解釋的直觀理解
在基礎(chǔ)的學(xué)習(xí)中,我們都知道在設(shè)計(jì)loss的時(shí)候希望loss函數(shù)是光滑的,這樣我們可以很順利地使用梯度下降來更新參數(shù)并找到一個(gè)較優(yōu)點(diǎn)。但很多時(shí)候loss并不是我們想象中的那么美好。比如說下圖,左邊和右邊都是loss函數(shù),但是左邊的loss雖然連續(xù),但并不光滑。在梯度下降過程中很難保證下降的有效性和快速性,此外也很容易陷入局部最優(yōu)解。而右邊的圖雖然在四個(gè)頂點(diǎn)出也有局部最優(yōu)解,但總體上來說還是非常理想的一個(gè)loss。
MIT的研究人員認(rèn)為batch normalization的有效性在于它將左邊的原始loss轉(zhuǎn)變成了右邊的loss,造成了上文提到的兩種結(jié)果:
1.收斂速度變。
2.對(duì)學(xué)習(xí)率的設(shè)置不再那么敏感。
分析
MIT的研究員定義了兩個(gè)函數(shù):
第一個(gè)是loss的值的計(jì)算,就是下面第一個(gè)公式,內(nèi)部的loss是當(dāng)前的loss,隨后對(duì)loss求導(dǎo),再乘以學(xué)習(xí)率,x是內(nèi)部的參數(shù),對(duì)參數(shù)進(jìn)行一個(gè)更新,隨后將新參數(shù)放入loss函數(shù)中,計(jì)算當(dāng)前l(fā)oss的值。別看這個(gè)公式看起來有點(diǎn)繞,實(shí)際上就是求當(dāng)前的loss值。
第二個(gè)公式是計(jì)算loss的梯度差,也可以看成loss的二次求導(dǎo)吧(我感覺)。
論文中之所以提出這兩個(gè)公式,是為了得到兩個(gè)量。
第一個(gè)公式可以得到訓(xùn)練過程中的loss,那么把每一個(gè)step的loss都拿出來繪制成一條曲線,該曲線可以認(rèn)為是loss的波動(dòng)情況。我認(rèn)為如果一個(gè)loss函數(shù)本身是比較光滑的,那么第一個(gè)公式求出來的loss值并不會(huì)有一個(gè)比較大的浮動(dòng)。
第二個(gè)量是計(jì)算loss的梯度差,它可以認(rèn)為山坡在沿著下降的方向走時(shí),方向改變是否會(huì)較大。也就是說,一個(gè)比較好的loss函數(shù),在每一個(gè)step中,loss所得到的梯度應(yīng)該是不會(huì)浮動(dòng)太大的。就好像從山上往下走,我們向下的方向一般都不會(huì)在瞬間改變太大,而不是說往下平滑地走著走著(loss梯度穩(wěn)定),突然前面是個(gè)懸崖(loss梯度驟變),而應(yīng)該是有個(gè)臺(tái)階(loss梯度平滑改變)。
MIT研究人員將使用norm和普通的網(wǎng)絡(luò)對(duì)這兩個(gè)量進(jìn)行了對(duì)比:
可以看到不使用norm的網(wǎng)絡(luò)(紅色),loss的梯度差浮動(dòng)均較大。而使用了norm的網(wǎng)絡(luò)(藍(lán)色)浮動(dòng)很小。也就從側(cè)面印證了普通網(wǎng)絡(luò)的loss比較趨向于左圖。而使用了norm的,loss趨向右圖。
上面這兩個(gè)公式其實(shí)就是整篇論文的核心,MIT的研究人煙也正是基于這兩個(gè)量從而對(duì)原文進(jìn)行了反駁。
1.在論文中使用了L-Lipschitz常數(shù)來定量loss的光滑程度(也就是公式1干的事),限制了loss的光滑程度,(以下定義來自百度百科)
L-Lipschitz:直覺上,利普希茨連續(xù)函數(shù)限制了函數(shù)改變的速度,符合利普希茨條件的函數(shù)的斜率,必小于一個(gè)稱為利普希茨常數(shù)的實(shí)數(shù)(該常數(shù)依函數(shù)而定)。對(duì)于在實(shí)數(shù)集的子集的函數(shù)
,若存在常數(shù)K,使得
,則稱 f 符合利普希茨條件,對(duì)于f 最小的常數(shù)K 稱為 f 的利普希茨常數(shù)。
我個(gè)人覺得就是換了種說法,就是限制loss的一階導(dǎo)數(shù)要小于常數(shù)k。一階導(dǎo)數(shù)在曲線上表現(xiàn)的是斜率必須小于一個(gè)值,也就是說斜率不能過大。在這一條件的限制下,loss的面哪怕下降,也是很緩的。
2.論文使用了另一個(gè)更強(qiáng)的光滑條件來限制:β-smoothness(也就是公式2干的事)。
β-smoothness限制了就是loss斜率的斜率(可以簡單看成斜率差)不能超過一定值。
我認(rèn)為這本質(zhì)上其實(shí)就是二階求導(dǎo)。對(duì)二階求導(dǎo)后的結(jié)果進(jìn)行了一個(gè)限制,使得函數(shù)在二階條件下仍然是一個(gè)較為平滑、不會(huì)大幅度突變的函數(shù)。
也正是因?yàn)槭褂昧薭atch norm的網(wǎng)絡(luò),它的loss從原先的原始凹凸不平狀態(tài)變成了一個(gè)能滿足L-Lipschitz及β-smoothness兩個(gè)強(qiáng)條件的原因,使得bath norm能夠work。
總結(jié)
原作者提出了batch norm,并造成了兩個(gè)結(jié)果:
1.收斂更快。
2.對(duì)learning rate的敏感度更低(也就是說lr的設(shè)置是否合理不會(huì)很大程度地影響最終結(jié)果)。
并且認(rèn)為網(wǎng)絡(luò)中每層都進(jìn)行了一次同分布,是造成結(jié)果的主要原因。
MIT研究員根據(jù)這一思路,將使用norm的網(wǎng)絡(luò)隨機(jī)添加高斯噪聲,使得網(wǎng)絡(luò)在添加了norm的同時(shí)又去除了norm所帶來的同分布效果,但結(jié)果顯示優(yōu)勢仍然存在,因此對(duì)原作者的解釋進(jìn)行了反駁。
隨后MIT研究人員使用了loss的一階信息和二階信息進(jìn)行了評(píng)估,發(fā)現(xiàn)使用了norm以后的loss在一階和二階上都具有很好的性質(zhì),由此推斷nrom之所以能產(chǎn)生效果,不是原作者提出的解釋,而是因?yàn)閚orm直接作用了loss函數(shù),將loss函數(shù)變成了一個(gè)一階、二階均平滑的函數(shù)。
-
MIT
+關(guān)注
關(guān)注
3文章
253瀏覽量
23433 -
paper
+關(guān)注
關(guān)注
0文章
7瀏覽量
3732
原文標(biāo)題:論文閱讀|How Does Batch Normalization Help Optimization
文章出處:【微信號(hào):zenRRan,微信公眾號(hào):深度學(xué)習(xí)自然語言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論