Sinir ağı kararlılığımı nasıl geliştirebilirim?


11

Neuralnet R'de 14 giriş ve bir çıkış ile bir NN oluşturmak için kullanıyorum. Aynı giriş eğitimi verilerini ve aynı ağ mimarisini / ayarlarını kullanarak ağı birkaç kez oluşturur / eğitirim.

Her ağ üretildikten sonra, tahmin edilen bazı değerleri hesaplamak için tek başına test verileri kümesinde kullanıyorum. Ağı her kurduğumda tüm girişlerin (hem eğitim verileri hem de test verileri) aynı kalmasına rağmen, tahmin edilen verilerin her yinelemesinde büyük bir varyans buluyorum.

Her seferinde NN içinde üretilen ağırlıklarda farklılıklar olacağını ve iki sinir ağının aynı olmayacağını anlıyorum, ancak aynı veriler göz önüne alındığında her trende daha tutarlı ağlar üretmeye ne deneyebilirim?


Bize (veya R paketine) kullandığınız öğrenme algoritması ve mimarisi hakkında biraz daha ayrıntılı bilgi verebilir misiniz? NN'nin kaç katmanı var?
Lucas

Merhaba Lucas, R paket sinir sisteminin kullanıyorum linki burada iyi bir açıklayıcı yazı vardır linki . 8 nöronun gizli bir tabakasını kullanıyorum. Öğrenme algoritması, ağırlık geri takibi ile esnek geri yayılımdır.
tfb

Yanıtlar:


8

Genel olarak, gizli düğümlerin sayısını artırarak ve uygun bir ağırlık azalması (yani sırt cezası) kullanarak daha fazla istikrar elde edersiniz.

Özellikle, caretdoğruluğunuzu (ve hatta doğruluğunuzdaki belirsizliği daha iyi anlamak için) paketi kullanmanızı tavsiye ederim . Ayrıca avNNet, ilk tohumların etkisini azaltmak için bir topluluk öğrencisini birden fazla sinir ağından çıkarır. Ben şahsen kullanırken büyük bir gelişme görmedim avNNetama orijinal sorunuza cevap verebilir.

Ayrıca girdilerinizin uygun şekilde koşullandırıldığından da emin olurum. Dikleştirdiniz ve sonra yeniden ölçeklendirdiniz mi? Caret, bu ön işlemi sizin için pcaNNetişlevi aracılığıyla da yapabilir .

Son olarak, bazı katman atlama bağlantılarında savurmayı düşünebilirsiniz. Yine de bu bağlantıları çarpıtmak için verilerinizde aykırı değerler / kaldıraç noktaları olmadığından emin olmanız gerekir.


İlginç bir şekilde, ağın eğitimini 'aynı ağın paketinde bulunan' nnet 'işlevine çevirdim ve veri test setindeki sonuçlar çok daha kararlı hale geldi - belki de ağırlıkların farklı yollarıyla ilgili bir şey iki paket arasında ilklendirildi mi?
tfb

Olarak nneteğer doğru geri çağırmak başlangıç ağırlıkları tamamı üniform bir rasgele sayı arasında -0.7 ve 0.7 başlatılır. Ve bir parametrede büyüklüğü kontrol edebilirsiniz. Dürüst olmak gerekirse nnetpaketi ile sağlam bir şans vardı ve asla diğer seçeneklerin denedim. İyi şanslar!
Shea Parkes

1

R ile çalışmadım, bu yüzden sadece daha genel ipuçları verebilirim.

Algoritmanın yakınsamasını kontrol ettiniz mi? Olası bir açıklama, farklı parametre kümelerinin aynı optimumun yarısına kadar bir yerde olması olabilir.

Algoritma her zaman farklı bir yerel optimum ile birleşirse, onlardan kaçınmaya çalışabileceğiniz birçok buluşsal yöntem vardır. Stokastik degrade iniş (SGD) kullanırken basit bir strateji daha küçük gruplar ve daha büyük momentum kullanmak olacaktır . Daha küçük parti boyutları, eğitime bazı yerel optimalardan kaçmaya yardımcı olabilecek etkili bir ses çıkarır. Çok daha karmaşık bir strateji, otomatik kodlayıcıları kullanarak ağırlıkları başlatmak olacaktır .


Bir fyi gibi, nnetR tabanından kullandığı sürece, R'lerden BFGS optimizasyon yöntemini kullanır optim. Aslında yüzeyin bir resmini elde etmek için degradeleri hesaplar. Uygulamasında toplu işleme ve sabit momentum parametresi yoktur. Tüm bunları söyledikten sonra, yakınsama kolayca başarısız olabilir; özellikle çöplerle.
Shea Parkes

@SheaParkes Shea yorum ve cevapları için teşekkürler. Aslında neuralnet paketini kullanıyorum - yukarıdaki açıklamaya bakınız. Ağırlık geri
izlemeli

Sonra Lucas, özür dilerim, bu kabuzu özledim. Tfb üzerinde çalıştığına sevindim.
Shea Parkes
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.