深度學習為什麼會出現validation accuracy大於train accuracy的現象?

時間 2021-05-31 05:56:07

1樓:

例如:Attention is all you need.

2樓:標美藝術設計

「機器學習是近20多年興起的一門多領域交叉學科,涉及概率論、統計學、逼近論、凸分析、演算法複雜度理論等多門學科。機器學習理

3樓:

我再補充乙個可能的原因。其他回答裡已經詳細解釋這個現象的主要原因:其他在訓練過程中用到而未在Validation時使用的操作,比如正則化(可以消除資料的noise干擾),drop-out 等。

還有乙個沒提到的是 class weight,也就是你給不同的class的loss function自定義的那個weight。當你的training set裡有嚴重的class imbalance的問題,或者你對某乙個class的訓練樣本的資料更信任時,就會用到自定義的class weight。如果你沒有自定義loss function的class weight的話,你的問題就和這個原因沒關係了。

這是乙個weighted loss function 的例子:loss(x, class) = weights[class] * -x[class] + log(\sum_j exp(weights[class] * x[j]))

自定義的class weight 會導致val loss 比training loss小的具體原因:在訓練的過程中,如果計算training loss 時使用了你自定義的weight, 而在validation 的過程中沒有使用,並且你自定義的weight是大於1的話,那麼就有可能出現 training loss < validation loss的情況。舉個binary classification的簡單例子,有兩個Class,A 和 B,對於Class A,我們讓它loss function裡的weight等於2 (沒自定義class weight時,class weight值一般預設為1), Class B的weight還是1,那麼,在訓練的時候,標記為Class A的樣本得到的loss的值被放大為原來的2倍,Class B的樣本的loss與原來一樣。

這樣,最後得到的training loss就會比原來大。而validation的時候,class weight一般使用的是預設值,所以這就有可能得到validation loss小於training loss的情況。

4樓:深度學習雜談

給validation的資料太少了,多留些做validation。順便每次先隨機打亂,然後在訓練和驗證。而且40%左右的accuracy 基本無意義,模型還在猜猜猜的階段。

到90%以上再看看就不會這樣了,而且越往後train的會越高,因為八成免不了過擬合。

5樓:會寫程式碼的好廚師

主要還是這個Data Augmentation的原因,另外和測試集選取有關,另外,模型到現在還沒有收斂,還得看最後收斂以後的結果。

6樓:

排除你model本身的問題,只能是 training set 相比與 validation set 更具有廣泛性,或者說validation 本身是 training 的子集。也就是說 validation 選取不合理,我們期待的model是從相對少量的樣本中獲取泛化能力好的model,很大程度是期望我們通過先驗知識建立model(包括CNN等),這也是機器學習的出發點。

7樓:櫻花紛飛時

這個很好理解啊。

給你舉個最極端的例子:我validation只有1個樣本,那我豈不就是經常validation accuracy達到1了?

training accuracy和validation accuracy只是呈現相關性(包含正相關以及過擬合時候的近似負相關),而比較其二者的數值大小是沒有意義的。你只能說我現在這兩個accuracy的走勢分別是怎樣的。

另,由於validation的樣本數量一般遠小於training的,故在訓練前期,確實容易出現validation accuracy明顯大於training accuracy的情況,隨著訓練的進行,這種差距會逐漸縮小,直至過擬合。

8樓:李雨肖

可能的原因包括:

在training的時候使用了dropout,testing是沒有dropout的

training data 做的 augmentationvalidation set可能正巧比較特殊跟training set相似

9樓:dalle

training loss顯示的是乙個epoch的平均loss,val loss是擬合乙個epoch得到的模型在val上的loss,造成前期train loss 大於val loss。

而中期這種現象少部分是資料分布的問題,主要還是data augmentation,訓練的時候加各種random shift,scale,rotate,flip,color jitter,crop,noise....對val就幾乎不加aug了。

10樓:楊培文

各種正則化方法在訓練集上使用,卻不會在驗證集上使用,導致訓練集的 loss 偏大,嚴重的時候即使收斂,測試集的 loss 也仍然高於驗證集的 loss。

比如過於激烈的資料增強

過大的 Dropout

訓練集的 loss 是整代的平均 loss,而驗證集的 loss 是最後乙個時刻的 loss,所以驗證集的 loss 在前期會比較小,而後期訓練 loss 已經收斂,驗證集的 loss 自然就沒有訓練集的低了。

由於題主說的是深度學習影象方面的問題,所以樣本數一般比較大,驗證集碰巧比較容易的概率並不高。但是某些樣本數很少的機器學習問題上,很容易出現驗證集隨機切分導致驗證集很簡單,舉乙個極端的例子,50張貓,50張狗的二分類問題,假設模型直接 return dog,恰好驗證集全是狗,就會造成驗證集 loss 極低,但是訓練集 loss 比較大的情況,此時使用交叉驗證可以盡量避免類似的問題。

11樓:Alcho

這種現象在前期應該是比較正常的

個人認為原因有兩點

1.train loss是在乙個epoch上所有時刻的loss取平均,而在前期,乙個epoch剛開始與該epoch快結束時相比,模型效能可能差很多

2. Data Augmentation可能做的比較強。 意思是說你的train loss並不是在真正訓練集樣本上的loss,而是在增廣之後(或說任務變難之後)的loss

12樓:深度碎片

做一下廣義上的猜想,僅供參考,希望有幫助

關於深度學習的問答彙總(第四個問答)

如圖,深度學習回歸模型多輪迭代後valid loss抖動非常大是什麼原因?

恆同學 loss從8000多直降到100,我不覺得再調學習率有什麼調整了,更多的可能我個人覺得是出現過擬合且樣本有點少了,或者說是因為樣本較少而出現的過擬合。你的valid集和train集是同分布的嗎? TiC K 非專業DS,CS學生試著答一下,如果不對的話還請多指教。有可能是learning r...

學習時為什麼會出現偏科現象?

飛過黎明 乙個人的成績主要影響因素有倆 天賦 付出的時間成本 每個人在每個科目上所有的天賦是不同的,有些人擅長寫作,有些人擅長算數等等。另外,就算你在每個科目上面的天賦都一樣 例如 都不行 那人也不會像機器一樣,把時間分給每個科目分的很平均。但是有些大佬級學霸就不一樣了,人家知道自己什麼比較弱,人家...

為什麼會出現歧視?

歧視 這種心態的產生,很多時候,是因為自己稍微領先別人一點點,但心裡沒點B數,沒能正確認識到本質上自身和對方處在同一階級,想裝逼卻發現別人不鳥你,繼而產生的憤懣情緒,需要找一種方式來發洩。部門經理歧視流水線工人,馬雲會去歧視工人嗎?開奧迪A4的歧視長安奔奔,開瑪莎拉蒂的會歧視奔奔嗎?身高1公尺8的嘲...