Sinir ağı ağırlıklarının yakınsaması


10

Sinir Ağımın ağırlıklarının 500 tekrardan sonra bile yakınsamadığı bir duruma geldim. Sinir ağım 1 Giriş katmanı, 1 Gizli katman ve 1 Çıkış Katmanı içeriyor. Bunlar giriş katmanında yaklaşık 230, gizli katmanda 9 düğüm ve çıkış katmanında 1 çıkış düğümüdür. Erken durdurma koşulu yaparsam bilmek istedim (100 yinelemeden sonra sinir ağı eğitimimi durdurmayı söyle). Bunun model üzerinde ne gibi bir etkisi olacak?

Sinir ağındaki ağırlıklar yakınsak değilse, endüstri standardının ne olduğunu bilmek istedim.


Verileriniz düzgün bir şekilde normalleştirilmiş mi? Bu tür davranışların nedeni genellikle budur.
sashkello

Genellikle gizli katmandaki nöron sayısı, giriş katmanınızla aynı boyutta olmalıdır. 9 nöronun çok küçük olduğunu düşünüyorum. 200-300 nörona yükselmeye çalıştınız mı?
ThiS

@sashkello Evet verileri düzgün şekilde normalleştirildi.
Öğrenci

1
@juampa Gizli katmanda 9 düğüm bulunması için bir neden yoktur. gizli katmanda daha fazla düğüme sahip olmanın, ağın karmaşıklığını artıracağını ve verileri tersine çevireceğini düşündük.
Öğrenci

3
Biraz daha açıklama yapmalısınız. Çözdüğünüz sorun nedir? Kaç egzersiz veri noktanız var? Birbirine yakınlaşmamakla ne demek istiyorsun? - sadece performansın (eğitim setinde) kötü olduğunu mu yoksa ağırlıklarınızın yakınsadığını mı kastediyorsanız ... ağırlık yakınsaması varsa, daha düşük bir öğrenme oranı veya konik bir öğrenme oranı kullanmanız gerekir. Ayrıca, lojistik / doğrusal regresyonu temel çizgi olarak kullanmak isteyebilirsiniz. son olarak, girdileriniz arasındaki korelasyon nedir? Çok korelasyonluysa normalizasyon yeterli olmaz ve köşegenleştirmeyi (PCA olarak da düşünmelisiniz).
seanv507

Yanıtlar:


13

Sorulması gereken bazı sorular var:

  • her katmanda uygun sayıda nöron var mı
  • uygun aktarım işlevi türlerini kullanıyor musunuz?
  • uygun türde öğrenme algoritması kullanıyor musunuz?
  • Yeterince büyük bir numune boyutunuz var mı?
  • Örneklerinizin bilgilendirici olmak için birbirleriyle doğru ilişkiler kurduğunu doğrulayabilir misiniz? (gereksiz, ilgili boyutta vb.)

Efemeris yolunda ne verebilirsin? Verilerin doğası hakkında bize bir şeyler söyleyebilir misiniz?

Sinir ağlarının gradyanla güçlendirilmiş bir ağacını yapabilirsiniz.

Erken durursan ne olacağını sordun.

Kendiniz deneyebilirsiniz. Rastgele başlatılan ağırlıklarla başladığınız yerde 300x çalıştırın ve daha sonra belirtilen sayıda yinelemede durun, 100 diyelim. Bu noktada grup hatasını, egzersiz-alt kümesi hatasını ve test seti hatasını hesapla. Tekrar et. Hatanın ne olduğunu söylemek için 300 değeriniz olduğunda, 100 öğrenme yinelemesi verildiğinde hata dağılımınız hakkında bir fikir edinebilirsiniz. İsterseniz, bu dağıtımı diğer birkaç öğrenme değerinde de örnekleyebilirsiniz. 200, 500 ve 1000 yineleme öneririm. Bu, SNR'nizin zaman içinde nasıl değiştiği hakkında bir fikir verecektir. SNR ve yineleme sayımının bir grafiği size "uçurumlar" veya "yeterince iyi" hakkında fikir verebilir. Bazen hatanın çöktüğü uçurumlar vardır. Bazen hata bu noktada kabul edilebilir.

Sisteminizin 100 yinelemenin altında tutarlı bir şekilde birleşmesi için "nispeten basit" veriler veya "oldukça iyi" şanslar gerekir. Her ikisi de tekrarlanabilirlikle ilgili değildir veya genelleştirilebilir değildir.

