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的原理以及作用
總結
 
                            
                        - 上一篇: Lumen报class does not
- 下一篇: 图像数据与边缘检测
