深度學習模型調參總結


大部分內容參考自《Machine Learning Yearning》

Bias 和 Variance

偏差(bias)是指算法在訓練集上的偏差,也就是錯誤率,錯誤越大偏差越大,欠擬合

方差(variance)是指算法在開發集(或測試集)上的表現比訓練集上差多少,也可以理解為過擬合,表現 為訓練集正確率很高,測試集上的正確率很低

可避免偏差和不可避免偏差

偏差可以分為兩個部分,包括可避免偏差和不可避免偏差

如何理解:假設現有一個珍稀動物識別系統,任務難度大,即便由人類來區分,也存在14%的錯誤率(最優錯誤率)

現在算法達到:

訓練錯誤率=15%

開發錯誤率=30%

可以將訓練錯誤率(偏差)分解如下:

最伏錯誤率(“不可避免偏差”):14%,可以將其認為是學習算法的偏差“不可避免”的部分。

可避免偏差:1%。即訓練錯誤率和最伏誤差率之間的差值。

舉個例子,該例子中最優錯誤率是 14%,我們有:

● 訓練誤差 = 15%

● 開發誤差 = 16%

i這種情況下,可避免的偏差誤差是 1%,方差誤差約為 1%。因此,算法已經做的很好了,幾乎沒有提升的空間。它只比最佳錯誤率低 2%

如何設定期望誤差率

使用人類表現水平來估計最優錯誤率,並設置可達到的“期望錯誤率”。 假設你的算法在某個任務上達到了 10% 的誤差,但普通人所能達到的誤差是 2% . 由此我們就可以知道最優錯誤率是 2% 或更低,這也表明可避免偏差至少是 8% . 所以你應當嘗試一下降低偏差的技術。更一般地說,有一個合理可實現的“期望錯誤率”可以幫助你去估計學習算法的可避免偏差。這反過來也幫你決定是否使用誤差降低技術

偏差和方差的幾種情況和解決方案

1)假設訓練集錯誤率1%,開發集錯誤率10%,則樣本方差大,過擬合

  • 修改模型架構

    減小模型規模(比如神經元/層的數量),減小網絡復雜度

  • 增加正則化

    • L 1 Regularization

    • L 2 Regularization

    • Dropout層

  • 添加Batch Normalization

  • 加入提前終止(Early stopping)

  • 模型初始化

  • 通過特征選擇減少輸入特征的數量和種類

  • 特征降維

  • 根據誤差分析修改特征

  • 檢測訓練數據集和測試數據是否有相對應的特征,數據分布是否一致,不一致的時候,繼續特征工程工作

  • 增加訓練數據的種類,使得訓練數據覆蓋所有測試數據的特使用數據增強

  • 增加數據量

2)假設訓練錯誤率為15%,開發錯誤率為16%,這個時候,偏差比較大,欠擬合

  • 增加訓練epoch

  • 增大batch-size

  • 調整激活函數(例如使用relu)

  • 調整優化算法

    • 例如使用Adam

    • 增大learning rate

  • 增加網絡復雜度

    • 增加網絡層數

    • 增加卷積層輸出的通道數

    • 增加全連接層的節點數

  • 檢測訓練數據集和測試數據是否有相對應的特征

    • 增加訓練數據的種類,使得訓練數據覆蓋所有測試數據的特性,

    • 增加外部數據集,如果擔心外部數據集污染training set,可以將外部數據集的權重調低一點

    • 數據增強

3)假設訓練錯誤率為15%,開發錯誤率為30%,高偏差,高方差

這個時候,先要解決偏差問題,只有在訓練集上開始收斂了,才能開始考慮測試集上的方差問題。因此遇到這種情況,先按照高偏差解決,高偏差解決之后,也許可能高方差的問題也就消失了,如果沒有消失,在考慮解決高方差的問題。

4)假設訓練錯誤率為0.5%,開發錯誤率為1%,低偏差,低方差(完美狀態)

5)假設訓練錯誤率為0.5%,開發錯誤率為1%,低偏差,低方差,但是開發集loss在低點持續震盪

  • 確認訓練集和測試集分布是否存在較大的差異,差異大的話進行特征工程

  • 確認是否數據增強做的太多了

  • 嘗試調整學習率,在不同階段使用不用學習率

  • 思考和檢查網絡是否還是有點欠擬合,如果還有,解決欠擬合

  • 找到更多訓練數據,使其能夠覆蓋較多的樣本分布

模型調參Pipeline

  • 設定固定隨機種子

  • 先不要使用數據增強

  • 設置合理的baseline

  • 過擬合一個batch,然后觀察loss最低可以到達多少,對比baseline,如果可以到達很低,進行下一步,如果不行,則考慮 情況2)

  • 繪制training和testing 階段的loss曲線

  • 驗證loss函數

    • 如果train loss 小

      • 如果test set 的loss 大,而train set 的loss小,說明過擬合,使用情況1)解決

      • 如果test set的loss 也小,那么基本上算是成功了

      • 如果test set 的 loss 也小,但是震盪,使用 情況5)解決

    • 如果train loss 大

      進入步驟2)

已優化模型如何進一步提高

  • 優化網絡結構,使用更好的backbone

  • 使用更好的LOSS函數,比如:回歸問題可以考慮smooth-l1等

  • 考慮使用難例挖掘的方法

  • 有條件的話,加大batchsize

  • 考慮預訓練模型

  • 觀察測試樣本,查找case,針對Case來,補充樣本+數據增強

  • 嘗試不同的優化函數,交替訓練,fine-tuning

  • 不同的權重初始化方法

  • 嘗試不同的學習率初始值和衰減值

  • 考慮在梯度上做文章,可以是梯度裁剪、梯度校驗、梯度歸一化等方法

  • 繼續特征工程(往往最有效)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM