乾貨 | BatchNormalization詳解與比較

2021-03-02 程式設計師大白

點擊上方「程式設計師大白」,選擇「星標」公眾號

重磅乾貨,第一時間送達

Internal Covariate Shift(ICS)

Batch Normalization的原論文作者給了Internal Covariate Shift一個較規範的定義:在深層網絡訓練的過程中,由於網絡中參數變化而引起內部結點數據分布發生變化的這一過程被稱作Internal Covariate Shift。

這裡做一個簡單的數學定義,對於全連結網絡而言,第i層的數學表達可以體現為:

【怎麼理解ICS問題】

我們知道,隨著梯度下降的進行,每一層的參數這意味著,除了第一層的輸入數據不改變,之後所有層的輸入數據的分布都會隨著模型參數的更新發生改變,而每一層就要不停的去適應這種數據分布的變化,這個過程就是Internal Covariate Shift。

BN解決的問題

【ICS帶來的收斂速度慢】

因為每一層的參數不斷發生變化,從而每一層的計算結果的分布發生變化,後層網絡不斷地適應這種分布變化,這個時候會讓整個網絡的學習速度過慢。

【梯度飽和問題】

因為神經網絡中經常會採用sigmoid,tanh這樣的飽和激活函數(saturated actication function),因此模型訓練有陷入梯度飽和區的風險。解決這樣的梯度飽和問題有兩個思路:第一種就是更為非飽和性激活函數,例如線性整流函數ReLU可以在一定程度上解決訓練進入梯度飽和區的問題。另一種思路是,我們可以讓激活函數的輸入分布保持在一個穩定狀態來儘可能避免它們陷入梯度飽和區,這也就是Normalization的思路。

Batch Normalization

batchNormalization就像是名字一樣,對一個batch的數據進行normalization。

現在假設一個batch有3個數據,每個數據有兩個特徵:(1,2),(2,3),(0,1)

如果做一個簡單的normalization,那麼就是計算均值和方差,把數據減去均值除以標準差,變成0均值1方差的標準形式。

對於第一個特徵來說:

【通用公式】

目前為止,我們做到了讓每個特徵的分布均值為0,方差為1。這樣分布都一樣,一定不會有ICS問題

如同上面提到的,Normalization操作我們雖然緩解了ICS問題,讓每一層網絡的輸入數據分布都變得穩定,但卻導致了數據表達能力的缺失。每一層的分布都相同,所有任務的數據分布都相同,模型學啥呢

【0均值1方差數據的弊端】

通過讓每一層的輸入分布均值為0,方差為1,會使得輸入在經過sigmoid或tanh激活函數時,容易陷入非線性激活函數的線性區域。(線性區域和飽和區域都不理想,最好是非線性區域)

為了解決這個問題,BN層引入了兩個可學習的參數

所以對於某一層的網絡來說,我們現在變成這樣的流程:

