深度學習調參技巧

1. 前言

咱們在學習人工智能的時候,不論是機器學習仍是深度學習都須要經歷一個調參的過程,參數的好壞直接影響這模型效果的好壞。今天咱們介紹下在深度學習中,調參的技巧主要分爲哪些。數組

2. 深度學習中的主要參數

  • 學習率(learning rate):學習率的取值通常是一、0.一、0.0一、0.001等,個人建議是學習率從大到小,由於大的學習率運算的快,驗證錯誤的速度快。而且咱們的學習的過程通常經過Adam進行動態調整,基本問題不大。
  • 網絡層數:先從1層開始。
  • 每層結點數:16,32,128,超過1000的狀況比較少見。
  • batch size: 128左右開始。batch取太大會陷入局部最小值,batch取過小會抖動厲害,所以要選擇一個合適的batch size。
  • 梯度裁剪: 限制最大梯度,若是梯度超過了閾值就進行截斷。
  • dropout:在訓練的時候能夠設置必定的dropout,提高網絡的健壯性,也能提高網絡的計算速度。
  • 詞向量embedding大小:embedding的大小通常是128和256。
  • 正負樣本比例: 這個是很是忽視,可是在不少分類問題上,又很是重要的參數。不少人每每習慣使用訓練數據中默認的正負類別比例,當訓練數據很是不平衡的時候,模型頗有可能會偏向數目較大的類別,從而影響最終訓練結果。除了嘗試訓練數據默認的正負類別比例以外,建議對數目較小的樣本作過採樣,例如進行復制。提升他們的比例,看看效果如何,這個對多分類問題一樣適用。在使用mini-batch方法進行訓練的時候,儘可能讓一個batch內,各種別的比例平衡,這個在圖像識別等多分類任務上很是重要。
  • 每層作BN操做,提升結果準確率
  • 儘可能對數據作shuffle

3. 自動調參

人工一直盯着實驗,畢竟太累。自動調參當前也有很多研究。下面介紹幾種比較實用的辦法:網絡

這個是最多見的。具體說,就是每種參數肯定好幾個要嘗試的值,而後像一個網格同樣,把全部參數值的組合遍歷一下。優勢是實現簡單暴力,若是能所有遍歷的話,結果比較可靠。缺點是太費時間了,特別像神經網絡,通常嘗試不了太多的參數組合。dom

Bengio在Random Search for Hyper-Parameter Optimization中指出,Random Search比Gird Search更有效。實際操做的時候,通常也是先用Gird Search的方法,獲得全部候選參數,而後每次從中隨機選擇進行訓練。機器學習

3.3 Bayesian Optimization

貝葉斯優化,考慮到了不一樣參數對應的實驗結果值,所以更節省時間。和網絡搜索相比簡直就是老牛和跑車的區別。具體原理能夠參考這個論文: Practical Bayesian Optimization of Machine Learning Algorithms ,這裏同時推薦兩個實現了貝葉斯調參的Python庫,能夠上手即用:函數

  1. jaberg/hyperopt, 比較簡單。
  2. fmfn/BayesianOptimization, 比較複雜,支持並行調參。

4. 深度學習效果很差

  1. 選擇合適的損失函數:平方損失,交叉熵損失
  2. 選擇合適的Mini-batch size
  3. 選擇合適的激活函數
  4. 選擇合適的自適應學習率學習

    4.1 過擬合處理辦法

  5. earyly stoping
  6. dropout
  7. 正則化
  8. BN
  9. bagging
  10. 數據加強優化

5. 畫圖

畫圖是一個很好的習慣,通常是訓練數據遍歷一輪之後,就輸出一下訓練集和驗證集準確率。同時畫到一張圖上。這樣訓練一段時間之後,若是模型一直沒有收斂,那麼就能夠中止訓練,嘗試其餘參數了,以節省時間。人工智能

相關文章
相關標籤/搜索