https://www.sohu.com/a/148103872_723464
https://www.cnblogs.com/jiangxinyang/p/9372678.html
http://www.reibang.com/p/86530a0a3935
https://blog.csdn.net/u014314005/article/details/80583770
https://blog.csdn.net/malefactor/article/details/51476961/
論文:《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》https://arxiv.org/abs/1502.03167
歸一化解決的問(wèn)題:
神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)過(guò)程本質(zhì)就是為了學(xué)習(xí)數(shù)據(jù)分布泵督,一旦訓(xùn)練數(shù)據(jù)與測(cè)試數(shù)據(jù)的分布不同芽丹,那么網(wǎng)絡(luò)的泛化能力也大大降低岳链;另外一方面碾局,一旦每批訓(xùn)練數(shù)據(jù)的分布各不相同(batch 梯度下降),那么網(wǎng)絡(luò)就要在每次迭代都去學(xué)習(xí)適應(yīng)不同的分布茂契,這樣將會(huì)大大降低網(wǎng)絡(luò)的訓(xùn)練速度掺出,這也正是為什么我們需要對(duì)數(shù)據(jù)都要做一個(gè)歸一化預(yù)處理的原因毅桃。
我們把網(wǎng)絡(luò)中間層在訓(xùn)練過(guò)程中,數(shù)據(jù)分布的改變稱(chēng)之為:“Internal Covariate Shift”翁狐。
Batch Normalization
第一步:通過(guò)一定的規(guī)范化手段(其實(shí)就是利用估計(jì))类溢,把每層的輸入值的分布強(qiáng)行拉回到N(0,1)的分布,其實(shí)就是把越來(lái)越偏的分布強(qiáng)制拉回比較標(biāo)準(zhǔn)的分布露懒,這樣使得激活輸入值大概率落在非線性函數(shù)對(duì)輸入比較敏感的區(qū)域闯冷,這樣輸入的小變化就會(huì)導(dǎo)致?lián)p失函數(shù)較大的變化,避免梯度消失問(wèn)題產(chǎn)生懈词,而且學(xué)習(xí)收斂的速度更快蛇耀,能大大加快訓(xùn)練速度。
坎弯,
纺涤,
第二步:仿射變換中的和
都是可以學(xué)習(xí)的參數(shù),不難發(fā)現(xiàn)如果
取輸入的
抠忘,
取輸入的
撩炊,Batch Normalization變換就回到了恒等變換。
-
PS: 為什么要γ 和 β崎脉?
有的人說(shuō)是因?yàn)槿绻麟[藏層的輸入均值在靠近0的區(qū)域即處于Sigmoid激活函數(shù)的線性區(qū)域(為了保持較大的梯度)衰抑,這樣不利于訓(xùn)練好的非線性神經(jīng)網(wǎng)絡(luò),得到的模型效果也不會(huì)太好荧嵌。γ 和 β的出現(xiàn)等價(jià)于非線性函數(shù)的值從正中心周?chē)木€性區(qū)往非線性區(qū)動(dòng)了動(dòng)呛踊。核心思想應(yīng)該是想找到一個(gè)線性和非線性的較好平衡點(diǎn)砾淌,既能享受非線性的較強(qiáng)表達(dá)能力的好處,又避免太靠非線性區(qū)兩頭使得網(wǎng)絡(luò)收斂速度太慢谭网。
圖片.png
這種解釋是有問(wèn)題的:
因?yàn)镽elu是分段線性函數(shù)汪厨,但是仍可以輕松表達(dá)所有函數(shù),擬合非線性函數(shù)的水平仍然很強(qiáng)愉择。
理論上初始化為 γ=1 和 β=0 然后再訓(xùn)練中自適應(yīng)為真實(shí)分布的u和σ劫乱。初期梯度較大訓(xùn)練速度快,
在訓(xùn)練過(guò)程中會(huì)計(jì)算很多批Mini-Batch的期望和方差锥涕,在之后的驗(yàn)證和測(cè)試的時(shí)候衷戈,我們將這些批次的Mini-Batch的期望和方差分別求平均值來(lái)作為此時(shí)的期望和方差。
總體均值E= 层坠, 總體方差V=
利用多個(gè)樣本的值對(duì)總體進(jìn)行評(píng)估殖妇。
,
工程實(shí)踐:
非常不鼓勵(lì)扔掉Dropout破花。
Batch Norm根本壓不住大模型在訓(xùn)練后期的過(guò)擬合b值其實(shí)都不需要谦趣,因?yàn)锽N層有β
注:為什么使用減均值、白化可以加快訓(xùn)練座每?
由于初始化的時(shí)候前鹅,我們的參數(shù)一般都是0均值的,因此開(kāi)始的擬合y=Wx+b峭梳,基本過(guò)原點(diǎn)附近舰绘,如圖b紅色虛線。因此葱椭,網(wǎng)絡(luò)需要經(jīng)過(guò)多次學(xué)習(xí)才能逐步達(dá)到如紫色實(shí)線的擬合除盏,即收斂的比較慢。如果我們對(duì)輸入數(shù)據(jù)先作減均值操作挫以,如圖c者蠕,顯然可以加快學(xué)習(xí)。更進(jìn)一步的掐松,我們對(duì)數(shù)據(jù)再進(jìn)行去相關(guān)操作踱侣,使得數(shù)據(jù)更加容易區(qū)分,這樣又會(huì)加快訓(xùn)練大磺,如圖d抡句。
注:BN不適合RNN環(huán)境。
注:歸一化不能在求的激活值之后進(jìn)行杠愧,不然流到下一層參數(shù)的誤差值會(huì)越來(lái)越小待榔,從而影響模型的學(xué)習(xí),也就是梯度彌散問(wèn)題。
如果歸一化參數(shù)不在梯度下降中計(jì)算的話锐锣,會(huì)使模型參數(shù)膨脹腌闯。