(上面公式中,省略了

測試階段的BN

我們知道BN在每一層計算的

利用訓練集訓練好模型之後,其實每一層的BN層都保留下了每一個batch算出來的

當然,計算訓練集的

BN層的好處有哪些

BN使得網絡中每層輸入數據的分布相對穩定,加速模型學習速度。BN通過規範化與線性變換使得每一層網絡的輸入數據的均值與方差都在一定範圍內,使得後一層網絡不必不斷去適應底層網絡中輸入的變化,從而實現了網絡中層與層之間的解耦,允許每一層進行獨立學習,有利於提高整個神經網絡的學習速度。

BN允許網絡使用飽和性激活函數(例如sigmoid,tanh等),緩解梯度消失問題通過normalize操作可以讓激活函數的輸入數據落在梯度非飽和區,緩解梯度消失的問題;另外通過自適應學習

BN具有一定的正則化效果在Batch Normalization中,由於我們使用mini-batch的均值與方差作為對整體訓練樣本均值與方差的估計,儘管每一個batch中的數據都是從總體樣本中抽樣得到,但不同mini-batch的均值與方差會有所不同,這就為網絡的學習過程中增加了隨機噪音

BN與其他normalizaiton的比較

【weight normalization】Weight Normalization是對網絡權值進行normalization,也就是L2 norm。

相對於BN有下面的優勢:

WN通過重寫神經網絡的權重的方式來加速網絡參數的收斂,不依賴於mini-batch。BN因為依賴minibatch所以BN不能用於RNN網路,而WN可以。而且BN要保存每一個batch的均值方差,所以WN節省內存;BN的優點中有正則化效果,但是添加噪音不適合對噪聲敏感的強化學習、GAN等網絡。WN可以引入更小的噪音。

但是WN要特別注意參數初始化的選擇。

【Layer normalization】更常見的比較是BN與LN的比較。BN層有兩個缺點:

無法進行在線學習,因為在線學習的mini-batch為1;LN可以

但是,在CNN中LN並沒有取得比BN更好的效果。

參考連結:

https://zhuanlan.zhihu.com/p/34879333https://www.zhihu.com/question/59728870https://zhuanlan.zhihu.com/p/113233908https://www.zhihu.com/question/55890057/answer/267872896

相關焦點

  • 深入理解Batch Normalization
    如圖所示,feature map: 該參數作用於mean和variance的計算上,這裡保留了歷史batch裡的mean和variance值,借鑑優化算法裡的momentum算法將歷史batch裡的mean和variance的作用延續到當前batch。一般momentum的值為0.9 , 0.99等. 多個batch後, 即多個0.9連乘後,最早的batch的影響會變弱。
  • Batch Normalization 的實戰使用
    前言Batch normalization 有多好用我就不多說了,一般來說,做卷積神經網絡加上batch normalization,效果會得到一定的提升的。具體的batch normalization的原理可以參照(https://zhuanlan.zhihu.com/p/34879333)我在他的基礎上補充關於卷積神經網絡使用Batch normalization的一些代碼實現。
  • 什麼是批標準化 (Batch Normalization)
    換句話說, 神經網絡在初始階段已經不對那些比較大的 x 特徵範圍 敏感了. 這樣很糟糕, 想像我輕輕拍自己的感覺和重重打自己的感覺居然沒什麼差別, 這就證明我的感官系統失效了. 當然我們是可以用之前提到的對數據做 normalization 預處理, 使得輸入的 x 變化範圍不會太大, 讓輸入值經過激勵函數的敏感部分.
  • Batch Normalization原理與實戰(下)
    本文為第二部分實戰板塊,主要以MNIST數據集作為整個代碼測試的數據,通過比較加入Batch Normalization前後網絡的性能來讓大家對Batch Normalization的作用與效果有更加直觀的感知。經過了上面了理論學習,我們對BN有了理論上的認知。「Talk is cheap, show me the code」。
  • 詳解Batch Normalization及其反向傳播
    的mini-batch首先,由(2.1)和(2.2)得到mini-batch的均值和方差,之後進行(2.3)的歸一化操作,在分母加上一個小的常數是為了避免出現除0操作。 在normalization前兩個比較直觀,求
  • 【精華】Batch Normalization理論與實踐
    BN算法(Batch Normalization)其強大之處如下:(1)你可以選擇比較大的初始學習率,讓你的訓練速度飆漲。以前還需要慢慢調整學習率,甚至在網絡訓練到一半的時候,還需要想著學習率進一步調小的比例選擇多少比較合適,現在我們可以採用初始很大的學習率,然後學習率的衰減速度也很大,因為這個算法收斂很快。
  • 理解Batch Normalization(含實現代碼)
    我們將比較每個網絡的驗證損失。def conv_block_first(model, bn=True, activation="sigmoid"):    """ The first convolutional block in each architecture.
  • Batch Normalization應該放在ReLU非線性激活層的前面還是後面?
    點擊上方「小白學視覺」,選擇加"星標"或「置頂」重磅乾貨另外,Jeremy Howard直接主張把BN放在非線性激活後面You want the batchnorm after the non-linearity, and before the dropout.「應該」放在前面還是後面?這個「應該」其實有兩種解釋:放在前面還是後面比較好?
  • Layer Normalization
    最近半個月因為旅遊和開學,一直沒有更新,各位沒有取關看來是真愛了,比心~~這邊生活穩定之後更新應該也會比較穩定...吧...這學期選了很多數學課,今天恰好又看到一篇數學性很強的論文,所以決心用這篇來練練手差點直接勸退...廢話不多說,進入今天的正題——layer normalization。
  • Batch Normalization
    個樣本的mini-batch我們用mini-batch來逼近損失函數真實梯度為什麼要mini-batch?次單個樣本效率更高, 這得益於並行計算的技術.一些問題從上面的討論來看, 我們似乎已經擁有比較好的算法來訓練神經網絡
  • Batchnorm原理詳解
    本文旨在用通俗易懂的語言,對深度學習的常用算法--batchnorm的原理及其代碼實現做一個詳細的解讀。本文主要包括以下幾個部分。>=x_(1...m)共m個數據,輸出是y_i=BN(x),batchnorm的步驟如下:先求出此次批量數據x的均值求出此次batch的方差
  • 什麼是 Batch Normalization?
    重磅乾貨
  • 深度學習中眼花繚亂的Normalization學習總結
    點上方藍字人工智慧算法與Python大數據獲取更多乾貨在右上方
  • 詳解深度學習中的Normalization,BN/LN/WN
    本文繼續沿襲上一個專題(Adam那麼棒,為什麼還對SGD念念不忘 —— 一個框架看懂優化算法)的寫作思路,先提煉一個通用的分析框架,然後再對號入座式地梳理各大主流算法,便於我們分析比較。目錄:1. ,但規範化的參數是一個 mini-batch 的一階統計量和二階統計量。這就要求 每一個 mini-batch 的統計量是整體統計量的近似估計,或者說每一個 mini-batch 彼此之間,以及和整體數據,都應該是近似同分布的。
  • <深度學習優化策略-3> 深度學習網絡加速器Weight Normalization_WN
    Weight Normalization和Batch Normalization都屬於參數重寫(Reparameterization)的方法,只是採用的方式不同,Weight Normalization是對網絡權值W進行normalization,因此也稱為Weight Normalization;Batch Normalization是對網絡某一層輸入數據進行normalization
  • executeBatch()該如何運用?關於 executeBatch() 的詳解用法
    executeBatch()詳解JDBC提供了資料庫batch處理的能力,在數據大批量操作(新增、刪除等)的情況下可以大幅度提升系統的性能。* according to the order in which they were added to the batch.
  • 【GAN】四、CGAN論文詳解與代碼詳解
    若有興趣請分別移步如下連結:【GAN】一、利用keras實現DCGAN生成手寫數字圖像【GAN】二、原始GAN論文詳解【GAN】三、DCGAN論文詳解本篇博客我們將介紹CGAN(條件GAN)論文的相關細節。CGAN的論文網址請移步:https://arxiv.org/pdf/1411.1784.pdf。
  • 【綜述專欄】深度學習中眼花繚亂的Normalization學習總結
    分布差距較小的 mini-batch 可以看做是為規範化操作和模型訓練引入了噪聲,可以增加模型的魯棒性;但如果每個 mini-batch的原始分布差別很大,那麼不同 mini-batch 的數據將會進行不一樣的數據變換,這就增加了模型訓練的難度。因此,BN 比較適用的場景是:每個 mini-batch 比較大,數據分布比較接近。在進行訓練之前,要做好充分的 shuffle.
  • 常用的 Normalization 方法:BN、LN、IN、GN
    我們將輸入的 feature map shape 記為[N, C, H, W],其中N表示batch size,即N個樣本;C表示通道數;H、W分別表示特徵圖的高度、寬度。這幾個方法主要的區別就是在:1. BN是在batch上,對N、H、W做歸一化,而保留通道 C 的維度。BN對較小的batch size效果不好。
  • 常用 Normalization 方法的總結與思考:BN、LN、IN、GN
    (1)在深度神經網絡訓練的過程中,通常以輸入網絡的每一個mini-batch進行訓練,這樣每個batch具有不同的分布,使模型訓練起來特別困難。LN不依賴於batch size和輸入sequence的長度,因此可以用於batch size為1和RNN中。LN用於RNN效果比較明顯,但是在CNN上,效果不如BN。