日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人工智能 > pytorch >内容正文

pytorch

【深度学习】Batch Normalization(BN)超详细解析

發(fā)布時(shí)間:2025/3/8 pytorch 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【深度学习】Batch Normalization(BN)超详细解析 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

單層視角

神經(jīng)網(wǎng)絡(luò)可以看成是上圖形式,對(duì)于中間的某一層,其前面的層可以看成是對(duì)輸入的處理,后面的層可以看成是損失函數(shù)。一次反向傳播過(guò)程會(huì)同時(shí)更新所有層的權(quán)重W1,W2,…,WL,前面層權(quán)重的更新會(huì)改變當(dāng)前層輸入的分布,而跟據(jù)反向傳播的計(jì)算方式,我們知道,對(duì)Wk的更新是在假定其輸入不變的情況下進(jìn)行的。如果假定第k層的輸入節(jié)點(diǎn)只有2個(gè),對(duì)第k層的某個(gè)輸出節(jié)點(diǎn)而言,相當(dāng)于一個(gè)線性模型y=w1x1+w2x2+b,如下圖所示,假定當(dāng)前輸入x1和x2的分布如圖中圓點(diǎn)所示,本次更新的方向是將直線H1更新成H2,本以為切分得不錯(cuò),但是當(dāng)前面層的權(quán)重更新完畢,當(dāng)前層輸入的分布換成了另外一番樣子,直線相對(duì)輸入分布的位置可能變成了H3,下一次更新又要根據(jù)新的分布重新調(diào)整。直線調(diào)整了位置,輸入分布又在發(fā)生變化,直線再調(diào)整位置,就像是直線和分布之間的“追逐游戲”。對(duì)于淺層模型,比如SVM,輸入特征的分布是固定的,即使拆分成不同的batch,每個(gè)batch的統(tǒng)計(jì)特性也是相近的,因此只需調(diào)整直線位置來(lái)適應(yīng)輸入分布,顯然要容易得多。而深層模型,每層輸入的分布和權(quán)重在同時(shí)變化,訓(xùn)練相對(duì)困難。

多層視角

上面是從網(wǎng)絡(luò)中單拿出一層分析,下面看一下多層的情況。在反向傳播過(guò)程中,每層權(quán)重的更新是在假定其他權(quán)重不變的情況下,向損失函數(shù)降低的方向調(diào)整自己。問(wèn)題在于,在一次反向傳播過(guò)程中,所有的權(quán)重會(huì)同時(shí)更新,導(dǎo)致層間配合“缺乏默契”,每層都在進(jìn)行上節(jié)所說(shuō)的“追逐游戲”,而且層數(shù)越多,相互配合越困難,文中把這個(gè)現(xiàn)象稱之為 Internal Covariate Shift,示意圖如下。為了避免過(guò)于震蕩,學(xué)習(xí)率不得不設(shè)置得足夠小,足夠小就意味著學(xué)習(xí)緩慢。

為此,希望對(duì)每層輸入的分布有所控制,于是就有了Batch Normalization,其出發(fā)點(diǎn)是對(duì)每層的輸入做Normalization,只有一個(gè)數(shù)據(jù)是談不上Normalization的,所以是對(duì)一個(gè)batch的數(shù)據(jù)進(jìn)行Normalization。

Batch Normalization原理

Batch Normalization,簡(jiǎn)稱BatchNorm或BN,翻譯為“批歸一化”,是神經(jīng)網(wǎng)絡(luò)中一種特殊的層,如今已是各種流行網(wǎng)絡(luò)的標(biāo)配。在原paper中,BN被建議插入在(每個(gè))ReLU激活層前面,如下所示,如果batch size為m,則在前向傳播過(guò)程中,網(wǎng)絡(luò)中每個(gè)節(jié)點(diǎn)都有m個(gè)輸出,所謂的Batch Normalization,就是對(duì)該層每個(gè)節(jié)點(diǎn)的這m個(gè)輸出進(jìn)行歸一化再輸出.

