訓練與最佳化

提早停止

若你把模型訓練太久,它最終會停止學習通則、轉而背下訓練集裡的雜訊——即過擬合——而它在新資料上的表現會悄悄變差,即使訓練損失仍在改善。提早停止是個出奇簡單的補救:在訓練過程中觀察模型在一個保留的驗證集上的表現,一旦該驗證表現停止改善就停下,而非跑固定且可能過量的週期數。你在甜蜜點停住模型,在它學到訊號之後、但在它開始擬合雜訊之前。

實務上你以固定間隔評估一個驗證指標(損失或準確率),並追蹤至今見過的最佳值。由於指標有雜訊、可能下探又回升,你不在第一次回升就停;而是使用一個耐心(patience)參數——你願意在沒有改善的情況下等待多少次評估才放棄——當耐心耗盡時你停下,並還原最佳檢查點的權重,而非最終那略為過擬合的。耐心與評估間隔是兩個旋鈕:耐心太少會因雜訊過早停止,太多則浪費計算並讓一些過擬合悄悄滲入。

提早停止有效有個令人滿意的理論原因:它是一種隱式正則化。每個梯度步驟讓權重離它們小而隨機的初始值再遠一點,所以提早停止使權重的有效大小維持有界——很像權重衰減顯式做的事。對簡單的線性模型,這個連結是精確的;更一般地,限制最佳化步數就限制了模型能多麼專精於訓練集,這正是容量控制的另一個名字。

提早停止很廉價、除了耐心之外不需調校額外的強度參數,並能與其它每種正則化器組合,所以它是近乎通用的預設。主要的但書是它需要一個可信賴、從訓練中保留的驗證集(且不要也拿來調校其它一切,否則你會過擬合到它),以及它與學習率排程的交互作用:例如餘弦排程被設計成跑一個計畫好的步數、並達到低的最終學習率,所以「提早」停止它意味著它從未抵達預定的結束狀態——在這類設置中,提早停止常被當作安全網,而非主要的停止準則。

驗證損失在第 30 個週期降到最低,之後隨著訓練損失持續下降而緩緩上升。在耐心 = 5 的設定下,訓練在第 35 個週期停止,存下的模型是第 30 週期的檢查點——正是過擬合開始之前的那一刻。

又稱
early stoppatience-based stopping