İleri beslemeli bir sinir ağında katman sayısını ve her katmandaki düğüm sayısını seçmek için standart ve kabul edilmiş bir yöntem var mı? Yapay sinir ağları oluşturmanın otomatik yollarıyla ilgileniyorum.
İleri beslemeli bir sinir ağında katman sayısını ve her katmandaki düğüm sayısını seçmek için standart ve kabul edilmiş bir yöntem var mı? Yapay sinir ağları oluşturmanın otomatik yollarıyla ilgileniyorum.
Yanıtlar:
Bu sorunun cevaplandığını fark ediyorum, ancak mevcut cevabın soruyu gerçekten sorunun konusu ile ilgili olan bir bağlantıya işaret etmekten öteye geçtiğini sanmıyorum. Özellikle, bağlantı programlı ağ yapılandırması için bir tekniği açıklar, ancak bu ağ yapılandırması için " [a] standart ve kabul edilen bir yöntem " değildir.
Küçük bir açık kurallar dizisi uygulanarak, programatik olarak yetkin bir ağ mimarisi belirlenebilir (yani, nöronal katmanların sayısı ve türü ve her katmanı içeren nöronların sayısı). Bu şemanın ardından, bu size yetkin bir mimari verecektir, ancak muhtemelen optimal bir yapı sunmayacaktır.
Ancak bu ağ başlatıldıktan sonra, birkaç yardımcı algoritma kullanarak egzersiz sırasında yapılandırmayı yinelemeli olarak ayarlayabilirsiniz; tarafından bu çalışmaların bir aile budama başka bir deyişle, (aşağıda Bu konuda daha fazla) gereksiz / gereksiz düğümleri ortadan kaldırarak - Eğitim dönemlerini belli bir sayıdan sonra ağırlık vektörü (küçük) değerlerine göre düğümler.
Böylece her NN üç tür katmana sahiptir: giriş , gizli ve çıkış .
NN mimarisini oluşturmak, bu nedenle, her bir türdeki katman sayısı ve bu katmanların her birindeki düğüm sayısı için değerler bulmak anlamına gelir.
Giriş Katmanı
Basit - Her NN'de onlardan biri vardır - bildiğim hiçbir istisna yok.
Bu katmanı oluşturan nöronların sayısıyla ilgili olarak, bu parametre egzersiz verilerinizin şeklini öğrendiğinizde tamamen ve benzersiz bir şekilde belirlenir. Spesifik olarak, bu katmanı içeren nöronların sayısı, verilerinizdeki özelliklerin (sütunların) sayısına eşittir . Bazı NN yapılandırmaları, önyargı terimi için bir ek düğüm ekler.
Çıktı Katmanı
Giriş katmanı gibi, her NN tam olarak bir çıkış katmanına sahiptir. Boyutunun belirlenmesi (nöron sayısı) basittir; tamamen seçilen model konfigürasyonu ile belirlenir.
NN'niz Makine Modunda mı, yoksa Regresyon Modunda mı çalışıyor (ML, istatistiklerde de kullanılan ancak farklı bir anlam atayan bir terim kullanmanın konvansiyonu çok kafa karıştırıcıdır). Makine modu: bir sınıf etiketi döndürür (örneğin, "Premium Hesap" / "Temel Hesap"). Regresyon Modu bir değer döndürür (örneğin, fiyat).
NN bir regresör ise, çıkış katmanı tek bir düğüme sahiptir.
NN bir sınıflandırıcıysa, softmax kullanılmadığı sürece tek bir düğüme de sahiptir , bu durumda çıkış katmanı modelinizde sınıf etiketi başına bir düğüme sahiptir.
Gizli Katmanlar
Böylece bu birkaç kural hem giriş hem de çıkış katmanları için katman sayısını ve boyutunu (nöronlar / katman) belirler. Bu gizli katmanları bırakır.
Kaç tane gizli katman var? Verileriniz doğrusal olarak ayrılabilirse (ki bir NN'yi kodlamaya başladığınızda sıkça bildiğiniz), o zaman hiçbir gizli katmana ihtiyacınız yoktur. Tabii ki, verilerinizi de çözmek için bir NN'ye ihtiyacınız yok ama yine de işi yapacak.
Bunun ötesinde, muhtemelen bildiğiniz gibi, NN'lerde gizli katman konfigürasyonu sorusu üzerine bir yorum dağı var (bu yorumun mükemmel bir özeti için delicesine eksiksiz ve anlayışlı NN SSS bölümüne bakın ). Bu konuda bir fikir birliği bulunan bir konu, ek gizli katmanları eklemekten performans farkıdır: Performansın bir saniye (veya üçüncü, vb.) Gizli katmanla geliştirildiği durumlar çok azdır. Bir gizli katman, problemlerin büyük çoğunluğu için yeterlidir.
Öyleyse gizli katmanların boyutu ne kadar? Bazı ampirik olarak türetilmiş kurallar vardır, bunlardan en çok dayanan, ' gizli katmanın optimal büyüklüğü genellikle girdi katmanı ve çıktı katlarının büyüklüğü arasındadır '. Java'daki Yapay Sinir Ağlarına Giriş'in yazarı Jeff Heaton birkaç tane daha sunuyor.
Özetle, çoğu sorun için, yalnızca iki kuralı kullanarak gizli katman yapılandırmasını ayarlayarak muhtemelen iyi bir performans elde edilebilir (ikinci bir optimizasyon adımı olmasa bile): (i) gizli katman sayısı bir taneye eşittir; ve (ii) bu katmandaki nöronların sayısı girdi ve çıktı katmanlarındaki nöronların ortalamasıdır.
Ağ Yapılandırmasının Optimizasyonu
Budamahesaplama performansını ve bazen de çözünürlük performansını iyileştirmek için ağ boyutunu (katmanlara değil düğümlere göre) kırpmak için bir teknikler tarif eder. Bu tekniklerin özü, ağdan çıkarılırsa ağ performansını belirgin şekilde etkilemeyecek olan düğümleri (yani verilerin çözünürlüğü) etkilemeyen düğümleri belirleyerek, eğitim sırasında düğümleri ağdan çıkarmaktır. (Resmi bir budama tekniği kullanmasanız bile, antrenmandan sonra ağırlık matrisinize bakarak hangi düğümlerin önemli olmadığına dair kaba bir fikir edinebilirsiniz; sıfıra çok yakın ağırlıklara bakın; budama sırasında kaldırılır.) Açıkçası, eğitim sırasında budama algoritması kullanıyorsanız, o zaman aşırı (yani, 'budalabilir') düğümlere sahip olma olasılığı daha yüksek olan bir ağ yapılandırmasıyla başlayın.
Başka bir deyişle, eğitim sırasında ağınıza budama algoritması uygulayarak, en uygun ağ yapılandırmasına yaklaşabilirsiniz; Bunu tek bir "önden" yapıp yapamayacağınız (genetik algoritma tabanlı bir algoritma gibi) bilmiyorum, şu an için bu iki aşamalı optimizasyonun daha yaygın olduğunu biliyorum.
@ doug'un cevabı benim için çalıştı. Denetimli öğrenme problemlerine yardımcı olacak ek bir kural vardır. Nöron numaranızı aşağıda tutarsanız, genellikle fazla uyumu önleyebilirsiniz:
= giriş nöron sayısı. = çıkış nöron sayısı. = Eğitim veri setindeki örnek sayısı. = genellikle 2-10 olan rastgele bir ölçeklendirme faktörü
Diğerleri, değerini 5 ile 10 arasında bir değere ayarlamanızı önerir , ancak 2 değerinin genellikle fazla takmadan işe yarayacağını düşünüyorum. Alfa'yı, her bir nöron için etkili dallanma faktörü veya sıfır olmayan ağırlık sayısı olarak düşünebilirsiniz. Bırakma katmanları, "etkili" dallanma faktörünü, ağınız için gerçek ortalama dallanma faktöründen aşağıya çeker.
Bu mükemmel NN Tasarım metninde açıklandığı gibi , modelinizdeki serbest parametre sayısını (sıfır ağırlık veya derece ) verilerinizdeki serbestlik derecelerinin küçük bir kısmı ile sınırlandırmak istiyorsunuz . Verilerinizdeki serbestlik dereceleri, her örnekteki * serbestlik dereceleri (boyutlar) veya (hepsinin bağımsız olduğu varsayılarak . Bu yüzden , modelinizin ne kadar genel olmasını istediğinizi veya fazla giydirmeyi ne kadar önlemek istediğinizi belirtmenin bir yoludur.
Otomatik bir prosedür için, 2 alfa ile başlarsınız (modelinizle egzersiz verilerinizde iki kat daha fazla serbestlik derecesi) ve egzersiz veri setinizdeki hata (kayıp), olduğundan daha küçükse 10'a kadar çalışırsınız. Test veri kümeniz.
N_h
(katman başına ortalama gizli nöron sayısı) verilen çözümdür N_s = (N_i + N_o) * N_h ^ N_hidden_layers
. Ama yine de bu formülü kullanmazdım. Başka herhangi bir düzenlileştirme yaklaşımını uygulamayı planlamadığınızda sadece çok temel problemler için (oyuncak problemleri).
Gönderen Java için Yapay Sinir Ağlarına Giriş (ikinci baskı) tarafından Jeff Heaton - at serbestçe kullanılabilir önizleme Google Kitaplar ve daha önce de yazarın web sitesine :
Gizli Katman Sayısı
Gizli katmanlara ilişkin verilmesi gereken iki karar var: sinir ağında gerçekte kaç gizli katmana sahip olacağı ve bu katmanların her birinde ne kadar nöron olacağı. Öncelikle sinir ağı ile kullanılacak gizli katmanların sayısını nasıl belirleyeceğimizi inceleyeceğiz.
İki gizli katman gerektiren problemlere nadiren rastlanır. Bununla birlikte, iki gizli katmana sahip sinir ağları, herhangi bir şekilde olan fonksiyonları temsil edebilir. Şu anda sinir ağlarını ikiden fazla gizli katmanla kullanmanın teorik bir nedeni yoktur. Aslında, birçok pratik problem için, birden fazla gizli katman kullanmanın bir nedeni yoktur. Tablo 5.1, sinir ağı mimarilerinin çeşitli gizli katmanlarla yeteneklerini özetlemektedir.
Tablo 5.1: Gizli Katman Sayısının Belirlenmesi
| Gizli Katman Sayısı | Sonuç | 0 - Yalnızca doğrusal ayrılabilir işlevleri veya kararları temsil edebiliyor. 1 - Sürekli eşleme içeren herhangi bir işlevi yaklaşık değerlendirebilir bir sonlu uzaydan diğerine. 2 - Keyfi bir kararla keyfi bir karar verebiliyor mu? rasyonel aktivasyon fonksiyonları ile ve herhangi bir pürüzsüz yaklaşık herhangi bir doğrulukta haritalama.Gizli nöron katmanlarının sayısına karar vermek, sorunun sadece küçük bir kısmıdır. Ayrıca bu gizli katmanların her birinde kaç tane nöron olacağına karar vermelisiniz. Bu süreç bir sonraki bölümde ele alınmaktadır.
Gizli Katmanlardaki Nöron Sayısı
Gizli katmanlardaki nöronların sayısına karar vermek, genel sinir ağı mimarinize karar vermenin çok önemli bir parçasıdır. Bu katmanlar doğrudan dış çevre ile etkileşime girmese de, nihai çıktı üzerinde büyük bir etkiye sahiptir. Hem gizli katmanların hem de bu gizli katmanların her birindeki nöronların sayısı dikkatlice düşünülmelidir.
Gizli katmanlarda çok az sayıda nöron kullanılması, donukluk denilen bir şeyle sonuçlanacaktır. Underfitting, gizli katmanlarda, karmaşık bir veri setindeki sinyalleri yeterince tespit etmek için çok az nöron olduğunda meydana gelir.
Gizli katmanlarda çok fazla nöron kullanmak, bazı sorunlara neden olabilir. İlk olarak, gizli katmanlardaki çok fazla nöron fazla uyuma neden olabilir. Sinir ağı, eğitim setinde yer alan sınırlı miktarda bilginin gizli katmanlardaki tüm nöronları yetiştirmek için yeterli olmadığı kadar fazla bilgi işleme kapasitesine sahip olduğunda aşırı donanım oluşur. Egzersiz verileri yeterli olsa bile ikinci bir problem ortaya çıkabilir. Gizli katmanlardaki çok fazla sayıda nöron, ağı eğitmek için harcanan zamanı artırabilir. Eğitim süresi, sinir ağının yeterince eğitilmesinin imkansız olduğu noktaya kadar artabilir. Açıkçası, gizli katmanlardaki çok fazla ve çok az nöron arasında bir miktar uzlaşmaya varılmalıdır.
Gizli katmanlarda kullanılacak doğru sayıda nöron sayısını belirlemek için aşağıdakiler gibi birçok temel yöntem vardır:
- Gizli nöronların sayısı, giriş katmanının boyutu ile çıkış katmanının boyutu arasında olmalıdır.
- Gizli nöronların sayısı, giriş katmanının 2 / 3'ü artı çıkış katmanının büyüklüğü olmalıdır.
- Gizli nöronların sayısı, giriş katmanının iki katından daha az olmalıdır.
Bu üç kural, göz önünde bulundurmanız için bir başlangıç noktası sağlar. Nihayetinde, sinir ağınız için bir mimari seçimi deneme yanılma gibi olacaktır. Ama tam olarak deneme yanılma ile ne kastedilmektedir? Ağınıza rastgele sayıda katman ve nöron atmaya başlamak istemezsiniz. Bunu yapmak çok zaman alırdı. Bölüm 8, “Bir Sinir Ağının Budaması”, bir sinir ağı için en uygun yapıyı belirlemek için çeşitli yollar keşfedecektir.
Ayrıca , bir kaç kelimeyle çok şey ifade eden researchgate.net'te bulduğum bir cevaptan aşağıdaki pasajı da seviyorum :
Steffen B Petersen · Aalborg Üniversitesi
[...]
Ağın genelleştirilebilmesi için düğüm sayısını mümkün kılmak için mümkün olduğu kadar düşük tutulmalıdır. Çok fazla sayıda düğümünüz varsa, ağınız, antrenman setini mükemmelliğe geri çekebilecek bir hafıza bankası haline gelir, ancak antrenman setinin bir parçası olmayan örnekler üzerinde iyi performans göstermez.
Şu an bunun üzerine ampirik bir çalışma üzerinde çalışıyorum (HPC tesisimizde işlemci-yüzyıl simülasyonlarını onaylayarak!). Tavsiyem "büyük" bir ağ ve düzenlileştirme kullanmak olacaktır, eğer düzenlileştirme kullanıyorsanız, ağ mimarisi daha az önemli hale gelir (yakalamak istediğimiz temel işlevi gösterecek kadar büyük olması şartıyla), ancak düzenlemeyi ayarlamanız gerekir Düzgün parametre.
Mimari seçimi ile ilgili sorunlardan biri, modelin karmaşıklığının sürekli kontrolünden ziyade ayrık bir kontrol olmasıdır ve bu nedenle, özellikle ideal karmaşıklık düşük olduğunda, biraz kör bir enstrüman olabilir.
Bununla birlikte, bunların tümü "bedava öğle yemeği yok" teoremlerine tabidir, çoğu durumda yapılan düzenlemeler etkili olmakla birlikte, her zaman mimari seçimin daha iyi çalıştığı durumlar ve eldeki sorunun doğru olup olmadığını anlamanın tek yolu olacaktır. Hem yaklaşımları denemek hem de geçerliliği doğrulamaktır.
Otomatik bir sinir ağı kurucusu yapacak olsaydım, Radford Neal'in Hibrit Monte Carlo (HMC) örnekleme tabanlı Bayesian yaklaşımını kullanırdım ve büyük bir ağ kullanır ve tek bir ağın ağırlığını optimize etmek yerine ağırlıklar üzerinde entegre olurdum. Ancak bu hesaplama açısından pahalıdır ve biraz da "siyah sanat" tır, ancak Prof. Neal'ın elde ettiği sonuç buna değeceğini söylüyor!
Bildiğim kadarıyla her katmanda otomatik olarak katman ve nöron sayısını seçmenin bir yolu yok. Ancak EANN (topolojiyi geliştirmek için Genetik Algoritmalar kullanan Evrimsel Yapay Sinir Ağları) gibi topolojilerini otomatik olarak oluşturabilen ağlar vardır.
Birkaç yaklaşım var, iyi sonuçlar vermiş gibi görünen modern bir yaklaşım NEAT (Artırılmış Topolojilerin Nöro Evrimi) idi .
• Gizli düğüm sayısı: Optimum gizli nöron sayısını seçmek için sihirli bir formül yoktur. Ancak, gizli nöronların sayısını hesaplamak için bazı kurallar vardır. Masters (1993) tarafından önerilen geometrik piramit kuralı ile kaba bir yaklaşım elde edilebilir. N giriş ve m çıkış nöronlarına sahip üç katmanlı bir ağ için, gizli katman nöronlara sahip olacaktır.
Ref:
1 Üstatlar, Timothy. C ++ 'da pratik sinir ağı tarifleri. Morgan Kaufmann, 1993.
[2] http://www.iitbhu.ac.in/faculty/min/rajesh-rai/NMEICT-Slope/lecture/c14/l1.html
Global hiper-parametre aramayı kullanarak sinir ağları oluşturmanın otomatik yolları:
Giriş ve çıkış katmanları sabittir.
Neler değişebilir:
Bu ayrık optimizasyon problemi için, maliyet fonksiyonu olarak örnek dışı ağ ile birden fazla yöntem kullanılabilir .
Üzgünüz, henüz bir yorum gönderemiyorum bu yüzden lütfen yanımda ol. Her neyse, bana son zamanlarda gördüğüm bir makaleyi hatırlatan bu tartışma konusuna girdim. Buraya katılan kişilerin ilgisini çekebileceğini düşünüyorum:
AdaNet: Yapay Sinir Ağlarının Uyarlamalı Yapısal Öğrenmesi
Corinna Cortes, Xavier Gonzalvo, Vitaly Kuznetsov, Mehryar Mohri, Scott Yang; 34. Uluslararası Makine Öğrenimi Konferansı Bildirileri, PMLR 70: 874-883, 2017.
Özet Yapay sinir ağlarını analiz etmek ve öğrenmek için yeni bir çerçeve sunuyoruz. Yaklaşımımız aynı anda ve uyarlamalı olarak ağın yapısını ve ağırlıklarını öğrenir. Metodoloji, güçlü veri bağımlı teorik öğrenme garantileri üzerine kuruludur ve bunlara eşlik eder, böylece nihai ağ mimarisi herhangi bir sorunun karmaşıklığına kanıtlanabilir.
Yüksek lisans tezi bölüm 3'te topoloji öğrenmenin birçok yolunu listeledik . Büyük kategoriler:
Daha az yaygın ancak süper etkili bir yöntem önermek istiyorum .
Temel olarak, potansiyel seçeneklerin küçük bir alt kümesini deneyen "genetik algoritmalar" adı verilen bir dizi algoritmadan yararlanabilirsiniz (katman başına rastgele katman ve düğüm sayısı). Daha sonra bu seçenek popülasyonuna, evrimleşen benzer organizmalardan birini veya birkaçını birleştirerek / değiştirerek çocukları yaratan "ebeveynler" gibi davranır. En iyi çocuklar ve bazı rastgele çocuklar, her nesilde ve nesiller boyunca en uygun olanları hayatta kalırlar.
~ 100 veya daha az parametre için (katman sayısı, katman türleri ve katman başına nöronların sayısı gibi) bu yöntem süper etkilidir. Her nesil için bir dizi potansiyel ağ mimarisi oluşturarak ve bunları öğrenme eğrisi tahmin edilinceye kadar kısmen eğiterek kullanın (tipik olarak birçok parametreye bağlı olarak 100-10k mini gruplar). Birkaç jenerasyondan sonra, tren ve onaylama işleminin çocuk seçiminde amaç işleviniz olarak önemli ölçüde farklı hata oranlarına (aşırı uyarlama) sahip olmaya başladığı noktayı düşünebilirsiniz. Sonuca daha hızlı ulaşmak için son bir model seçinceye kadar verilerinizin çok küçük bir alt kümesini (% 10-20) kullanmak iyi bir fikir olabilir. Ayrıca, sonuçları doğru şekilde karşılaştırmak için ağınızın başlatılması için tek bir tohum kullanın.
10-50 kuşak, iyi bir büyüklükteki ağ için mükemmel sonuçlar vermelidir.
Gizli Katman Sayısı ve Neler Yapabilecekleri:
0 - Yalnızca doğrusal ayrılabilir işlevleri veya kararları temsil edebiliyor.
1 - Bir sonlu uzaydan diğerine sürekli bir haritalama içeren herhangi bir işlevi yaklaşık değerlendirebilir.
2 - Rasyonel aktivasyon fonksiyonları ile keyfi doğruluk sınırına rastgele bir karar sınırını temsil edebilir ve herhangi bir kesin eşleştirmeyi herhangi bir kesinliğe yaklaştırabilir.
2'den fazla - Ek katmanlar, katman katmanları için karmaşık gösterimleri (otomatik özellik mühendisliği türünü) öğrenebilir.