0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

BN降低內(nèi)部協(xié)方差偏移是流言嗎?

zhKF_jqr_AI ? 來源:未知 ? 作者:李倩 ? 2018-10-21 09:08 ? 次閱讀

編者按:DRDO研究人員Ayoosh Kathuria深入介紹了批歸一化的概念,終結(jié)了廣泛流傳的批歸一化降低內(nèi)部協(xié)方差偏移的流言。

認出上面的人了嗎?這是探索頻道的《留言終結(jié)者》。

今天,我們也要分辨一下,批歸一化到底能不能解決內(nèi)部協(xié)方差偏移的問題?盡管批歸一化(Batch Normalization)提出已經(jīng)有一些年了,已經(jīng)成為深度架構(gòu)的主要部件,它仍然是深度學習中最容易誤解的概念之一。

批歸一化真的可以解決內(nèi)部協(xié)方差偏移問題?如果不能解決,那它的作用是什么?你所接受的整個深度學習教育是一個謊言嗎?讓我們來尋找答案吧!

開始之前……

我想提醒一下,本文是深度學習優(yōu)化算法系列的第四篇,前三篇文章討論了:

隨機梯度下降如何克服深度學習中的局部極小值和鞍點問題?

動量和Adam等方法如何加強原始梯度下降,以應對優(yōu)化曲面上的病態(tài)曲率問題?

如何使用不同的激活函數(shù)處理梯度消失問題?

上一篇文章中,我們學到的一點是,為了讓神經(jīng)網(wǎng)絡高效學習,傳入網(wǎng)絡層的輸入應該大致符合:

中心

不同batch和不同網(wǎng)絡層的數(shù)據(jù)分布,應保持一定程度上的一致

第二個條件的一種反例是epoch和epoch間的分布劇烈變動。

內(nèi)部協(xié)方差偏移

批歸一化的論文題為Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift(批歸一化:通過降低內(nèi)部協(xié)方差偏移加速深度網(wǎng)絡訓練),從標題就可以看出,這篇論文的假定是批歸一化可以解決內(nèi)部協(xié)方差偏移的問題。

那么,內(nèi)部協(xié)方差偏移,簡稱ICS,到底是什么?ICS指神經(jīng)網(wǎng)絡層間的輸入分布搖擺不定。內(nèi)部指這種搖擺不定發(fā)生在神經(jīng)網(wǎng)絡的中間層(視作網(wǎng)絡的內(nèi)部)。協(xié)方差指以權重為參數(shù)的分布在網(wǎng)絡層之間的差異。偏移指分布在改變。

讓我們嘗試描述下事情是怎么發(fā)生的。同樣,想象一個盡可能簡單的網(wǎng)絡,線性堆疊的神經(jīng)元,你可以通過用網(wǎng)絡層替換神經(jīng)元來擴展這一類比。

假設我們優(yōu)化上述網(wǎng)絡的損失函數(shù)L,那么神經(jīng)元d的權重ωd的更新規(guī)則為:

這里,zd= ωdzc,為神經(jīng)元d的激活值。因此,上式可以化簡為:

所以,我們看到,網(wǎng)絡層d的權重的梯度取決于網(wǎng)絡層c的輸出。神經(jīng)網(wǎng)絡中的每一層同理。神經(jīng)元的權重梯度取決于它的輸入,即后一層的輸出。

接著,梯度反向傳播,權重更新,這一過程不斷重復?,F(xiàn)在,讓我們回到網(wǎng)絡層d.

由于我們在d上進行了梯度更新,我們現(xiàn)在期望ωd能得到更低的損失。然而結(jié)果也許不符合我們的期望。為什么?讓我們仔細看下。

我們在迭代i時進行了初次更新,讓我們將此時c在迭代i的輸出分布記為pci?,F(xiàn)在,d的更新假定輸入為pci。

然而,在反向傳播階段,c的權重ωc也得到了更新。這導致c的輸出分布發(fā)生了偏移。

假設在下一次迭代i+1中,zc的分布偏移至pci+1。由于網(wǎng)絡層d的權重之前是根據(jù)pci更新的,但現(xiàn)在網(wǎng)絡層d面臨的輸入分布卻是pci+1。這一顯著差異可能導致網(wǎng)絡層生成的輸出損失不下降。

現(xiàn)在,我們有兩個問題。

為什么輸入分布偏移讓網(wǎng)絡層更難學習?

這個偏移是否大到足以導致上面描述的場景?

我們先回答第一個問題。

為什么內(nèi)部協(xié)方差偏移會成為問題?

