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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

深度学习之优化详解:batch normalization

發(fā)布時間:2024/8/23 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深度学习之优化详解:batch normalization 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

摘要:?一項優(yōu)化神經(jīng)網(wǎng)絡(luò)的技術(shù),點進(jìn)來了解一下?

認(rèn)識上圖這些人嗎?這些人把自己叫做“The Myth Busters”,為什么?在他們的啟發(fā)下,我們才會在Paperspace做類似的事情。我們要解決是Batch NormalizationBN)是否確實解決了Internal Covariate Shift的問題。雖然Batch Normalization已經(jīng)存在了幾年,并且已經(jīng)成為深度神經(jīng)網(wǎng)絡(luò)的主要內(nèi)容,但它仍然是深度學(xué)習(xí)中最容易被誤解的概念之一。

Batch Normalization真的解決了Internal Covariate Shift問題了嗎?它是用來做什么的?你所學(xué)的深度學(xué)習(xí)是真的嗎?我們來看看吧!

在開始之前

我們曾經(jīng)討論過:

1、如何利用隨機梯度下降來解決深度學(xué)習(xí)中局部極小值和鞍點的問題。

2、Momentum(動量)和Adam(自適應(yīng)矩估計)等優(yōu)化算法如何增強梯度下降以解決優(yōu)化曲面中的曲率問題。

3、如何使用不同的激活函數(shù)來解決梯度消失問題。

為了有效地學(xué)習(xí)神經(jīng)網(wǎng)絡(luò),神經(jīng)網(wǎng)絡(luò)的每一層分布都應(yīng)該:均值為0、始終保持相同的分布;第二個條件意味著通過批梯度下降輸入到網(wǎng)路層的數(shù)據(jù)分布不應(yīng)該變化太多,并且隨著訓(xùn)練的進(jìn)行它應(yīng)該保持不變,而不是每一層的分布都在發(fā)生變化。

Internal Covariate Shift

?Batch Normalization:通過減少Internal Covariate Shift來加快深度網(wǎng)絡(luò)訓(xùn)練,其前提是解決一個稱為Internal Covariate Shift的問題。

就像我們現(xiàn)在所稱的那樣,Internal Covariate Shift是指在訓(xùn)練過程中,隱層的輸入分布老是變來變?nèi)?#xff0c;Internal指的是深層網(wǎng)絡(luò)的隱層,是發(fā)生在網(wǎng)絡(luò)內(nèi)部的事情,Covariate指的是輸入分布被變化的權(quán)重參數(shù)化,Shift指分布正在發(fā)生變化。

所以,讓我們試著觀察這件事情怎樣發(fā)生的。再次,盡可能想象一下最簡單的神經(jīng)網(wǎng)絡(luò)之一:線性堆疊的神經(jīng)元,這樣你也可以通過替換神經(jīng)元網(wǎng)絡(luò)層來擴(kuò)展類比。

?

假設(shè)我們正在優(yōu)化損失函數(shù)L,神經(jīng)元d權(quán)重的更新規(guī)則是:

我們可以看到權(quán)重d的梯度取決于c的輸出,對于神經(jīng)網(wǎng)絡(luò)中的任何層也是如此。神經(jīng)元的權(quán)重梯度取決于它的輸入或者下一層的輸出。

然后梯度向著反方向更新權(quán)重,此過程一直重復(fù),讓我們回到d層,因為我們對d進(jìn)行了梯度更新,我們期望omega_d可以有更小的損失,然而并非如此,讓我們看一下原因。

我們從i開始進(jìn)行初始迭代更新。假設(shè)輸出c在迭代ip_c^i?d層更新不妨假設(shè)c的輸入分布為p_c^i。在向下傳遞期間,comega_c的權(quán)重也會更新,這導(dǎo)致c的輸出分布發(fā)生變化。在下一次迭代i+1中,假設(shè)z_c的分布已轉(zhuǎn)變到p_c^{i+1}。由于d層的權(quán)重是根據(jù)p_c^i更新的,現(xiàn)在d層對應(yīng)輸入分布p_c^{i+1},這種差異可能導(dǎo)致網(wǎng)絡(luò)層產(chǎn)生根本不會減少損失的輸出。

現(xiàn)在,我們可以提出兩個問題:

輸入分布的變化究竟如何使神經(jīng)網(wǎng)絡(luò)層更難學(xué)習(xí)?

這種分布的變化是否足夠引起上述情況?

我們先回答第一個問題:

為什么Internal Covariate Shift造成上述情況?

神經(jīng)網(wǎng)絡(luò)的作用是生成映射f,將輸入x映射到輸出y。x的分布發(fā)生變化,為什么會使神經(jīng)網(wǎng)絡(luò)層更難學(xué)習(xí)?

下圖為x標(biāo)準(zhǔn)分布圖:

x的非標(biāo)準(zhǔn)分布如下圖:

假設(shè)我們正在嘗試的映射是f=2x,如果x的分布在一個地方壓縮了很多密度,或者它是否均勻分布為什么那么重要?

事實證明,這很重要,現(xiàn)代精確的深層網(wǎng)絡(luò),是非常強大的曲線擬合器。假設(shè)我們有一個l層,對應(yīng)輸入為x,其分布如下。另外,我們假設(shè),由層l學(xué)習(xí)的函數(shù),由虛線表示:

i的迭代

假設(shè)在梯度更新之后,當(dāng)?shù)较乱粚泳W(wǎng)絡(luò)小批量梯度下降時,x的分布變?yōu)檫@樣:

i+1迭代

注意這個小批量梯度下降的損失與之前的損失相比更多,為什么會這樣?讓我們回到我們之前的數(shù)據(jù),我們最初學(xué)到的映射f可以很好地減少之前小批量梯度下降的損失。對于許多其他函數(shù)也是如此,在x不密集的區(qū)域中,這些函數(shù)差別很大。

適應(yīng)相同輸入xi的不同函數(shù)

如果我們選擇紅色虛線給出的函數(shù),下一個小批量梯度下降的損失也會很低。

更合適的另一個函數(shù)

現(xiàn)在明顯的問題是我們?nèi)绾涡薷奈覀兊乃惴?#xff0c;以便我們最終學(xué)習(xí)的映射對應(yīng)紅色虛線的映射?沒有簡單的答案,對于這種情況更好的辦法是預(yù)防它們而不是等這種情況發(fā)生了再去解決它。

ICS最終搞砸我們學(xué)習(xí)的原因是我們的神經(jīng)網(wǎng)絡(luò)總是在輸入分布的密集區(qū)域上表現(xiàn)更好。由于較密集區(qū)域中的數(shù)據(jù)點主導(dǎo)平均損失(我們試圖最小化),因此密集區(qū)域中點的損失減少得更多。

但是,如果ICS最終在訓(xùn)練期間的后續(xù)批次中更改輸入分布的密集區(qū)域,則網(wǎng)絡(luò)在之前迭代期間學(xué)習(xí)的權(quán)重不再是最佳的。它可能需要非常仔細(xì)地調(diào)整超參數(shù)來獲得合理的學(xué)習(xí)。這就解釋了為什么ICS會出現(xiàn)這樣的問題。

我們所說的是在小批量梯度下降中存在很大的方差。方差確保我們的映射不會在輸入分布的一個區(qū)域中過度專門化,我們也希望均值在零附近。

規(guī)范化輸入

解決此問題的一種方法是將輸入歸一化到神經(jīng)網(wǎng)絡(luò),以使輸入分布均值為0和方差為1。但是,這僅適用于網(wǎng)絡(luò)不夠深的情況。當(dāng)網(wǎng)絡(luò)變得更深,比如20層或更多層時,即使輸入被歸一化,超過20多個層的權(quán)重的微小波動也會導(dǎo)致輸入到更深層的輸入分布發(fā)生很大變化。

例如語言變化(不完全正確):我們旅行距離發(fā)生變化,語言也會發(fā)生變化。?但是,較短距離內(nèi)的語言有很多相似之處。比如西班牙語和葡萄牙語,它們都源于史前印歐語言。印度斯坦語也是如此,印度語是8000公里以外的地方。?但是,西班牙語和印度斯坦語之間的差異比西班牙語和葡萄牙語之間的差異要大得多。原因是小距離的微小變化已經(jīng)放大了很多,深度網(wǎng)絡(luò)也是如此。

輸入批量歸一化

我們現(xiàn)在介紹批量歸一化的概念,它實際上規(guī)范了網(wǎng)絡(luò)層的輸出激活,然后做了更多的事情,下面是詳細(xì)的描述:

上述等式描述了BatchNorm的原理,2-4描述了某個神經(jīng)元對應(yīng)的原始的激活x通過減去mini-Batch內(nèi)m個實例獲得的m個激活x求得的均值E(x)并除以求得的方差Var(x)來進(jìn)行轉(zhuǎn)換,由此求出每一次小批量梯度下降激活的標(biāo)準(zhǔn)差。

等式5是中γβ是所謂的批量歸一化層的超參數(shù)。式5的輸出具有β的平均值和γ的標(biāo)準(zhǔn)偏差。實際上,批量歸一化層有助于優(yōu)化算法來控制層的輸出的均值和方差。

揭穿ICS的神秘面紗

Internal Covariate Shift是指我們訓(xùn)練網(wǎng)絡(luò)時輸入分布的變化。Batch Norm具有超參gammabeta,用于調(diào)整激活的均值和方差。但是當(dāng)這些超參數(shù)被訓(xùn)練時,它們也會發(fā)生變化,而BN導(dǎo)致激活分布或ICS的變化。如果它能阻止ICS,超參數(shù)gammabeta沒有任何意義。

