深度學習中 Batch Normalization為什麼效果好?

時間 2021-05-06 19:58:19

1樓:

用相對座標取代絕對座標。使在單一神經元輸出產生群體性的平移、放縮後,網路還可以接近0成本地適應新分布。

由於不同神經元有功能性分工的差異,這種分工又無法在初始化的時候預知,所以好的初始化只能保證同層的多神經元混合的分布和目標分布(解的分布)一致,不能保證單一神經元的輸出分布和目標分布一致。所以單一神經元輸出分布的整體移動還是經常會發生的。

2樓:

不一定有效呀。。。要具體問題具體分析

比如下面這個鏈結,很多回答都在說去掉BN更好啊

NTIRE2017奪冠的EDSR去掉了Batch Normalization層就獲得了提高為什麼?

3樓:將為帥

將為帥:一文搞懂Batch Normalization,Layer/Instance/Group Norm

ICS(Internal Covariate Shift):神經網路的中間層的輸入的分布變化。 3個單詞拆開理解下:

"Internal"意為「內部的」,是指分布變化發生在神經網路的中間層,當然就是指神經網路的內部;"covariate"意為「協變數」,是指假設中間的的權重是我們關注的自變數,層的輸出是因變數,那麼層的輸入可以理解為協變數;"Shift"意為變化,顧名思義,是指分布在變化。

ICS問題是訓練過程中,網路中間層輸入分布的變化。BN其實並沒有解決ICS問題,而是引入了引數γ和β去調節中間層輸出的均值和標準差,γ和β會在訓練過程中不斷更新,意味著均值和標準差也在不斷變化,即BN本質上暗含了ICS。從反證法的角度來說,假設BN解決了ICS問題,那麼引數γ和β是沒有意義的。

既然BN沒有解決ICS問題,那它為什麼有用呢?!GAN的發明者Ian Goodfellow給了乙個可能的解釋:神經網路的訓練過程中,更新了某一層的權重引數,後續每一層網路的輸出都可能發生變化,最終引起loss值的變化。

所以當沒有BN層時,loss的收斂就需要我們精心設計權重的初始化方法和超引數的調節方法以及等待漫長的訓練時間;但當我們在各層之間加入了BN層後,某層的輸出僅由兩個引數γ和β決定,使用梯度下降法優化引數時,優化方法只需要調節兩個引數的值來控制各層的輸出,而不需要調節各層的全部引數。這樣極大地提高了收斂速度,避免了小心翼翼的引數初始化和超引數調節過程

4樓:季節ostrich

做的技藝來自做的過程。當世界給草籽重壓時,目標的堅定是性格中最必要的力量源泉之一,也是成功的利器之一。沒有它,天才會在矛盾無定的迷徑中徒勞無功。

把別人的幸福當做自己的幸福,以開放的心靈接納封閉的婚姻。不論你在什麼時候結束,重要的是結束之後就不要悔恨。生命的活力在提煉中釋放。

經歷就是體驗!

5樓:兼職健身的大廚

工作了以後發現,把模型調好以後,線上的bn是大坑,很多業務不會等乙個batch的量去計算的,就需要自己去估計。然後就帶來巨大的不可控,根本不知道是別的引數沒調好還是bn處的問題

6樓:qazwsxedc

bn的作用是在每一層中控制輸入的資料分布,在第一層通常不用做BN,因為第一層輸入的資料就是原始的資料分布,第一層經過一系列卷積和啟用函式後,如果輸出的結果偏向於部分維度的特徵,那麼可能導致該輸出作為下一層的輸入已經改變了原始的資料分布,特別越到後面的層資料分布與原始資料分布偏離的越多。

但是我們神經網路的初衷就是要去擬合原始資料分布的特徵,這樣不就改變了它的初衷?

Bn在這裡就起到了作用,經過啟用函式輸出之後,先進行bn標準化,使得資料分布更平滑,不至於全部聚集在一些維度特徵,這樣的資料分布更接近原始的資料分布。說到這裡,為什麼不直接用標準化歸一化,而要用bn呢?這是因為直接使用標準化會導致你啟用後得到的值,可能原本是分布在啟用函式左右兩端,但是被你標準化到了中間,那麼你之前提取特徵的意義就不在了。

bn聰明的做法在於它加了a,b兩個引數也參與反向傳播的更新,讓模型自己去控制標準化的引數。

以前為了防止資料分布在一層一層的傳遞過程中,發生較大的偏離,不能使用較大的學習率,但是bn就解決了這個問題,也使得模型能更快的擬合,加快訓練。

模型不再集中於較少的特徵維度,也使得不存在大多數w權重都接近0的情況,解決了梯度消失問題。

7樓:Zhenqiang Su

資料在經過不同層的時候,資料的分布是會發生變化的。比如輸入資料分布是A,經過輸入層後分布會變為B 。資料分布的變化受引數影響很敏感。

比如輸入層引數變了一點,資料分布就可能發生相應的變化。比如輸入資料分布是A,經過輸入層後現在分布會變為C了, 因為輸入層的引數在訓練時已經變了。那麼在深度學習中,有N層,經過每層,分布都會不同。

更嚴重的是,沒次訓練都會導致每層的引數的變化,進而導致每層的資料分布在不斷的變化。那麼在這種情況下,訓練的目標就是讓引數去fit這種不停變化的分布。 這對訓練而言是很困難的。

解決方法就是把每層的分布都fixed,然後讓模型去學,那樣就容易學多了。這樣模型就能學得快而且效果也好。

那如何做到把每層的分布都fixed? 直接的方法就是對每層的資料做normalization (就是 (X-MEAN)/STD)。 這裡的mean 和STD是對整體訓練資料而言的。

當然這樣做不現實的,因為每次計算mean/std 太費勁。

那麼現實的方法就是只對batch size 的資料進行求mean/std。然後進行normalization。

以上是從頂層上的解釋,到執行還有些細節,比如如何讓他保持模型的表徵效能等等。

深度學習中 number of training epochs 中的 epoch到底指什麼?

小島上的黑桃六 1 epoch batch size step sample size 1 batch size samplesize batch num 1次 epoch 計算 1次Loss 為後續迭代進行引數修正 1次 step 更新一次 params 對應計算 optimize functio...

深度學習中的深度一詞怎麼理解?

按照 Bengio 的說法,3 層以下為淺層。反之你可以理解為深。Bengio,Y.Learning deep architectures for AI.Foundations and Trends in Machine Learning,2009.2 1 從字面意思理解,深度 是指一種空間關係。後...

深度學習中saturation是什麼意思?

泰克尼客 就是指梯度接近於0 例如sigmoid函式的值接近於0或1時,函式曲線平緩,梯度接近於0 的狀態,這會導致採用梯度下降法求最值時,速度偏緩。解決方法是更換損失函式和啟用函式的組合。例如cross entropy sigmoid,logloss softmax。其實質都是在數學層面上,這種組...