Sinir ağım iyi genelleşmiyorsa ne yapmalıyım?


36

Sinir ağını eğitiyorum ve eğitim kaybı azaldı, ancak doğrulama kaybı çok benzer mimarilere ve verilere sahip referanslara veya deneylere dayanarak beklediğimden çok daha az değil veya azalıyor. Bunu nasıl düzeltebilirim?


Soru gelince

Sinir ağım öğrenemediğinde ne yapmalıyım?

Bu sorunun ilham aldığı soru genel olarak bırakılmıştır, böylece bir sinir ağının genelleme hatasını nasıl ulaşılabilir olduğu kanıtlanmış bir seviyeye kadar azaltabileceği ile ilgili diğer sorular , bunun bir kopyası olarak kapatılabilir.

Ayrıca Meta'daki özel konuya bakın:

"Sinir ağım neden genelleşmiyor?" Türündeki soruları yönlendirebileceğimiz genel bir soru var mı?


4
Kendi kapsamlı cevabınızı göndermeyi planlıyorsanız, aynı anda Q ve A'yı aynı anda göndermek iyi bir fikir olabilirdi (kullanıcı arayüzü buna izin verir). Aksi takdirde, diğer insanları cevap yazmaları için cesaretlendiriyorsunuz ve birbirimizi kısmen kopyalayan birkaç cevapla sonuçlanabiliriz ... Yine de, cevabınızı bekliyorum.
amip diyor Reinstate Monica

@ ambaeba ah, bunu bilmiyordum: soruyu cevaplamaya çalıştığımda kullanıcı arayüzü açılır pencereyi açar, bu yüzden soru ve cevapların birlikte gönderilemeyeceğini düşündüm .... Peki, eğer birileri daha iyi yazarsa / daha fazlası yazacağım şeye göre tam cevap, sadece bir kopya eklemekten kaçınacağım.
DeltaIV

Yanıtlar:


36

Her şeyden önce, “sinir ağım genel olarak iyi değil” ne demek ve “sinir ağım iyi performans göstermiyor” demenin ne anlama geldiğini söyleyelim .

Bir Sinir Ağını eğitirken, sürekli olarak eğitim seti adı verilen etiketli bir veriyi değerlendiriyorsunuzdur . Modeliniz düzgün çalışmıyorsa ve eğitim setinden öğrenmek görünmüyorsa, sen yok henüz bir genelleme sorunu var, bunun yerine bakın bu yazı . Modeliniz (örneğin doğrulama / test setleri) eğitim setinde bir tatmin edici bir performans elde edilir, ama iyi üzerinde daha önce görülmemiş verileri gerçekleştiremiyor Ancak, o zaman bunu bir genelleme sorun var.

Modeliniz neden uygun şekilde genelleme yapmıyor?

En önemli kısım, ağınızın neden iyi genellemediğini anlamaktır . Yüksek Kapasiteli Makine Öğrenimi modelleri, aşırı eğitime yol açabilecek eğitim setini ezberleme yeteneğine sahiptir .

