BN與神經網絡調優

學習目標

  • 目標
    • 知道常用的一些神經網絡超參數
    • 知道BN層的意義以及數學原理
  • 應用

2.4.1 神經網絡調優

我們經常會涉及到參數的調優,也稱之爲超參數調優。目前我們從第二部分中講過的超參數有

  • 算法層面:

    • 學習率\alphaα

    • \beta1,\beta2, \epsilonβ1,β2,ϵ: Adam 優化算法的超參數,常設爲 0.9、0.999、10^{-8}10​−8​​

    • \lambdaλ:正則化網絡參數,
  • 網絡層面:

    • hidden units:各隱藏層神經元個數
    • layers:神經網絡層數

2.4.1.1 調參技巧

對於調參,通常採用跟機器學習中介紹的網格搜索一致,讓所有參數的可能組合在一起,得到N組結果。然後去測試每一組的效果去選擇。

假設我們現在有兩個參數

\alphaα: 0.1,0.01,0.001,\betaβ:0.8,0.88,0.9

這樣會有9種組合,[0.1, 0.8], [0.1, 0.88], [0.1, 0.9]…….

  • 合理的參數設置
    • 學習率\alphaα:0.0001、0.001、0.01、0.1,跨度稍微大一些。
    • 算法參數\betaβ, 0.999、0.9995、0.998等,儘可能的選擇接近於1的值

注:而指數移動平均值參數:β 從 0.9 (相當於近10天的影響)增加到 0.9005 對結果(1/(1-β))幾乎沒有影響,而 β 從 0.999 到 0.9995 對結果的影響會較大,因爲是指數級增加。通過介紹過的式子理解S_{100} = 0.1Y_{100} + 0.1 * 0.9Y_{99} + 0.1 * {(0.9)}^2Y_{98} + ...S​100​​=0.1Y​100​​+0.1∗0.9Y​99​​+0.1∗(0.9)​2​​Y​98​​+...

2.4.1.2 運行

通常我們有這麼多參數組合,每一個組合運行訓練都需要很長時間,但是如果資源允許的話,可以同時並行的訓練多個參數模型,並觀察效果。如果資源不允許的話,還是得一個模型一個模型的運行,並時刻觀察損失的變化

所以對於這麼多的超參數,調優是一件複雜的事情,怎麼讓這麼多的超參數範圍,工作效果還能達到更好,訓練變得更容易呢?

2.4.2 批標準化(Batch Normalization)

Batch Normalization論文地址:https://arxiv.org/abs/1502.03167

其中最開頭介紹是這樣的:

 

訓練深度神經網絡很複雜,因爲在訓練期間每層輸入的分佈發生變化,因爲前一層的參數發生了變化。這通過要求較低的學

習率和仔細的參數初始化來減慢訓練速度,並且使得訓練具有飽和非線性的模型變得非常困難。我們將這種現象稱爲** 內部協

變量偏移** ,並通過 **標準化層** 輸入來解決問題。我們的方法的優勢在於使標準化成爲模型體系結構的一部分,併爲每

個培訓小批量執行標準化。批量標準化允許我們使用更高的學習率並且不太關心初始化。它還可以充當調節器,在某些情況

下可以消除對Dropout的需求。應用於最先進的圖像分類模型,批量標準化實現了相同的精度,培訓步驟減少了14倍,並

且顯着地超過了原始模型。使用批量標準化網絡的集合,我們改進了ImageNet分類的最佳發佈結果:達到4.9%的前5個

驗證錯誤(和4.8%的測試錯誤),超出了人類評估者的準確性。

首先我們還是回到之前,我們對輸入特徵 X 使用了標準化處理。標準化化後的優化得到了加速。

對於深層網絡呢?我們接下來看一下這個公式,這是向量的表示。表示每Mini-batch有m個樣本。

  • m個樣本的向量表示

Z^{[L]} = W^{[L]}A^{[L-1]}+b^{[L]}Z​[L]​​=W​[L]​​A​[L−1]​​+b​[L]​​

A^{[L]}=g^{[L]}(Z^{[L]})A​[L]​​=g​[L]​​(Z​[L]​​)

