Sinir ağınızın çalışmamasının 37 nedeni (bağlantıyla)

Eser sahibi: Slav Ivanov

Çeviri: Wu Jindi

Redaksiyon: Ding Nanya

Bu makale hakkında 4400 kelime , 12 dakika okumanız tavsiye edilir.

Bu makale, sinir ağları oluşturma sürecinde hataya açık 37 noktayı listeler ve çözümler için öneriler sunar.

Bir ağ 12 saat eğitildi. Her şey iyi görünüyor: gradyan yavaş yavaş değişiyor ve kayıp azalıyor. Ancak bir sonraki tahmin: tümü sıfırdır ve tüm görüntü arka planları algılanmaz. "Neyi yanlış yaptım?" - Bilgisayarıma sordum ama cevap vermedi.

Modelinizin çöp çıktısı verip vermediğini kontrol etmeye nereden başlıyorsunuz (örneğin, tahmin ortalama değeri veriyor mu yoksa doğruluğu gerçekten kötü)?

Pek çok nedenden dolayı, sinir ağları eğitilemeyebilir. Çoğu hata ayıklama sürecinde kendimi aynı kontrolleri yaparken buluyorum. Deneyimlerimi ve en iyi fikirlerimi bu kullanışlı listede derledim ve sizin için yararlı olacağını umuyorum.

içindekiler
  • 1. Bu kılavuz nasıl kullanılır?
  • 2. Veri seti sorunu
  • 3. Veri standardizasyonu veya iyileştirmesi
  • 4. Uygulama sorunları
  • 5. Eğitim sorunları
1. Bu kılavuz nasıl kullanılır?

Pek çok şey ters gidebilir. Ancak bazılarının diğerlerine göre korunma olasılığı daha yüksektir. Acil bir ilk yanıt olarak genellikle aşağıdaki kısa listeyle başlıyorum:

  • 1. Bu tür veriler için çalıştığı bilinen basit bir modelle başlayın (örneğin, görüntüler için VGG). Mümkünse standart kayıpları kullanın.
  • 2. Düzenlileştirme ve veri geliştirme gibi tüm ek işlevleri kapatın.
  • 3. Bir modele ince ayar yaparsanız, ön işlemeyi dikkatlice kontrol edin, çünkü eğitilen orijinal model ile aynı olmalıdır.
  • 4. Giriş verilerinin doğru olduğunu doğrulayın.
  • 5. Çok küçük bir veri setiyle başlayın (2-20 örnek). Üstünü takın ve yavaş yavaş daha fazla veri ekleyin.
  • 6. İhmal edilen tüm parçaları kademeli olarak eklemeye başlayın: geliştirme / düzenleme, özel kayıp işlevi, daha karmaşık modelleri deneyin.

Yukarıdaki adımlar sorunu çözmezse, aşağıdaki listeye göre tek tek doğrulayın.

2. Veri seti sorunu

  • 1. Giriş verilerinizi kontrol edin

Ağa girdiğiniz verilerin mantıklı olup olmadığını kontrol edin. Örneğin, görüntünün genişliğini ve yüksekliğini birden fazla kez karıştırdım. Bazen, 0 verinin tamamını yanlış giriyorum. Ya da aynı partiyi defalarca kullanacağım. Bu nedenle, doğru olduklarından emin olmak için birkaç grup girdi ve hedef çıktı yazdırın / görüntüleyin.

  • 2. Rastgele girişi deneyin

Hatanın aynı olup olmadığını görmek için gerçek veriler yerine rastgele sayılar aktarmayı deneyin. Öyleyse, bu, ağınızın verileri bir noktada çöpe çevirdiğine dair kesin bir işarettir. Neyin yanlış gittiğini görmek için katman veya işlem bazında hata ayıklamayı deneyin.

  • 3. Veri yükleyiciyi kontrol edin

Verileriniz iyi olabilir, ancak girişi ağa ileten kod yanlış olabilir. Herhangi bir işlemden önce ilk katmanın girişini yazdırın ve kontrol edin.

  • 4. Girişin çıkışa bağlı olduğundan emin olun

Bazı giriş örneklerinin doğru etiketlere sahip olup olmadığını kontrol edin. Aynı zamanda, giriş örneğini karıştırmanın yolunun çıktı etiketiyle aynı olduğundan emin olun.

  • 5. Giriş ve çıkış arasındaki ilişki çok mu rasgele?

