Batch-Normalization深入解析

BN:總的來(lái)說(shuō)仑乌,BN通過(guò)將每一層網(wǎng)絡(luò)的輸入進(jìn)行normalization,保證輸入分布的均值與方差固定在一定范圍內(nèi)霍狰,減少了網(wǎng)絡(luò)中的Internal Covariate Shift問(wèn)題推正,并在一定程度上緩解了梯度消失训柴,加速了模型收斂滩报;并且BN使得網(wǎng)絡(luò)對(duì)參數(shù)锅知、激活函數(shù)更加具有魯棒性,降低了神經(jīng)網(wǎng)絡(luò)模型訓(xùn)練和調(diào)參的復(fù)雜度脓钾;最后BN訓(xùn)練過(guò)程中由于使用mini-batch的mean/variance每次都不同售睹,引入了隨機(jī)噪聲,在一定程度上對(duì)模型起到了正則化的效果惭笑。

Normalization

字面上意思就是標(biāo)準(zhǔn)化,也就是對(duì)輸入的數(shù)據(jù)做標(biāo)準(zhǔn)化,可以用下面的公式表示(這里 x_i 代表輸入數(shù)據(jù), n代表訓(xùn)練集大小):

\mu = \frac{1}{n}\sum_{i=1}^{n}{x_i}

\sigma^2 = \frac{1}{n} \sum_{i=1}^{n}{(x_i - \mu)}

\hat x_i = \frac{x_i - \mu}{\sqrt{\sigma^2}+\varepsilon}

以上可以看出, 標(biāo)準(zhǔn)化以后的數(shù)據(jù)服從均值為0,方差為1的正態(tài)分布

為什么要進(jìn)行Normalization?

在介紹BN之前,先說(shuō)說(shuō)為什么要進(jìn)行Normalization

image

在神經(jīng)網(wǎng)絡(luò)中, 數(shù)據(jù)分布對(duì)訓(xùn)練會(huì)產(chǎn)生影響. 比如某個(gè)神經(jīng)元 x 的值為1, 某個(gè) Weights 的初始值為 0.1, 這樣后一層神經(jīng)元計(jì)算結(jié)果就是 Wx = 0.1; 又或者 x = 20, 這樣 Wx 的結(jié)果就為 2. 現(xiàn)在還不能看出什么問(wèn)題, 但是, 當(dāng)我們加上一層激勵(lì)函數(shù), 激活這個(gè) Wx 值的時(shí)候, 問(wèn)題就來(lái)了. 如果使用 像 tanh 的激勵(lì)函數(shù), Wx 的激活值就變成了 ~0.1 和 ~1, 接近于 1 的部已經(jīng)處在了 激勵(lì)函數(shù)的飽和階段, 也就是如果 x 無(wú)論再怎么擴(kuò)大, tanh 激勵(lì)函數(shù)輸出值也還是接近1. 換句話(huà)說(shuō), 神經(jīng)網(wǎng)絡(luò)在初始階段已經(jīng)不對(duì)那些比較大的 x 特征范圍 敏感了. 這樣很糟糕, 想象我輕輕拍自己的感覺(jué)和重重打自己的感覺(jué)居然沒(méi)什么差別, 這就證明我的感官系統(tǒng)失效了. 當(dāng)然我們是可以用之前提到的對(duì)數(shù)據(jù)做 normalization 預(yù)處理, 使得輸入的 x 變化范圍不會(huì)太大, 讓輸入值經(jīng)過(guò)激勵(lì)函數(shù)的敏感部分. 但剛剛這個(gè)不敏感問(wèn)題不僅僅發(fā)生在神經(jīng)網(wǎng)絡(luò)的輸入層, 而且在隱藏層中也經(jīng)常會(huì)發(fā)生.

Normalization的效果:

image

如上圖,當(dāng)沒(méi)有進(jìn)行normalizatin時(shí),數(shù)據(jù)的分布是任意的,那么就會(huì)有大量的數(shù)據(jù)處在激活函數(shù)的敏感區(qū)域外, 對(duì)這樣的數(shù)據(jù)分布進(jìn)行激活后, 大部分的值都會(huì)變成1或-1,造成激活后的數(shù)據(jù)分布不均衡,而如果進(jìn)行了Normallizatin, 那么相對(duì)來(lái)說(shuō)數(shù)據(jù)的分布比較均衡,如下圖所示:

image

一句話(huà)總結(jié)就是: 通過(guò)Normalization讓數(shù)據(jù)的分布始終處在激活函數(shù)敏感的區(qū)域

BN的提出背景

https://zhuanlan.zhihu.com/p/34879333

Internal Covariate Shift

Covariate [k?'ve?r?rt]

什么是Internal Covariate Shift:

在深層網(wǎng)絡(luò)訓(xùn)練的過(guò)程中侣姆,由于網(wǎng)絡(luò)中參數(shù)變化而引起內(nèi)部結(jié)點(diǎn)數(shù)據(jù)分布發(fā)生變化的這一過(guò)程被稱(chēng)作Internal Covariate Shift。

帶來(lái)了什么問(wèn)題:

  • 上層網(wǎng)絡(luò)需要不停調(diào)整來(lái)適應(yīng)輸入數(shù)據(jù)分布的變化沉噩,導(dǎo)致網(wǎng)絡(luò)學(xué)習(xí)速度的降低
  • 網(wǎng)絡(luò)的訓(xùn)練過(guò)程容易陷入梯度飽和區(qū),減緩網(wǎng)絡(luò)收斂速度

如何減緩Internal Covariate Shift:

(1)白化(PCA白化和ZCA白化):

  • 使得輸入特征分布具有相同的均值與方差
  • 取出特征之間的相關(guān)性
  • 通過(guò)白化操作,我們可以減緩ICS的問(wèn)題柱蟀,進(jìn)而固定了每一層網(wǎng)絡(luò)輸入分布川蒙,加速網(wǎng)絡(luò)訓(xùn)練過(guò)程的收斂

白化缺點(diǎn):

  • 白化過(guò)程計(jì)算成本太高,并且在每一輪訓(xùn)練中的每一層我們都需要做如此高成本計(jì)算的白化操作长已;
  • 白化過(guò)程由于改變了網(wǎng)絡(luò)每一層的分布畜眨,因而改變了網(wǎng)絡(luò)層中本身數(shù)據(jù)的表達(dá)能力昼牛。底層網(wǎng)絡(luò)學(xué)習(xí)到的參數(shù)信息會(huì)被白化操作丟失掉。

于是就提出了BN

什么是Batch Normalization

傳統(tǒng)的Normalization使用的均值和方差是整個(gè)訓(xùn)練集的均值和方差, 并且只對(duì)輸入層的數(shù)據(jù)做歸一化, 而B(niǎo)atch Normalization按字面意思就是對(duì)每一批數(shù)據(jù)進(jìn)行歸一化, 同時(shí)會(huì)對(duì)每一層輸入做歸一化, 所以, 首先要將傳統(tǒng)的標(biāo)準(zhǔn)化中的n改為m, m表示一個(gè)batch的大小,如下所示:

\mu = \frac{1}{m}\sum_{i=1}^{m}{x_i}

\sigma^2 = \frac{1}{m} \sum_{i=1}^{m}{(x_i - \mu)}

\hat x_i = \frac{x_i - \mu}{\sqrt{\sigma^2}+\varepsilon}

傳統(tǒng)的Normalization直接使用了減均值除方差的方式來(lái)進(jìn)行標(biāo)準(zhǔn)化, 但是, 這樣一概而全的方法未必對(duì)所有數(shù)據(jù)來(lái)說(shuō)就是最優(yōu)的, 比如數(shù)據(jù)本身就不對(duì)稱(chēng), 或者激活函數(shù)未必對(duì)方差為1的數(shù)據(jù)有最好的效果, 所以, BN的想法是在傳統(tǒng)標(biāo)準(zhǔn)化之后再加上一個(gè)線(xiàn)性變換,如下所示:

\hat y_i = \gamma \hat x_i + \beta

其中,\gamma\beta 是兩個(gè)需要學(xué)習(xí)的參數(shù), ** 可以看出, BN的本質(zhì)就是利用參數(shù)優(yōu)化來(lái)改變一下數(shù)據(jù)分布的方差大小和均值的位置. **

BN的優(yōu)點(diǎn)

(1)BN使得網(wǎng)絡(luò)中每層輸入數(shù)據(jù)的分布相對(duì)穩(wěn)定康聂,加速模型學(xué)習(xí)速度

(2)BN使得模型對(duì)初始化方法和網(wǎng)絡(luò)中的參數(shù)不那么敏感贰健,簡(jiǎn)化調(diào)參過(guò)程,使得網(wǎng)絡(luò)學(xué)習(xí)更加穩(wěn)定

(3)BN允許網(wǎng)絡(luò)使用飽和性激活函數(shù)(例如sigmoid恬汁,tanh等)伶椿,緩解梯度消失問(wèn)題

(4)BN具有一定的正則化效果

原因如下:

(1)BN使得網(wǎng)絡(luò)中每層輸入數(shù)據(jù)的分布相對(duì)穩(wěn)定,加速模型學(xué)習(xí)速度

BN通過(guò)規(guī)范化與線(xiàn)性變換使得每一層網(wǎng)絡(luò)的輸入數(shù)據(jù)的均值與方差都在一定范圍內(nèi)氓侧,使得后一層網(wǎng)絡(luò)不必不斷去適應(yīng)底層網(wǎng)絡(luò)中輸入的變化脊另,從而實(shí)現(xiàn)了網(wǎng)絡(luò)中層與層之間的解耦,更加有利于優(yōu)化的過(guò)程,提高整個(gè)神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)速度约巷。

