構建深度神經網絡的實用技巧
通用技巧
有些技巧對你來說可能就是明擺着的事,但在某些時候可能卻並非如此,也可能存在不適用的情況,甚至對你的特定任務來說,可能不是一個好的技巧,所以使用時需要務必要謹慎!
▌使用 ADAM 優化器
確實很有效。與更傳統的優化器相比,如 Vanilla 梯度下降法,我們更喜歡用 ADAM 優化器。用 TensorFlow 時要注意:如果保存和恢復模型權重,請記住在設置完 AdamOptimizer 後設置 Saver,因爲 ADAM 也有需要恢復的狀態(即每個權重的學習率)。
▌ReLU 是最好的非線性 (激活函數)
就好比 Sublime 是最好的文本編輯器一樣。ReLU 快速、簡單,而且,令人驚訝的是,它們工作時,不會發生梯度遞減的情況。雖然 sigmoid 是常見的激活函數之一,但它並不能很好地在 DNN 進行傳播梯度。
▌不要在輸出層使用激活函數
這應該是顯而易見的道理,但如果使用共享函數構建每個層,那就很容易犯這樣的錯誤:所以請確保在輸出層不要使用激活函數。
▌請在每一個層添加一個偏差
這是 ML 的入門知識了:偏差本質上就是將平面轉換到最佳擬合位置。在 y=mx+b 中,b 是偏差,允許曲線上下移動到 “最佳擬合” 位置。
▌使用方差縮放(variance-scaled)初始化
粗略地說,方差縮放初始化器根據每層的輸入或輸出數量(TensorFlow 中的默認值是輸入數量)調整初始隨機權重的方差,從而有助於信號更深入地傳播到網絡中,而無須額外的裁剪或批量歸一化(batch normalization)。Xavier 與此相似,只是各層的方差幾乎相同;但是不同層形狀變化很大的網絡(在卷積網絡中很常見)可能不能很好地處理每層中的相同方差。
▌歸一化輸入數據
對於訓練,減去數據集的均值,然後除以它的標準差。在每個方向的權重越少,你的網絡就越容易學習。保持輸入數據以均值爲中心且方差恆定有助於實現這一點。你還必須對每個測試輸入執行相同的規範化,因此請確保你的訓練集與真實數據相似。
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/DfFnuoB2uHxMO3qpFF0Iqw