神经网络训练细节之batch normalization
在對(duì)神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練的時(shí)候,經(jīng)常涉及到的一個(gè)概念就是batch normalization,那么究竟什么是batch normalization,以及為什么在訓(xùn)練的時(shí)候要加入batch normalization呢?以下就是我的一些學(xué)習(xí)心得。
1、提出batch normalization的原因
? ? ? (1) 我們?cè)趯?duì)某個(gè)神經(jīng)網(wǎng)絡(luò)訓(xùn)練完成之后,需要測(cè)試該網(wǎng)絡(luò),那么如果我們的訓(xùn)練集數(shù)據(jù)與測(cè)試集數(shù)據(jù)具有不同的分布,最終的測(cè)試結(jié)果會(huì)有比較大的影響。也就是說我們的模型是基于訓(xùn)練集數(shù)據(jù)進(jìn)行訓(xùn)練的,整個(gè)訓(xùn)練的過程肯定會(huì)受到訓(xùn)練集數(shù)據(jù)分布的影響,這種分布的影響也會(huì)體現(xiàn)到模型的訓(xùn)練中,但如果測(cè)試集數(shù)據(jù)具有與訓(xùn)練集數(shù)據(jù)不一樣的樣本,那么我們的模型對(duì)于最后的測(cè)試集數(shù)據(jù)的輸出結(jié)果可能就是錯(cuò)誤的。所以我們希望不論是訓(xùn)練還是測(cè)試的時(shí)候,輸入數(shù)據(jù)的分布最好都是一致并且穩(wěn)定的,當(dāng)然一般來說,數(shù)據(jù)訓(xùn)練集與測(cè)試集的數(shù)據(jù)分布都是一致的,因?yàn)槿绻植疾罹嗪艽?#xff0c;那么這就不能看作是同一個(gè)問題。
? ? ? ?(2)當(dāng)網(wǎng)絡(luò)比較深的時(shí)候,即使我們將batch規(guī)范化成均值為0,單位方差的數(shù)據(jù)輸入,但是后面層的輸出就不能保證了,隨著網(wǎng)絡(luò)的深入,后面網(wǎng)絡(luò)的輸出將不再滿足均值為0,方差為1。這也就是說網(wǎng)絡(luò)在訓(xùn)練的時(shí)候,每次迭代輸入該層網(wǎng)絡(luò)的數(shù)據(jù)的分布都不一樣,這就使得網(wǎng)絡(luò)在訓(xùn)練的過程中有點(diǎn)無所適從,相應(yīng)收斂的速度也會(huì)降低,針對(duì)這個(gè)問題,就考慮是否可以在每一層的輸出后面都加一個(gè)BN(batch normalization)層,從而使得每層輸入數(shù)據(jù)都是零均值,單位方差的數(shù)據(jù),從而可以使得整個(gè)網(wǎng)絡(luò)的收斂更快。
? ? ? (3)還有一個(gè)原因是促使batch normalization提出的又一原因,在卷積神經(jīng)網(wǎng)絡(luò)的訓(xùn)練中,往往要對(duì)圖像進(jìn)行“白化”處理,這樣可以加快網(wǎng)絡(luò)訓(xùn)練時(shí)候的收斂速度。“白化”操作之所以會(huì)加快收斂速度,原因是“白化”處理的本質(zhì)是去除數(shù)據(jù)之間的相關(guān)性,這樣就簡(jiǎn)化了后續(xù)數(shù)據(jù)獨(dú)立分量的提取過程。
2、什么是batch normalization?
? ? ?batch normalization其實(shí)就是對(duì)數(shù)據(jù)進(jìn)行規(guī)范化,將其分布變成均值為0,單位方差的正太分布。實(shí)現(xiàn)這一功能的方法非常簡(jiǎn)單,公式如下:
但是如果僅僅進(jìn)行這樣的操作,就會(huì)降低整個(gè)網(wǎng)絡(luò)的表達(dá)能力。距離來說,加入激活函數(shù)采用的是sigmoid函數(shù),那么當(dāng)輸入數(shù)據(jù)滿足均值為0,單位方差的分布時(shí),由于sigmoid函數(shù)的曲線特性(可見博客《關(guān)于激勵(lì)函數(shù)的一些思考》),在0附近的范圍內(nèi),整個(gè)sigmoid曲線接近線性,激勵(lì)函數(shù)的非線性特性就得不到體現(xiàn),這樣整個(gè)網(wǎng)絡(luò)的表達(dá)能力會(huì)降低,為了改善這個(gè)情況,在對(duì)數(shù)據(jù)采用規(guī)范化的過程中引入兩個(gè)參數(shù),對(duì)數(shù)據(jù)進(jìn)行縮放和平移,具體公式如下:
這兩個(gè)公式中涉及的均值跟方差都是針對(duì)所有數(shù)據(jù)的,但在實(shí)際訓(xùn)練的時(shí)候,我們是對(duì)訓(xùn)練數(shù)據(jù)進(jìn)行洗牌,并隨機(jī)抽取一個(gè)mini-batch進(jìn)行訓(xùn)練,所以在實(shí)際的訓(xùn)練中,我們只是在mini-batch上實(shí)現(xiàn)對(duì)數(shù)據(jù)的規(guī)范,公式如下:
3、測(cè)試時(shí)候的batch normalization
? ? ?那么對(duì)每層的輸入數(shù)據(jù)進(jìn)行batch normalization之后,我們可以更加快速地實(shí)現(xiàn)收斂,那么當(dāng)整個(gè)模型訓(xùn)練成功之后,我們需要對(duì)網(wǎng)絡(luò)進(jìn)行測(cè)試,這時(shí)候輸入的單個(gè)的樣本,只有一個(gè)數(shù)據(jù),如何對(duì)這個(gè)輸入樣本進(jìn)行規(guī)范呢?
? ? ?答案就是我們?cè)谟?xùn)練的時(shí)候要記住每個(gè)mini-batch的均值與方差,然后根據(jù)這些數(shù)據(jù)計(jì)算訓(xùn)練集整體的均值與方差,公式如下:
利用整體的均值與方差,實(shí)現(xiàn)對(duì)單個(gè)樣本的規(guī)范化,然后再輸入到訓(xùn)練好的網(wǎng)絡(luò)中進(jìn)行測(cè)試。
總結(jié)
以上是生活随笔為你收集整理的神经网络训练细节之batch normalization的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ZED ROS包发布topic介绍
- 下一篇: java paint调用,求教 如何调用