前面兩期庭再,我們了解了原理、訓(xùn)練及評(píng)估,然而為什么有效及若干細(xì)節(jié)仍值得討論产镐。
系列目錄
理解Batch Normalization系列1——原理
理解Batch Normalization系列2——訓(xùn)練及評(píng)估
理解Batch Normalization系列3——為什么有效及若干討論
理解Batch Normalization系列4——實(shí)踐
文章目錄
BN改善了ICS嗎?
什么是ICS踢步?
BN與ICS無(wú)關(guān)
BN改善了損失的平滑性
什么是平滑性癣亚?
其他11個(gè)值得討論的問(wèn)題
參考文獻(xiàn)
BN改善了ICS嗎?
原作者認(rèn)為BN是旨在解決了 ICS(Internal Covariate Shift)問(wèn)題获印。原文是這樣解釋?zhuān)?/p>
We define Internal Covariate Shift as the change in the distribution of network activations due to the change in network parameters during training. To improve the training, we seek to reduce the internal covariate shift. By fixing the distribution of the layer inputs x as the training progresses, we expect to improve the training speed.
什么是ICS述雾?
所謂Covariate Shift,是指相比于訓(xùn)練集數(shù)據(jù)的特征兼丰,測(cè)試集數(shù)據(jù)的特征分布發(fā)生了變化玻孟。
而原作者定義的Internal Covariate Shift,設(shè)想把每層神經(jīng)網(wǎng)絡(luò)看做一個(gè)單獨(dú)的模型鳍征,它有著自己對(duì)應(yīng)的輸入與輸出黍翎。如果這個(gè)“模型”越靠輸出層,由于訓(xùn)練過(guò)程中前面多層的權(quán)重的更新頻繁艳丛,導(dǎo)致它每個(gè)神經(jīng)元的輸入(即上一層的激活值)的數(shù)值分布匣掸,總在不停地變化,這導(dǎo)致訓(xùn)練困難氮双。
然而碰酝,一個(gè)啟發(fā)性的解釋很容易被推翻,又有人做了更進(jìn)一步的解釋戴差。
BN與ICS無(wú)關(guān)
2018年的文章《How Does Batch Normalization Help Optimization?》做了實(shí)驗(yàn)送爸,如圖1所示。
圖 1. BN與ICS (來(lái)源: 原始論文)
左圖表明,三個(gè)網(wǎng)絡(luò)訓(xùn)練曲線袭厂,最終都達(dá)成了較高的精度墨吓;右圖是三個(gè)網(wǎng)絡(luò)中抽出3個(gè)層的激活值,繪制9個(gè)HISTOGRAMS圖纹磺,每層激活值的分布都在訓(xùn)練過(guò)程中不斷變化(HISTOGRAMS圖)肛真,尤其是網(wǎng)絡(luò)中更深的層,這導(dǎo)致了ICS問(wèn)題(根據(jù)上文的ICS定義)爽航。
應(yīng)用了BN蚓让,觀察到的右圖(Standard+BatchNorm)的激活值分布變化很明顯,理論上將引起明顯的ICS問(wèn)題讥珍。
-
在BN層后疊加噪音(輸入到后面的非線性激活历极,相當(dāng)于BN白干了),觀察到的右圖(Standard+"Noisy" BatchNorm)的激活值分布變化更為突出衷佃,理論上將引起更為明顯的ICS問(wèn)題趟卸。
(然而,我的理解是:如果每個(gè)BN層后疊加噪音氏义,下一層的BN也會(huì)進(jìn)行標(biāo)準(zhǔn)化锄列,層層抵消,相當(dāng)于僅最后一個(gè)BN層后疊加的噪音增大了ICS)
然而兩種情況下惯悠,左圖BN的表現(xiàn)依然非常穩(wěn)定邻邮。即BN并沒(méi)有減少I(mǎi)CS。
那么克婶,BN是為什么有效筒严?
BN改善了損失的平滑性
2018年的論文《How Does Batch Normalization Help Optimization?》,作者定義了一個(gè)描述損失函數(shù)平滑度的函數(shù)情萤,觀察加入BN的前后鸭蛙,損失函數(shù)平滑性的變化。如圖2所示筋岛∪⑹樱縱軸的數(shù)值越小,表明損失函數(shù)曲面越平滑睁宰;縱軸數(shù)值越大肪获,表明損失函數(shù)曲面越顛簸。藍(lán)色線為加入BN后的損失函數(shù)的平滑度勋陪,可以看到贪磺,加入BN后,損失函數(shù)曲面的平滑程度得到了顯著改善诅愚。
圖 2. BN的加入,增加了損失函數(shù)的光滑度(來(lái)源: 原始論文)
因此得到的結(jié)論是:BN的加入使得損失函數(shù)曲面變得平滑,而平滑的損失函數(shù)進(jìn)行梯度下降法變得非常容易(可參見(jiàn)圖3)违孝。
什么是平滑性刹前?
對(duì)平滑性的理解,我想沒(méi)有比圖3更合適的了雌桑。
圖 3. 損失函數(shù)的光滑度對(duì)比(來(lái)源:Visualizing the Loss Landscape of Neural Nets)
圖3中所展示的是喇喉,ResNet中引入的shortcut connection,實(shí)際上是對(duì)損失函數(shù)的平滑作用校坑。顯然拣技,對(duì)于左側(cè)的損失函數(shù),梯度下降將是異常困難耍目;而對(duì)于右側(cè)膏斤,即經(jīng)過(guò)平滑的損失函數(shù),將大大提升訓(xùn)練效率邪驮。
由于權(quán)重參數(shù)動(dòng)輒千萬(wàn)莫辨,必然將權(quán)重?cái)?shù)映射成2個(gè),因此繪制損失函數(shù)曲面相當(dāng)需要技巧與計(jì)算代價(jià)毅访,尚未找到BN的平滑性3D圖對(duì)比沮榜,但不影響圖2中BN對(duì)平滑性改善效果的證明。
其他11個(gè)值得討論的問(wèn)題
-
BN層的位置能不能調(diào)整喻粹?如果能調(diào)整哪個(gè)位置更好蟆融?
能。原因:由第二章BN的反向傳播可知守呜,BN不管放在網(wǎng)絡(luò)的哪個(gè)位置振愿,都可以實(shí)現(xiàn)這兩個(gè)功能:訓(xùn)練?和?、傳遞梯度到前一層弛饭,所以位置并不限于ReLU之前冕末。
原始論文中,BN被放在本層ReLU之前侣颂,即
也有測(cè)試表明档桃,BN放在上一層ReLU之后,效果更好憔晒,即
表1 BN的位置對(duì)訓(xùn)練結(jié)果的影響來(lái)源
Name | Accuracy | LogLoss | Comments |
---|---|---|---|
Before | 0.474 | 2.35 | As in paper |
Before + scale&bias layer | 0.478 | 2.33 | As in paper |
After | 0.499 | 2.21 | |
After + scale&bias layer | 0.493 | 2.24 |
但是由于這些都是試驗(yàn)證明藻肄,而非理論證明,因此無(wú)法肯定BN放在ReLU后就一定更好拒担。
在實(shí)踐中可以都試試嘹屯。
-
在訓(xùn)練時(shí)為什么不直接使用整個(gè)訓(xùn)練集的均值/方差?
使用 BN 的目的就是為了保證每批數(shù)據(jù)的分布穩(wěn)定从撼,使用全局統(tǒng)計(jì)量反而違背了這個(gè)初衷州弟。
-
在預(yù)測(cè)時(shí)為什么不直接使用整個(gè)訓(xùn)練集的均值/方差?
完全可以。由于神經(jīng)網(wǎng)絡(luò)的訓(xùn)練數(shù)據(jù)量一般很大婆翔,所以內(nèi)存裝不下拯杠,因此用指數(shù)滑動(dòng)平均方法去近似值,好處是不占內(nèi)存啃奴,計(jì)算方便潭陪,但其結(jié)果不如整個(gè)訓(xùn)練集的均值/方差那么準(zhǔn)確。
-
batch_size的配置
不適合batch_size較小的學(xué)習(xí)任務(wù)最蕾。因?yàn)閎atch_size太小依溯,每一個(gè)step里前向計(jì)算中所統(tǒng)計(jì)的本batch上的方差和均值,噪音聲量大瘟则,與總體方差和總體均值相差太大黎炉。前向計(jì)算已經(jīng)不準(zhǔn)了,反向傳播的誤差就更大了壹粟。
尤其是最極端的在線學(xué)習(xí)(batch_size=1)拜隧,原因?yàn)闊o(wú)法獲得總體統(tǒng)計(jì)量。
-
對(duì)學(xué)習(xí)率有何影響趁仙?
由于BN對(duì)損失函數(shù)的平滑作用洪添,因此可以采用較大的學(xué)習(xí)率。
-
BN是正則化嗎雀费?
在深度學(xué)習(xí)中干奢,正則化一般是指為避免過(guò)擬合而限制模型參數(shù)規(guī)模的做法。即正則化=簡(jiǎn)化盏袄。BN能夠平滑損失函數(shù)的曲面忿峻,顯然屬于正則化。不過(guò)辕羽,除了在過(guò)擬合時(shí)起正則作用逛尚,在欠擬合狀況下,BN也能提升收斂速度刁愿。
-
與Dropout的有何異同绰寞?
BN由于平滑了損失函數(shù)的梯度函數(shù),不僅使得模型訓(xùn)練精度提升了铣口,而且收斂速度也提升了滤钱;Dropout是一種集成策略,只能提升模型訓(xùn)練精度脑题。因此BN更受歡迎件缸。
-
能否和Dropout混合使用?
雖然混合使用較麻煩叔遂,但是可以他炊。不過(guò)現(xiàn)在主流模型已經(jīng)全面倒戈BN争剿。Dropout之前最常用的場(chǎng)合是全連接層,也被全局池化日漸取代佑稠。既生瑜何生亮秒梅。
-
BN可以用在哪些層旗芬?
所有的層舌胶。從第一個(gè)隱藏層到輸出層,均可使用疮丛,而且全部加BN效果往往最好幔嫂。
-
BN可以用在哪些類(lèi)型的網(wǎng)絡(luò)?
MLP誊薄、CNN均ok履恩,幾乎成了這類(lèi)網(wǎng)絡(luò)的必選項(xiàng)。
RNN網(wǎng)絡(luò)不ok呢蔫,因?yàn)闊o(wú)論訓(xùn)練和測(cè)試階段切心,每個(gè)batch上的輸入序列的長(zhǎng)度都不確定,均值和方差的統(tǒng)計(jì)非常困難片吊。
-
BN的缺點(diǎn)
在訓(xùn)練時(shí)前向傳播的時(shí)間將增大绽昏。(但是迭代次數(shù)變少了,總的時(shí)間反而少了)
下一期俏脊,我們將動(dòng)手實(shí)現(xiàn)一個(gè)BN層全谤。
(如果本文對(duì)您有所幫助,別忘了點(diǎn)贊支持一下哈爷贫,感謝各位看官)
參考文獻(xiàn)
[1] https://arxiv.org/pdf/1502.03167v3.pdf
[2] https://r2rt.com/implementing-batch-normalization-in-tensorflow.html
[3] Adjusting for Dropout Variance in Batch Normalization and Weight Initialization
[4] http://www.reibang.com/p/05f3e7ddf1e1
[8]https://panxiaoxie.cn/2018/07/28/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0-Batch-Normalization/
[9] https://www.tensorflow.org/api_docs/python/tf/layers/batch_normalization
[11] https://github.com/ducha-aiki/caffenet-benchmark/blob/master/batchnorm.md