我們?cè)趫D像預(yù)處理過(guò)程中通常會(huì)對(duì)圖像進(jìn)行標(biāo)準(zhǔn)化處理,這樣能夠加速網(wǎng)絡(luò)的收斂,如下圖所示,對(duì)于Conv1來(lái)說(shuō)輸入的就是滿足某一分布的特征矩陣,但對(duì)于Conv2而言輸入的feature map就不一定滿足某一分布規(guī)律了**(注意這里所說(shuō)滿足某一分布規(guī)律并不是指某一個(gè)feature map的數(shù)據(jù)要滿足分布規(guī)律,理論上是指整個(gè)訓(xùn)練樣本集所對(duì)應(yīng)feature map的數(shù)據(jù)要滿足分布規(guī)律)**。而我們Batch Normalization的目的就是使我們的feature map滿足均值為0,方差為1的分布規(guī)律。下面是從原論文中截取的原話,注意標(biāo)黃的部分:“對(duì)于一個(gè)擁有d維的輸入x,我們將對(duì)它的每一個(gè)維度進(jìn)行標(biāo)準(zhǔn)化處理?!??假設(shè)我們輸入的x是RGB三通道的彩色圖像,那么這里的d就是輸入圖像的channels即d=3,,其中就代表我們的R通道所對(duì)應(yīng)的特征矩陣,依此類推。標(biāo)準(zhǔn)化處理也就是分別對(duì)我們的R通道,G通道,B通道進(jìn)行處理。上面的公式不用看,原文提供了更加詳細(xì)的計(jì)算公式:其操作可以分成2步,

  • Standardization:首先對(duì)m個(gè)x進(jìn)行 Standardization,得到 zero mean unit variance的分布x^。

  • scale and shift:然后再對(duì)x^進(jìn)行scale and shift,縮放并平移到新的分布y,具有新的均值β方差γ。

  • 假設(shè)BN層有d個(gè)輸入節(jié)點(diǎn),則x可構(gòu)成d×m大小的矩陣X,BN層相當(dāng)于通過(guò)行操作將其映射為另一個(gè)d×m大小的矩陣Y,如下所示,

    將2個(gè)過(guò)程寫在一個(gè)公式里如下其中,x(b)i表示輸入當(dāng)前batch的b-th樣本時(shí)該層i-th輸入節(jié)點(diǎn)的值,xi為[x(1)i,x(2)i,…,x(m)i]構(gòu)成的行向量,長(zhǎng)度為batch size m,μ和σ為該行的均值和標(biāo)準(zhǔn)差,?為防止除零引入的極小量(可忽略),γ和β為該行的scale和shift參數(shù),可知

    • μ和σ為當(dāng)前行的統(tǒng)計(jì)量,不可學(xué)習(xí)。

    • γ和β為待學(xué)習(xí)的scale和shift參數(shù),用于控制yi的方差和均值

    • BN層中,xi和xj之間不存在信息交流(i≠j)

    可見(jiàn),無(wú)論xi原本的均值和方差是多少,通過(guò)BatchNorm后其均值和方差分別變?yōu)榇龑W(xué)習(xí)的β和γ。

    Batch Normalization的反向傳播

    對(duì)于目前的神經(jīng)網(wǎng)絡(luò)計(jì)算框架,一個(gè)層要想加入到網(wǎng)絡(luò)中,要保證其是可微的,即可以求梯度。BatchNorm的梯度該如何求取?

    反向傳播求梯度只需抓住一個(gè)關(guān)鍵點(diǎn),如果一個(gè)變量對(duì)另一個(gè)變量有影響,那么他們之間就存在偏導(dǎo)數(shù),找到直接相關(guān)的變量,再配合鏈?zhǔn)椒▌t,公式就很容易寫出了。根據(jù)反向傳播的順序,首先求取損失?對(duì)BN層輸出yi的偏導(dǎo)?? / ?yi,然后是對(duì)可學(xué)習(xí)參數(shù)的偏導(dǎo)?? / ?γ和?? / ?β,用于對(duì)參數(shù)進(jìn)行更新,想繼續(xù)回傳的話還需要求對(duì)輸入 x偏導(dǎo),于是引出對(duì)變量μ、σ2和x^的偏導(dǎo),根據(jù)鏈?zhǔn)椒▌t再求這些變量對(duì)x的偏導(dǎo)。

    Batch Normalization的預(yù)測(cè)階段

    在預(yù)測(cè)階段,所有參數(shù)的取值是固定的,對(duì)BN層而言,意味著μ、σ、γ、β都是固定值。

    γ和β比較好理解,隨著訓(xùn)練結(jié)束,兩者最終收斂,預(yù)測(cè)階段使用訓(xùn)練結(jié)束時(shí)的值即可。

    對(duì)于μ和σ,在訓(xùn)練階段,它們?yōu)楫?dāng)前mini batch的統(tǒng)計(jì)量,隨著輸入batch的不同,μ和σ一直在變化。在預(yù)測(cè)階段,輸入數(shù)據(jù)可能只有1條,該使用哪個(gè)μ和σ,或者說(shuō),每個(gè)BN層的μ和σ該如何取值?可以采用訓(xùn)練收斂最后幾批mini batch的 μ和σ的期望,作為預(yù)測(cè)階段的μ和σ,如下所示,因?yàn)镾tandardization和scale and shift均為線性變換,在預(yù)測(cè)階段所有參數(shù)均固定的情況下,參數(shù)可以合并成y=kx+b的形式,如上圖中行號(hào)11所示。

    Batch Normalization的作用

    使用Batch Normalization,可以獲得如下好處,

    • 可以使用更大的學(xué)習(xí)率,訓(xùn)練過(guò)程更加穩(wěn)定,極大提高了訓(xùn)練速度。

    • 可以將bias置為0,因?yàn)锽atch Normalization的Standardization過(guò)程會(huì)移除直流分量,所以不再需要bias。

    • 對(duì)權(quán)重初始化不再敏感,通常權(quán)重采樣自0均值某方差的高斯分布,以往對(duì)高斯分布的方差設(shè)置十分重要,有了Batch Normalization后,對(duì)與同一個(gè)輸出節(jié)點(diǎn)相連的權(quán)重進(jìn)行放縮,其標(biāo)準(zhǔn)差σ也會(huì)放縮同樣的倍數(shù),相除抵消。

    • 對(duì)權(quán)重的尺度不再敏感,理由同上,尺度統(tǒng)一由γ參數(shù)控制,在訓(xùn)練中決定。

    • 深層網(wǎng)絡(luò)可以使用sigmoid和tanh了,理由同上,BN抑制了梯度消失。

    • Batch Normalization具有某種正則作用,不需要太依賴dropout,減少過(guò)擬合。

    幾個(gè)常見(jiàn)問(wèn)題

    卷積層如何使用BatchNorm?

    For convolutional layers, we additionally want the normalization to obey the convolutional property – so that different elements of the same feature map, at different locations, are normalized in the same way. To achieve this, we jointly normalize all the activations in a mini-batch, over all locations....so for a mini-batch of size m and feature maps of size p × q, we use the effective mini-batch of size m′= |B| = m · pq. We learn a pair of parameters γ(k) and β(k) per feature map, rather than per activation.—— Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

    1個(gè)卷積核產(chǎn)生1個(gè)feature map,1個(gè)feature map有1對(duì)γ和β參數(shù),同一batch同channel的feature map共享同一對(duì)γ和β參數(shù),若卷積層有n個(gè)卷積核,則有n對(duì)γ和β參數(shù)。

    沒(méi)有scale and shift過(guò)程可不可以?BatchNorm有兩個(gè)過(guò)程,Standardization和scale and shift,前者是機(jī)器學(xué)習(xí)常用的數(shù)據(jù)預(yù)處理技術(shù),在淺層模型中,只需對(duì)數(shù)據(jù)進(jìn)行Standardization即可,Batch Normalization可不可以只有Standardization呢?

    答案是可以,但網(wǎng)絡(luò)的表達(dá)能力會(huì)下降。

    直覺(jué)上理解,淺層模型中,只需要模型適應(yīng)數(shù)據(jù)分布即可。對(duì)深度神經(jīng)網(wǎng)絡(luò),每層的輸入分布和權(quán)重要相互協(xié)調(diào),強(qiáng)制把分布限制在zero mean unit variance并不見(jiàn)得是最好的選擇,加入?yún)?shù)γ和β,對(duì)輸入進(jìn)行scale and shift,有利于分布與權(quán)重的相互協(xié)調(diào),特別地,令γ=1,β=0等價(jià)于只用Standardization,令γ=σ,β=μ等價(jià)于沒(méi)有BN層,scale and shift涵蓋了這2種特殊情況,在訓(xùn)練過(guò)程中決定什么樣的分布是適合的,所以使用scale and shift增強(qiáng)了網(wǎng)絡(luò)的表達(dá)能力。

    表達(dá)能力更強(qiáng),在實(shí)踐中性能就會(huì)更好嗎?并不見(jiàn)得,就像曾經(jīng)參數(shù)越多不見(jiàn)得性能越好一樣。在caffenet-benchmark-batchnorm中,作者實(shí)驗(yàn)發(fā)現(xiàn)沒(méi)有scale and shift性能可能還更好一些。

    BN層放在ReLU前面還是后面?原paper建議將BN層放置在ReLU前,因?yàn)镽eLU激活函數(shù)的輸出非負(fù),不能近似為高斯分布。

    The goal of Batch Normalization is to achieve a stable distribution of activation values throughout training, and in our experiments we apply it before the nonlinearity since that is where matching the first and second moments is more likely to result in a stable distribution.—— Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

    但是,在caffenet-benchmark-batchnorm中,作者基于caffenet在ImageNet2012上做了如下對(duì)比實(shí)驗(yàn),實(shí)驗(yàn)表明,放在前后的差異似乎不大,甚至放在ReLU后還好一些。

    放在ReLU后相當(dāng)于直接對(duì)每層的輸入進(jìn)行歸一化,如下圖所示,這與淺層模型的Standardization是一致的。caffenet-benchmark-batchnorm中,還有BN層與不同激活函數(shù)、不同初始化方法、dropout等排列組合的對(duì)比實(shí)驗(yàn),可以看看。

    所以,BN究竟應(yīng)該放在激活的前面還是后面?以及,BN與其他變量,如激活函數(shù)、初始化方法、dropout等,如何組合才是最優(yōu)?可能只有直覺(jué)和經(jīng)驗(yàn)性的指導(dǎo)意見(jiàn),具體問(wèn)題的具體答案可能還是得實(shí)驗(yàn)說(shuō)了算(微笑)。

    BN層為什么有效?

    BN層的有效性已有目共睹,但為什么有效可能還需要進(jìn)一步研究,這里有一些解釋,

    • BN層讓損失函數(shù)更平滑。論文How Does Batch Normalization Help Optimization中,通過(guò)分析訓(xùn)練過(guò)程中每步梯度方向上步長(zhǎng)變化引起的損失變化范圍、梯度幅值的變化范圍、光滑度的變化,認(rèn)為添加BN層后,損失函數(shù)的landscape(losssurface)變得更平滑,相比高低不平上下起伏的loss surface,平滑losssurface的梯度預(yù)測(cè)性更好,可以選取較大的步長(zhǎng)。如下圖所示,

    • BN更有利于梯度下降。論文An empirical analysis of the optimization of deep network loss surfaces中,繪制了VGG和NIN網(wǎng)絡(luò)在有無(wú)BN層的情況下,loss surface的差異,包含初始點(diǎn)位置以及不同優(yōu)化算法最終收斂到的local minima位置,如下圖所示。沒(méi)有BN層的,其loss surface存在較大的高原,有BN層的則沒(méi)有高原,而是山峰,因此更容易下降。

    • 這里再提供一個(gè)直覺(jué)上的理解,沒(méi)有BN層的情況下,網(wǎng)絡(luò)沒(méi)辦法直接控制每層輸入的分布,其分布前面層的權(quán)重共同決定,或者說(shuō)分布的均值和方差“隱藏”在前面層的每個(gè)權(quán)重中,網(wǎng)絡(luò)若想調(diào)整其分布,需要通過(guò)復(fù)雜的反向傳播過(guò)程調(diào)整前面的每個(gè)權(quán)重實(shí)現(xiàn),BN層的存在相當(dāng)于將分布的均值和方差從權(quán)重中剝離了出來(lái),只需調(diào)整γ和β兩個(gè)參數(shù)就可以直接調(diào)整分布,讓分布和權(quán)重的配合變得更加容易。

    這里多說(shuō)一句,論文How Does Batch Normalization Help Optimization中對(duì)比了標(biāo)準(zhǔn)VGG以及加了BN層的VGG每層分布隨訓(xùn)練過(guò)程的變化,發(fā)現(xiàn)兩者并無(wú)明顯差異,認(rèn)為BatchNorm并沒(méi)有改善 Internal Covariate Shift。

    往期精彩回顧適合初學(xué)者入門人工智能的路線及資料下載機(jī)器學(xué)習(xí)及深度學(xué)習(xí)筆記等資料打印機(jī)器學(xué)習(xí)在線手冊(cè)深度學(xué)習(xí)筆記專輯《統(tǒng)計(jì)學(xué)習(xí)方法》的代碼復(fù)現(xiàn)專輯 AI基礎(chǔ)下載機(jī)器學(xué)習(xí)的數(shù)學(xué)基礎(chǔ)專輯獲取一折本站知識(shí)星球優(yōu)惠券,復(fù)制鏈接直接打開(kāi):https://t.zsxq.com/662nyZF本站qq群1003271085。加入微信群請(qǐng)掃碼進(jìn)群(如果是博士或者準(zhǔn)備讀博士請(qǐng)說(shuō)明):

    總結(jié)

    以上是生活随笔為你收集整理的【深度学习】Batch Normalization(BN)超详细解析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。