在實際調整引數之前,我們先要搞清楚兩個事情:
1.調參的目的是什麼?
2.調參調的東西具體是什麼?
第乙個問題:調參的目的是什麼?
調參的最終目的是要使訓練之後的模型檢測物體更精確,向程式的方向更靠近一步的話,就是使得損失函式(例如ssd中的loss)盡量小(因為利用訓練集訓練出來的模型質量在訓練過程中只能靠驗證集來檢測)。
因此,調參可以看做乙個多元函式優化問題。
第二個問題:調參調的東西具體是什麼?
在解答第二個問題之前,我們先引入乙個概念,超引數。
【超引數】
在模型開始學習過程之前人為設定值的引數,而不是通過訓練得到的引數資料(諸如常規意義下的b、w)。這些引數定義關於模型更高層次的概念(模型複雜性、學習能力等)。不能直接從標準模型培訓過程中的資料中學習,需要預先定義。可以通過設定不同的值,訓練不同的模型和選擇更好的測試值來決定。
示例:樹的數量或深度、學習率、深層神經網路隱藏層數、k均值聚類中的簇數……
要調的引數,主要就是這個「超引數」。
【深度學習中常用的調節引數】
1.學習率(learning rate)
學習率的調整應該是乙個很常見的操作。一般隨著迭代次數的提高,當loss下不去的時候會先暫停訓練模型,然後將learning rate調整至原來的1/10再繼續進行訓練。
原因是,梯度下降過程中的學習率可以看做下山過程中的步長,假設你的一步很大可以跨過山谷直接踩到對面的山上的話,就很難得到區域性最優解。此時,減小步長會提高你走到地面的概率。
2.有關過擬合
利用drop out、batch normalization、data argument等方法可以有效防止過擬合,通過調整drop out中每個神經元被拋棄的概率可以調整模型的泛化能力。
3.網路層數
一般來說,網路層數越多,模型的效能(包括靈敏度、收斂等)就會越好(這也是為什麼深度神經網路最近這麼火的原因之一)。相應地,對計算能力的要求就會更高。
而且,層數越多,神經元節點數越多,過擬合的概率就會越高。
這怎麼辦?
利用2中的各種方法防止過擬合。
4.batch_size
可以適當增大batch_size,但這種方法可能會對計算機效能有所影響(在本機上將batch_size調到原來的2倍的時候:大概是從24調到48,機器已經卡得不要不要的了……)。
batch_size增大到某個時候,可以達到時間上最優;
batch_size增大到某些時候,可以達到最終收斂精度上最優。
機器學習 關於調參
關於引數 feature scaling 機器學習中對於引數的理解不是數學中的數字,而是代表的是一種邏輯的趨勢的數字,這種邏輯是人類對場景的邏輯,也可以看作是人思想上對場景與數字引數的經驗,所以機器學習中的運算,不是數字的運算,而是邏輯的運算,如何設計出符合人類邏輯規律的運算,才能更好的 趨勢,這種...
機器學習 演算法調參
coding utf 8 演算法調參.ipynb automatically generated by colaboratory.original file is located at 超引數優化 這是機器學習模型解決問題的最後乙個步驟,並不是整個解決方案的最後一步。不會調參就不能說會機器學習。引數...
機器學習調參方法
網格搜尋交叉驗證 通常是在全量資料上做的,會自動切分成幾折 有時候會注意做分層抽樣去保證資料分布 參考的kaggle kernel early stopping 這個通常需要切分訓練集和驗證集,我們會根據驗證集去確定最佳的輪次,但是除掉迭代輪次以外其他的引數需要通過經驗或者gridsearch敲定。...