Neden ağırlık belirli bir eşiğin altında olmak değil, yakınsak ağırlıklar açısından düşünüyorsunuz. Hiç bir oylama paradoksu duydunuz mu? ( link ) Sisteminizde döngüsel etkileşimler olduğunda (Yapay Sinir Ağlarında geri bildirim gibi) oylama paradoksları - birleştirilmiş değişiklikler olabilir. Ağın yakınsaması için tek başına ağırlıkların yeterli bir gösterge olup olmadığını bilmiyorum.

Ağırlıkları bir boşluk olarak düşünebilirsiniz. 3'ten fazla boyutu var, ama yine de bir boşluk. O alanın "sentroidinde" sizin için en uygun bölge. Centroidden çok daha az uygun. Ağırlıklarınızın mevcut ayarını o alanda tek bir nokta olarak düşünebilirsiniz.

Artık "iyi" nin gerçekte nerede olduğunu bilmiyorsunuz. Ne var yerel bir "eğim" dir. Noktanızın şu anda bulunduğu yerde yerel "daha iyi" ye doğru gradyan iniş yapabilirsiniz. Size "evrensel" i daha iyi söylemez, fakat yerel hiçbir şeyden daha iyidir.

Böylece yinelemeye başlıyorsun, yokuş aşağı o büyüklük vadisine doğru yürüyorsun. Bittiğini düşünene kadar tekrar ediyorsun. Belki ağırlıklarınızın değeri büyüktür. Belki her yerde zıplıyorlar. Belki hesaplama "çok uzun sürüyor". Yapılmak istiyorsun.

Peki, nerede olduğunuzun "yeterince iyi" olup olmadığını nasıl anlarsınız?

İşte yapabileceğiniz hızlı bir test:

Verilerin 30 tekdüze rastgele altkümesini alın (her birinin verilerinin yüzde birkaçı gibi) ve ağları yeniden eğitin. Çok daha hızlı olmalı. Yakınsamalarının ne kadar sürdüğünü gözlemleyin ve büyük setin yakınsama geçmişiyle karşılaştırın. Bu alt kümelerdeki tüm veriler için ağ hatasını test edin ve hata dağılımının büyük hatanızla nasıl karşılaştırıldığını görün. Şimdi alt küme boyutlarını verilerinizin% 5'ine kadar çarpın ve tekrarlayın. Bunun size ne öğrettiğini görün.

Bu, bal arılarının izciliğe dayalı olarak nasıl karar verdiklerine göre modellenen parçacık sürüsü optimizasyonundaki (referansa bakın) bir değişikliktir.

Ağırlıkların yakınsaması durumunda ne olacağını sordunuz.

Yapay Sinir Ağları bir araçtır. Tek araç onlar değil. Başkaları da var. Bunlardan birini kullanmaya bakardım.

Bilgi kriterleri açısından çalışıyorum, bu yüzden hem ağırlığa (parametre sayısı) hem de hataya bakıyorum. Bunlardan birini deneyebilirsiniz.

Yararlı olabilecek bazı önişleme türleri vardır. Merkez ve Ölçek. Ana bileşenleri kullanarak döndürün. Temel bileşenlerinizdeki özdeğerlere bakarsanız, verilerinizin boyutunu tahmin etmek için skree plot kurallarını kullanabilirsiniz. Boyutu azaltmak yakınsamayı artırabilir. 'Temel fizik' hakkında bir şeyler biliyorsanız, gürültüyü gidermek için verileri düzleştirebilir veya filtreleyebilirsiniz. Bazen yakınsama sistemdeki gürültü ile ilgilidir.

Sıkıştırılmış algılama fikrinin ilginç olduğunu düşünüyorum. Genelleme kaybı olmadan bazı sistemlerin radikal alt örneklemesine izin verebilir. Eğitim setinin alt örneklemenin temsili olup olmadığını ve hangi seviyede alt örneklemenin temsil edilip edilmediğini belirlemek için bazı önyükleme yeniden örneklenmiş istatistiklerine ve verilerin dağılımlarına bakacağım. Bu, verilerinizin "sağlığı" hakkında bir ölçü verir.

Bazen yakınsak olmaları iyi bir şeydir