神經(jīng)網(wǎng)絡所做的是生成輸入x到輸出y之間的映射f。為什么x的分布改變會造成問題?

例如,假設x從正態(tài)分布

變?yōu)榉钦龖B(tài)分布:

假設我們嘗試擬合的映射是f = 2x. 那x分布的密度向左偏移,還是均勻散布,又有什么區(qū)別?

然而,由于神經(jīng)網(wǎng)絡,更準確的說,現(xiàn)代的深度網(wǎng)絡是極為強大的曲線擬合器,這樣的分布偏移確實有影響。正像《蜘蛛俠》所言:“能力越大,責任越大?!?/p>

假設網(wǎng)絡層l面對的x有著如下圖所示的分布,并且,到目前為止,通過訓練,網(wǎng)絡層學習到的函數(shù)可以用下圖中的虛線表示。

現(xiàn)在,假設梯度更新后,下一個minibatch的x分布變化了:

注意到?jīng)]有?和之前相比,這一mini-batch的損失變大了。

讓我們回過頭去看原先的圖形。如你所見,我們原本學習的映射f在降低前一個mini-batch的損失方面做的不錯。同樣,還有許多其他函數(shù)在這方面的表現(xiàn)也不錯。

如果我們當初選擇的是紅色虛線,那么下一mini-batch的損失也不會大。

很明顯,現(xiàn)在我們需要回答的問題是如何修改算法,使得我們最終學習到紅色虛線而不是黑色虛線?簡單的回答是,這個問題不存在簡單的答案。在這一點上,與其嘗試找到解決這類情況的方案,不如集中精力避免這類情況發(fā)生。

ICS最終擾亂學習的原因是神經(jīng)網(wǎng)絡總是在輸入分布的稠密區(qū)表現(xiàn)較好。稠密區(qū)的數(shù)據(jù)點的損失下降得更多,因為稠密區(qū)的數(shù)據(jù)點統(tǒng)治了平均損失,而我們試圖最小化的正是平均損失。

然而,如果在訓練期間ICS最終改變了后續(xù)batch的輸入分布的稠密區(qū),那么網(wǎng)絡從之前的迭代中學到的權重就不再是最優(yōu)的了。這大概需要非常小心地調(diào)整超參數(shù)才能合理地學習。這解釋了為什么ICS可能造成問題。

當然,mini-batch內(nèi)部還是要有適當差異的。差異可以確保映射沒有過度擬合輸入分布的單個區(qū)域。另外,我們也想要輸入的均值在零左右,原因詳見本系列的上一篇文章。

歸一化輸入

應對這一問題的一種方法是歸一化神經(jīng)網(wǎng)絡的輸入,使輸入分布均值為零,方差為單位方差。然而,只有當網(wǎng)絡不夠深的時候這個方法才有效果。當網(wǎng)絡變得越來越深,例如,20層以上,即使輸入經(jīng)過了歸一化,20多層權重的微小波動可能造成深層輸入分布的巨大改變。

一個不太正確的類比是語言的變化。隨著我們旅行距離的增加,語言也發(fā)生了變化。然而,距離較近的地方,語言有很多相似性。比如,西班牙語和葡萄牙語。這兩種語言都源自原始印歐語。然而,8000公里之外的印度人說的印度斯坦語,同樣源自原始印歐語,和西班牙的差別卻遠大于西班牙語和葡萄牙語的差別。原因是短距離內(nèi)的微小變動隨著距離的增加而逐漸放大。深度網(wǎng)絡同理。

進入批歸一化

現(xiàn)在我們介紹批歸一化(BN)的概念,BN歸一化網(wǎng)絡層的激活輸出,同時進行了其他一些操作。

上面的公式描述了批歸一化層做了什么。等式2-4描述了mini-batch間的激活的均值、方差是如何計算的,以及通過減去均值除以標準差歸一化分布。

等式5是關鍵部分。γ和β是所謂的批歸一化層的參數(shù),等式5的輸出均值為β,標準差為γ。從效果上說,批歸一化層有助于優(yōu)化算法控制網(wǎng)絡層輸出的均值和方差。

ICS袪魅

引入批歸一化的論文將批歸一化的成功歸功于擺脫了內(nèi)部協(xié)方差偏移。然而,這是一個荒謬的陳述,批歸一化根本沒有防止ICS。

