Batch Normalization技巧自從2015年被谷歌提出以來逸尖,因其有效提升網(wǎng)絡(luò)訓(xùn)練效率古沥,獲得廣泛應(yīng)用與持續(xù)研究。然而娇跟,要透徹理解BN卻不容易岩齿,下圖是Kainming He在《Learning Deep Representations for Visual Recognition》報告中的一頁,只需要注意右下角的紅色描述苞俘。
圖 1. 右下角的紅色提示足見BN的費解. (來源: Learning Deep Representations for Visual Recognition)
?
大咖都會在BN上踩坑盹沈,可想而知,如果萌新接觸這個概念吃谣,更是不易乞封。因此《理解Batch Normalization系列》將對Batch Normalization做一個全面總結(jié)。
系列目錄
理解Batch Normalization系列1——原理
理解Batch Normalization系列2——訓(xùn)練及評估
理解Batch Normalization系列3——為什么有效及若干討論
理解Batch Normalization系列4——實踐
本文目錄
1 初始idea
2 原始神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)
3 BN的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)
4 BN的前向傳播
4.1 標準化
4.2 縮放平移
5 BN實現(xiàn)的效果
6 總結(jié)
參考文獻
1 初始idea
如果做神經(jīng)網(wǎng)絡(luò)訓(xùn)練前岗憋,對輸入的像素進行標準化處理肃晚,將有效降低模型的訓(xùn)練難度。受此啟發(fā)仔戈,作者想到关串,既然輸入層可以加標準化有好處,那么網(wǎng)絡(luò)里的隱層為什么不可以標準化监徘?
于是晋修,作者通過對每層加權(quán)和進行標準化,然后再通過縮放平移來“適度還原”凰盔。這樣墓卦,做到了既不過分破壞輸入信息,又抑制了各batch之間各位置點像素分布的劇烈變化帶來的學(xué)習(xí)難度户敬。
在原作中落剪,最主要的思想就是下面這個公式。(別擔(dān)心尿庐!只需要掃一眼即可著榴!)
? 圖 2. BN的核心思想. (來源: Batch Normalization Paper)
我們可以先繞開圖2,分以下三步理解屁倔。
- 先了解BN給神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)帶來了什么脑又。
- 然后理解BN是如何進行前向傳播。
- 理解BN是如何進行前向傳播
2 原始神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)
一個經(jīng)典的神經(jīng)網(wǎng)絡(luò)锐借,它的某一個隱層如圖3所示问麸。
? 圖 3. 經(jīng)典網(wǎng)絡(luò)的示意圖
為了和原始論文統(tǒng)一,將之前常見的加權(quán)和符號改用表示钞翔。即上一層輸出的激活值為 严卖,那么經(jīng)過本層加權(quán)和處理后布轿,獲得加權(quán)和哮笆,然后經(jīng)過本層激活后即輸出来颤。
(符號短缺,代表求激活稠肘,代表方差)
3 BN的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)
加入BN之后的網(wǎng)絡(luò)結(jié)構(gòu)如圖4所示福铅。
? 圖 4. 加入BN網(wǎng)絡(luò)的示意圖
很抱歉,為了容納更多的有效信息项阴,導(dǎo)致這個圖有點復(fù)雜滑黔。總體上來說环揽,對于本層的加權(quán)和略荡,BN先進行標準化求出,再進行縮放和平移求出 ,這個取代了原始的進行激活。
關(guān)鍵就是標準化歉胶、縮放平移這兩個環(huán)節(jié)汛兜。
4 BN的前向傳播
認識BN的困難在于維度太多了!大腦里至少能聯(lián)想到三個維度:batch_size維度(時間順序維度)通今、網(wǎng)絡(luò)層維度(結(jié)構(gòu)橫向維度)序无、向量維度(結(jié)構(gòu)縱向維度)。
所以衡创,當你了解圖4的結(jié)構(gòu)圖帝嗡,那么圖5里用一個究極簡明的例子,說明了BN到底在干啥璃氢,如果完全理解了圖5哟玷,后面關(guān)于標準化、縮放平移只需要掃一眼黑體字即可一也。
(如果圖中字符太小巢寡,請務(wù)必點擊原圖,放大后真的狠清晰)
? 圖 5. BN前向傳播示意圖
4.1 標準化
標準化即對一組數(shù)據(jù)中的每個數(shù)字椰苟,減均值再除以標準差(給方差開個根號)抑月,就可把一個該組數(shù)據(jù)轉(zhuǎn)換為一個均值為0方差為1的標準正態(tài)分布。
Batch Normalization的數(shù)據(jù)組的構(gòu)造方法:一個batch上所有m個樣本分別進行前向傳播時舆蝴,傳到這個隱層時所有m個的每個維度谦絮,分別構(gòu)成一個數(shù)據(jù)組。
在原始論文里洁仗,用下標B指的正是一個batch(也就是我們常說的mini-batch)层皱,包含m個樣本。這也就是為啥叫Batch Normalization的原因赠潦。
- 對這m個,在每一個維度上標量們叫胖,分別求均值和方差。
- 得到的均值和方差分別對應(yīng)該層的每個神經(jīng)元維度她奥。
只要我們求得均值和方差瓮增,就可以進行標準化了:
為避免分母為0的極端情況怎棱,工程上可以給分母增加一個非常小的小數(shù)(例如)。
4.2 縮放平移
由標準化公式可以反推出:
因此仿照這個公式绷跑,作者構(gòu)造了下面這個公式拳恋,即 scale and shift 公式
很直覺就能看出來, 是對 的縮放你踩, 是對的平移诅岩』淇啵可以增加可學(xué)習(xí)的參數(shù)带膜、,如果, 鸳谜,那么必然有 ,即我們就能夠完全地還原成功膝藕!我們可以通過反向傳播來訓(xùn)練這兩個參數(shù)(推導(dǎo)表明這是可以訓(xùn)練的),而至于 多大程度上接近 , 多大程度上接近 ,讓損失函數(shù)對它們計算出的梯度決定咐扭!注意芭挽,和都是向量。
因此蝗肪,
- 只要損失函數(shù)有需要袜爪,公式(3)賦予了它左右BN層還原程度的能力,而且上限是完全還原薛闪;
- 具體對每一層還原多少辛馆,則是由損失函數(shù)對每一層這兩個系數(shù)的梯度來決定;
- 損失通過梯度來控制還原的程度豁延,較好利于減少損失昙篙,就多還原;較少利于減少損失诱咏,就少還原苔可。
5 BN實現(xiàn)的效果
? 圖 6. BN的效果
BN實現(xiàn)的效果是:對于某一層來說,它的每個元素的數(shù)值袋狞,在一個batch上的分布是一個任意的未知分布焚辅,BN首先把它標準化為了一個標準正態(tài)分布。
這樣是否太暴力了苟鸯?如果所有輸入樣本被層層改分布法焰,相當于輸入信息都損失掉了,網(wǎng)絡(luò)是沒法訓(xùn)練的倔毙。
所以需要第二步對標準正態(tài)分布再進行一定程度的還原操作埃仪,即縮放平移。
最終使得這個數(shù)值分布陕赃,兼顧保留有效信息卵蛉、加速梯度訓(xùn)練颁股。
6 總結(jié)
介紹了Batch Normalization的結(jié)構(gòu)和前向傳播,總之傻丝,就是在加權(quán)和后甘有,加了一個標準化層、一個還原層葡缰。
標準化層亏掀,用來把一個batch_size上的該層該神經(jīng)元的數(shù)值進行標準正態(tài)分布(均值為0,方差為1)
還原層泛释,就是引入縮放系數(shù)滤愕、平移系數(shù),讓梯度決定還原程度怜校。
設(shè)想雖好间影,如何訓(xùn)練?請關(guān)注下一期《理解Batch Normalization系列2——訓(xù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
[7] https://panxiaoxie.cn/2018/07/28/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0-Batch-Normalization/
[8] https://www.tensorflow.org/api_docs/python/tf/layers/batch_normalization