Bir evrişimli sinir ağı için ne kadar veriye ihtiyacınız var?


15

Yaklaşık 1.000.000 parametreye sahip olan evrişimli bir sinir ağım (CNN) varsa, kaç tane eğitim verisine ihtiyaç duyulur (stokastik degrade iniş yaptığımı varsayalım)? Temel kural var mı?

Ek notlar: Stokastik gradyan inişi gerçekleştirdiğimde (örneğin, 1 yineleme için 64 yama), ~ 10000 yinelemeden sonra, sınıflandırıcının doğruluğu kaba bir sabit değere ulaşabilir). Bu, çok fazla veriye ihtiyaç olmadığı anlamına mı geliyor? 100k-1000k veri gibi.

Yanıtlar:


12

Daha fazla verinin yardımcı olup olmayacağını anlamak için, algoritmanızın eğitim verileri üzerindeki performansını (yani sinir ağını eğitmek için kullanılan veriler) test verileri (yani sinir ağının yaptığı veriler) ile karşılaştırmalısınız. eğitimde "görmek" değildir).

Kontrol etmek için iyi bir şey, her sette yineleme numarasının bir fonksiyonu olarak hata (veya doğruluk) olacaktır. Bunun sonucu için iki olasılık vardır:

1) Egzersiz hatası, test hatasından önemli ölçüde daha düşük bir değere yaklaşır. Bu durumda, algoritmanızın performansı neredeyse daha fazla veriyle neredeyse kesinlikle artacaktır.

2) Egzersiz hatası ve test hatası yaklaşık olarak aynı değere yaklaşır (egzersiz hatası hala test hatasından biraz daha düşüktür). Bu durumda ek veriler kendi başına algoritmanıza yardımcı olmaz. Bu noktada elde ettiğinizden daha iyi bir performansa ihtiyacınız varsa, gizli katmanlarınıza daha fazla nöron eklemeyi veya daha fazla gizli katman eklemeyi denemelisiniz. Yeterli gizli birim eklenirse, test hatanızın egzersiz hatasından belirgin şekilde daha yüksek olacağını ve bu noktada daha fazla verinin yardımcı olacağını göreceksiniz.

Bu kararların nasıl alınacağına dair daha kapsamlı ve yararlı bir giriş için Andrew Ng'nin Coursera kursunu , özellikle de “Bir öğrenme algoritmasını değerlendirme” ve “Önyargı ve Varyans” derslerini tavsiye ederim .


3

Saf cevap, her zaman daha fazla veriye ihtiyaç duyulmasıdır. Aynı veri kümesi üzerinde daha fazla dönem için yineleme yapmak sonucu "hassaslaştırmanıza" yardımcı olur, ancak sonucu daha fazla veriye sahip olduğu kadar geliştirmezsiniz.

Örnek olarak cümle modellemesi yapmak ve daha fazla veriye ihtiyacım olup olmadığını test etmek için bir konvektör eğitimi alıyorum Eğitim veri setimi daha küçük alt kümede ayırmaya ve test etmeye çalışıyorum.

Tüm veri kümesini ve 10 yineleme eğitimini kullanarak karşılaştırmamda% 93 doğruluk elde ettim ve geliştirmeye devam ediyorum. Bunun yerine, 100 yineleme için veri kümesinin% 10'unda yinelendiğimde,% 85 elde ettim.

Bu yüzden her zaman daha fazla veriye sahip olmaya çalışın, ancak yapamazsanız, daha fazla dönem yapmak güzel bir işlem olabilir, ancak ağı her zaman yeni verilerle beslediyseniz, modeliniz daha iyi bir şekilde birleşir.


1
Cevabınız için teşekkürler! Evet, ne kadar çok veriye sahip olduğunuzu biliyorum, o kadar iyi olacaksınız, ancak tam olarak kaç veriye ihtiyacınız olduğundan emin değilim. Çünkü her zaman daha fazla veriye sahip olamazsınız. Örneğin, ek açıklama ve etiketleme yapmak için birini işe almam gerekiyor, ne zaman
durmalıyım

bu küçük bir veri kümesi varsa benim model yakınsama anlamına gelir?
samsamara

3

En önemli şey, verilerinizdeki örneklerin iyi yayılmış olmasıdır, çünkü ne kadar veriye sahip olursanız olun, daha fazla veri her zaman daha iyi olurdu. Sonuçta, kedi ve köpek resimlerini ayırt etmeyi öğrenmeye çalışırsanız, modelinizin sadece kedi resimlerini beslerseniz iyi performans göstermesini bekleyemezsiniz.

Kevin L' nin cevabında önerildiği gibi, eğitim hatası ile test hatası arasındaki farkı dikkate almak mantıklıdır. Test verileriniz egzersiz verilerinizden bağımsızsa, modelinizin kullanılamayan verilere ne kadar iyi genelleştiğine dair bir gösterge verir. Eklemek istediğim bir şey, eğitim ve test hatası arasındaki büyük bir farkın sadece modelinizin iyi bir şekilde genelleştirilmediğini, yani eğitim verilerine fazla uyduğunuzu söylemesi. Daha fazla veri muhtemelen yardımcı olacaktır, çünkü şimdi ağın fazladan veri noktalarını modellemesi gerekiyor, bu yüzden artık bu kadar çok şey geçemiyor. Bununla birlikte, modelinizi daha iyi genelleştirmek için değiştirmek daha değerli olabilir. Mükemmel bir kitaptan bu bölüm daha iyi genelleme elde etmek için ne tür bir düzenlemenin var olduğunu ve ağlarda nasıl uygulanabileceğini açıklar.

Daha niceliksel bir önlem arıyorsanız, bu soruyu quora'da buldum. Bu bir otomatik kodlayıcı ile ilgili, ancak sanırım örnek için de geçerli olmalı. Bunun doğru olup olmadığı hakkında hiçbir fikrim yok (lütfen bana bildirin), ancak örneğin MNIST için bir kişinin maksimum 28 * 28 * 8 * 10 000 = 62 720 000 ile görüntüleri azaltmaya çalıştığınızı iddia edebilirim. 10 x 10 x 10000 = 1 000 000 bit entropi ile bir sıcak kodlamada on sınıfa entropi. Çıktıdaki sadece 1000 000 bit entropi ile ilgilendiğimizden, 1000 000 parametre ile her parametrenin, örnek başına 1e-4 bit olan tek bir biti temsil ettiğini söyleyebiliriz. Bu, daha fazla veriye ihtiyacınız olacağı anlamına gelir. Veya çok fazla parametreniz var, çünkü 100 parametreyle, parametre başına 10000 bit ve dolayısıyla örnek başına 1 bitiniz var. Ancak,


Önerin için teşekkürler. Bence günümüzde insanlar belirli bir görevin veri sayısını azaltmak için farklı stratejiler geliştiriyorlar.
RockTheStar

0

Ağınızın yeterli özellikleri öğrenip öğrenmediğini anlamak için genellikle kullanılan bir başka yöntem de başlangıç ​​filtrelerini görselleştirmektir. Ağ iyi eğitilmişse düzgün bir filtre göstermelidir. Gürültülü bir filtre genellikle ağın yeterince eğitilmediğini veya fazla takılmış olduğunu gösterir. Daha fazla bilgi için bu sayfayı okuyun .

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.