2020-11-29 Bathch Normalization

今天主要想寫一下DeepLearning 中BatchNorm奠货,文章主要主要的大綱為:

  • BN 什么
  • 為什么提出BN
  • BN 的具體細節(jié)是什么
  • BN 的改進
  • BN數(shù)學表達式
  • BN的訓練和預測
  • 總結(jié)

BN 是什么

BN 是Batch Normalization 的縮寫优烧,是近年來DN的重要成果搅荞。如果想說BN是什么必須要先提一下機器學習中重要的IID假設: IID 獨立同分布假設,假設的具體含義為:訓練數(shù)據(jù)和測試數(shù)據(jù)是滿足了相同的分布嫡丙,這樣通過訓練數(shù)據(jù)獲得的模型在測試集才能獲得很好的效果夫晌。BN 就是在深層神經(jīng)網(wǎng)絡中使得每一層的輸入都保持相同的分布。

為什么提出BN

回答這個問題必須先要回答為什么對于深層神經(jīng)網(wǎng)絡難以訓練?胶哲。在DL領(lǐng)域中有很多方法都是為了解決這個問題比如:更換激活函數(shù)憎蛤、RestNet等等。
首先纪吮,先解釋一下 Internal Covariate Shift 問題

Internal Covariate Shift

引用BN 作者說法俩檬,Mini-batch SGD 相比于 One Example SGD有兩大有點:

  1. 可以更加把梯度計算的更加準確,這個從訓練時反應就可以看出
  2. 可以使用并行計算碾盟,加快訓練速度

但是 SGD 存在著一個問題棚辽,那就是其超參數(shù)很難調(diào)整。
是什么倒是原因?qū)е铝藢W習效率差呢冰肴?假設在ML系統(tǒng)中有一組輸入數(shù)據(jù)<X,Y>屈藐,如果其輸入X 的特征分組總是變化,這樣就不滿足開頭說的IID假設了熙尉,這就會導致網(wǎng)絡非常不穩(wěn)定联逻。在深度學習模型中,當有很多隱藏層時检痰,各個隱藏測分布就會不斷發(fā)生變化包归,這就是所謂的“Internal Covariate Shift"。Internal 就是針對隱藏層而言铅歼。

BN的提出

正是有Internal Covariate Shift 問題公壤,能不能讓每一層激活函數(shù)的輸入分布固定下來呢?
其實在CV領(lǐng)域就給出了答案椎椰,在CV中為了使輸入數(shù)據(jù)分布固定在均值為0 厦幅,方差為1 的標準正態(tài)分布,就采用了所謂的白化(Whiten)操作慨飘。BN的靈感也就來源與此确憨。
BN其實就神經(jīng)網(wǎng)絡中每一層都進行了白化操作,具體來說BN就是:對深層神經(jīng)網(wǎng)絡的每一個隱藏層在進行激活函數(shù)之前都把輸入強制撈回到均值為0瓤的,方差為1 的正態(tài)分布休弃。這樣經(jīng)過BN后每一層的輸入都會保持了相同的分布。也就解決了Internal Covariate Shift 問題堤瘤。

BN 的具體細節(jié)是什么

BN的操作非常直觀玫芦,因為在深層網(wǎng)絡在做非線性激活函數(shù)的輸入浆熔,隨著網(wǎng)絡深度的加大本辐,其分布逐漸發(fā)生便宜桥帆。DL訓練慢,一般情況下其整體分布逐漸向非線性函數(shù)取值區(qū)間的上下域靠近慎皱。這樣就導致了梯度消失(這才是DL收斂速度慢的根本原因)老虫。

BN就是通過一定的規(guī)范化手段,把每層神經(jīng)網(wǎng)絡任意神經(jīng)元輸入值的強行拉回標準正態(tài)分布茫多。在這里就需要詳細的說明一下了祈匙。

進行BN的時機是什么時候?

正如前文所述天揖,之所以要進行BN操作夺欲,是為了使得每個隱藏層中每個神經(jīng)元都具有相同的分布,滿足IID假設今膊。所以我們在進行時機也就比較清楚了些阅,就是在非線性變換之前。比如某個神經(jīng)元計算公式為:y = f(WX+B) 斑唬,并非對X 進行BN操作市埋,而是對WX+B 的結(jié)果進行BN,即:y = f(BN(WX+B))恕刘。

BN操作后有什么實質(zhì)作用

現(xiàn)在他們通過BN把激活函數(shù)的輸入強制為均值為0 缤谎,方差為1 的正態(tài)分布了。但是這樣的操作會產(chǎn)生什么樣的效果褐着,有為什么會有這樣的效果呢坷澡?
先回答第一個問題:如果我們把激活函數(shù)的輸入強制為標準正態(tài)分布,直接解決了 Internal Covariate Shift 問題含蓉,還解決了深度神經(jīng)網(wǎng)絡的梯度消失問題洋访,提高網(wǎng)絡訓練效率。
正所謂知其然還要知其所以然谴餐,為什么會有這樣的效果呢姻政?
我們先做這樣的假設,假設網(wǎng)絡中某個神經(jīng)元采用的Sigmod激活函數(shù)岂嗓,熟悉DL的同學都很清楚汁展,Sigmod 函數(shù)和梯度的公式如下:
\begin{align} sigmod =f(x)&= \frac{1}{1+ e^{-x}} \\ sigmod' &= \frac{f(x)}{1-f(x)} \end{align}
Sigmod 和對應導數(shù)圖形如下圖:

Sigmod

Sigmod 導數(shù)

從上面圖形可以觀察到如下結(jié)論

  1. 從Sigmod 圖形得到,Sigmod 取值范圍為[0,1]
  2. Sigmod 導數(shù)圖形得到厌殉,Sigmod 值在0.5時食绿,導數(shù)取得最大值
  3. Sigmod 在兩個端點時(0,1),對應導數(shù)值幾乎為0
    也就是說對于Sigmod 函數(shù)公罕,當X在[-2,2]之間學習效率是最好的器紧,此時對應的梯度非常大。X有輕微的變化楼眷,就會存在很大的梯度

如果此時非線性函數(shù)輸入分布為N(-6,1) 時铲汪,則95%的值會落在[-8,-4]熊尉,這些值的梯度幾乎為0,也就是說參數(shù)幾乎不會發(fā)生變化掌腰,而如果我們把輸入分布強制設置為N(0,1)時狰住,此時95% 數(shù)值都會落在[-2,2]之間齿梁。此時梯度是很大的催植。
所以,經(jīng)過BN操作之后勺择,就避免了DL 中梯度消失問題创南,加快了收斂速度。

改進BN

通過上文我們知道了省核,經(jīng)過BN后把大部分輸入都落在激活函數(shù)的線性區(qū)域內(nèi)扰藕,讓他們具有了很大的梯度,提高了收斂速度芳撒。
但是邓深,我們知道如果把所有輸入都經(jīng)過線性變換,不管網(wǎng)絡有多深笔刹,其實仍然是一個線性模型芥备。這樣整個網(wǎng)絡的表達能力就下降了。所以BN為了保持非線性表達特點舌菜,在BN操作后萌壳,做了Scale和Shift 操作。具體作為如下公式:
\hat{y} = \gamma \hat{x} + \beta
公式中:\hat{x} 表示經(jīng)過BN操作后的結(jié)果日月,\gamma進行了簡單變換而 \beta 則對結(jié)果進行了平移袱瓮。參數(shù)\gamma,\beta都是需要學習的參數(shù)爱咬。

BN數(shù)學表達式

說了這么多尺借,BN的數(shù)學表達式應該是什么樣呢?其實這對學過概率論的同學都是非常簡單的精拟。BN其實就是一個歸一化操作
\hat{x}^{(k)} = \frac{x^{(k)}-E[x^{(k)}]}{\sqrt{VAR(x^{(k)})}}
經(jīng)過調(diào)整后的BN為:
\hat{y}^k = \gamma^k \hat{x} + \beta^k

BN的訓練和預測

BN的訓練過程還是比較清洗的

1. 計算每一個Batch 的均值和方差
2. 將每個一個輸入(非線性的輸入)x 燎斩,進行歸一化運算
3. 對每個歸一化的 x 進行調(diào)整

從訓練的流程看,BN是需要計算當前批次數(shù)據(jù)的均值與方差蜂绎,但是在預測階段可能只有一個數(shù)值栅表,如何計算均值與方差呢? 其實BN在預測階段师枣,是將訓練時每個Mini-Batch的\gamma , \beta 記住怪瓶,之后求他們最終的數(shù)學期望。

總結(jié)

  1. BN 解決 Internal Covariate Shift 問題
  2. BN 解決了梯度消失問題践美,加快了收斂速度
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末洗贰,一起剝皮案震驚了整個濱河市找岖,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌哆姻,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件玫膀,死亡現(xiàn)場離奇詭異矛缨,居然都是意外死亡,警方通過查閱死者的電腦和手機帖旨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門箕昭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人解阅,你說我怎么就攤上這事落竹。” “怎么了货抄?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵述召,是天一觀的道長。 經(jīng)常有香客問我蟹地,道長积暖,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任怪与,我火速辦了婚禮夺刑,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘分别。我一直安慰自己遍愿,他們只是感情好,可當我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布耘斩。 她就那樣靜靜地躺著沼填,像睡著了一般。 火紅的嫁衣襯著肌膚如雪括授。 梳的紋絲不亂的頭發(fā)上倾哺,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天,我揣著相機與錄音刽脖,去河邊找鬼羞海。 笑死,一個胖子當著我的面吹牛曲管,可吹牛的內(nèi)容都是我干的却邓。 我是一名探鬼主播,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼院水,長吁一口氣:“原來是場噩夢啊……” “哼腊徙!你這毒婦竟也來了简十?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤撬腾,失蹤者是張志新(化名)和其女友劉穎螟蝙,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體民傻,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡胰默,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了漓踢。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片牵署。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖喧半,靈堂內(nèi)的尸體忽然破棺而出奴迅,到底是詐尸還是另有隱情,我是刑警寧澤挺据,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布取具,位于F島的核電站,受9級特大地震影響扁耐,放射性物質(zhì)發(fā)生泄漏者填。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一做葵、第九天 我趴在偏房一處隱蔽的房頂上張望占哟。 院中可真熱鬧,春花似錦酿矢、人聲如沸榨乎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蜜暑。三九已至,卻和暖如春策肝,著一層夾襖步出監(jiān)牢的瞬間肛捍,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工之众, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留拙毫,地道東北人。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓棺禾,卻偏偏與公主長得像缀蹄,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,884評論 2 354

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