天天看點

深度學習 - 模型調優經曆(1)

模型調優經曆(1)

        • 背景
        • 遇到問題
        • 思路
        • 解決辦法
  • 背景

    1. 樣本規模及劃分

      ∙ \bullet ∙ 二分類問題,正負樣本 1:1,特征數:20

      ∙ \bullet ∙ 訓練集:3475;測試集:896;驗證集:1087

    2. 使用模型

      ∙ \bullet ∙ 深度學習模型

      ∙ \bullet ∙ 損失函數使用對數損失函數:binary_crossentropy

      ∙ \bullet ∙ 優化方法:Adam,lr = 0.0035

  • 遇到問題

    訓練中的損失函數正常下降,測試集中的損失函數正常下降;

    訓練中的預測準确率達到 99%

    但關鍵問題是:在測試集的損失函數正常下降的情況下,測試集精度非常不穩定!就我以前的認知來講,過拟合,是在訓練集上準确好而測試集上不好,即二者有較大差距,但之前沒有見過測試集上震蕩如此大的情況,一時有些不解。

    如圖:

    深度學習 - 模型調優經曆(1)
    深度學習 - 模型調優經曆(1)
    在測試集上的準确度震蕩非常厲害!
  • 思路

    對于損失函數,雖然在下降,但卻是在10左右(後來幾次是 3 左右),距離最優損失值 0 仍有差距。是以我認為,此時情況相當于預測值在 類别 0,與類别 1 周圍的分布較為離散,而距離常用的門檻值 0.5 來說比較接近,當預測值稍微改變,可能就跨過門檻值0.5,成為另一個類别。相當于預測值都在黑色框裡,雖然可以被分類正确,但很容易受影響。
    深度學習 - 模型調優經曆(1)

    對于測試精度不穩定忽高忽低,可以說明泛化能力不穩定,有可能學到噪聲或信号中的幹擾,易受噪聲影響。

    另外,不穩定還有可能是學習速率過大引起的,在最優點附近跳躍。

    綜上,說明此時的模型預測結果方差大,易受波動,表明是過拟合的,而且學習速率過大。

  • 解決辦法

    因為使用的資料量不是很大,特征數并不多,是以不需要使用 dropout 或更嚴格的正則化,隻需降低複雜的網絡結構,減少層數,降低神經元結點即可。

    在降低模型複雜度後損失函數值與測試準确度完全負相關,在驗證集上正确率為98.6%,損失值為:0.097, 且最終 AUC 達到 0.995.

    深度學習 - 模型調優經曆(1)
    深度學習 - 模型調優經曆(1)
    深度學習 - 模型調優經曆(1)
    再降低學習速率,得到較為平滑的學習曲線:
    深度學習 - 模型調優經曆(1)
    問題解決。

繼續閱讀