Doğrulama Hatası eğitim hatasından daha mı az?


57

Burada ve burada bu konuda iki soru buldum ama henüz net bir cevap veya açıklama yok. Aynı problemi Convolution Sinir Ağımdaki eğitim hatasından daha az olduğu durumlarda da aynı sorunu uyguluyorum. Bu ne anlama geliyor?


Bu sorunun mutlak eğitim (cv) ve test durumlarının yanı sıra MSE için hem çapraz onay hem de test için gözlenen varyansı bilmeden cevaplanabileceğini sanmıyorum.
cbeleites

verileri karıştır
user0

Bundan ne çıkarıyoruz? Evet, bırakma ve toplu iş katmanları içeren yoğun bir ağdan oluşturulmuştur. ! [buraya görüntü açıklamasını girin ] ( i.stack.imgur.com/KX1Fz.png )
Srinath

Yanıtlar:


69

Gerçek metodolojinizi bilmeden kesin olmak zordur (örn. Çapraz doğrulama metodu, performans ölçümü, veri bölme metodu, vb.).

Genel olarak konuşursak, eğitim hatası neredeyse her zaman doğrulama hatasını küçümseyecektir . Ancak, doğrulama hatasının eğitimden daha az olması mümkündür. Bunu iki şekilde düşünebilirsiniz:

  1. Eğitim setinizin öğrenmesi gereken birçok 'zor' vaka vardı
  2. Doğrulama kümenizin tahmin etmesi gereken çoğunlukla 'kolay' vakalar vardı

Bu nedenle model eğitim metodolojinizi gerçekten değerlendirmeniz önemlidir. Verilerinizi doğru bir şekilde eğitmek için ayırmazsanız, sonuçlarınız kafa karıştırıcı sonuçlara yol açar, sadece yanlış değilse sonuçlara yol açar.

Dört farklı kategoride model değerlendirmesi düşünüyorum:

  1. Underfitting - Doğrulama ve eğitim hatası yüksek

  2. Overfitting - Doğrulama hatası yüksek, eğitim hatası düşük

  3. İyi uyum - Doğrulama hatası düşük, eğitim hatasından biraz daha yüksek

  4. Bilinmeyen uyum - Doğrulama hatası düşük, eğitim hatası 'yüksek'

'Bilinmeyen' uygun diyorum çünkü sonuç, makine öğrenmenin nasıl çalıştığıyla ilgili sezgisel. ML'nin özü bilinmeyeni tahmin etmektir. Eğer bilmediğiniz şeyi 'öğrendiklerinizden' daha iyi tahmin ediyorsanız, AFAIK eğitim ve onaylama arasındaki veriler bir şekilde farklı olmalıdır. Bu, veri bölme yönteminizi yeniden değerlendirmeniz, daha fazla veri eklemeniz veya muhtemelen performans ölçümünüzü değiştirmeniz gerektiği anlamına gelebilir (aslında istediğiniz performansı ölçüyor musunuz?).

DÜZENLE

OP'nin önceki bir piton lazanya sorusuna referansını ele almak .

Bu, çapraz doğrulama gerektirmeyen yeterli veriye sahip olduğunuzu ve eğitim, doğrulama ve test veri alt kümelerinize sahip olduğunuzu gösterir. Şimdi, lazanya eğitimine bakarsanız , aynı davranışın sayfanın en üstünde görüldüğünü görebilirsiniz. Yazarların garip olsa bu tür sonuçlar yayınlayacağına inanmakta zorlanırdım ama sadece doğru olduklarını varsaymak yerine, daha ileri bakalım. Burada bizi en çok ilgilendiren bölüm eğitim döngüsü bölümünde, en altta, kayıp parametrelerinin nasıl hesaplandığını göreceksiniz.

Eğitim kaybı üzerinden hesaplanan tüm eğitim veri kümesi . Aynı şekilde, doğrulama kaybı tüm doğrulama veri kümesi üzerinden hesaplanır . Eğitim seti tipik olarak validasyonun en az 4 katıdır (80-20). Hatanın tüm numuneler üzerinde hesaplandığı göz önüne alındığında, validasyon setinin zarar ölçüsünün yaklaşık 4 katına kadar bekleyebilirsiniz. Ancak, eğitim devam ederken eğitim kaybının ve doğrulama kaybının birbirine yaklaştığını fark edeceksiniz. Bu, eğitim hatalarınız doğrulama hatalarınızdan daha düşük olmaya başlıyorsa, modelinize uymaya başlamışsınız gibi kasıtlıdır !!!

