吳恩達深度學習筆記02——改善深層神經網絡3超參數調試

一、超參數調試處理

1、重要程度排序

目前已經講到過的超參數中,重要程度依次是:

  • 最重要:

    學習率 α;

  • 其次重要:

    β:動量衰減參數,常設置爲 0.9;
    #hidden units:各隱藏層神經元個數;
    mini-batch 的大小;

  • 再次重要:

    #layers:神經網絡層數;
    decay_rate:學習衰減率;

  • β1,β2,ϵ:Adam 優化算法的超參數,常設爲 0.9、0.999、10−8;

2、調參技巧

系統地組織超參調試過程的技巧:

  • 隨機選擇點(而非均勻選取),用這些點實驗超參數的效果。這樣做的原因是我們提前很難知道超參數的重要程度,可以通過選擇更多值來進行更多實驗;
  • 由粗糙到精細:聚焦效果不錯的點組成的小區域,在其中更密集地取值,以此類推;

3、選擇合適的範圍

  • 對於學習率 α,用對數標尺而非線性軸更加合理:0.0001、0.001、0.01、0.1 等,然後在這些刻度之間再隨機均勻取值;
  • 對於 β,取 0.9 就相當於在 10 個值中計算平均值,而取 0.999 就相當於在 1000 個值中計算平均值。可以考慮給 1-β 取值,這樣就和取學習率類似了。

上述操作的原因是當 β 接近 1 時,即使 β 只有微小的改變,所得結果的靈敏度會有較大的變化。例如,β 從 0.9 增加到 0.9005 對結果(1/(1-β))幾乎沒有影響,而 β 從 0.999 到 0.9995 對結果的影響巨大(從 1000 個值中計算平均值變爲 2000 個值中計算平均值)。

4、一些建議

  • 深度學習如今已經應用到許多不同的領域。不同的應用出現相互交融的現象,某個應用領域的超參數設定有可能通用於另一領域。不同應用領域的人也應該更多地閱讀其他研究領域的 paper,跨領域地尋找靈感;
  • 考慮到數據的變化或者服務器的變更等因素,建議每隔幾個月至少一次,重新測試或評估超參數,來獲得實時的最佳模型;
  • 根據你所擁有的計算資源來決定你訓練模型的方式:
    Panda(熊貓方式):在在線廣告設置或者在計算機視覺應用領域有大量的數據,但受計算能力所限,同時試驗大量模型比較困難。可以採用這種方式:試驗一個或一小批模型,初始化,試着讓其工作運轉,觀察它的表現,不斷調整參數;
    Caviar(魚子醬方式):擁有足夠的計算機去平行試驗很多模型,嘗試很多不同的超參數,選取效果最好的模型;



二、Batch Normalization

批標準化(Batch Normalization,經常簡稱爲 BN)會使參數搜索問題變得很容易,使神經網絡對超參數的選擇更加穩定,超參數的範圍會更龐大,工作效果也很好,也會使訓練更容易。
在這裏插入圖片描述
其中,γ 和 β 都是模型的學習參數,所以可以用各種梯度下降算法來更新 γ 和 β 的值,如同更新神經網絡的權重一樣。
在這裏插入圖片描述
設置 γ 和 β 的原因是,如果各隱藏層的輸入均值在靠近 0 的區域,即處於激活函數的線性區域,不利於訓練非線性神經網絡,從而得到效果較差的模型。因此,需要用 γ 和 β 對標準化後的結果做進一步處理。

1、將 BN 應用於神經網絡

對於 L 層神經網絡,經過 Batch Normalization 的作用,整體流程如下
在這裏插入圖片描述
實際上,Batch Normalization 經常使用在 mini-batch 上,這也是其名稱的由來。

使用 Batch Normalization 時,因爲標準化處理中包含減去均值的一步,因此 b 實際上沒有起到作用,其數值效果交由 β 來實現。因此,在 Batch Normalization 中,可以省略 b 或者暫時設置爲 0。

在使用梯度下降算法時,分別對 W[l],β[l]和 γ[l]進行迭代更新。除了傳統的梯度下降算法之外,還可以使用之前學過的動量梯度下降、RMSProp 或者 Adam 等優化算法。

2、BN 有效的原因

Batch Normalization 效果很好的原因有以下兩點:

  • 通過對隱藏層各神經元的輸入做類似的標準化處理,提高神經網絡訓練速度;
  • 可以使前面層的權重變化對後面層造成的影響減小,整體網絡更加健壯。

