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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Batch Normalization的作用及原理

發布時間:2025/3/15 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Batch Normalization的作用及原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 聲明
  • BN是什么[1]
  • 為什么提出BN[1, 2]
  • BN的作用及原理
    • 加速訓練,提高收斂速度[1]
    • 緩解梯度消失(梯度爆炸)[3]
    • 緩解過擬合[4]
  • 其他相關問題
    • BN和激活函數的順序問題[5]
    • 使用ReLU還需要用BN嗎[6, 7]

聲明

由于學習本篇博客的內容時翻閱了很多資源,如知乎、他人博客等,很多內容已經不記得是在哪學到的了,也沒有辦法一一列舉了,能列舉的我盡量列舉,如有侵權,請聯系我刪除,謝謝。

BN是什么[1]

BN是谷歌在這篇文章中提出的。具體的操作是,在每次SGD時,對mini-batch進行規范化操作,使結果的均值為0,方差為1。再經過scale+shift操作,盡量去還原BN前的輸出。


為什么提出BN[1, 2]

先看一下論文的題目《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》,可以看出,BN的動機是降低Internal Covariate Shift(以下簡稱ICS)來加速網絡訓練,下面解釋什么是ICS。

在訓練過程中,由于不同層的參數是不斷變化的,這會導致,對于不同層,輸入的分布是不斷變化的。隨著網絡層數的加深,高層輸入的分布會與原始輸入樣本的分布存在較大差異。以上便是ICS問題。

由于ICS問題,模型的優化難度變大,收斂速度慢。

BN的作用及原理

加速訓練,提高收斂速度[1]

一方面,BN通過固定層間數據分布的方法,解決了ICS問題,從而提高了模型的訓練速度。另一方面,由于BN能夠緩解梯度消失(梯度爆炸),可以提高模型的收斂速度。

緩解梯度消失(梯度爆炸)[3]

  • 不使用BN
    在不使用BN時,對于某一層的前向傳播,應有:
    Hl=WlTHl?1H_l=W_l^TH_{l-1}Hl?=WlT?Hl?1?
    那么該層的反向傳播梯度為:
    ?Hl?Hl?1=Wl\frac{\partial H_l}{\partial H_{l-1}}=W_l?Hl?1??Hl??=Wl?
    多層累計后的梯度為:
    ?Hl?Hk=∏i=k+1lWi\frac{\partial H_l}{\partial H_k}=\prod_{i=k+1}^lW_i?Hk??Hl??=i=k+1l?Wi?
    可以看出,如果WiW_iWi?總是較小的,經過不斷的連乘,梯度呈指數級下降,即梯度消失。反之,如果WiW_iWi?總是較大的,會發生梯度爆炸。

  • 使用BN
    帶有BN的前向傳播為:
    Hl=BN(WlTHl?1)=1σl(WlTHl?1?μl)H_l=BN(W_l^TH_{l-1})=\frac{1}{\sigma_l}(W_l^TH_{l-1}-\mu_l)Hl?=BN(WlT?Hl?1?)=σl?1?(WlT?Hl?1??μl?)
    則反向傳播的梯度為:
    ?Hl?Hl?1=Wl1σl\frac{\partial H_l}{\partial H_{l-1}}=W_l\frac{1}{\sigma_l}?Hl?1??Hl??=Wl?σl?1?
    多層累計后的梯度為:
    ?Hl?Hk=∏i=k+1lWi1σi\frac{\partial H_l}{\partial H_k}=\prod_{i=k+1}^lW_i\frac{1}{\sigma_i}?Hk??Hl??=i=k+1l?Wi?σi?1?
    可以看出,使用BN后,在反向傳播時,使用1σi\frac{1}{\sigma_i}σi?1?對梯度進行了縮放。如果WiW_iWi?較小,則WiTHl?1W_i^TH_{l-1}WiT?Hl?1?較小,則σi{\sigma_i}σi?較小,1σi\frac{1}{\sigma_i}σi?1?較大,Wi1σlW_i\frac{1}{\sigma_l}Wi?σl?1?WiW_iWi?大,實現了放縮。如果WiW_iWi?較大,也是同理。為什么WiTHl?1W_i^TH_{l-1}WiT?Hl?1?較小,則σi{\sigma_i}σi?較小?舉個例子,1,5,10,20,30這組數據的標準差是10.5338,而0.1,0.5,1,2,3這組數據的標準差是1.05338。

緩解過擬合[4]

BN能夠緩解過擬合在于引入了noise。對于特定的一層,在某個batch的前向傳播過程中,如果添加了BN操作,則會對該層的輸出進行normalization,具體如下式:
outputAfter_BN=output?batch_mean(output)batch_variance(output)output_{After\_BN}=\frac{output-batch\_mean(output)}{batch\_variance(output)}outputAfter_BN?=batch_variance(output)output?batch_mean(output)?
這說明,在每一次訓練過程中,即使對于相同的樣本,如果在batch中的其他樣本發生了變化,batch_mean(output)batch\_mean(output)batch_mean(output)batch_variance(output)batch\_variance(output)batch_variance(output)就會發生變化。這會導致,相同樣本在不同的batch中會產生不同的outputAfter_BNoutput_{After\_BN}outputAfter_BN?,相當于對于每個樣本都引入了noise。模型為了克服樣本的noise,會更加generalize,即降低了過擬合。

其他相關問題

BN和激活函數的順序問題[5]

現在大多數的模型中都是用BN+ReLU,但是從BN論文的原理上將,其實ReLU+BN似乎能更好的解決ICS問題,下面分析一下兩種方式的優缺點。

  • BN+ReLU
    讓ReLU更好的進行特征選擇,使其單側抑制起作用。
  • ReLU+BN
    更好地解決ICS問題,訓練效率更高。

使用ReLU還需要用BN嗎[6, 7]

由于ReLU有dead neuron問題,使用BN后可以保證有一定占比的神經元處于激活狀態,解決了dying ReLU問題。


[1] https://www.zhihu.com/question/38102762
[2] https://zhuanlan.zhihu.com/p/136701745
[3] https://www.zhihu.com/collection/537883741
[4] https://www.zhihu.com/question/291571486/answer/861428056
[5] https://zhuanlan.zhihu.com/p/113442866
[6] https://www.zhihu.com/question/304603935/answer/544970232
[7] https://www.zhihu.com/question/338802747/answer/784239481

總結

以上是生活随笔為你收集整理的Batch Normalization的作用及原理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。