Machine-Learning

了解神經網絡中的早期停止及其在使用交叉驗證時的影響

  • September 28, 2017

我對如何定義早期停止技術的想法感到有些困擾和困惑。如果你看一下它Wikipedia,它的定義如下:

  1. 將訓練數據分成訓練集和驗證集,例如以 2 比 1 的比例。
  2. 僅在訓練集上進行訓練,並偶爾評估驗證集上的每個示例錯誤,例如在每五個 epoch 之後。
  3. 一旦驗證集上的錯誤高於上次檢查時,立即停止訓練。
  4. 使用網絡在上一步中作為訓練運行的結果的權重。

我自己在實驗中使用了這種方法(使用 10 倍交叉驗證)。我正在檢查每個時期的驗證錯誤(併計算驗證準確性)並將耐心參數設置為 2。這意味著,如果驗證錯誤連續 2 個時期增加 - > 停止訓練。然後我在模型完成時使用了最後一個 epoch 的結果。

Ian Goodfellow 在他的深度學習書中使用了另一個定義。作為第四步,他建議使用最佳工作模型的權重(即每次檢查驗證錯誤時保存模型)。

我不需要保存的模型,我只需要我工作的結果。所以對我來說,Goodfellow 提議的提前停止意味著我將採用我為最終結果達到的最高驗證準確度?不知何故,這似乎不合法。在沒有開發集的情況下,我沒有這些信息。但是在那種情況下,首先使用提前停止的原因是什麼?通過例如平均折疊的時期數來確定時期數並將其用於稍後的測試運行?

通過例如平均折疊的時期數來確定時期數並將其用於稍後的測試運行?

最短的答案:是的!但是讓我添加一些上下文……

我相信您指的是深度學習書中關於 Early Stopping 的第 7.8 節,第 246 頁。但是,那裡描述的程序與您的程序有很大不同。古德費羅等人。建議首先將您的數據分成三組:訓練集、開發集和測試集。然後,您(在訓練集上)進行訓練,直到該模型的誤差增加(在開發集上),此時您停止。最後,您使用具有最低開發集誤差的訓練模型並在測試集上對其進行評估。根本不涉及交叉驗證。

但是,您似乎正在嘗試在同一個集合上同時進行提前停止 (ES) 和交叉驗證 (CV)以及模型評估。也就是說,您似乎將所有數據用於 CV,使用 ES 對每個拆分進行訓練,然後使用這些 CV 拆分的平均性能作為您的最終評估結果。如果是這種情況,那確實是嚴重的過度擬合(當然不是 Goodfellow 等人所描述的),並且您的方法為您提供了與 ES 的含義完全相反的結果——作為一種正則化技術來防止過擬合。如果不清楚原因:因為您在訓練期間在最終評估實例中“達到頂峰”,以確定何時(“提前”)停止訓練;也就是說,您在訓練期間針對評估實例進行優化,根據定義,這(過度)擬合您的模型(在該評估數據上)。

所以到現在為止,我希望已經回答了你的其他[兩個]問題。

higgs broson 的回答(對您的最後一個問題,如上所述)已經提供了一種將 CV 和 ES 結合起來以節省一些訓練時間的有意義的方法:您可以將全部數據僅分成兩組 - 一個開發集和一個測試集- 並在每次拆分時應用 ES 時使用開發集進行 CV。也就是說,您在開發集的每個拆分上進行訓練,並在您為評估該拆分留出的訓練實例上達到最低錯誤時停止 [1]。然後,您平均需要從每個拆分中達到最低誤差所需的 epoch 數,並針對該(平均)epoch 數在完整的開發集上進行訓練。最後,您在您擱置但尚未觸及的測試集上驗證該結果。

[1] 雖然與希格斯布羅森不同,但我建議在每個epoch 之後進行評估。原因有二:(1)與訓練相比,評估時間可以忽略不計。(2),想像你的分鐘。錯誤出現在 51 紀元,但您在 50 紀元和 60 紀元進行評估。60 紀元的誤差不太可能低於 50 紀元;然而,你會選擇 60 作為你的 epoch 參數,這顯然是次優的,實際上甚至有點違背最初使用 ES 的目的。

引用自:https://stats.stackexchange.com/questions/305452

comments powered by Disqus