Umarım bu hataları açıklığa kavuşturur.


2
Güzel cevap Eğitimde, eğitim setinde en uygun çözüme yaklaşılmamasını mümkün kılan kodda bir hata olması ihtimali de vardır. Veya, eğitim hedefi dışbükey değilse ve eğitim algoritması doğrulama seti için iyi olabilecek yerel bir asgari seviyeye yaklaşırsa.
Sobi,

@cdeterman thanks.Bir performans ölçütü olarak RMSE kullanıyorum. Verilerimi test için% 20 ve eğitim ve doğrulama için% 80 olarak ayırdım (doğrulama verilerinin hesaplanması için eğitim verilerinin% 20'si çapraz doğrulandı). Aslında, Doğrulama hatası düşük, eğitim hatasından biraz daha düşük. Test hatası eğitim ve doğrulama hatalarından daha yüksektir. Biz el yazısı tanıma için MNISTdataset böyle bir vakaya bulabilirsiniz stats.stackexchange.com/questions/178371/...
Bido

@Bido en son düzenleme adresimi sorguluyor mu?
cdeterman

@cdeterman Teşekkürler. Cevabınızı düzenlediğinizi farkettim. Açık ve yardımsever.
Bido,

Harika bir açıklama, eğer birkaç grafik ekleyebilirseniz - mümkün olan en iyisi bu olurdu
Taras Matsyk

109

Bir olasılık: Ağınızda bırakma düzenlileştirme katmanı kullanıyorsanız, doğrulama hatasının eğitim hatasından daha küçük olması makul olabilir. Çünkü genellikle bırakma antrenman sırasında aktifleştirilir, ancak validasyon seti değerlendirilirken devre dışı bırakılır. İkinci durumda daha yumuşak (genellikle daha iyi demektir) işlevi elde edersiniz.


12
Ne kadar basit, mantıklı bir cevap!
rajb245

4
Evet, bu gerçekten doğru cevap olarak işaretlenmelidir.
Simanas

2
Bırakma katmanımı kaldırdım, ancak doğrulama kaybını başlangıçta eğitim kaybından daha düşük görüyorum! (Ben de katmanlar üzerinde herhangi bir düzenlileştirme
Josiah Yoder

Davamla uyuyor. Çok fazla bırakma kullanarak.
André Christoffer Andersen,

@JosiahYoder - Bu konuda paylaşacak başka bir şeyin var mı? 1650 giriş özelliğine sahibim. ağı küçük tuttuğumda (1650, 50, 1) bırakma veya bırakma olmadığında, ilk çağlardaki eğitim hatası doğrulama hatasından daha yüksektir. Büyük ağlar kullandığımda (1650, 1200, 800, 100 ..... selu aktivasyonlu 100 civarında yaklaşık 10 katman), daha yüksek doğrulama doğruluğunun tuhaf bir şekilde hafifletildi.
MiloMinderbinder

19

@ DK'nin cevabı hakkında yorum yapmak için yeterli puanım yok, ancak bu şimdi Keras'ın dokümantasyonunda SSS olarak cevaplandı:

“Eğitim kaybı neden test kaybından daha yüksek?

Bir Keras modelinin iki modu vardır: eğitim ve test. Düşüş ve L1 / L2 ağırlık normalizasyonu gibi düzenlileştirme mekanizmaları test sırasında kapatılır.

Ayrıca, eğitim kaybı, her bir eğitim verisi grubundaki kayıpların ortalamasıdır. Modeliniz zaman içinde değiştiğinden, bir dönemin ilk partileri üzerindeki kayıplar genellikle son partilerden daha yüksektir. Öte yandan, bir çağın test kaybı, çağın sonunda olduğu gibi model kullanılarak hesaplanır ve daha düşük bir kayba neden olur. "


1
Bu da soruyu tamamen cevaplamıyor. Bırakma devre dışı bırakılmış durumdayken, art arda birkaç dönem için eğitim kaybının yaklaşık yarısı doğrulama kaybını görüyorum!
Josiah Yoder,

Eğitim verileriniz dev verilerini temsil ediyor mu?
saat

Veri setini rastgele olarak eğitim ve testlere ayırdım. Görsel olarak iyi bir örnek olarak ortaya çıktı. En iyi sınıflandırıcıların her zaman ortalama değeri tahmin etmekten sadece biraz daha iyi olduğu bir regresyon problemi üzerinde çalışıyordum.
Josiah Yoder

Cevabınız, eğitim kaybının, sorulan soru olan doğrulama kaybından daha büyük olduğu hakkında konuşmuyor. Daha çok Eğitim kaybı ve test kaybı üzerine odaklanıyorsunuz
enjal

6

2 sentim: Bırakma katmanları olmadan da aynı sorunu yaşadım. Benim durumumda - parti-norm katmanlar suçlularıydı. Onları silerken - eğitim kaybı doğrulama kaybına benziyordu. Muhtemelen, bunun nedeni, antrenman sırasında parti normunun, verilen partiden ortalamaya ve varyansı kullanmasıdır; bu, partiden partiye farklı olabilir. Ancak, değerlendirme sırasında parti-normu, her ikisi de eğitim boyunca tek bir partinin ortalama ve varyansından çok daha iyi ayarlanmış olan tüm özellikleri özelliklerini yansıtan çalışan ortalama ve varyans kullanır. En azından, parti normunun pytorch'te nasıl uygulandığı


1
Teşekkürler @ Mans007, bu başıma gelmişti ve Keras kullanıyordum. Parti-norm katmanları bunun nedeni idi.
Roei Bahumi

4

Cevabını hem birleştiren başka olasılık @cdeterman ve @DK biraz veri büyütme mekanizmasını kullanarak eğer bir şekilde olduğunu. Etki veri artırımı genellikle sadece eğitim setinde yapılır ve validasyon setinde (bırakma düzenlemesi için değil) yapılır ve bu, antrenman setinde olduğundan daha kolay tahmin edilmesi gereken "kolay" durumları içeren bir validasyon setine yol açabilir.


2

Benzer sonuçlar aldım (test kaybı eğitim kaybından önemli ölçüde düşüktü). Bırakma düzenlemesini kaldırdığımda her iki zarar da neredeyse eşit oldu.


0

@cdeterman ve @DK'nın iyi bir açıklaması var. Bir sebep daha istiyorum data leakage. Tren verilerinizin bir kısmı test verileriyle "yakından ilişkilidir".

Potansiyel örnek: evcil hayvan başına 500 benzer resme sahip 1000 köpeğinizin ve 1000 kedinizin olduğunu düşünün (bazı sahipler evcil hayvanların resimlerini çok benzer pozisyonlarda çekmeyi seviyor). Bu nedenle, rastgele 70/30 bölünme yaparsanız, tren verilerinin test verilerinde veri sızıntısı olur.


0

Basitçe söylemek gerekirse, eğer eğitim kaybı ve doğrulama kaybı doğru hesaplanırsa, eğitim kaybının doğrulama kaybından daha yüksek olması mümkün değildir. Bunun nedeni, geri yayılımın DIRECTLY eğitim setinde hesaplanan hatayı azaltması ve sadece INDIRECTLY (hatta garanti edilmez!) Doğrulama setinde hesaplanan hatayı azaltmasıdır.

Antrenman sırasında ve validasyon sırasında farklı olan bazı ek faktörler bulunmalıdır. Bırakma iyi bir şey, ancak başkaları da olabilir. Kullandığınız kitaplığın belgelerini kontrol ettiğinizden emin olun. Modeller ve katmanlar genellikle dikkat etmediğimiz varsayılan ayarlara sahip olabilir.


0

Antrenman hatasından daha düşük bir validasyon, okulu bırakma veya başka şeylerle ilgili dalgalanmalardan kaynaklanabilir, ancak uzun vadede devam ederse, antrenman ve doğrulama veri setlerinin aslında aynı istatistik gruplarından alınmadığını gösterebilir. Bu, örnekleriniz bir seriden geliyorsa ve eğitim ve doğrulama veri kümelerini düzgün bir şekilde randomize etmediyseniz olabilir.


0

Şu anda, stokastik gradyan tabanlı yöntemler hemen hemen her zaman derin öğrenme için tercih edilen bir algoritmadır. Bu, verilerin gruplar halinde geldiği, gradyanların hesaplandığı ve parametrelerin güncellendiği anlamına gelir. Bu, her parti seçiliyken veri üzerindeki kaybı da hesaplayabileceğiniz anlamına gelir. Bu çerçevede, iki yolu vardır nasıl kaybı ben antrenman hata doğrulama hatası büyükse bu fenomenin yol açabilir düsünebilirz hesaplanır. Aşağıda, Keras'ın aslında örnek içi hataları bu yollarla hesapladığını gösteriyor.

1.) Eğitim hatası, tüm dönemin ortalamasıdır, daha ziyade dönemin sonunda bir kerede, ancak doğrulama hatası yalnızca dönemin sonundadır. Doğrulama hatasının tamamen güncellenme avantajına sahip olduğuna dikkat edin, eğitim hatası daha az güncellemeyle hata hesaplamaları içerir. Elbette, asimptotik olarak bu etki genellikle ortadan kaybolmalıdır.

2.) Toplu güncelleme yapılmadan önce eğitim hatası hesaplanır . Stokastik degrade tabanlı bir yöntemde, degradede bir miktar gürültü var. Biri bir tepeye tırmanırken, tüm eğitim örneklerinden hesaplanan küresel zararı azaltma ihtimali yüksek. Bir modda çok yakın aldığında Ancak, güncelleme yönü numunelerine göre negatif olacaktır içinde senin toplu. Biz moda etrafında zıplayan çünkü Ama bunun anlamı , ortalama olarak biz numuneler açısından olumlu bir yönü seçerek gerekir dışarıToplu Şimdi, belirli bir partideki numunelere göre güncelleme yapmak üzereysek, bu, dahil edilmemiş potansiyel olarak pek çok toplu güncelleme tarafından itildikleri anlamına gelir, güncelleme öncesinde kayıplarını hesaplayarak bu, stokastik durumdur. Yöntemler, parametreleri veri kümenizdeki diğer örneklerden en çok lehine itti, bu nedenle bize beklenen zararla ilgili küçük bir artış eğilimi sağladı.

