Doğrulama doğruluğu neden dalgalanıyor?


31

MRI verilerini kullanarak kansere yanıtı tahmin etmek için dört katmanlı bir CNN'im var. Doğrusal olmamaları tanıtmak için ReLU aktivasyonlarını kullanıyorum. Trenin doğruluğu ve kaybı monoton bir şekilde artar ve düşer. Ancak, test doğruluğum çılgınca dalgalanmaya başlar. Öğrenme oranını değiştirmeyi, katman sayısını azaltmayı denedim. Ancak, dalgalanmaları durdurmaz. Bu cevabı bile okudum ve cevaptaki talimatları izlemeye çalıştım, ancak bir daha şansım olmadı. Birisi nerede yanlış gittiğimi anlamama yardımcı olabilir mi?

Ekran görüntüsü



Evet, bu cevabı okudum. Doğrulama verilerinin karıştırılması işe yaramadı
Raghuram

4
Kod pasajınızı paylaşmadığınız için, mimarinizde yanlış olanı pek söyleyemem. Ancak, ekran görüntüsünüzde, eğitim ve doğrulama doğruluğunuzu görünce, ağınızın fazlaca donuklaştığı açıkça anlaşılır. Kod pasajınızı burada paylaşmanız daha iyi olur.
Nain

kaç tane numunen var? belki dalgalanma gerçekten anlamlı değildir. Ayrıca, doğruluk korkunç bir ölçüdür
rep_ho

Doğrulama doğruluğu dalgalanırken bir topluluk yaklaşımı kullanmanın iyi olup olmadığını birileri doğrulamam için bana yardımcı olabilir mi? çünkü dalgalı validation_accuracy'imi iyi bir değerle bir araya getirerek yönetmeyi başardım.
Sri2110

Yanıtlar:


27

Doğruluk tanımını doğru anlarsam, doğruluk (doğru şekilde sınıflandırılmış veri noktalarının yüzdesi), MSE (ortalama kare hatası) diyilenden daha az kümülatiftir. Bu yüzden lossdoğruluk dalgalanırken, sizin hızınızın arttığını görüyorsunuz .

Sezgisel olarak, bu temelde, örneklerin bir kısmının rasgele sınıflandırıldığı , doğru rasgele tahminlerin her zaman dalgalandığı gibi dalgalanmalara neden olduğu anlamına gelir (madalyonun her zaman "kafaları" döndürmesi gerektiğinde doğruluk hayal edin). Temel olarak gürültüye duyarlılık (sınıflandırma rastgele sonuç ürettiğinde), aşırı uydurmanın yaygın bir tanımıdır (bkz. Wikipedia):

İstatistik ve makine öğrenmesinde, en yaygın görevlerden biri, genel eğitimsiz veriler üzerinde güvenilir tahminler yapabilmek için bir dizi eğitim verisine bir "model" koymaktır. Aşırı uyumda, istatistiksel bir model altta yatan ilişki yerine rastgele hata ya da gürültüyü tanımlar.

Aşırı uyuma ilişkin başka bir kanıt, kaybınızın arttığını, Zararın daha kesin bir şekilde ölçüldüğünü, sigmoidler / eşiklerle ezilmediği (gürültünün kendisi için sizin durumunuz gibi) olması durumunda gürültülü tahminlere karşı daha hassastır. Sezgisel olarak, ağın çıktıdan çok emin olduğundan (yanlış olduğunda) bir durum olduğunu hayal edebilirsiniz, bu nedenle rastgele yanlış sınıflandırma durumunda eşikten uzakta bir değer verir.

Durumunuzla ilgili olarak, modeliniz uygun şekilde düzenli değildir, olası nedenler:

  • Yeterli veri noktası yok, çok fazla kapasite
  • sipariş
  • yanlış / yanlış özellik ölçeklendirme / normalizasyon
  • öğrenme hızı: çok büyük, bu yüzden SGD çok uzak atlıyor ve bölgeyi minimuma yakın olarak özlüyor. Bu, aşırı "uygun olmayan" (verinin kendisine duyarsızlığı) durumudur, ancak girdiden veri karıştırırken çıktıda "düşük frekanslı" gürültü yaratabilir - aşırı sezginin tersine, Bir madeni parayı tahmin ederken her zaman kafaları tahmin etmek gibi . @JanKukacka'nın belirttiği gibi, bir bölgeye "çok yakın" bir bölgeye gelmek aşırı sarsıntıya neden olabilir, bu nedenle çok küçükse verilerinizdeki "yüksek frekanslı" gürültüye duyarlı hale gelir. , aralarında bir yerde olmalı.αα ααα