Aşırı yükleme, bir tahmincinin eğitim setini o kadar iyi öğrenmeye başladığı durumdur (eğitim örneklerinde gürültüyü modellemeye başladı (tüm yararlı ilişkilerin yanı sıra).

Örneğin, aşağıdaki resimde mavi çizginin nasıl belirgin bir şekilde örtüştüğünü görebiliriz.

Ama bu neden kötü?

Modelimizi yeni, daha önce görülmemiş verilerle (yani doğrulama / test seti) değerlendirmeye çalışırken , modelin performansı beklediğimizden çok daha kötü olacaktır .

Aşırı yükleme nasıl önlenir?

Görev başlangıcında, modelinizin karmaşıklığının aslında aşırı yüklenmeye neden olan şey olduğunu ima ettim, çünkü modelin eğitim setinden gereksiz ilişkilerini çıkarmasına izin vererek doğuştan gelen gürültüsünü ortaya çıkardı. Aşırı yüklemeyi azaltmanın en kolay yolu, esas olarak modelinizin kapasitesini sınırlamaktır . Bu tekniklere düzenlileştirme teknikleri denir .

  • Parametre norm cezaları . Bunlar, her bir modelin ağırlık güncelleme fonksiyonuna, parametre normuna bağlı olan ilave bir terim ekler. Bu terimin amacı, gerçek güncellemeye karşı koymaktır (örneğin, her ağırlığın ne kadar güncellenebileceğini sınırlamak). Bu, modelleri aykırı değerlere ve gürültüye karşı daha dayanıklı kılar. Bu tür düzenlemelerin örnekleri , Lasso , Ridge ve Elastic Net regresörlerinde bulunabilen L1 ve L2 düzenlemeleridir . Bir sinir ağındaki her (tamamen bağlı) katman, basit bir doğrusal regresyona benzer bir şekilde çalıştığından, bunlar Sinir Ağları'nda kullanılır. En yaygın kullanım, her katmanı ayrı ayrı düzenlemek. keras uygulaması .

  • Erken durma . Bu teknik, tahmin edicinin eğitim aşamasını vaktinden önce, gürültüyü modellemeye başlamadan önce verilerden tüm anlamlı ilişkileri çıkarmayı öğrendiği noktada durdurmaya çalışır. Bu, doğrulama kaybını (veya seçtiğiniz bir doğrulama metriğini) izleyerek ve bu metrik geliştirmeyi bıraktığında eğitim aşamasını sona erdirerek yapılır . Bu şekilde, tahmin ediciye yararlı bilgiyi öğrenecek kadar zaman veriyoruz, ancak gürültüden öğrenecek kadar değil. keras uygulaması .

  • Sinir Ağına özgü düzenlemeler. Bazı örnekler:
    • Bırakma . Bırakma , şaşırtıcı derecede iyi çalışan ilginç bir tekniktir. Bırakma, bir ağdaki art arda iki katman arasında uygulanır. Her yinelemede, iki katmanı birleştiren bağlantıların belirli bir yüzdesi (rastgele seçilir) düşürülür . Bu daha sonraki katman güvenmek neden tüm önceki katmana onun bağlantılarının.
      keras uygulaması
    • Öğrenme aktarın . Bu özellikle Derin Öğrenmede kullanılır. Bu, ağınızın ağırlığını, geniş, genel bir veri kümesi üzerinde önceden eğitilmiş aynı yapıya sahip başka bir ağın ağlarına başlatmakla yapılır .
    • Derin Sinir Ağlarında aşırı uyumu sınırlayabilen diğer şeyler şunlardır: Bir regülatör görevi görebilen ve bazı durumlarda (örneğin başlangıç ​​modülleri) bırakma gibi çalışan, Toplu Normalleştirme ; SGD'de göreceli olarak küçük boyutlu gruplar ; bu da fazla takılmayı önleyebilir; Gizli katmanlardaki ağırlıklara küçük rastgele gürültü eklenmesi .

Aşırı uyumu önlemenin bir başka yolu, modelin kapasitesini sınırlamanın yanı sıra, verilerinizin kalitesini de arttırmaktır. En bariz seçenek dışlayıcı / gürültü giderme olacaktır, ancak pratikte kullanımları sınırlıdır. Daha yaygın bir yol (özellikle görüntü ile ilgili görevlerde) veri büyütmedir . Burada, eğitim örneklerini rastgele dönüştürmeye çalışıyoruz, böylece modele farklı gözüküyorlarsa, aynı anlamsal bilgileri aktarıyorlar (örneğin, görüntüler üzerinde sol-sağa çevirerek).
Veri büyütmeye genel bakış

Pratik öneriler:

  • Açık farkla en etkili düzenlileştirme tekniğidir bırakma onu kullanmanız gereken ilk olmalıdır, yani. Ancak, her yere bırakma (ve muhtemelen de yapmamalısınız) gerekmiyor! Takma işlemine en yatkın katmanlar Fully Connected (FC) katmanlarıdır, çünkü bunlar en çok parametreyi içerir. Bırakma bu katmanlara uygulanmalıdır (bir sonraki katmana bağlantılarını etkiler).
  • Toplu normalleştirme , normalleştirme etkisine sahip olmasının yanı sıra modelinize başka şekillerde de yardımcı olur (örneğin, yakınsamayı hızlandırır, daha yüksek öğrenme oranlarının kullanılmasına izin verir). FC katmanlarında da kullanılmalıdır.
  • Daha önce de belirtildiği gibi, modelinizi eğitim aşamasında daha önce planladığınızdan daha önce durdurmak faydalı olabilir. Erken durma problemi , herhangi bir noktada modelin tekrar geliştirilmeye başlamayacağının garantisi olmamasıdır. Erken durmaktan daha pratik bir yaklaşım, validasyon setinde en iyi performansı sağlayan modelin ağırlıklarını depolamaktır. Bununla birlikte, dikkatli olun, çünkü bu, modelinizin performansının tarafsız bir tahmini değildir (sadece eğitim setinden daha iyidir). Sen olabilir ayrıca doğrulama sette overfit. Bundan sonra daha fazlası.
    keras uygulaması
  • Bazı uygulamalarda (örneğin görüntüyle ilgili görevler), ImageNet ağırlıklarını bulabileceğiniz önceden belirlenmiş bir mimariyi (örneğin VGG, ResNet, Inception) takip etmeniz önerilir. Bu veri kümesinin genel yapısı, özelliklerin görüntü ile ilgili herhangi bir görev için kullanılacak kadar genel olmasını sağlar. Bunu güçlendirmek için sağlam olmasının yanı sıra, bu eğitim süresini büyük ölçüde azaltacaktır.
    Benzer konseptin bir başka kullanımı da şudur: Görevin fazla veriye sahip değilse, ancak buna benzer başka bir görev bulabilirsen, fazla uydurmayı azaltmak için transfer öğrenmeyi kullanabilirsin . Önce ağınızı, daha büyük veri kümesine sahip görev için eğitin ve ardından ince ayar yapmaya çalışınbaşlangıçta istediğiniz model. İlk eğitim, çoğu durumda, modelinizi daha fazla donanım için daha sağlam hale getirecektir.
  • Veri büyütme . Her zaman daha büyük bir veri kümesine sahip olmak için yardımcı olsa da , veri yükseltme tekniklerinin kendi eksiklikleri vardır. Daha spesifik olarak, verilerin kuvvetli bir şekilde artmamasına dikkat etmeniz gerekir , çünkü bu verilerin anlamsal içeriğini mahvedebilir. Örneğin, görüntü büyütme işleminde görüntüyü çok fazla çevirirseniz / kaydırır / ölçeklerseniz veya parlaklığı / kontrastı ayarlarsanız, içerdiği bilgilerin çoğunu kaybedersiniz. Ayrıca, her bir görev için geçici bir şekilde büyütme şemaları uygulanmalıdır (örn. El yazısıyla yazılan rakam tanıma işleminde rakamlar genellikle aynı hizadadır ve çok fazla döndürülmemelidirler, ayrıca herhangi bir yöne çevrilmemelidirler) yatay / dikey olarak simetrik değil, tıbbi görüntüler için de aynı şey geçerli).
    Kısacası , veri büyütme yoluyla gerçekçi olmayan görüntüler üretmemeye dikkat edin . Ayrıca, artan veri kümesi boyutu daha uzun bir eğitim süresi gerektirir. Kişisel olarak, modelimin eğitim setinde yakın bir değere ulaştığını gördüğümde veri arttırmayı kullanmayı düşünüyorum .0