內(nèi)部協(xié)方差偏移是指網(wǎng)絡訓練過程中輸入分布的改變。批歸一化的參數(shù)γ和β是為了調(diào)整激活的均值和方差。然而,這意味著這兩個參數(shù)是可訓練的,也就是是說,將隨著訓練的進行而改變,那么批歸一化自身就會導致激活分布的改變,也就是內(nèi)部協(xié)方差偏移。如果它防止了內(nèi)部協(xié)方差偏移,參數(shù)γ和β毫無意義。

為何批歸一化有效?

既然批歸一化沒能克服內(nèi)部協(xié)方差偏移,那么批歸一化是怎么起效的呢?

GAN之父Ian Goodfellow曾經(jīng)在一個講座中提出過一種可能的解釋(講座的網(wǎng)址見文末)。我必須提醒你注意,到目前為止,盡管來自深度學習的權威,這仍然只是一項未經(jīng)證明的猜測。

Goodfellow認為原因在于批歸一化層的兩個參數(shù)。

讓我們再次考慮之前的超級簡單的玩具網(wǎng)絡。

這里,當我們更新a的權重的時候,僅僅計算?L/?a,即損失函數(shù)在a上的反應。然而,我們沒有考慮改變a的權重同時也將改變后續(xù)層b、c、d的輸出。

這實際上是因為算力限制,我們無法利用二階以上的優(yōu)化方法。梯度下降及其變體只能捕捉一階交互(我們在本系列的第二篇文章中深入討論了這一點)。

深度神經(jīng)網(wǎng)絡具有高階交互,這意味著改變某一層的權重也許會在損失函數(shù)之外影響其他層的統(tǒng)計特征。如果不考慮這樣的跨層交互,就會產(chǎn)生內(nèi)部協(xié)方差偏移。每次更新一個網(wǎng)絡層的權重,都有可能對之后的網(wǎng)絡層的統(tǒng)計特征造成不利影響。

在這樣的情形下,可能需要精心的初始化、超參數(shù)調(diào)整、長時間的訓練才能收斂。然而,當我們在層間添加批歸一化層之后,網(wǎng)絡層的統(tǒng)計特征只受γ、β這兩個參數(shù)的影響。

現(xiàn)在,優(yōu)化算法只需調(diào)整兩個參數(shù)即可控制任意層的統(tǒng)計特征,而不需要調(diào)整之前層的所有權重。這大大加速了收斂,并免去了精心初始化和超參數(shù)調(diào)整的需要。因此,批歸一化更多地起到設置檢查點的作用。

注意,具備任意設定網(wǎng)絡層的均值和標準差的能力同時意味著我們可以恢復原分布,如果恢復原分布足以使訓練正常的話。

在激活前還是激活后進行批歸一化

盡管原始論文在激活函數(shù)之前應用批歸一化,在實踐中發(fā)現(xiàn)在激活之后應用批歸一化能得到更好的結(jié)果。這看起來很有道理,因為如果我們在批歸一化之后放置激活,那么由于批歸一化層的輸出還需要經(jīng)過激活,批歸一化就無法完全控制下一層的輸入。

推理階段的批歸一化

在推理階段使用批歸一化有一定技巧性。這是因為在推理階段我們不一定有批次可言。例如,進行實時目標檢測時,每次只處理一幀,并不存在批次。

而沒有批次,我們就無法計算均值和方差,也就無法得到批歸一化層的輸出。在這一情形下,我們維持一個訓練階段的均值、方差的移動平均,然后在推理階段使用這一移動平均。這是大多數(shù)自帶批歸一化層的深度學習庫的做法。

這一做法的依據(jù)是大數(shù)定律。在樣本足夠的的情況下,批統(tǒng)計量趨向于收斂至真實統(tǒng)計量。移動平均也有助于消除mini batch自帶的噪聲。

如果測試階段可以使用批次,那么我們使用和上文提到的幾乎一模一樣的公式,只有一處例外。我們不使用

而使用如下公式:

為何分母使用m-1而不是m是因為均值已經(jīng)是我們估計的,mini batch中只有m-1個項獨立觀測了。用術語來說,就是自由度只有m-1,具體細節(jié)的討論超出了本文的范圍。

起正則作用的批歸一化

批歸一化同時也起到了正則化的作用。相比真實均值和方差,為每個批次估計的均值和方差是一個加噪的版本,這給優(yōu)化搜索過程引入了隨機性,從而起到了正則化的作用。

結(jié)語