為什么Batch Norm有效呢?

Ian GoodfellowGANs的創(chuàng)始人,人工智能領(lǐng)域最重要的研究員之一,他在一個講座中給出了可能的解釋,在這一點上,我必須提醒你,除非我們通過具體證據(jù)支持,否則這只是猜測,不管它可能來自現(xiàn)代深度學(xué)習(xí)中的重量級人物之一。Goodfellow認(rèn)為關(guān)鍵是BN的兩個超參數(shù)。

?

讓我們再次考慮超級簡單的玩具網(wǎng)絡(luò):

當(dāng)我們對a的權(quán)重進(jìn)行梯度更新時,我們只計算?frac {\ partial {L}} {\ partial {a}},即損失函數(shù)相對于a的敏感度。但是,我們沒有考慮到改變a的權(quán)重也會改變更多層的輸出,如層bcd。

同樣,由于使用這些算法的計算難度,這實際上歸結(jié)為我們無法使用二階或更高階優(yōu)化方法,梯度下降及其變型只適用于一階。

深度神經(jīng)網(wǎng)絡(luò)具有高階相互作用,這意味著除了損失函數(shù)之外,改變一個層的權(quán)重也可能影響其他層的統(tǒng)計。這些跨層在沒有列入考慮的情況下交互會導(dǎo)致ICS。每次我們更新圖層的權(quán)重時,它都有可能以不好的方式影響神經(jīng)網(wǎng)絡(luò)中圖層的統(tǒng)計。

在這種情況下,收斂可能需要仔細(xì)初始化,調(diào)整超參數(shù)和更長的訓(xùn)練持續(xù)時間。但是,當(dāng)我們在圖層之間BN圖層時,圖層的統(tǒng)計信息僅受兩個超參數(shù)gammabeta的影響。

現(xiàn)在,我們的優(yōu)化算法只必須僅兩個超參數(shù)來控制任何層的統(tǒng)計數(shù)據(jù),而不是前一層中的權(quán)重,這極大地加速了收斂,并且避免了初始化和超參數(shù)調(diào)整的需要。因此,Batch Norm更像是一個檢查指向機制。

請注意,任意設(shè)置圖層均值和標(biāo)準(zhǔn)差的能力也意味著如果充分地進(jìn)行正確地訓(xùn)練,我們就可以恢復(fù)其原始分布。

激活前或激活后的BatchNorm

理論上在激活函數(shù)之前應(yīng)用BN更好,但實際上已經(jīng)發(fā)現(xiàn)在激活之后應(yīng)用BN會產(chǎn)生更好的結(jié)果。在BN之后進(jìn)行激活,BN無法完全控制進(jìn)入下一層的輸入的統(tǒng)計數(shù)據(jù),因為BN的輸出必須經(jīng)過激活,在激活后應(yīng)用BN卻不是這種情況。

推論中的批量規(guī)范

在推理期間使用BN可能有點棘手,因為我們在推理期間可能并不總是有批處理。例如,在視頻上實時運行對象檢測器。一次處理一個幀,因此沒有批處理。

我們需要計算批處理的均值hat {x}和方差sigma ^ 2?來生成BN的輸出。在這種情況下,我們在訓(xùn)練期間保持均值和方差的滑動平均,然后在推理期間將這些值插入均值和方差,這很重要,也是大多數(shù)深度學(xué)習(xí)庫采用的方法,可以開箱即用。

使用滑動平均的理由取決于大數(shù)定律。小批量的均值和方差是對真實均值和方差的非常粗糙的估計。批量估計稱為批量統(tǒng)計,均值和方差的真實值(我們未知)稱為人口統(tǒng)計。對于大量樣本,批量統(tǒng)計數(shù)據(jù)往往會收斂于人口的統(tǒng)計數(shù)據(jù),這就是為什么我們在訓(xùn)練時使用滑動平均。?由于我們的優(yōu)化算法的小批量特性,它還有助于我們除去平均估計產(chǎn)生的噪聲。

BNS是正則化器:

Batch Norm其實是一個正規(guī)化器,每個批次估計的均值和方差是真實均值的噪聲版本,這在我們的最優(yōu)搜索中注入了隨機性,有助于正規(guī)化。

結(jié)論:

雖然Batch Norm現(xiàn)已成為深層架構(gòu)的標(biāo)準(zhǔn)元素,但直到最近,研究一直致力于理解它是如何工作的。去年,我們還介紹了SELU或縮放指數(shù)線性單位激活函數(shù),這些函數(shù)隱含地規(guī)范了通過它們的激活,這是通過BN明確完成的。

原文鏈接?

本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。

總結(jié)

以上是生活随笔為你收集整理的深度学习之优化详解:batch normalization的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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