輸入A^{[L-1]}A​[L−1]​​, 輸出A^{[L]}A​[L]​​

深層網絡當中不止是初始的特徵輸入,而到了隱藏層也有輸出結果,所以我們是否能夠對隱層的輸入Z^{[L]}Z​[L]​​進行標準化,注意這裏不是經過激活函數之後的A^{[L]}A​[L]​​

 

2.4.2.1 批標準化公式

所以假設對於上圖第二個四個神經元隱層。記做Z^{[l]}Z​[l]​​,那麼這一層會涉及多個z,所以我們默認用z^{[l]}_{[i]}z​[i]​[l]​​,爲了簡單顯示去掉了ll層這個標識,所以對於標準化中的平均值,以及方差

\mu = \frac{1}{m} \sum_i z^{(i)}μ=​m​​1​​∑​i​​z​(i)​​

\sigma^2 = \frac{1}{m} \sum_i {(z_i - \mu)}^2σ​2​​=​m​​1​​∑​i​​(z​i​​−μ)​2​​

z_{norm}^{(i)} = \frac{z^{(i)} - \mu}{\sqrt{\sigma^2 + \epsilon}}z​norm​(i)​​=​√​σ​2​​+ϵ​​​​​z​(i)​​−μ​​

其中\epsilonϵ是爲了防止分母爲0,取值10^{-8}10​−8​​。這樣使得所有的l層輸入z^{[l]}_{[i]}z​[i]​[l]​​爲 0,方差爲 1。但是原文的作者不想讓隱藏層單元總是含有平均值 0 和方差 1,他認爲也許隱藏層單元有了不同的分佈會更有意義。因此,我們會增加這樣的甲酸

\tilde z^{(i)} = \gamma z^{(i)}_{norm} + \beta​z​~​​​(i)​​=γz​norm​(i)​​+β

其中,\gammaγ和\betaβ都是模型的學習參數(如同W和b一樣),所以可以用各種梯度下降算法來更新 γ 和 β 的值,如同更新神經網絡的權重一樣。

  • 爲什麼要使用這樣兩個參數

如果各隱藏層的輸入均值在靠近0的區域,即處於激活函數的線性區域,不利於訓練非線性神經網絡,從而得到效果較差的模型。因此,需要用 γ 和 β 對標準化後的結果做進一步處理。

2.4.2.2 過程圖

 

每一層中都會有兩個參數\beta, \gammaβ,γ。

注:原論文的公式圖

 

2.4.2.2 爲什麼批標準化能夠是優化過程變得簡單

我們之前在原文中標記了一個問題叫做叫做"internal covariate shift"。這個詞翻譯叫做協變量偏移,但是並不是很好理解。那麼有一個解釋叫做 在網絡當中數據的分佈會隨着不同數據集改變 。這是網絡中存在的問題。那我們一起來看一下數據本身分佈是在這裏會有什麼問題。

 

也就是說如果我們在訓練集中的數據分佈如左圖,那麼網絡當中學習到的分佈狀況也就是左圖。那對於給定一個測試集中的數據,分佈不一樣。這個網絡可能就不能準確去區分。這種情況下,一般要對模型進行重新訓練。

Batch Normalization的作用就是減小Internal Covariate Shift 所帶來的影響,讓模型變得更加健壯,魯棒性(Robustness)更強。即使輸入的值改變了,由於 Batch Normalization 的作用,使得均值和方差保持固定(由每一層\gammaγ和\betaβ決定),限制了在前層的參數更新對數值分佈的影響程度,因此後層的學習變得更容易一些。Batch Normalization 減少了各層 W 和 b 之間的耦合性,讓各層更加獨立,實現自我訓練學習的效果

2.4.2.3 BN總結

Batch Normalization 也起到微弱的正則化效果,但是不要將 Batch Normalization 作爲正則化的手段,而是當作加速學習的方式。Batch Normalization主要解決的還是反向傳播過程中的梯度問題(梯度消失和爆炸)。

2.4.3 總結

  • 掌握基本的超參數以及調參技巧
  • 掌握BN的原理以及作用
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章