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