關於第二點,如果實際應用樣本和訓練樣本的數據分佈不同(例如,橘貓圖片和黑貓圖片),我們稱發生了“Covariate Shift”。這種情況下,一般要對模型進行重新訓練。Batch Normalization 的作用就是減小 Covariate Shift 所帶來的影響,讓模型變得更加健壯,魯棒性(Robustness)更強。

即使輸入的值改變了,由於 Batch Normalization 的作用,使得均值和方差保持不變(由 γ 和 β 決定),限制了在前層的參數更新對數值分佈的影響程度,因此後層的學習變得更容易一些。Batch Normalization 減少了各層 W 和 b 之間的耦合性,讓各層更加獨立,實現自我訓練學習的效果。

另外,Batch Normalization 也起到微弱的正則化(regularization)效果。因爲在每個 mini-batch 而非整個數據集上計算均值和方差,只由這一小部分數據估計得出的均值和方差會有一些噪聲,因此最終計算出的 z~(i)也有一定噪聲。類似於 dropout,這種噪聲會使得神經元不會再特別依賴於任何一個輸入特徵。

因爲 Batch Normalization 只有微弱的正則化效果,因此可以和 dropout 一起使用,以獲得更強大的正則化效果。通過應用更大的 mini-batch 大小,可以減少噪聲,從而減少這種正則化效果。

最後,不要將 Batch Normalization 作爲正則化的手段,而是當作加速學習的方式。正則化只是一種非期望的副作用,Batch Normalization 解決的還是反向傳播過程中的梯度問題(梯度消失和爆炸)。

3、測試時的 Batch Normalization

Batch Normalization 將數據以 mini-batch 的形式逐一處理,但在測試時,可能需要對每一個樣本逐一處理,這樣無法得到 μ 和 σ2。

理論上,我們可以將所有訓練集放入最終的神經網絡模型中,然後將每個隱藏層計算得到的 μ[l]和 σ2[l]直接作爲測試過程的 μ 和 σ 來使用。但是,實際應用中一般不使用這種方法,而是使用之前學習過的指數加權平均的方法來預測測試過程單個樣本的 μ 和 σ2。

對於第 l 層隱藏層,考慮所有 mini-batch 在該隱藏層下的 μ[l]和 σ2[l],然後用指數加權平均的方式來預測得到當前單個樣本的 μ[l]和 σ2[l]。這樣就實現了對測試過程單個樣本的均值和方差估計。




三、Softmax 迴歸

目前爲止,介紹的分類例子都是二分類問題:神經網絡輸出層只有一個神經元,表示預測輸出 y^是正類的概率 P(y = 1|x),y^ > 0.5 則判斷爲正類,反之判斷爲負類。

對於多分類問題,用 C 表示種類個數,則神經網絡輸出層,也就是第 L 層的單元數量 n[L]=C。每個神經元的輸出依次對應屬於該類的概率,即 P(y=c|x),c=0,1,…,C−1。有一種 Logistic 迴歸的一般形式,叫做 Softmax 迴歸,可以處理多分類問題。

對於 Softmax 迴歸模型的輸出層,即第 L 層,有:
在這裏插入圖片描述
for i in range(L),有:
在這裏插入圖片描述
爲輸出層每個神經元的輸出,對應屬於該類的概率,滿足:
在這裏插入圖片描述
一個直觀的計算例子如下:
在這裏插入圖片描述

1、損失函數和成本函數

在這裏插入圖片描述

2、梯度下降法

多分類的 Softmax 迴歸模型與二分類的 Logistic 迴歸模型只有輸出層上有一點區別。經過不太一樣的推導過程,仍有
在這裏插入圖片描述
反向傳播過程的其他步驟也和 Logistic 迴歸的一致。




四、深度學習框架

1、比較著名的框架

  • Caffe / Caffe 2
  • CNTK
  • DL4J
  • Keras
  • Lasagne
  • mxnet
  • PaddlePaddle
  • TensorFlow
  • Theano
  • Torch

2、選擇框架的標準

  • 便於編程:包括神經網絡的開發和迭代、配置產品;
  • 運行速度:特別是訓練大型數據集時;
  • 是否真正開放:不僅需要開源,而且需要良好的管理,能夠持續開放所有功能。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章