批标准归一化(Batch Normalization)解析
1,背景
網(wǎng)絡(luò)一旦train起來,那么參數(shù)就要發(fā)生更新,除了輸入層的數(shù)據(jù)外(因為輸入層數(shù)據(jù),我們已經(jīng)人為的為每個樣本歸一化),后面網(wǎng)絡(luò)每一層的輸入數(shù)據(jù)分布是一直在發(fā)生變化的,因為在訓練的時候,前面層訓練參數(shù)的更新將導致后面層輸入數(shù)據(jù)分布的變化。
以網(wǎng)絡(luò)第二層為例:網(wǎng)絡(luò)的第二層輸入,是由第一層的參數(shù)和input計算得到的,而第一層的參數(shù)在整個訓練過程中一直在變化,因此必然會引起后面每一層輸入數(shù)據(jù)分布的改變。我們把網(wǎng)絡(luò)中間層在訓練過程中,數(shù)據(jù)分布的改變稱之為:“Internal Covariate Shift”,批標準歸一化(Batch Normalization,BN)的提出,就是要解決在訓練過程中,中間層數(shù)據(jù)分布發(fā)生改變的情況。
通過使用BN,每個神經(jīng)元的激活變得(或多或少)高斯分布,即它通常中等活躍,有時有點活躍,罕見非常活躍。協(xié)變量偏移是不滿足需要的,因為后面的層必須保持適應分布類型的變化(而不僅僅是新的分布參數(shù),例如高斯分布的新均值和方差值)。
神經(jīng)網(wǎng)絡(luò)學習過程本質(zhì)就是為了學習數(shù)據(jù)分布,一旦訓練數(shù)據(jù)與測試數(shù)據(jù)的分布不同,那么網(wǎng)絡(luò)的泛化能力也大大降低;另外一方面,一旦每批訓練數(shù)據(jù)的分布各不相同(batch 梯度下降),那么網(wǎng)絡(luò)就要在每次迭代都去學習適應不同的分布,這樣將會大大降低網(wǎng)絡(luò)的訓練速度,這也正是為什么我們需要對數(shù)據(jù)都要做一個歸一化預處理的原因。
深度網(wǎng)絡(luò)的訓練是復雜的過程,只要網(wǎng)絡(luò)的前面幾層發(fā)生微小的改變,那么后面幾層就會被累積放大下去。一旦網(wǎng)絡(luò)某一層的輸入數(shù)據(jù)的分布發(fā)生改變,那么這一層網(wǎng)絡(luò)就需要去適應學習這個新的數(shù)據(jù)分布,所以如果訓練過程中,訓練數(shù)據(jù)的分布一直在發(fā)生變化,那么將會影響網(wǎng)絡(luò)的訓練速度
2,原理簡介
Batch Normalization(簡稱BN)是對每一批數(shù)據(jù)進行歸一化,對于訓練中某一個batch的數(shù)據(jù){x1,x2,…,xn},注意這個數(shù)據(jù)是可以輸入也可以是網(wǎng)絡(luò)中間的某一層輸出。在BN出現(xiàn)之前,我們的歸一化操作一般都在數(shù)據(jù)輸入層,對輸入的數(shù)據(jù)進行求均值以及求方差做歸一化,但是BN的出現(xiàn)打破了這一個規(guī)定,我們可以在網(wǎng)絡(luò)中任意一層進行歸一化處理,因為我們現(xiàn)在所用的優(yōu)化方法大多都是min-batch SGD,所以我們的歸一化操作就成為Batch Normalization。
批量歸一化(Batch Normalization,BN)是神經(jīng)網(wǎng)絡(luò)的標準化方法/層,通常BN神經(jīng)網(wǎng)絡(luò)輸入被歸一化[0,1]或[-1,1]范圍,或者意味著均值為0和方差等于1,即BN對網(wǎng)絡(luò)的中間層執(zhí)行白化。
如上圖所示,BN步驟主要分為4步:
(1) 求每一個訓練批次數(shù)據(jù)的均值
(2)求每一個訓練批次數(shù)據(jù)的方差
(3)使用求得的均值和方差對該批次的訓練數(shù)據(jù)做歸一化,獲得0-1分布。其中ε
是為了避免除數(shù)為0時所使用的微小正數(shù)。
(4)尺度變換和偏移(避免線性區(qū)):將xi乘以γ調(diào)整數(shù)值大小,再加上β增加偏移后得到y(tǒng)i,這里的γ是尺度因子,β是平移因子。這一步是BN的精髓,由于歸一化后的xi基本會被限制在正態(tài)分布下,使得網(wǎng)絡(luò)的表達能力下降。為解決該問題,我們引入兩個新的參數(shù):γ,β。 γ和β是在訓練時網(wǎng)絡(luò)自己學習得到的。
一個標準的歸一化步驟就是減均值除方差,那這種歸一化操作有什么作用呢?我們觀察下圖:
a中左圖是沒有經(jīng)過任何處理的輸入數(shù)據(jù),曲線是sigmoid函數(shù),如果數(shù)據(jù)在梯度很小的區(qū)域,那么學習率就會很慢甚至陷入長時間的停滯。減均值除方差后,數(shù)據(jù)就被移到中心區(qū)域如右圖所示,有效避免分布數(shù)據(jù)偏移,使其遠離導數(shù)飽和區(qū)。對于大多數(shù)激活函數(shù)而言,這個區(qū)域的梯度都是最大的或者是有梯度的(比如ReLU),這可以看做是一種對抗梯度消失的有效手段。對于一層如此,如果對于每一層數(shù)據(jù)都那么做的話,數(shù)據(jù)的分布總是在隨著變化敏感的區(qū)域,相當于不用考慮數(shù)據(jù)分布變化了,這樣訓練起來更有效率。
那么為什么要有第4步,不是僅使用減均值除方差操作就能獲得目的效果嗎?思考一個問題,減均值除方差得到的分布是正態(tài)分布,我們能否認為正態(tài)分布就是最好或最能體現(xiàn)我們訓練樣本的特征分布呢?不能,比如數(shù)據(jù)本身就很不對稱,或者激活函數(shù)未必是對方差為1的數(shù)據(jù)最好的效果,比如Sigmoid激活函數(shù),在-1~1之間的梯度變化不大,那么非線性變換的作用就不能很好的體現(xiàn),換言之就是,減均值除方差操作后可能會削弱網(wǎng)絡(luò)的性能!針對該情況,在前面三步之后加入第4步完成真正的batch normalization。
BN的本質(zhì)就是利用學習優(yōu)化,改變一下方差大小和均值位置,使得新的分布更切合數(shù)據(jù)的真實分布,保證模型的非線性表達能力。BN的極端的情況就是這兩個參數(shù)等于mini-batch的均值和方差,那么經(jīng)過batch normalization之后的數(shù)據(jù)和輸入完全一樣,當然一般的情況是不同的。
3,BP對神經(jīng)網(wǎng)絡(luò)的影響
3.1 激活函數(shù)
在所有情況下,BN都能顯著提高訓練速度,如果沒有BN,使用Sigmoid激活函數(shù)會有嚴重的梯度消失問題。
如下圖所示,激活函數(shù)sigmoid、tanh、relu在使用了BN后,準確度都有顯著的提高(虛線是沒有用BN的情況,實線是對應的使用BN的情況)
3.2 優(yōu)化器
Adam是一個比較犀利的優(yōu)化器,但是如果普通的優(yōu)化器 ,比如隨機梯度下降法,加上BN后,其效果堪比Adam。
ReLU +Adam≈ReLU+ SGD + BN
所以說,使用BN,優(yōu)化器的選擇不會產(chǎn)生顯著差異。
3.3 批量大小
對于小批量(即4),BN會降低性能,所以要避免太小的批量,才能保證批歸一化的效果。
3.4 數(shù)據(jù)不平衡
如果對于具有分布極不平衡的二分類測試任務(例如,99:1),BN破壞性能并不奇怪。也就是說,這種情況下不要使用BN。
3.5 梯度消失的問題
如下圖所求,BN很好地解決了梯度消失問題,這是由前邊說的減均值除方差保證的,把每一層的輸出均值和方差規(guī)范化,將輸出從飽和區(qū)拉倒了非飽和區(qū)(導數(shù)),很好的解決了梯度消失問題。下圖中對于第二層與第一層的梯度變化,在沒有使用BN時,sigmoid激活函數(shù)梯度消失5倍,使用BN時,梯度只消失33%;在使用BN時,relu激活函數(shù)梯度沒有消失。
3.6 模型正則化
BN算法后,參數(shù)進行了歸一化,不用太依賴drop out、L2正則化解決歸 一化,采用BN算法后可以選擇更小的L2正則約束參數(shù),因為BN本身具有提高網(wǎng)絡(luò)泛化能力的特性。
4,模型預測時均值和方差求解
對于預測階段時所使用的均值和方差,其實也是來源于訓練集。比如我們在模型訓練時我們就記錄下每個batch下的均值和方差,待訓練完畢后,我們求整個訓練樣本的均值和方差期望值,作為我們進行預測時進行BN的的均值和方差:
最后測試階段,BN的使用公式就是:
關(guān)于BN的使用位置,在CNN中一般應作用與非線性激活函數(shù)之前,s型函數(shù)s(x)的自變量x是經(jīng)過BN處理后的結(jié)果。因此前向傳導的計算公式就應該是:
其實因為偏置參數(shù)b經(jīng)過BN層后其實是沒有用的,最后也會被均值歸一化,當然BN層后面還有個β參數(shù)作為偏置項,所以b這個參數(shù)就可以不用了。因此最后把BN層+激活函數(shù)層就變成了:
注意前面寫的都是對于一般情況,對于卷積神經(jīng)網(wǎng)絡(luò)有些許不同。因為卷積神經(jīng)網(wǎng)絡(luò)的特征是對應到一整張?zhí)卣黜憫獔D上的,所以做BN時也應以響應圖為單位而不是按照各個維度。比如在某一層,batch大小為m,響應圖大小為w×h,則做BN的數(shù)據(jù)量為m×w×h。
BN在深層神經(jīng)網(wǎng)絡(luò)的作用非常明顯:若神經(jīng)網(wǎng)絡(luò)訓練時遇到收斂速度較慢,或者“梯度爆炸”等無法訓練的情況發(fā)生時都可以嘗試用BN來解決。同時,常規(guī)使用情況下同樣可以加入BN來加速模型訓練,甚至提升模型精度。
總結(jié)
以上是生活随笔為你收集整理的批标准归一化(Batch Normalization)解析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。