(2)BN使得模型對(duì)初始化方法和網(wǎng)絡(luò)中的參數(shù)不那么敏感偎痛,簡(jiǎn)化調(diào)參過(guò)程,使得網(wǎng)絡(luò)學(xué)習(xí)更加穩(wěn)定

在神經(jīng)網(wǎng)絡(luò)中独郎,我們經(jīng)常會(huì)謹(jǐn)慎地采用一些權(quán)重初始化方法(例如Xavier)或者合適的學(xué)習(xí)率來(lái)保證網(wǎng)絡(luò)穩(wěn)定訓(xùn)練踩麦。當(dāng)學(xué)習(xí)率設(shè)置太高時(shí),會(huì)使得參數(shù)更新步伐過(guò)大氓癌,容易出現(xiàn)震蕩和不收斂...
https://zhuanlan.zhihu.com/p/34879333

(3)BN允許網(wǎng)絡(luò)使用飽和性激活函數(shù)(例如sigmoid谓谦,tanh等),緩解梯度消失問(wèn)題

在不使用BN層的時(shí)候顽铸,由于網(wǎng)絡(luò)的深度與復(fù)雜性茁计,很容易使得底層網(wǎng)絡(luò)變化累積到上層網(wǎng)絡(luò)中,導(dǎo)致模型的訓(xùn)練很容易進(jìn)入到激活函數(shù)的梯度飽和區(qū)谓松;通過(guò)normalize操作可以讓激活函數(shù)的輸入數(shù)據(jù)落在梯度非飽和區(qū)星压,緩解梯度消失的問(wèn)題;另外通過(guò)自適應(yīng)學(xué)習(xí) \gamma\beta 又讓數(shù)據(jù)保留更多的原始信息鬼譬。

(4)BN具有一定的正則化效果

在Batch Normalization中娜膘,由于我們使用mini-batch的均值與方差作為對(duì)整體訓(xùn)練樣本均值與方差的估計(jì),盡管每一個(gè)batch中的數(shù)據(jù)都是從總體樣本中抽樣得到优质,但不同mini-batch的均值與方差會(huì)有所不同竣贪,這就為網(wǎng)絡(luò)的學(xué)習(xí)過(guò)程中增加了隨機(jī)噪音,與Dropout通過(guò)關(guān)閉神經(jīng)元給網(wǎng)絡(luò)訓(xùn)練帶來(lái)噪音類(lèi)似巩螃,在一定程度上對(duì)模型起到了正則化的效果演怎。