Olası çözümler:

  • daha fazla veri puanı elde etmek (veya mevcut olanları kümesini yapay olarak genişletmek)
  • Hiper parametrelerle oynama (örneğin, kapasiteyi arttır / azalt veya normalizasyon terimi)
  • Düzenleme : Bırakma, erken durdurma vb.

"Kayıplar daha kesin olarak ölçülür, gürültülü tahminlere karşı daha hassastır, çünkü sigmoidler / eşikler tarafından ezilmezler", eşiksiz olarak kabul ediyorum; bir rol.
Zhubarb

1
Öğrenme oranı ve minimayı sgd ile ilgili olarak: asgari seviyeye ulaşmak büyük olasılıkla fazla güçlendirme anlamına gelecektir (çünkü eğitim setinde minimum
sayıdır

@Berkmeister true, biraz değiştirdim (düzenlemeye bakın). Benim düşünceme göre Kayıp artışı, kullanılan ezilmemiş fonksiyonun işaretidir.
dk14

@JanKukacka küresel minima mı demek istiyorsun? Yerel minimayı (aslında yerel minimaya yakın) ima ettim - yani herhangi bir minimadan çok uzakta olursa, o zamanlar uygun değildi. Muhtemelen, onu daha dikkatli tanımlamalıyım (düzenlemeye bakınız), teşekkürler.
dk14

@ dk14 Global minimumun pratikte ulaşılamayacağını varsayıyorum, bu yüzden yerel minima demek istiyorum. Çok fazlaysanız, yeterince uyuşmuyor olabilirsiniz, ancak çok yakınsanız, büyük olasılıkla fazla uydurma yapacaksınız. Moritz Hardt'in ilginç bir çalışması var: "Daha hızlı çalışın, daha iyi genelleştirin: Stokastik gradyan inişinin kararlılığı" ( arxiv.org/abs/1509.01240 ), SGD ile antrenman yaparken antrenman ile test hatası arasındaki ilişkiye sınır koydu.
Jan Kukacka

6

Bu soru eski ama bunu henüz belirtmediği için gönderiyoruz:

Olasılık 1 : Antrenman setinize veya validasyon setinize bir çeşit ön işleme (sıfır anlam, normalleştirme vb.) Uyguluyorsunuz, ancak diğeri için değil .

Olasılık 2 : Antrenman sırasında farklı performans gösteren ve sıfırdan çıkarım yapan farklı katmanları oluşturduysanız, modeliniz yanlış bir şekilde uygulanabilir (örn., Hareket halindeyken hareketli ortalama ve seri normalizasyonu için standart sapma hareket ediyor, antreman sırasında güncelleniyor mu? çıkarsama?). Kodunuz bunları sıfırdan uygularsa ve Tensorflow / Pytorch'un yerleşik işlevlerini kullanmıyorsa, durum bu olabilir.

Olasılık 3: Herkesin belirttiği gibi, çok şık. Doğrulama doğruluğunuz dönemin 3% 50'sinde kalmış olduğundan, sizin durumunuzda diğer iki seçeneği daha muhtemel buluyorum. Genel olarak, bu daha sonraki bir aşamada olsaydı, fazladan tefekkür konusunda daha fazla endişe duyarım (çok özel bir sorununuz yoksa elde).


Benzer ama tamamen değil, burada daha fazla ayrıntı içeren bir sorun yaşıyorum: stackoverflow.com/questions/55348052/… Benim durumumda, aslında test verileriyle ve eğitim sırasında onaylama "doğruluğu ile tutarlı bir yüksek hassasiyete sahibim. "(kayıp değil) eğitim doğruluğundan daha yüksektir. Fakat hiçbir zaman bir araya gelip salınmayacak olmama beni aşırı uydurma hakkında düşündürüyor, bazıları bunun böyle olmadığını öne sürüyor, bu yüzden merak ediyorum, değil mi ve değilse gerekçesinin ne olduğunu merak ediyorum.
dusa

1
Bu, verilen cevapların en makul açıklamasıdır. Yüksek parti oranı normalleştirme momentumunun (örn. 0,999 veya hatta Keras varsayılan 0.99) yüksek bir öğrenme hızı ile birlikte kullanılmasının, eğitim ve değerlendirmede katman istatistiklerinin çok geride kalması nedeniyle çok farklı davranışlar üretebileceğine dikkat edin. Bu durumda momentumu 0.9 gibi bir şeye düşürmek hile yapmak zorundadır. OP ile benzer bir problem yaşadım ve bu da işe yaradı.
kristjan

5

Cevabı @ dk14 ile ekleyerek. Modelinizi uygun şekilde düzenledikten sonra hala dalgalanmalar görüyorsanız , bunun olası nedenleri olabilir:

  • Doğrulama setinizden rastgele bir örnek kullanma: Her değerlendirme aşamasında doğrulama setinizin farklı olduğu ve doğrulama kaybınızın olduğu anlamına gelir.
  • Ağırlıklı kayıp fonksiyonunun kullanılması (yüksek derecede dengesiz sınıf problemleri durumunda kullanılır). Tren basamağında, kayıp fonksiyonunuzu sınıf ağırlıklarına göre ölçersiniz, dev adımda ise sadece ağırlıksız kaybı hesaplarsınız. Bu durumda, ağınız yakınsamaya giriyor olsa da, her tren adımından sonra doğrulama kaybında çok fazla dalgalanma görebilirsiniz. Ancak daha büyük bir resim için beklerseniz, ağınızın aslında dalgalanmalarla birlikte bir minimaya yaklaştığını görebilirsiniz.görüntü tanımını buraya giringörüntü tanımını buraya girin

2

Kesinlikle çok uygun. Egzersiz verilerindeki doğruluk ile test verileri arasındaki boşluk, egzersizlerinizin çok üstünde bulunduğunu gösterir. Belki düzenlileştirme yardımcı olabilir.


1

İkili bir sınıflandırma problemindeki doğrulama doğruluğunuz (sanırım) yaklaşık% 50 oranında "dalgalanıyor", bu modelinizin tamamen rasgele tahminler verdiği anlamına geliyor (bazen birkaç numuneyi doğru tahmin ediyor, bazen birkaç numune daha az). Genel olarak, modeliniz bozuk para çevirmekten daha iyi değildir.

{0;1}

Her neyse, başkalarının da belirttiği gibi, modeliniz çok fazla abartıyor. Tahminime göre sorununuz çok karmaşık , yani istediğiniz bilgiyi verilerinizden çıkarmak çok zor ve böyle basit bir uçtan uca eğitim almış 4 katmanlı conv-net'in bunu öğrenme şansı yok .


0

Durumunda denemek için birkaç yol vardır. Öncelikle mini toplu SGD'nin daha az çılgınca dolaşmasına yardımcı olan toplu ebatı artırmaya çalışın. İkincisi, öğrenme oranını ayarlamak, muhtemelen daha küçük olmasını sağlamıştır. Üçüncüsü, farklı optimize edicileri deneyin; örneğin, öğrenme hızlarını wrt özellikleri için uyarlayabilen Adam veya RMSProp. Mümkünse verilerinizi artırmayı deneyin. Son olarak, Yarin Gal'in çok ilginç bir eseri olan, bırakma yaklaşımı üzerinden Bayesian sinir ağlarını deneyin. Https://arxiv.org/abs/1506.02158


0

Daha küçük bir ağ denediniz mi? Egzersizinizin doğruluğunun> .99'a ulaşabileceğini göz önünde bulundurarak, ağınızın verilerinizi tam olarak modellemek için yeterli bağlantısı var gibi gözükse de, rastgele öğrenen yabancı bağlantılar olabilir (ör.

Tecrübelerime göre, ResNet, VGG ve hatta daha basit ağlar gibi çeşitli ağları deneyerek daha küçük bir ağla dengelemek için bekleme doğrulama doğruluğunu elde ettim.

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.