天天看點

模型訓練時測試集上正确率大于訓練集模型訓練時測試集上正确率大于訓練集

模型訓練時測試集上正确率大于訓練集

參考

  1. 模型在測試集的準确率大于訓練集
  2. 神經網絡與深度學習—驗證集(測試集)準确率高于訓練集準确率的原因

一、問題

  近日再進行Point Cloud Transformer的消融實驗時,發現一個問題:模型訓練時測試集上的正确率大于訓練集正确率,如下圖。當時覺得很神奇,這個模型能未蔔先知了?

模型訓練時測試集上正确率大于訓練集模型訓練時測試集上正确率大于訓練集

  在模型訓練過程中突然發現,模型的準确率在測試集上居然比在訓練集上還要高。但是我們知道,我們訓練模型的方式就是在訓練集上最小化損失。是以,模型在訓練集上有着更好的表現,才應該是正常的現象。

然後去看了看别人的講解,大緻明白了一些

二、原因

1. 資料集太小

  這樣會導緻資料集切分的時候不均勻,也就是說訓練集和測試集的分布不均勻,如果模型能夠正确地捕捉到資料内部的分布模式的話,就有可能造成訓練集的内部方差大于驗證集,會造成訓練集的誤差更大,這個時候就需要重新劃分資料集,使其分布一樣。

2. 模型正則化過多

  比如訓練時Dropout過多,和驗證時的模型相差較大,驗證時是不會有Dropout的。Dropout能基本上確定測試集的準确性最好,優于訓練集的準确性。Dropout迫使神經網絡成為一個非常大的弱分類器集合,這就意味着,一個單獨的分類器沒有太高的分類準确性,隻有當把他們串在一起的時候他們才會變得更強大。而且在訓練期間,Dropout将這些分類器的随機集合切掉,是以,訓練準确率将受到影響;在測試期間,Dropout将自動關閉,并允許使用神經網絡中的所有弱分類器,是以,測試精度提高。

3. 小批量統計的滞後性

  訓練集的準确率是每個batch之後産生的,而驗證集的準确率一般是一個epoch後産生的,驗證時的模型是訓練一個個batch之後的,有一個滞後性,可以說就是用訓練得差不多的模型用來驗證,當然準确率要高一點。

4.資料預處理

  訓練集的資料做了一系列的預處理,如旋轉、仿射、模糊、添加噪點等操作,過多的預處理導緻訓練集的分布産生了變化,是以使得訓練集的準确率低于驗證集

5. 欠拟合

   前幾次一直在欠拟合,随着訓練周期的增加,在訓練集上的準确率又超過了測試集上的。

三、測試

  我将模型中的Dropout去掉之後,兩個正确率相差明顯下降了

模型訓練時測試集上正确率大于訓練集模型訓練時測試集上正确率大于訓練集

繼續閱讀