9

Yeterince derin sinir ağlarının devasa veri kümelerindeki rastgele etiketleri ezberleyebildiğine dair birçok ampirik kanıt vardır (Chiyuan Zhang, Samy Bengio, Moritz Hardt, Benjamin Recht, Oriol Vinyals, "Derin öğrenmenin anlaşılması genellemenin yeniden düşünülmesini gerektirir"). Bu nedenle, prensipte yeterince büyük bir NN alarak, eğitim hatasını her ne kadar ne kadar anlamlı olursa olsun pratik olarak sayısal doğrulukla sınırlanan son derece küçük değerlere indirebiliriz .

Genelleme hatası için her şey oldukça farklı . Her öğrenme problemi için, istenildiği kadar düşük bir genelleme hatası üretebilen öğrenilebilir bir NN modeli bulunduğundan emin olamayız. Bu nedenle ilk adım

1. Beklentilerinizi doğru ayarlayın

Veri kümenizde veya referansları bulabileceğiniz en benzer olanı üzerinde, aradığınız genelleme hatasına ulaşabilecek bir mimari bulunduğunu söyleyen saygın bir referans bulun. Örneğin, buraya bak

Güncel modern konvolüsyonel sinir ağları nelerdir?

CNN'lerin çeşitli görevlerde güncel (cevapların zamanında) SOTA (En İyi Devlet) performansını bulmak. Tüm altyapınızın uygun şekilde yerleştirildiğinin bir testi olarak, kendi veri kümenizi geliştirmeden önce bu referans veri kümelerinde bu gibi sonuçları tekrarlamaya çalışmak iyi bir fikirdir.