Asimptotik olarak (1) 'in etkisinin ortadan kalktığını, (2)' nin olmadığını unutmayın! Aşağıda Keras'ın hem (1) hem de (2) göründüğünü gösteriyorum.

(1) Sonunda bir kerede değil, her bir partide ortalamaların ortalama olduğunu göstermek. İlk dönemde, val_accuracy lehine val_accuracy lehine BÜYÜK farklılık farkına dikkat edin. Bunun nedeni, bazı örnek hataların çok az sayıda toplu güncellemeyle hesaplanmasıdır.

>>> model.fit(Xtrn, Xtrn, epochs = 3, batch_size = 100, 
...                 validation_data = (Xtst, Xtst))
Train on 46580 samples, validate on 1000 samples
Epoch 1/3
46580/46580 [==============================] - 8s 176us/sample 
- loss: 0.2320 - accuracy: 0.9216 
- val_loss: 0.1581 - val_accuracy: 0.9636
Epoch 2/3
46580/46580 [==============================] - 8s 165us/sample 
- loss: 0.1487 - accuracy: 0.9662 
- val_loss: 0.1545 - val_accuracy: 0.9677
Epoch 3/3
46580/46580 [==============================] - 8s 165us/sample 
- loss: 0.1471 - accuracy: 0.9687 
- val_loss: 0.1424 - val_accuracy: 0.9699
<tensorflow.python.keras.callbacks.History object at 0x17070d080>

