訓練-測試差距(train-test gap)
/ TRAYN-test gap /
你可以給一個模型打兩個分:它在學過的樣本上表現如何(訓練表現),以及它在從未見過的新樣本上表現如何(測試表現)。訓練-測試差距,就是這兩者之間的差。差距小,意味著模型真正學到了規律;差距大,意味著它多半只是背熟了作業,一到真考場就栽跟頭。
那個大的差距有個名字——過擬合。一個把練習題答案背得滾瓜爛熟的學生,能在練習卷上拿滿分,真考試卻掛科,因為他學的是具體的答案,而不是底下那門本事。過擬合的模型也一樣:它死死抓住了訓練數據裡那些無法泛化的怪癖和噪聲。一個近乎完美的訓練分,配上一個平平的測試分,正是過擬合的經典指紋。
盯著這個差距,是機器學習裡最重要的習慣之一,因為只有測試分才能預示真實世界中的表現——訓練分單獨看幾乎毫無意義,而且很容易被抬高。誠實的微妙之處在於:差距小也不自動就是好消息。如果兩個分都低,那模型就是欠擬合——簡單到根本抓不住規律。而且測試集只有在你不持續拿它來調參時才保持可信;你一旦那麼做,就會慢慢地把測試集也過擬合掉,你看到的那個令人安心的差距就成了謊言。真正的目標,是一個「差距小、兩個分都高」的局面——外加一個你恰好只碰過一次的最終測試集。
模型X:訓練數據上99%,測試集上71%——28分的差距在尖叫著「過擬合」;它是背下來的,而非學會的。模型Y:訓練84%,測試82%——2分的差距;它學到了一個能遷移的規律。儘管Y的訓練分更低,它才是你在真實世界裡會信賴的那個模型。
巨大的訓練-測試差距是過擬合的標誌;真正算數的是測試分。
差距小是必要的,但不充分。如果兩個分都低,那你是在欠擬合,而不是在成功。而且只有當測試集未被觸碰時,這個差距才保持誠實——你每拿它去調一次參,就洩露一次信息,於是這個差距就會悄悄地低估「模型在真正全新數據上會表現得多差」。