2. Eğitim prosedürünün kusursuz olduğundan emin olun

Soruya verilen cevaplarda açıklanan tüm kontroller

Sinir ağım öğrenemediğinde ne yapmalıyım?

Eğitim prosedürünüzün tamam olduğundan emin olmak için, genelleme hatasının başarılı bir şekilde azaltılması için ön şarttır (NN'niz öğrenmiyorsa, genelleştirmeyi öğrenemez). Bu kontroller, diğer şeylerin yanı sıra:

  • birim testleri
  • veri kümesi kontrolleri (hem eğitim seti hem de test seti için birkaç rastgele giriş / etiket örneğine bir göz atın ve etiketlerin doğru olup olmadığını kontrol edin; giriş görüntülerinin genişliğini ve boyutunu kontrol edin, eğitim / test setinde örnekleri karıştırın ve etkileyip etkilemediğini kontrol edin) sonuçlar; vb.)
  • randomizasyon testleri
  • ön işleme ve paket versiyonlarınızı standartlaştırın
  • sayısal deneylerin kayıt defteri tutmak

3. Süper yakınsama almaya çalışın

Leslie N. Smith ve Nicholay Topin tarafından “Süper Yakınsama: Sinir Ağlarının Çok Hızlı Eğitimi” , bazı durumlarda büyük öğrenme hızlarının Leslie N. Smith'in çevrimsel öğrenme hızı yöntemiyle birleştirilmesinin düzenleyici olarak hareket ettiğini göstermektedir. büyüklük sırasına göre yakınsamayı hızlandırmak ve kapsamlı düzenlileştirme ihtiyacını azaltmak. Böylece bu daha önce denemek için iyi bir şey

4. Düzenlemenizi MAXXX’e ayarlama

Düzenli hale getirme genellikle eğitim süresini (kötü) arttırır, eğitim hatasını arttırır ve genelleme hatasını azaltır (iyi), ancak çok fazla düzenleme aslında her iki hatayı da artırabilir (yetersizleştirme). Bu nedenle ve antrenman süresindeki artış nedeniyle , antrenman setini başarıyla tamamlamayı başardıktan sonra , çeşitli düzenlileştirme tekniklerini tek seferde tanıtmak genellikle daha iyidir . Düzenlemenin kendi başına olması, genelleme hatasının daha küçük olacağı anlamına gelmez: Model, iyi genelleme özellikleri elde etmek için yeterince geniş bir kapasiteye sahip olmalıdır. Bu genellikle düzenlileşmenin faydalarını görmeden önce yeterince derin bir ağa ihtiyacınız olduğu anlamına gelir.