Hiç bir oylama paradoksu duydunuz mu? Bunu iki yönlü bir çıkmaz için daha yüksek sayımlı bir kuzen olarak düşünebilirsiniz. Bu bir döngü. 2 kişilik bir oylama paradoksunda birinci kişi aday "A" ister, ikincisi aday "B" ister (ya da A değil ya da böyle) ister. Önemli olan, onu bir döngü olarak düşünebilmenizdir.

Sinir ağlarında döngüler önemlidir. Geri bildirim. Özyineleme. Bu algılayıcının XOR benzeri sorunları çözebilmesini sağlamıştır. Döngüler yapar ve bazen döngüler oylama paradoksu gibi davranabilir, burada sonsuz yinelemeler varsa ağırlıklarını değiştirmeye devam ederler. Yakınsama amaçlı değildir, çünkü önemli olan bireysel ağırlık değil, ağırlıkların döngüdeki etkileşimi.

Not:

Yalnızca 500 yineleme kullanmak bir sorun olabilir. 10.000 yinelemenin neredeyse yeterli olmadığı NN'leri yaşadım. Daha önce belirttiğim gibi, "yeterli" olacak yineleme sayısı, veri, NN-topolojisi, düğüm aktarım işlevleri, öğrenme / eğitim işlevi ve hatta bilgisayar donanımına bağlıdır. "Yeterli" veya "çok fazla" yineleme olduğunu söylemeden önce hepsinin yineleme sayınızla nasıl etkileşime girdiğine dair iyi bir anlayışa sahip olmalısınız. Eğitim, işiniz bittiğinde zaman, bütçe ve NN ile ne yapmak istediğiniz gibi diğer hususlar da dikkate alınmalıdır.

Chen, RB, Chang, SP, Wang, W. ve Wong, WK, (2011, Eylül). Parçacık Sürüsü Optimizasyon Yöntemleri (baskı öncesi) ile Optimum Deneysel Tasarımlar, 25 Mart 2012 tarihinde http://www.math.ntu.edu.tw/~mathlib/preprint/2011-03.pdf adresinden erişildi.


2

Bana göre sorunun ne olabileceğini söylemek zor. Dikkate alınması gereken bir nokta, kullandığınız somut uygulamadır. Somut olarak, hangi optimizasyon algoritması. Ağınızın birleşmesi gerçekten uzun sürüyorsa ve bir çeşit stokastik degrade iniş (veya mini yığın) kullanıyorsanız, ağınızın bir platoda (enerji / hata işlevinin çok düz olduğu bir bölge) böylece gradyanlar çok düşük ve böylece yakınsama).

Öyleyse, durumun bu olup olmadığını görmek için lütfen degradelerin büyüklüğünü kontrol edin. Degradeye bir momentum eklemek gibi bu sorunla başa çıkmak için bir dizi farklı teknik vardır.

Ticaretin tekniklerine ve püf noktalarına ayrıntılı bir bakış için Yann LeCun'un bu (okumalı) makalesine göz atın .


1

Degradelerinizin sınırların ötesine geçmediğinden emin olun veya degradelerin sıfır olması da mümkündür. Bu yaygın olarak patlayan degradeler ve yok olan degradeler sorunları olarak bilinir.

Olası bir çözüm, AdaGrad veya Adam gibi uyarlanabilir bir optimize edici kullanmaktır.

Sinir ağlarına başlarken basit bir sinir ağını eğitirken de benzer bir sorunla karşılaşmıştım.

Birkaç referans: https://en.wikipedia.org/wiki/Vanishing_gradient_problem https://www.youtube.com/watch?v=VuamhbEWEWA


0

Yavaş bir şekilde yakınsama birçok veri kümesi yaşadım - muhtemelen girişler yüksek derecede ilişkili olduğu için.

Kendi C ++ NN analiz cihazımı yazdım ve bununla birlikte her kilo için öğrenme oranını değiştirebilirim. Her kenardaki her ağırlık için bazılarına yardımcı olan iki şey yaparım.

İlk olarak, her öğrenme oranını [0,1] 'den eşit dağılmış rastgele bir sayı ile çarpıyorum. Bunun korelasyon problemine yardımcı olduğunu tahmin ediyorum.

Diğer püf noktası, geçerli renk geçişini her kenardaki önceki renk geçişiyle karşılaştırmam. Degrade yüzde olarak zar zor azaldıysa, o kenar için öğrenme oranını 5'e kadar çarparım.

Bu hilelerden hiçbiri için özel bir nedenim yok, ancak oldukça iyi çalışıyor gibi görünüyorlar.

Bu yardımcı olur umarım.

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.