Belki girdi-çıktı ilişkisinin rastgele olmayan kısmı, rastgele kısma kıyasla çok küçüktür (hisse senedi fiyatının böyle olduğu düşünülebilir). Yani, girdi ve çıktı yeterince ilişkilendirilmemiştir. Bunu tespit etmek için evrensel bir yöntem yoktur, çünkü bu, verilerin doğasına bağlıdır.

  • 6. Veri setinde çok fazla gürültü var mı?

Bu, bir yemek web sitesinden bir görüntü veri setini aldığımda başıma geldi. Web'in öğrenemeyeceği birçok kötü etiket var. Etiketin normal olup olmadığını görmek için bir grup giriş örneğini manuel olarak kontrol edin.

Kesme noktası tartışmalıdır çünkü bu makale (https://arxiv.org/pdf/1412.6596.pdf) MNIST'i% 50'den fazla doğru yapmak için% 50 hasarlı bir etiket kullanır.

  • 7. Veri kümesini karıştırın

Veri kümeniz karıştırılmazsa ve belirli bir sıraya sahipse (etikete göre sıralanırsa), bunun öğrenme üzerinde olumsuz bir etkisi olabilir. Bu durumu önlemek için veri kümenizi karıştırın. Giriş ve etiket karıştırma sırasının aynı olduğundan emin olun.

  • 8. Kategori dengesizliğini azaltın

Her B kategorisi resmi 1000 A kategorisi resmine karşılık geliyor mu? O zaman kayıp fonksiyonunuzu dengelemeniz veya diğer dengesiz yöntemleri denemeniz gerekebilir. (Https://machinelearningmastery.com/tactics-to-combat-imbalanced-classes-in-your-machine-learning-dataset/)

  • 9. Yeterli eğitim örneğiniz var mı?

Bir ağı sıfırdan eğitiyorsanız (yani, ince ayar yapmıyorsanız), çok fazla veriye ihtiyacınız olabilir. Görüntü sınıflandırması için, insanlar her sınıfın 1000 veya daha fazla görüntü gerektirdiğini düşünüyor.

(Https://stats.stackexchange.com/questions/226672/how-few-training-examples-is-too-few-when-training-a-neural-network/226693#226693)

  • 10. Grubunuzun birden fazla etiket içerdiğinden emin olun

Bu, sıralı bir veri kümesinde gerçekleşebilir (yani, ilk 10k örnek aynı sınıfı içerir). Veri setini karıştırarak çözmek kolaydır.

  • 11. Parti boyutunu küçültün

Bu makale (https://arxiv.org/abs/1609.04836), daha büyük bir parti boyutunun modelin genelleme yeteneğini azaltacağına işaret etmektedir.

1 hariç. Standart veri setlerini kullanın (ör. Mnist, cifar10)

Teşekkürler @hengcherkeng:

Yeni ağ mimarilerini test ederken veya yeni kod yazarken, önce kendi verileriniz yerine standart veri kümelerini kullanın. Bunun nedeni, bu veri setleri için birçok referans sonucunun bulunması ve bunların "çözülebilir" oldukları kanıtlanmış olmasıdır. Etiket gürültüsü, eğitim / test dağıtım farklılıkları ve veri seti zorluğu gibi sorunlar yoktur.

3. Veriler düzenlenir veya geliştirilir

  • 12. Standart işlevler

Girdiyi sıfır ortalamaya ve birim varyansa standartlaştırdınız mı?

  • 13. Verileriniz çok fazla geliştirilmiş mi?

Geliştirmenin düzenleyici bir etkisi vardır. Diğer düzenleme biçimleriyle (ağırlık L2, bırakma, vb.) Çok fazla birleştirildiğinde ağ uyumsuzluğuna neden olur.

  • 14. Önceden eğitilmiş modelin ön işlemesini kontrol edin

Önceden eğitilmiş bir model kullanıyorsanız, eğitim sırasında kullanılan modelle aynı normalleştirme ve ön işlemeyi kullandığınızdan emin olun. Örneğin, bir görüntü pikselinin içinde mi yoksa aralık içinde mi olması gerektiği.

  • 15. Eğitim / doğrulama / test setinin ön işlemesini kontrol edin

CS231n, yaygın bir tuzağa dikkat çekti:

"... Herhangi bir ön işleme istatistiği (ör. Veri ortalaması) yalnızca eğitim verileri üzerinden hesaplanmalı ve ardından doğrulama / test verilerine uygulanmalıdır. Örneğin, ortalamayı hesaplayın ve tüm veri kümesindeki her bir görüntüden çıkarın, ardından verileri ekleyin Eğitim setine / doğrulama setine / test setine bölmek bir hatadır. "

Ek olarak, her bir numunenin veya partinin farklı ön işlemlerini kontrol edin.

4. Uygulama sorunları

  • 16. Bu sorunun basit versiyonunu çözmeye çalışın

Bu, sorunun bulunmasına yardımcı olacaktır. Örneğin, hedef çıktı bir nesne sınıfı ve koordinatlarsa, tahmini nesne sınıfıyla sınırlandırmaya çalışın.

  • 17. "Rastgele" doğru kaybı bulma

Ayrıca mükemmel CS231n'den: küçük parametre başlatma kullanın, düzenleme yok. Örneğin, 10 sınıfımız varsa, rasgele, doğru sınıfı% 10 oranında alacağımız anlamına gelir ve Softmax kaybı, doğru sınıfın olasılığının logaritmasının tersidir, yani: -ln (0.1) = 2.302.

Bundan sonra, kaybı artıracak olan düzenlilik gücünü artırmaya çalışın.

  • 18. Kayıp işlevini kontrol edin

Kendi kayıp fonksiyonunuzu uygularsanız, lütfen hata olup olmadığını kontrol edin ve birim testleri ekleyin. Normalde, kayıp değerim biraz yanlış olacak ve ağ performansını bir miktar azaltacaktır.

  • 19. Kayıp girişini doğrulayın

Çerçeve tarafından sağlanan kayıp işlevini kullanıyorsanız, beklenen değeri ilettiğinizden emin olun. Örneğin, PyTorch'ta, NLLLoss ve CrossEntropyLoss'u karıştıracağım çünkü ilki softmax girişi gerektiriyor ve ikincisi gerektirmiyor.

  • 20. Kaybetme ağırlığını ayarlayın

Kayıp birkaç küçük kayıp işlevinden oluşuyorsa, her bir kayıp işlevinin boyutuna göre doğru olduklarından emin olun. Bu, farklı kayıp ağırlıklarının bir kombinasyonunun test edilmesini gerektirebilir.

  • 21. Diğer göstergeleri izleyin

Bazen, ağınızın normal eğitim alıp almadığına karar vermek için kayıp en iyi öngörü değildir. Mümkünse, lütfen doğruluk gibi diğer ölçütleri kullanın.

  • 22. Herhangi bir özel katmanı test edin

Ağın belirli bir katmanını kendiniz mi uyguladınız? Beklendiği gibi çalıştıklarından emin olmak için lütfen iki kez kontrol edin.

  • 23. "Donmuş" katmanı veya değişkeni kontrol edin

Öğrenilmesi gereken bazı katmanların / değişkenlerin gradyan güncellemesini yanlışlıkla devre dışı bırakıp bırakmadığınızı kontrol edin.

  • 24. Ağın boyutunu artırın

Belki ağınızın ifade gücü, hedef işlevi yakalamak için yeterli değildir. Tamamen bağlı katmana daha fazla katman veya daha fazla gizli birim eklemeye çalışın.

  • 25. Gizli boyut hatalarını kontrol edin

Girişiniz (k, H, W) = (64, 64, 64) ise, yanlış boyutla ilgili hataları göz ardı etmek kolaydır. Girdi boyutları için garip sayılar kullanın (örneğin, her boyut için farklı asal sayılar kullanın) ve bunların ağa nasıl yayıldığını kontrol edin.

  • 26. Gradyan kontrolü yapın

Gradyan inişini manuel olarak uygularsanız, gradyan kontrolü geri yayılımınızın düzgün çalıştığından emin olabilir. Daha fazla bilgi için, bkz:

1

2

3https: //www.coursera.org/lecture/machine-learning/gradient-checking-Y3s6r

5. Eğitim sorunları

  • 27. Çok küçük bir veri kümesini çözün

Verilerin küçük bir bölümünü aşırı doldurun ve düzgün çalıştığından emin olun. Örneğin, yalnızca 1 veya 2 örnek eğitin ve ağınızın bunları ayırt etmeyi öğrenip öğrenemeyeceğine bakın. Her kategori için daha fazla örnek eklemeye devam edin.

  • 28. Ağırlık başlangıcını kontrol edin

Emin değilseniz, lütfen yeniden başlatmak için Xavier veya He'yi kullanın. Ek olarak, başlatmanız yanlış yerel minimumlara neden olabilir, bu nedenle farklı bir başlatma deneyin ve yardımcı olup olmadığına bakın.

  • 29. Hiper Parametreleri Değiştirin

Belki özellikle kötü bir hiperparametre seti kullanıyorsunuzdur. Mümkünse, ızgara aramayı deneyin.

  • 30. Düzenli hale getirmeyi azaltın

Çok fazla düzenleme, ciddi ağ uyumsuzluğuna neden olur. Bırakma, parti normu, ağırlık / önyargı L2 regülasyonu vb. Gibi düzenliliği azaltın. Mükemmel "Programcı Uygulaması Derin Öğrenme" kursunda, Jeremy Howard önce uygun olmayanlardan kurtulmayı öneriyor. Bu, aşırı uyum sorununu çözmeden önce eğitim verilerini yeterince fazla sığdırmanız gerektiği anlamına gelir.

  • 31. Zaman verin

Belki de ağınızın anlamlı tahminler yapmaya başlamadan önce eğitilmesi daha uzun sürüyor. Kaybınız giderek azalıyorsa, daha fazla zaman için çalışın.

  • 32. Eğitim modundan test moduna geçin

Bazı çerçeveler Toplu Norm ve Bırakma gibi katmanlara sahipken, diğer katmanlar eğitim ve test sırasında farklı davranır. Uygun moda geçmek, ağınızın doğru şekilde tahmin etmesine yardımcı olabilir.

  • 33. Görsel eğitim
  • Her katmanın aktivasyonunu, ağırlığını ve güncellemesini izleyin.
  • Boyut olarak eşleştiklerinden emin olun.
  • Örneğin, parametre güncellemesinin boyutu (ağırlık ve sapma) 1-e3 olmalıdır.
  • Tensorboard ve Crayon gibi bir görselleştirme kitaplığı düşünün.
  • Kritik bir anda ağırlık / sapma / aktivasyonu da yazdırabilirsiniz.
  • Ortalama değeri sıfırdan çok daha büyük olan katmanların etkinleştirildiğini unutmayın. Toplu Norm veya ELU'ları deneyin.
  • Deeplearning4j, ağırlıkların ve önyargıların histogramında ne beklenilmesi gerektiğine dikkat çekti:

"Ağırlıklar için, bu histogramlar bir süre sonra yaklaşık bir Gauss (normal) dağılıma sahip olmalıdır. Sapmalar için, bu histogramlar genellikle 0'da başlar ve genellikle yaklaşık bir Gauss dağılımı ile biter (LSTM bir istisnadır). Bu sapmaları not edin +/- parametreleri. Bu çok büyük ofsetlere dikkat edin. Kategorilerin dağılımı çok dengesizse, bazen çıktı katmanında sınıflandırılabilir. "

Katmanları güncellemeler için kontrol edin, bir Gauss dağılımı oluşturmaları gerekir.

  • 34. Farklı optimize ediciler deneyin

Özellikle kötü hiper parametreleri seçmediğiniz sürece, seçtiğiniz optimize edici ağınızın eğitim almasını engellememelidir. Ancak, uygun bir görev optimize edici, en kısa sürede en fazla eğitimi almanıza yardımcı olur. Kağıt, kullandığınız algoritmanın bir optimize edici belirtmesi gerektiğini belirtir. Değilse, Adam'ı veya sıradan SGD'yi ivme ile kullanma eğilimindeyim.

Gradyan iniş iyileştirici hakkında daha fazla bilgi edinmek için Sebastian Ruder tarafından yazılan bu mükemmel makaleye göz atın.

  • 35. Patlayan / kaybolan gradyan
  • Katman güncellemelerini kontrol edin, çünkü çok büyük değerler gradyan patlamalarını gösterebilir. Gradyan kırpma yardımcı olabilir.
  • Katman aktivasyonunu kontrol edin. Deeplearning4j iyi bir kılavuz sağlar: "Etkinleştirme için iyi bir standart sapma 0,5 ile 2,0 arasındadır. Bu aralığın önemli ölçüde ötesinde, etkinleşmenin kaybolması veya patlaması anlamına gelebilir."
  • 36. Öğrenme oranını artırın / azaltın

Düşük bir öğrenme oranı, modelinizin çok yavaş yakınsamasına neden olacaktır.

Yüksek bir öğrenme oranı, başlangıçta kaybı hızla azaltacaktır, ancak iyi bir çözüm bulmak zor olabilir.

Sorunu çözmek için mevcut öğrenme oranınızı 0,1 veya 10 ile çarpın.

  • 37. NaN'nin Üstesinden Gelmek

RNN'yi eğitirken, bildiğim kadarıyla, bir NaN (Sayı Olmayan) almak daha büyük bir sorundur. Bazı çözümler:

  • Özellikle ilk 100 yinelemede NaN alırsanız, öğrenme oranını azaltın.
  • NaN'ler 0'a bölünerek veya 0 veya negatif sayıların doğal logaritması ile oluşturulabilir.
  • Russell Stewart'ın NaN ile nasıl başa çıkılacağı konusunda iyi önerileri var.
  • NaN'lerin nerede göründüğünü görmek için ağ katmanınızı katman katman değerlendirmeye çalışın.

Bir şey mi kaçırıyorum? Bir sorun mu var? Lütfen bana bildirmek için aşağıya bir yorum bırakın.

Merhaba arkadaşım, ben Slav, girişimci ve geliştiriciyim. Ayrıca, SaaS şirketi Encharge-pazarlama otomasyon yazılımının kurucu ortağıyım.

Orijinal Başlık: Nöral Ağınızın çalışmamasının 37 nedeni

Orijinal bağlantı: https://blog.slavv.com/37-reasons-why-your-neural-network-is-not-working-4020854bd607

Editör: Wang Jing

Redaksiyon: Lin Yilin

Çevirmen Profili

Wu Jindi , Syracuse Üniversitesi Bilgisayar Bilimleri Yüksek Lisansının ilk yılı. Zorluklarla yüzleşmek benim için en rahat durumdur, yapamadığım şeylere katlanmaya meyilliyim. Amacım erken yatıp erken kalkan bir Havalı Kız olmak.

- Bitiş -

Tsinghua-Qingdao Veri Bilimi Enstitüsü'nün resmi WeChat kamu platformunu takip edin " THU Veri Pastası "Ve kız kardeş numarası" Veri Pastası THU "Daha fazla ders avantajı ve kaliteli içerik elde edin.

Masa TenisiT2 Diamond Tournament Malezya: Ma Long ilk tura yükseldi
önceki
"Mona Lisa" nın bronz bir heykelini CNC işlerken bu Çinli yaptı
Sonraki
! ACL belgeleri yalnızca, AI okuduğunu anlama düzeyini kör tahmin düzeyine düşüren bir "Not" a güvenir
Zhu Siyu: Büyük verinin yararlanıcısı ve yayıcısı olun
ArXiv'in en sıcak derin öğrenme çerçevesi: Önce TensorFlow, PyTorch'un statüsü yükseliyor
Wuhan Şehri'nin ilk büyük ölçekli viyadük tünel ışıklarının değiştirilmesi | Galeri
Gece Okuması | En iyi aşk yol boyunca sana sahip olmaktır
Bir veri bilimciyi mükemmelden harika yapan nedir?
Yetkili YayınTianjin Yerleşim Alanlarında Kısır Köpeklerin Yetiştirilmesinin Yasaklanmasına İlişkin Bildirim
Bin yelkenden geçmek ve 18 yaşındaki Göl Turu'na bir mektup geri döndükten sonra hala genç olmak istiyorum
Alman Çobanlar çok iyi ve sadık Alman çobanları neden şehirlerde "yasak"?
Ağır yağmur Heilongjiang'da 26 yolcu treninin askıya alınmasına neden oldu
Köpeğin sabit sinyali nedir? Köpek sakin bir sinyal gönderdiğinde, aslında size gergin olduğunu söylüyor.
Farklı köpekler nasıl iletişim kurar? Birleşik bir dil var mı? Karşı tarafın yabancı bir dil konuştuğunu düşünüyor musunuz?
To Top