En eski düzenlileştirme yöntemleri muhtemelen erken durma ve kilo kaybıdır. Diğerlerinden bazıları:

  • m=16
  • adaptif optimiserler yerine SGD kullanın: bu zaten @ shimao tarafından kapsandı, bu yüzden sadece tamamlık uğruna
  • bırakma kullanın: LSTM kullanıyorsanız, yalnızca bir LSTM katmanının giriş ve çıkış birimleri için standart bırakma kullanın. Tekrarlayan birimler için (kapılar) , doktora programında Yarin Gal tarafından ilk kez gösterildiği gibi tekrarlayan bırakma kullanın . tez . Ancak, CNN kullanıyorsanız, bırakma artık daha az kullanılıyor. Bunun yerine,… eğilimindedir
  • ... parti normalizasyonunu kullanın: en son CNN mimarileri parti normalizasyonu lehine terk etmekten kaçınır. Bu sadece bir tuhaflık olabilir veya görünüşte bırakma ve parti normalizasyonunun birlikte iyi oynamamalarından kaynaklanıyor olabilir (Xiang Li, Shuo Chen, Xiaolin Hu, Jian Yang, Variance'ın Bırakma ve Toplu Normalleştirme Arasındaki Uyuşmazlığı Anlamak) ÜstKrkt ) Çok büyük veri kümeleriniz olduğunda toplu iş normları bırakma işleminden daha etkili olduğu için, bırakma işleminin CNN mimarileri için tercihten düşmesinin bir nedeni olabilir. Toplu normalleştirme kullanıyorsanız, her katman için ağırlık ve önyargı dağılımının yaklaşık olarak normal göründüğünü doğrulayın. RNN'ler için parti normu uygulamak karmaşıktır: ağırlık normalleşmesi (Tim Salimans, Diederik P. Kingma,Ağırlık Normalizasyonu: Derin Sinir Ağlarının Eğitimini Hızlandırmak İçin Basit Bir Onarım ) uygulanabilir bir alternatiftir.
  • Veri büyütmeyi kullanın: Düzenleyici etkisi de vardır.

5. Hiperparametre / mimari araması

Başka hiçbir şey yardımcı olmazsa, birden fazla farklı hiperparametre ayarını (Bayesian Optimizasyonu burada yardımcı olabilir) veya birden fazla farklı mimari değişikliği (örneğin, belki de GAN mimarisinde ve üzerinde çalıştığınız veri kümesi için) test etmeniz gerekecektir. Jeneratör, ancak ayırımcıya eklendiğinde işleri daha da kötüleştirir). Bu uzun ve sıkıcı deneylerin sonuçlarını düzenli bir kayıt defterinde takip ettiğinizden emin olun.

Bir GAN için PS, bir genelleme hatası hakkında konuşmanın pek bir anlamı yoktur: Yukarıdaki örnek, yalnızca Derin Öğrenmede hala çok fazla simya olduğuna ve iyi çalışmayı beklediğiniz şeylere işaret ediyordu; ya da tam tersi birçok kez tamam işe yaradı bir şey, bir anda yeni bir veri seti için sizi özlüyor.


5

Literatürde gördüğüm, yaygın olarak kullanılan düzenlileştirme tekniklerinin bir listesi:

  1. Artık normalde kullanımın azaldığını nadiren gördüğüm nokta için şaşırtıcı derecede etkili bir düzenleyici olan toplu normalleştirmeyi kullanmak, çünkü gerekli değildir.
  2. Az miktarda ağırlık çürümesi.
  3. Bazı daha yeni düzenlileştirme teknikleri arasında Shake-shake ("Xavier Gastaldi tarafından" Shake Shake regülasyonu ") ve Kesme (" Terrance DeVries ve Graham W. Taylor tarafından "Convolutional Sinir Ağlarının İyileştirilmiş Düzenlenmesi ") bulunmaktadır. Özellikle, Kesmenin uygulanabileceği kolaylık onu çok çekici kılmaktadır. Bunların işe yaramayanlardan daha iyi olduğuna inanıyorum - ama emin değilim.
  4. Mümkünse, tamamen bağlı katmanlara sahip mimarilere tamamen evrimli mimarileri tercih edin. Tek bir tam bağlı katmanda 100 milyon parametresi olan VGG-16'yı, 10 kat katman sayısına ve daha az parametreye sahip Resnet-152 ile karşılaştırın.
  5. SGD'yi Rmsprop ve Adam gibi diğer optimize edicilere tercih edin. Daha iyi genelleme olduğu gösterilmiştir. ("Adem'den SGD'ye Geçerek Genelleştirme Performansını Artırma", Nitish Shirish Keskar ve Richard Socher)

0

Djib2011'i otomatik hale getirme yöntemleri hakkında büyük puanlar verdiğimi hissediyorum, ancak fazladan giydirmeyi azaltmak için kullanılan yöntemin işini yapıp yapmadığını nasıl bittiğimizi bilmiyorlar. DeltaIV'in cevabına ilişkin önemli bir dipnot olarak, bunu son 2 yıldaki son araştırmaya dayanarak dahil etmek istedim. Sinir ağları için fazladan uyumluluk, sadece aşırı ezberleme modeliyle değil, aynı zamanda yeni şeyler öğrenememe veya anomalilerle başa çıkma modelleri ile de ilgilidir.