(2) Her parti için güncellemeden önce hata gösteriliyor . Çağ 1 için, kullandığımız zaman batch_size = nRows(yani, bir partideki tüm veriler), örnek içi hatanın çağ 1 için yaklaşık 0.5 (rastgele tahmin) olduğunu, ancak doğrulama hatasının 0.82 olduğunu unutmayın. Bu nedenle, parti içi güncellemeden önce numune içi hata hesaplanırken , doğrulama hatası toplu güncellemeden sonra hesaplanır .

>>> model.fit(Xtrn, Xtrn, epochs = 3, batch_size = nRows, 
...                 validation_data = (Xtst, Xtst))
Train on 46580 samples, validate on 1000 samples
Epoch 1/3
46580/46580 [==============================] - 9s 201us/sample 
- loss: 0.7126 - accuracy: 0.5088 
- val_loss: 0.5779 - val_accuracy: 0.8191
Epoch 2/3
46580/46580 [==============================] - 6s 136us/sample 
- loss: 0.5770 - accuracy: 0.8211 
- val_loss: 0.4940 - val_accuracy: 0.8249
Epoch 3/3
46580/46580 [==============================] - 6s 120us/sample 
- loss: 0.4921 - accuracy: 0.8268 
- val_loss: 0.4502 - val_accuracy: 0.8249
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.