摘要:為了解決這個問題出現(xiàn)了批量歸一化的算法,他對每一層的輸入進(jìn)行歸一化,保證每層的輸入數(shù)據(jù)分布是穩(wěn)定的,從而加速訓(xùn)練批量歸一化歸一化批,一批樣本輸入,,個樣本與激活函數(shù)層卷積層全連接層池化層一樣,批量歸一化也屬于網(wǎng)絡(luò)的一層,簡稱。
【DL-CV】數(shù)據(jù)預(yù)處理&權(quán)重初始化<前篇---后篇>【DL-CV】正則化,Dropout
先來交代一下背景:在網(wǎng)絡(luò)訓(xùn)練的過程中,參數(shù)的更新會導(dǎo)致網(wǎng)絡(luò)的各層輸入數(shù)據(jù)的分布不斷變化,那么各層在訓(xùn)練的過程中就需要不斷的改變以適應(yīng)這種新的數(shù)據(jù)分布,從而造成網(wǎng)絡(luò)訓(xùn)練困難,收斂變慢(而且網(wǎng)絡(luò)越深越難),在論文中這個問題被稱為“Internal Covariate Shift”。為了解決這個問題出現(xiàn)了批量歸一化的算法,他對每一層的輸入進(jìn)行歸一化,保證每層的輸入數(shù)據(jù)分布是穩(wěn)定的,從而加速訓(xùn)練
批量歸一化(Batch Normalization/BN)Normalization——“歸一化”
Batch——“批”,一批樣本輸入,batch_size=m,m個樣本
與激活函數(shù)層、卷積層(cnn)、全連接層(FC)、池化層一樣,批量歸一化也屬于網(wǎng)絡(luò)的一層,簡稱BN。BN通常用在FC/cnn之后,激活函數(shù)層之前,他對FC/cnn的輸出的每一維進(jìn)行歸一化(歸一化至:均值0、方差為1),然后變換重構(gòu)后再把數(shù)據(jù)喂給下一層網(wǎng)絡(luò)。
歸一化對輸入數(shù)據(jù)的每一維xk(每一列)進(jìn)行歸一化得到$hat{x}^{k}$
$$hat{x}^{(k)} = frac{x^{k} - E[x^{k}]}{sqrt{Var[x^{k}]}}$$
通過該公式我們強(qiáng)行把數(shù)據(jù)歸一化,特征分布成功被壓縮至標(biāo)準(zhǔn)差為1。但這種變化是有破壞性的,原來的特征分布都被搞亂了那還學(xué)個鬼?——為了解決這一問題,我們對歸一化后的數(shù)據(jù)再進(jìn)行變換重構(gòu),以恢復(fù)原來的特征
變換重構(gòu)對于歸一化后輸入$hat{x}^{k}$,我們再引入兩個可供學(xué)習(xí)的參數(shù)$gamma$和$eta$使
$$y^{k} = gamma^{k}hat{x}^{k}+eta^{k}$$
注意如果$gamma^{k}=sqrt{Var[x^k]}$,$eta^{k}=E[x^k]$時,是可以恢復(fù)原有的特征的。這就是引入這兩個參數(shù)的意義,雖然網(wǎng)絡(luò)不太可能學(xué)習(xí)到$gamma^{k}=sqrt{Var[x^k]}$,$eta^{k}=E[x^k]$,但是好歹通過學(xué)習(xí)到這兩個參數(shù)盡可能地回復(fù)原有的特征(實(shí)踐中的表現(xiàn)說明這是有用的)
最后總結(jié)BN操作:(m是mini batch size,根號中的ε是一個很小的數(shù)防止分母為0)
上面講了這么多其實(shí)都是訓(xùn)練時的BN算法,訓(xùn)練時是一個一個batch進(jìn)去的,訓(xùn)練完成后得到$gamma$和$eta$。但是在測試時,我們只是丟一個樣本進(jìn)去讓網(wǎng)絡(luò)預(yù)測,試問一個樣本何來均值和方差?
均值和方差最好的來源是整個訓(xùn)練集,但是整個訓(xùn)練集往往太大,我們不太想算。能不能從現(xiàn)成的 mini batch 的均值和方差(因?yàn)樵谟?xùn)練時算了出來)估計(jì)出整個訓(xùn)練集的均值和方差呢——當(dāng)然可以,因?yàn)閙ini batch是隨機(jī)取樣的:
$$E[x] = E_B[mu_B]$$
$$Var[x] = frac{m}{m-1}E_B[sigma_B^2]$$
即平均值為所有mini-batch的平均值的平均值,而方差為每個batch的方差的無偏估計(jì)。當(dāng)網(wǎng)絡(luò)訓(xùn)練完后,我們通過訓(xùn)練時保存下來的每個batch的均值與方差估算出全局均值與方差供測試時使用,也就是說當(dāng)網(wǎng)絡(luò)訓(xùn)練完后每個BN層中的均值也和標(biāo)準(zhǔn)差也會隨之確定。
能選擇較大的初始學(xué)習(xí)率,提高訓(xùn)練收斂速度
你再也不用去理會過擬合中drop out、L2正則項(xiàng)參數(shù)的選擇問題,采用BN算法后,你可以移除這兩項(xiàng)了參數(shù),或者可以選擇更小的L2正則約束參數(shù)了,因?yàn)锽N自帶正則化的特性,能提高網(wǎng)絡(luò)泛化能力
減少梯度爆炸/消失的出現(xiàn),特別對于tanh,sigmoid這類會兩端飽和的激活函數(shù)
減少對參數(shù)初始化的依賴,就算參數(shù)初始化得不好,在BN的加持下網(wǎng)絡(luò)還是表現(xiàn)較好
雖然BN是2015才提出來的(看上去像個新米),但是他表現(xiàn)也超凡,BN算法已經(jīng)被大量使用于深度學(xué)習(xí)中,真的是nb
補(bǔ)充Batch Normalization 論文
以上的BN使用是基于全連接層的,輸入數(shù)據(jù)都是二維矩陣。BN也可以用在cnn中,用法不同,可以參考此文章
推薦 BN導(dǎo)讀
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/19809.html
摘要:為了解決這個問題出現(xiàn)了批量歸一化的算法,他對每一層的輸入進(jìn)行歸一化,保證每層的輸入數(shù)據(jù)分布是穩(wěn)定的,從而加速訓(xùn)練批量歸一化歸一化批,一批樣本輸入,,個樣本與激活函數(shù)層卷積層全連接層池化層一樣,批量歸一化也屬于網(wǎng)絡(luò)的一層,簡稱。 【DL-CV】數(shù)據(jù)預(yù)處理&權(quán)重初始化【DL-CV】正則化,Dropout 先來交代一下背景:在網(wǎng)絡(luò)訓(xùn)練的過程中,參數(shù)的更新會導(dǎo)致網(wǎng)絡(luò)的各層輸入數(shù)據(jù)的分布不斷變化...
閱讀 2151·2021-09-07 10:24
閱讀 2146·2019-08-30 15:55
閱讀 2124·2019-08-30 15:43
閱讀 730·2019-08-29 15:25
閱讀 1151·2019-08-29 12:19
閱讀 2000·2019-08-23 18:32
閱讀 1597·2019-08-23 17:59
閱讀 1013·2019-08-23 12:22