Kara Kutu Modelinde Aşırı Donatı Tespiti: Bir modelin yorumlanabilirliği, modellerin genelleme yeteneğini ne kadar iyi söyleyebildiğinize doğrudan bağlıdır. Bu nedenle, yorumlanabilir birçok alan, fazla uydurmanın tespit edilmesine yönelik yöntemlerdir ve yukarıda önerilen yöntemlerin ne kadar iyi çalıştığını size söyleyebilir. Yorumlanabilirlik grafikleri, özellikle doğrulama ve test sonucu grafiklerini karşılaştırırsanız doğrudan algılar. Yayımlanmamış bu kitabın 5. ve 6. Bölümleri, aşırı uydurmanın tespit edilmesindeki son gelişmelerden bahseder: Yorumlanabilir Modelleme

Bu kitaba dayanarak, bazılarının açıkça görebileceği, aşırı uyumu saptamanın ve kaldırmanın diğer üç yönteminden bahsetmek istiyorum, ancak şahsen insanların bunları çok sık unuttuğunu anlıyorum. Bu yüzden, eğer bir akıl olmazsa onları vurgulamak isterim:

  1. Özellik Seçimi Tespiti : Daha az sayıda parametre ve daha az özellik modelinizde daha iyidir. Bu yüzden, yalnızca 100 milyonun önemli olanlarını dahil ederseniz (bunun yerine 75 milyon olabilir), daha iyi bir genelleştirilebilir modele sahip olacaksınız. Sorun, birçok sinir ağının özellikle # 2 olduğunda özellik seçiminde mükemmel olmamasıdır. Önyükleme veya Yükseltme temel olarak her ikisini de düzeltemez (yalnızca vahşi önyükleme adı verilen bir sürüm olabilir). Daha basit bir ifadeyle, size sinir ağı önemsiz verisi verirseniz, önemsiz çıkarır. (Yukarıda belirtilen L2 Normalizasyonu bu konuda yardımcı olmakta çok iyidir)

  2. Anomalilerle Tespit ve Başa Çıkma: Ne kadar az "aykırı" o kadar genelleştirilebilir? "Aykırı" olarak, yalnızca verideki aykırı anlamına gelmez. Verilerdeki aykırı değerler (bir kutu arsa ile gördüğünüz gibi) sinir ağları için çok dar bir tanımdır. Diğer anomalilerin yanı sıra, etki olarak adlandırılan bir modeldeki hatada aykırı noktaları da dikkate almanız gerekir. Bu yüzden ağınızı çalıştırmadan önce anormallikleri tespit etmek önemlidir. Bir sinir ağı bir tür anomaliye karşı dayanıklı olabilir, ancak diğer tüm türlere karşı dayanıklı olmayabilir. Karşı Örnek metotları, Eleştiri metotları ve İhtilaflı örnek metotları ve Etki grafikleri, aykırı maddeleri keşfetmenize yardımcı olacak ve daha sonra bunları nasıl hesaba katabileceklerini çözmede harikadır.

  3. İstatistiksel veya etik düşüncelere dayanarak tabakalı Örnekleme, Aşırı Örnekleme ve Örnekleme : Keşke örnekleme konusunda ve altında örnekleme yapmayı çok isterdim, ancak örnekleme hakkında bilgim yok. (Irk, cinsiyet, cinsiyet) gibi önemli faktörlerin kümelenmesi ve daha sonra kümelenme tarafından tabakalı örnekleme yapılması, büyük veriler göz önüne alındığında fazla giyilmemesi hayati öneme sahiptir. Görüntü algılaması yapılırken, ırk ayrımcılığını önlemek için bazı alanlarda kümelenmeyle birlikte tabakalı örnekleme yasal olarak gereklidir. Yukarıda bağlantı verilen kitap, kısaca bunu yapmanın yöntemlerinden bahsediyor.

PS Daha fazla bağlantı içermeli miyim?

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.