[DeeplearningAI筆記]第二章3.4-3.7-Batch NormalizationBN算法


[DeeplearningAI筆記]第二章3.4-3.7-Batch NormalizationBN算法

覺得有用的話,歡迎一起討論相互學習~

我的微博我的github我的B站

3.4正則化網絡的激活函數

  • Batch歸一化會使你的參數搜索問題變得很容易,使神經網絡對超參數的選擇更加穩定.超參數的范圍會更龐大,工作效果也更好.也會使你更容易的訓練甚至是深層網絡.
  • 對於logistic回歸來說

正則化原理

\[u=\frac{1}{m}\sum x^{i}(求出平均值u) \]

\[x=x-u \]

\[\sigma^{2}=\frac{1}{m}\sum(x^{i})^{2}(求出方差) \]

\[x=\frac{x}{\sigma^{2}} \]

  • 函數曲線會由類似於橢圓變成更圓的東西,更加易於算法優化.

  • 深層神經網絡

  • 我們將每一層神經網絡計算得到的z值(在計算激活函數之前的值)進行歸一化處理,即將\(Z^{[L]}\)的值進行歸一化處理,進而影響下一層\(W^{[L+1]}和b^{[L+1]}\)的計算.

  • 此時z的每個分量都含有平均值0和方差1,但我們不想讓隱藏單元總是含有平均值0和方差1,例如在應用sigmoid函數時,我們不想使其繪制的函數圖像如圖所示,我們想要變換方差或者是不同的平均值.

第L層神經元正則化公式

\[u=\frac{1}{m}\sum_{i}Z^{i} \]

\[\sigma^{2}=\frac{1}{m}\sum_{i}(Z^{i}-u)^{2}$$$$Z^{i}_{norm}=\frac{Z^{i}-u}{\sqrt{\sigma^2+\epsilon}} \]

\[\check{Z^{i}}=\gamma Z^{i}_{norm}+\beta \]

3.5 將Batch Normalization擬合進神經網絡

  • 對於Batch Normalization算法而言,計算出一層的\(Z^{[l]}\)之后,進行Batch Normalization操作,此過程將有\(\beta^{[l]},\gamma^{[l]}\)這兩個參數控制.這一步操作會給你一個新的規范化的\(z^{[l]}\)值.然后將其輸入到激活函數中,得到\(a^{[l]}\)

  • 實質上,BN算法是在每一層的\(Z^{[l]}\)\(a^{[l]}\)之間進行的運算

3.6 Batch Normalization為什么奏效

原因一

  • 無論數據的范圍是0~1之間還是1~1000之間,通過歸一化,所有的輸入特征X,都可以獲得類似范圍的值,可加速學習.

原因二

  • 如果神經元的數據分布改變,我們也許需要重新訓練數據以擬合新的數據分布.這會帶來一種數據的不穩定的效果.(covariate shift)
  • Batch Normalization做的是它減少了這些隱藏值分布變化的數量.因為隨着訓練的迭代過程,神經元的值會時常發生變化.batch歸一化可以確保,無論其怎樣變化,其均值和方差將保持不變.(由每一層的BN函數的參數\(\beta^{[l]},\gamma^{[l]}\)決定其方差和均值)
  • Batch Normalization減少了輸入值改變的問題,它的確使這些值變的穩定,即是原先的層改變了,也會使后面的層適應改變的程度減小.也可以視為它減少了前層參數和后層參數之間的聯系.

原因三

  • Batch Normalization有輕微的正則化作用.
    • BN算法是通過mini-batch計算得出,而不是使用整個數據集,所以會引入部分的噪音,即會在縱軸上有些許波動.
    • 縮放的過程從\(Z^{[l]}\rightarrow\check{Z^{[l]}}\)也會引入一些噪音.
    • 所以和Dropout算法一樣,它往每個隱藏層的激活值上增加了噪音,dropout有噪音的模式,它使一個隱藏的單元以一定的概率乘以0,以一定得概率乘以1.BN算法的噪音主要體現在標准偏差的縮放和減去均值帶來的額外噪音.這使得后面層的神經單元不會過分依賴任何一個隱藏單元.有輕微的正則化作用.如果你想獲得更好的正則化效果,可以在使用Batch-Normalization的同時使用Dropout算法.

3.7測試時的Batch Normalization

  • Batch-Normalization將你的數據以mini-batch的形式逐一處理,但在測試時,你可能需要對每一個樣本逐一處理.我們應該怎么做呢~

Batch-Normalization公式

  • 注意 對於u和\(\sigma\)是在整個mini-batch上進行計算,但是在測試時,你不會使用一個mini-batch中的所有數據(因為測試時,我們僅僅需要少量數據來驗證神經網絡訓練的正確性即可.)況且如果我們只使用一個數據,那一個樣本的均值和方差沒有意義,因此我們需要用其他的方式來得到u和\(\sigma\)這兩個參數.
  • 運用覆蓋所有mini-batch的指數加權平均數來估算u和\(\sigma\)

利用指數加權平均來估算\(u和\sigma\)對數據進行測試

對於第L層神經元層,標記mini-batch為\(x^{[1]},x^{[2]},x^{[3]},x^{[4]}...x^{[n]}\)在訓練這個隱藏層的第一個mini-batch得到\(u^{[1][l]}\),訓練第二個mini-batch得到\(u^{[2][l]}\),訓練第三個mini-batch得到\(u^{[3][l]}\)...訓練第n個mini-batch得到\(u^{[n][l]}\).然后利用指數加權平均法估算\(u\)的值,同理,以這種方式利用指數加權平均的方法估算\(\sigma^{2}\).

總結

在訓練時,u和\(\sigma^{2}\)在整個mini-batch上計算出來的,但是在測試時,我們需要單一估算樣本,方法是根據你的訓練集估算u和\(\sigma^{2}\).常見的方法有利用指數加權平均進行估算.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM