Doğrulama kaybı hala düşse bile aşırı takılma meydana gelebilir mi?


12

Bir Kaggle yarışması için kullandığım buna benzer (ref 1) gibi Keras'ta kıvrımlı + LSTM modelim var. Mimari aşağıda gösterilmiştir. Etiketli 11000 örnek setimde eğitim aldım (iki sınıf, başlangıç ​​yaygınlığı ~ 9: 1, bu yüzden% 20 doğrulama bölünmesi ile 50 dönem için 1'leri 1/1 oranına kadar örnekledim). Bir süre gürültü ve bırakma katmanları ile kontrol altına aldığını düşündüm.

Model harika bir şekilde eğitim almış gibi görünüyordu, sonunda eğitim setinin tamamı üzerinde% 91 puan aldı, ancak test veri setinde test edildiğinde mutlak çöp.

Dönem kaybı

Dönemle doğrulama doğruluğu

Uyarı: Doğrulama doğruluğu, eğitim doğruluğundan daha yüksektir. Bu "tipik" aşırı takmanın tam tersidir.

Benim sezgim, küçük-ish doğrulama bölünmesi göz önüne alındığında, model hala giriş kümesine çok güçlü uymayı ve genellemeyi kaybetmeyi başarıyor. Diğer ipucu val_acc acc daha büyük, balık gibi görünüyor. Buradaki en olası senaryo bu mu?

Bu aşırı uyuyorsa, doğrulama bölünmesini artırmak bunu hafifletir mi, yoksa aynı sorunla karşılaşır mıyım, çünkü ortalama olarak, her örnek hala toplam çağların yarısını görecek mi?

Model:

Layer (type)                     Output Shape          Param #     Connected to                     
====================================================================================================
convolution1d_19 (Convolution1D) (None, None, 64)      8256        convolution1d_input_16[0][0]     
____________________________________________________________________________________________________
maxpooling1d_18 (MaxPooling1D)   (None, None, 64)      0           convolution1d_19[0][0]           
____________________________________________________________________________________________________
batchnormalization_8 (BatchNormal(None, None, 64)      128         maxpooling1d_18[0][0]            
____________________________________________________________________________________________________
gaussiannoise_5 (GaussianNoise)  (None, None, 64)      0           batchnormalization_8[0][0]       
____________________________________________________________________________________________________
lstm_16 (LSTM)                   (None, 64)            33024       gaussiannoise_5[0][0]            
____________________________________________________________________________________________________
dropout_9 (Dropout)              (None, 64)            0           lstm_16[0][0]                    
____________________________________________________________________________________________________
batchnormalization_9 (BatchNormal(None, 64)            128         dropout_9[0][0]                  
____________________________________________________________________________________________________
dense_23 (Dense)                 (None, 64)            4160        batchnormalization_9[0][0]       
____________________________________________________________________________________________________
dropout_10 (Dropout)             (None, 64)            0           dense_23[0][0]                   
____________________________________________________________________________________________________
dense_24 (Dense)                 (None, 2)             130         dropout_10[0][0]                 
====================================================================================================
Total params: 45826

İşte modele uyma çağrısı (girdiyi örneklediğim için sınıf ağırlığı genellikle 1: 1 civarındadır):

class_weight= {0:1./(1-ones_rate), 1:1./ones_rate} # automatically balance based on class occurence
m2.fit(X_train, y_train, nb_epoch=50, batch_size=64, shuffle=True, class_weight=class_weight, validation_split=0.2 )

SE puanım daha yüksek olana kadar en fazla 2 bağlantı gönderebileceğim bazı aptalca kuralı vardır, bu yüzden ilginizi çeken örnek şu şekildedir: Ref 1: makine öğrenimiMoto DOT com SLASH dizisi-sınıflandırma-lstm-tekrarlayan-sinir-ağları- piton-keras

Yanıtlar:


8

Doğrulama kümesinin dengeli olup olmadığından emin değilim. Ciddi bir veri dengesizliği sorununuz var. Ağınızı eğitmek için her sınıftan eşit ve rasgele örnekleme yaparsanız ve daha sonra ağınızı doğrulamak için örneklediğinizin bir yüzdesi kullanılırsa, bu, dengeli veri kümesi kullanarak antrenman yaptığınız ve doğruladığınız anlamına gelir. Testte dengesiz veritabanını kullandınız. Bu, doğrulama ve test setlerinizin eşdeğer olmadığı anlamına gelir. Bu durumda, yüksek doğrulama doğruluğuna ve düşük test doğruluğuna sahip olabilirsiniz. Lütfen temel olarak DNN için veri dengesizliği probleminden bahseden bu referansı bulun, eğitim, doğrulama ve test yapmak için nasıl örnek aldıklarını kontrol edebilirsiniz https://pdfs.semanticscholar.org/69a6/8f9cf874c69e2232f47808016c2736b90c35.pdf


1
Doğrulama seti, eğitim seti ile aynı setten alınır. % 100 emin değilim ama Keras'ın karıştırma ve antrenmandan önce doğrulama kesimini aldığını düşünüyorum (yani karıştırılmamış verileri beslerseniz, doğrulama bölünmesi dağıtımınızın bir kısmını keser). Bu yüzden Keras'a geçmeden önce manuel olarak dengeler ve karıştırırım. Tek sorun ben 1 çoğaltmak ve overfit artırabilir gauss gürültü, ekliyor olabilir.
DeusXMachina

2
Doğrulamayı yapmak için Keras'a bağımlı olmanız gerekmediğini düşünüyorum, verilerinizi üç bölüme ayırabilirsiniz. Eğitim, validasyon ve test. Eğitim verilerinden örnek alın ve ağınızı eğitin. Doğrulama ve test setlerindeki dağıtım ile oynamayın. Doğrulama kümesinde ağınızı optimize edin ve ardından test kümesini kontrol edin. Yararlı bir referans eklemek için cevabımı düzenledim
Beşar Haddad

5

Senin Eğer antrenman kaybı size doğrulama kaybı altında giderse overfitting olan doğrulama hâlâ düşüyor bile.

Ağınızın, tren setinde doğrulamada uygulanamayan öğrenme kalıpları olduğunu gösteren işarettir.


Eğitim kaybının validasyon kaybından daha az gittiğini anlıyorum - bu sadece eğitim setine fazla uyuyor. Ancak doğrulama doğruluğu eğitim doğruluğundan daha yüksektir . Bu garip kısım!
DeusXMachina

Setleriniz dengesizse olmaz. Örneğin, bir ikili sınıflandırıcıda, doğrulama kümesinde orantılı olarak daha az 1 varsa ve modeliniz yalnızca 0 sn verirse, daha yüksek bir doğrulama doğruluğuna sahip olursunuz
koyu
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.