盡管批歸一化已經(jīng)成為當今深度架構(gòu)的標準元素,直到最近研究方向才轉(zhuǎn)向理解批歸一化到底為何有效。最近受到很多關注的一篇論文,直接以How Does Batch Normalization Help Optimization? (No, It Is Not About Internal Covariate Shift)為題(批歸一化如何幫助優(yōu)化?不,它和內(nèi)部協(xié)方差偏移無關)。這篇論文揭示了,和沒有使用批歸一化的網(wǎng)絡相比,批歸一化實際上增加了內(nèi)部協(xié)方差。論文的主要洞見在于,批歸一化平滑了損失曲面,所以批歸一化才這么有效。2017年,有人提出了SELU(擴展指數(shù)線性激活單元)激活函數(shù),隱式地歸一化其激活(批歸一化顯式地進行了這一點)。SELU的原論文包含100頁數(shù)學精確說明這一切是如何發(fā)生的,偏愛數(shù)學的讀者應該讀一下。

優(yōu)化是深度學習中一個激動人心的領域。這些年來,許多深度學習應用得到了加強,已經(jīng)可以實用,但直到最近我們才開始探索誘人的深度學習理論部分。

最后,讓我們說……流言終結(jié)!

進一步閱讀

批歸一化論文:https://arxiv.org/abs/1502.03167

How Does Batch Normalization Help Optimization? (No, It Is Not About Internal Covariate Shift): https://arxiv.org/abs/1805.11604

擴展指數(shù)線性激活單元論文:https://arxiv.org/abs/1706.02515

Ian Goodfellow關于批歸一化的講座:https://youtu.be/Xogn6veSyxA

Reddit上關于把批歸一化放在ReLU前面還是后面的討論:https://www.reddit.com/comments/67gonq/

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴

原文標題:優(yōu)化算法入門:四、批歸一化揭秘

