天天看點

驗證集loss低于訓練集loss原因分析

我在模型訓練的過程中出現了驗證集loss低于訓練集loss的情況,通過搜集資料,總結歸納如下原因:

原因1:在訓練中應用正則化,但在驗證/測試中未應用正則化

如果在驗證/測試期間添加正則化損失,則損失值和曲線将看起來更加相似。

原因2:訓練loss是在每個epoch測量的,而驗證loss是在每個epoch後測量的

平均而言,訓練損失的測量時間是前一個時期的1/2。如果将訓練損失曲線向左移動半個epoch,則損失會更好。

原因3:驗證集可能比訓練集更容易(否則可能會洩漏(leaks))

驗證loss低于訓練loss的最終最常見原因是由于資料本身分布的問題。

考慮如何擷取驗證集:

您可 以保證驗證集是從與訓練集相同的分布中采樣的嗎?

您确定驗證示例與您的訓練圖像一樣具有挑戰性嗎?

您是否可以確定沒有“資料洩漏”(即訓練樣本與驗證/測試樣本意外混入)?

您是否确信自己的代碼正确建立了訓練集,驗證集和測試集?

原因4:沒有足夠努力地訓練

在訓練深度神經網絡時,我們最大的擔心幾乎總是過拟合——為了避免過拟合,我們引入了正則化技術(在上面的原因1中進行了讨論)。我們用以下形式應用正則化:

Dropout

L2權重衰減

減少模型容量(即更淺的模型)

我們的學習率也趨于保守一些,以確定我們的模型不會在虧損形勢下超越虧損較低的領域。

一切都很好,但是有時候我們最終會過度規範我們的模型 (over-regularizing our models)。

如果您經曆了驗證loss低于上述詳細說明的訓練loss的所有三個原因,則可能是您的模型over-regularized了。通過以下方法開始放寬正則化限制:

降低L2權重衰減強度。

減少申請的dropout數量。

增加模型容量(即,使其更深)。

您還應該嘗試以更高的學習率進行訓練,因為您可能對此過于保守。

下面是一張我模型訓練過程中的loss表現圖,綠色表示test_loss ,藍色表示train_loss,通過分析上面4個原因,我主要存在的問題是2和4,但是2不是最主要的原因,即使testloss向左平移一點,也改變不了這麼大的差距。

驗證集loss低于訓練集loss原因分析

我的上一步實驗 learning_rate: 0.0005,weight_decay: 0.02

本次實驗 learning_rate: 0.000125,weight_decay: 0.02

導緻了上面截圖中的情況,驗證集loss小于訓練集的loss,是以可以定位到原因是我的learning_rate太小。

繼續閱讀