另外,原作者也證明了網(wǎng)絡(luò)加入BN后避乏,可以丟棄Dropout爷耀,模型也同樣具有很好的泛化效果。

BN的具體實(shí)現(xiàn)及其反向傳播

http://www.reibang.com/p/4270f5acc066
https://zhuanlan.zhihu.com/p/27938792

在Caffe2實(shí)現(xiàn)中, BN層需要和Scale層配合使用, 其中, BN專(zhuān)門(mén)用于做歸一化操作, 而后續(xù)的線(xiàn)性變換層, 會(huì)交給Scale層去做.

訓(xùn)練階段:
在訓(xùn)練時(shí)利用當(dāng)前batch的mean和variance來(lái)進(jìn)行BN處理, 同時(shí)使用滑動(dòng)平均的方式不斷的更新global 的mean和variance, 并將其存儲(chǔ)起來(lái).

測(cè)試階段:
在預(yù)測(cè)階段, 直接使用模型存儲(chǔ)好的均值和方差進(jìn)行計(jì)算

使用BN時(shí)應(yīng)注意的問(wèn)題

  1. 訓(xùn)練/測(cè)試階段的使用

在實(shí)際應(yīng)用中, 均值和方差是通過(guò)滑動(dòng)平均方法在訓(xùn)練數(shù)據(jù)集上得到的, 如果換了其他的任務(wù)或數(shù)據(jù)集, 建議先f(wàn)inetune之后再使用BN層存儲(chǔ)的均值和方差. 同時(shí), 注意訓(xùn)練時(shí)的均值和方差是來(lái)自于當(dāng)前batch的.

  1. 隱藏層中BN的數(shù)據(jù)大小

在卷積網(wǎng)絡(luò)隱藏層中, BN的大小不單單是batch, 而是batch和特征相應(yīng)圖大小的乘積. 也就是說(shuō), 在隱藏層, 層的輸入是上一層的輸出, 也就是上一層的神經(jīng)元個(gè)數(shù), 而對(duì)于上一層來(lái)說(shuō), 如果輸出的特征相應(yīng)圖大小為 w\times h , 那么上一層的神經(jīng)元個(gè)數(shù)就應(yīng)該是 b\times w \times h, 其中,b是指batch的大小

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末拍皮,一起剝皮案震驚了整個(gè)濱河市歹叮,隨后出現(xiàn)的幾起案子跑杭,更是在濱河造成了極大的恐慌,老刑警劉巖咆耿,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件德谅,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡萨螺,警方通過(guò)查閱死者的電腦和手機(jī)窄做,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)屑迂,“玉大人浸策,你說(shuō)我怎么就攤上這事∪桥危” “怎么了庸汗?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)手报。 經(jīng)常有香客問(wèn)我蚯舱,道長(zhǎng),這世上最難降的妖魔是什么掩蛤? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任枉昏,我火速辦了婚禮,結(jié)果婚禮上揍鸟,老公的妹妹穿的比我還像新娘兄裂。我一直安慰自己,他們只是感情好阳藻,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布晰奖。 她就那樣靜靜地躺著,像睡著了一般腥泥。 火紅的嫁衣襯著肌膚如雪匾南。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,441評(píng)論 1 310
  • 那天蛔外,我揣著相機(jī)與錄音蛆楞,去河邊找鬼。 笑死夹厌,一個(gè)胖子當(dāng)著我的面吹牛豹爹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播矛纹,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼帅戒,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了崖技?” 一聲冷哼從身側(cè)響起逻住,我...
    開(kāi)封第一講書(shū)人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎迎献,沒(méi)想到半個(gè)月后瞎访,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡吁恍,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年扒秸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片冀瓦。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡伴奥,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出翼闽,到底是詐尸還是另有隱情拾徙,我是刑警寧澤,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布感局,位于F島的核電站尼啡,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏询微。R本人自食惡果不足惜崖瞭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望撑毛。 院中可真熱鬧书聚,春花似錦、人聲如沸藻雌。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蹦疑。三九已至西雀,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間歉摧,已是汗流浹背艇肴。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留叁温,地道東北人再悼。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像膝但,于是被迫代替她去往敵國(guó)和親冲九。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

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