文章出處:【微信號:jqr_AI,微信公眾號:論智】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Matlab協(xié)方差矩陣的計算原理

    c為求得的協(xié)方差矩陣,在matlab以矩陣a的每一列為變量,對應的每一行為樣本。這樣在矩陣a中就有3個列變量分別為a(:,1), a(:,2), a(:,3)。 在協(xié)方差矩陣c中,每一個元素c(i
    發(fā)表于 03-08 10:21

    Matlab協(xié)方差矩陣的計算原理

    為求得的協(xié)方差矩陣,在matlab以矩陣a的每一列為變量,對應的每一行為樣本。這樣在矩陣a中就有3個列變量分別為a(:,1), a(:,2), a(:,3)。 在協(xié)方差矩陣c中,每一個元素c(i,j
    發(fā)表于 05-07 09:36

    求一種復數(shù)浮點協(xié)方差矩陣的實現(xiàn)方案

    本文介紹了一種基于FPGA的復數(shù)浮點協(xié)方差矩陣實現(xiàn)方案。
    發(fā)表于 04-29 06:01

    基于協(xié)方差矩陣特征分解的多通道SAR-GMTI方法及性能分析

    該文提出了一種基于協(xié)方差矩陣特征分解的多通道運動目標檢測和測速定位方法,該方法依據(jù)多通道SAR數(shù)據(jù)協(xié)方差矩陣特征分解后小特征值和的幅度變化來檢測運動目標。在檢測出
    發(fā)表于 11-24 14:56 ?12次下載

    基于雜波協(xié)方差矩陣特征向量分析STAP降維方法

    基于雜波協(xié)方差矩陣特征向量分析STAP降維方法 本文在對雜波協(xié)方差矩陣的特征值、陣特征向量做出分析的基礎上,討論了無信噪比損失的降維的充
    發(fā)表于 10-21 08:51 ?1644次閱讀
    基于雜波<b class='flag-5'>協(xié)方差</b>矩陣特征向量分析STAP降維方法

    基于復數(shù)浮點運算的協(xié)方差矩陣的FPGA實現(xiàn)

      O 引言   協(xié)方差矩陣的計算是信號處理領域的典型運算,是實現(xiàn)多級嵌套維納濾波器、空間譜估
    發(fā)表于 10-08 17:41 ?2680次閱讀
    基于復數(shù)浮點運算的<b class='flag-5'>協(xié)方差</b>矩陣的FPGA實現(xiàn)

    基于稀疏干擾協(xié)方差矩陣重構(gòu)的穩(wěn)健自適應波束形成算法(CAPON譜改正)

    上述問題,設計一種基于稀疏干擾協(xié)方差矩陣重構(gòu)的穩(wěn)健自適應波束形成算法,通過設置方向波動參數(shù)對Capon譜估計結(jié)果進行修正,利用接收數(shù)據(jù)矩陣特征值和干擾信號的空域稀疏性,僅在修正后的干擾方向范圍內(nèi)進行重構(gòu),從而降低計算量。理論分析
    發(fā)表于 11-03 11:26 ?14次下載
    基于稀疏干擾<b class='flag-5'>協(xié)方差</b>矩陣重構(gòu)的穩(wěn)健自適應波束形成算法(CAPON譜改正)

    協(xié)方差公式_協(xié)方差的計算公式例子

    協(xié)方差(Covariance)在概率論和統(tǒng)計學中用于衡量兩個變量的總體誤差。而方差協(xié)方差的一種特殊情況,即當兩個變量是相同的情況。協(xié)方差表示的是兩個變量的總體的誤差,這與只表示一個變
    發(fā)表于 11-29 15:05 ?24.4w次閱讀
    <b class='flag-5'>協(xié)方差</b>公式_<b class='flag-5'>協(xié)方差</b>的計算公式例子

    協(xié)方差矩陣是什么_協(xié)方差矩陣計算公式_如何計算協(xié)方差矩陣

    在統(tǒng)計學與概率論中,協(xié)方差矩陣的每個元素是各個向量元素之間的協(xié)方差,是從標量隨機變量到高維度隨機向量的自然推廣。
    發(fā)表于 12-05 15:58 ?25.8w次閱讀
    <b class='flag-5'>協(xié)方差</b>矩陣是什么_<b class='flag-5'>協(xié)方差</b>矩陣計算公式_如何計算<b class='flag-5'>協(xié)方差</b>矩陣

    基于協(xié)方差矩陣降維稀疏表示的二維波達方向估計方法

    到一維空間,降低了字典的長度和求解復雜度,并且能自動實現(xiàn)俯仰角和方位角配對;其次改進了樣本協(xié)方差矩陣的稀疏表示模型,對該模型進行了降維處理;然后由協(xié)方差矩陣稀疏重構(gòu)的殘差約束特性得到約束殘差項置信區(qū)間,避免采用正
    發(fā)表于 12-14 10:22 ?1次下載
    基于<b class='flag-5'>協(xié)方差</b>矩陣降維稀疏表示的二維波達方向估計方法

    基于鄰域差分和協(xié)方差信息處理單目標優(yōu)化的進化算法

    復雜的單目標優(yōu)化問題是進化計算領域的一個研究熱點問題.已有差分進化和協(xié)方差進化被認為是處理該問題的較有效的方法,其中差分信息類似于梯度可以有效的指導算法朝著最優(yōu)解方向搜索,而協(xié)方差則是基于統(tǒng)計的方式
    發(fā)表于 12-14 15:18 ?0次下載

    協(xié)方差公式

    協(xié)方差公式 協(xié)方差就是投資組合中每種金融資產(chǎn)的可能收益與其期望收益之間的離差之積再乘以相應情況出現(xiàn)的概率后進行相加,所得總和就是該投資組合的協(xié)方差。 協(xié)方差的計算公式可以分為三個步驟:
    的頭像 發(fā)表于 06-21 21:12 ?1.6w次閱讀

    協(xié)方差矩陣和相關系數(shù)矩陣的轉(zhuǎn)化

    協(xié)方差矩陣和相關系數(shù)矩陣是統(tǒng)計學中常用的概念,在多變量統(tǒng)計分析中起著至關重要的作用。 在進行多變量統(tǒng)計分析時,我們通常會涉及多個變量之間的關系和相互作用。協(xié)方差矩陣和相關系數(shù)矩陣就是用來描述這些變量
    的頭像 發(fā)表于 01-12 11:02 ?1581次閱讀

    協(xié)方差矩陣怎么算 協(xié)方差矩陣和方差的關系

    協(xié)方差矩陣是一種反映多個隨機變量之間相關程度的矩陣。在統(tǒng)計學和金融學中,協(xié)方差矩陣是一種常用的工具,用于分析不同隨機變量之間的關聯(lián)性和方差。 為了理解協(xié)方差矩陣的計算方法,首先需要了解
    的頭像 發(fā)表于 01-30 10:39 ?3797次閱讀

    協(xié)方差矩陣中各元素含義 協(xié)方差矩陣怎么算

    協(xié)方差矩陣是統(tǒng)計學中常用的工具,用于描述多個隨機變量之間的關系。在進行數(shù)據(jù)分析和建模時,協(xié)方差矩陣能夠提供重要的信息,幫助我們理解變量之間的線性關系,以及它們的方差。本文將詳細介紹協(xié)方差
    的頭像 發(fā)表于 02-04 11:06 ?2794次閱讀