訓練集準確率接近100%,驗證集準確率80%但是隨著訓練step增加不增也不降。算是過擬合還是欠擬合?

其實從bias-variance 分解的角度看,這個gap應該是數據擾動產生的,那麼應該是算過擬合,但是其實我的問題在於驗證集的準確率趨勢,我沒法保證會不會出現平坦後又繼續上升(下降)的情況,如果先經歷平坦,之後又繼續上升,那麼說他過擬合會有點違背我的直覺。

----------------------------------------------分割線----------------------------------------------

原問題描述:

情況如上圖所示,訓練集和驗證集的準確率存在一個較大的gap,但是驗證集的準確率並沒有下降趨勢,這算是什麼訓練狀態?另外欠擬合是不是指針對訓練集來說的,驗證集沒有欠擬合的說法?

因為對過擬合或者欠擬合狀態的判斷直接影響到了,之後調參的選擇。亦或是這個gap是由於雜訊的影響產生的?


這應該叫做過擬合。看起來從第 6、7 個 epoch 開始,訓練準確率在提升,而驗證準確率就已經不動了。這就可以算過擬合了,並不需要等到驗證準確率開始下降。

調整參數可能可以縮小訓練準確率和驗證準確率之間的差異,但不一定能夠完全消除這個差異,因為訓練集和驗證集里都難免有一些對方沒有的知識。


這是過擬合 毫無疑問

擬合肯定是說去擬合訓練集,因此欠和過都是說針對訓練集來說的。但是,如果用一個開發集去做模型選擇,某種意義上來說,也是在擬合這個開發集,在一個更高的層面上。這裡沒必要深究。

如果模型的擬合能力夠強,那一定是訓練集上的準確率高於測試集,除非數據沒有隨機性。


過擬合,並且繼續訓練再久也不會有改善

為什麼過擬合?因為訓練集和測試集出現了明顯的gap,這一點相信題主已經看出來了。

為什麼再增加epoch也不會有改善?訓練集準確率接近100%,說明訓練集中的幾乎所有信息(不論是對泛化有用的信息還是訓練集中的雜訊)都全部被模型學習到了。這表明訓練集已經沒有任何新的信息(無論是有用的還是雜訊)能提供給模型了,因此無論怎樣增加訓練次數,泛化誤差都會趨於平穩


你該畫測試集上的cross entropy或者目標函數,應該是會 先變好,再變差。test error應該就是這樣,不會變化。


  1. 我不知道題主對過擬合的定義是啥,在很多教授那裡,train的準確高於test的準確就是過擬合。
  2. test不存在欠擬合概念,既然能100%分辨train set,就說明當前模型的複雜度足夠解決問題
  3. 當然,確實有可能你選的train set不夠有代表性, 你可以用k-fold跑一下,看看是不是所有的gap都這麼大。
  4. 題主對繼續train下去 test 準確率是否還會變化有擔心的話,可以調整下learning rate或者換個gradient decent的演算法。
  5. 如果以上都解決了,相信這是過擬合了,就加regularization和dropout就好。
  6. 如果加了reg和dropout還不夠好,可以做一些data augmentation。


我最近也遇到了類似的問題,也在看是不是過擬合。雖然我也沒什麼結論,但是還是說一下我的想法。

1。 我為什麼會糾結於是不是過擬合?

因為網上搜索到的過擬合特徵,一般是訓練集上的loss不斷下降,而測試集或者驗證集上的loss先下降然後再上升。而我畫出來的圖和題主的圖不太符合這個特點。

其他人的回答也有道理,畢竟訓練集上的準確率差不多100%了,讓人不相信是過擬合太難了。

2。 我的一些想法。

不知道題主的數據量大不大,我的數據量不大,所以使用深度網路進行訓練感覺有點先天不足,但是深度學習這麼火,不用又太可惜。

我現在想從優化角度分析,由於我的數據量不大,因此網路很快就找到了符合訓練集的局部最優解(測試集準確率表明這個點不是全局最優的),然後訓練集就卡在了這個局部最優解裡邊,網路停止了更新。這似乎可以對這幾個圖有一個好的解釋。

(鞍點我了解不多,但是看過一些說法,SGD跳出鞍點似乎也是隨機的,需要多次迭代,然而數據量不夠可能也會有問題。)

3。希望大家能夠留言討論,如果我的回答有不對的地方,還請大家指正。


這是一個典型的過擬合。此時的改進措施有:

1.增加L2正則項

2.使用dropout

3.增加數據集


從經驗上來判斷就是過擬合了,模型泛化能力不足,train表現很好但val上較差,可以嘗試增加訓練集數據或擴展訓練集,也可以加入正則化懲罰部分權重,也可以加入dropout機制使部分神經元隨機丟掉部分訓練數據特徵提高泛化能力,也可以試著換一下激活函數或梯度下降演算法看看效果。


機器學習小白來說一下,這個問題不能這麼簡單吧。

首先,你要確定你的模型是不是真的可以hold住你的數據。所以先建議你把所有的數據混起來,跑一個交叉驗證。看看結果差異大不大,如果差別不大,那麼你需要考慮的是你的模型是否在迭代過程中還工作的問題了,建議你把損失函數的打出來看看。但是從你提供的圖來看,你的模型應該還在工作,因為你的訓練準確率還在漲。我覺得你首先應該考慮數據問題,如果你的數據是一個不平衡的數據,那麼這很明顯就是數據分布導致的,你要考慮的就不是過擬合或者欠擬合了,數據增強才是主要的。

如果不是不平衡問題,可能就是你的測試集十分離散,所以模型過擬合了,這種情況下加個dropout之類的可能會有用。

還有一種情況比較難描述,就像你的訓練集更接近一個線性,而測試集更接近拋物線,在非線性部分的效果是無法提升的。這算不算欠擬合。

最後說一點,你的這個說過擬合真的有點牽強,一般的過擬合其實測試準確率都是一個山形的曲線,當迭代到一定次數後會下降,而不會像你這樣直接停在那不動了。所以這說明,你的測試樣本和訓練樣本在分布上還是有點距離的,是不是同分布要打一個問號了。

當然,還有一種可能,你的某個超參數設置的太奇葩了,導致直接把較憂的全局解給pass。

好吧。。能想到的就這些


訓練集準確率接近100%-----這不是欠擬合

訓練集準確率遠大於驗證集準確率-----這是過擬合

但是隨著訓練step增加不增也不降-----lr設的比較小


額,答案是過擬合(過度擬合了訓練集)

至於加噪音不能提高測試集正確率,這當然正常的,如果不幸竟然 能提高

你就可以立刻發一篇文章吹水了

題主可以簡單講一講問題概述,大家一起吹吹牛。


https://www.zhihu.com/question/57733935/answer/186549136

小白不敢亂說,搬運一下別人的。坐等大神講解,匿了匿了。


推薦閱讀:

caffe里的clip gradient是什麼意思?
GPU對CNN計算的加速原理到底是怎樣的?
對深度學習的理解達到什麼水平才能應聘大型互聯網公司的機器學習相關崗位?
深度學習畢設有什麼好的題目?
什麼是稀疏特徵(Sparse Features)?

TAG:人工智慧 | 機器學習 | 神經網路 | 深度學習DeepLearning | TensorFlow |