çok katmanlı algılayıcı (MLP) mimarisi: gizli katman sayısını ve gizli katmanın boyutunu seçme kriterleri?


104

10 özvektörümüz varsa, o zaman giriş katmanında 10 sinir düğümüne sahip olabiliriz. 5 çıkış sınıfımız varsa, çıkış katmanında 5 düğüm olabilir ancak bir MLP'deki gizli katman sayısını seçme kriterleri nedir ve kaç sinirsel 1 gizli katmandaki düğümler?



Yanıtlar:


217

kaç tane gizli katman ?

Sıfır gizli katmana sahip bir model, doğrusal olarak ayrılabilir verileri çözecektir . Dolayısıyla, verilerinizin doğrusal olarak ayrılabilir olmadığını zaten bilmiyorsanız, bunu doğrulamanın bir zararı olmaz - neden görevin gerektirdiğinden daha karmaşık bir model kullanılsın? Doğrusal olarak ayrılabilirse, daha basit bir teknik işe yarayacaktır, ancak bir Perceptron da işi yapacaktır.

Verilerinizin doğrusal olmayan bir teknikle ayrılması gerektiğini varsayarsak, her zaman tek bir gizli katmanla başlayın . Neredeyse kesinlikle ihtiyacınız olan tek şey bu. Verileriniz bir MLP kullanılarak ayrılabilirse, bu MLP'nin muhtemelen yalnızca tek bir gizli katmana ihtiyacı vardır. Bunun teorik gerekçeleri var, ancak benim nedenim tamamen ampirik: Birçok zor sınıflandırma / regresyon problemi, tek gizli katmanlı MLP'ler kullanılarak çözülüyor, ancak verileri başarılı bir şekilde modellemek için kullanılan çok katmanlı MLP'lerle karşılaştığımı hatırlamıyorum. - ML bülten panolarında, ML Ders Kitaplarında, akademik makaleler vb. üzerinde olsunlar, elbette varlar, ancak kullanımlarını haklı çıkaran koşullar ampirik olarak oldukça nadirdir.


Gizli katmanda kaç düğüm var?

MLP akademik literatüründen. kendi deneyimlerim, vb., topladım ve sıklıkla birkaç temel kurala ( RoT ) dayandım ve bunların da güvenilir kılavuzlar olduğunu keşfettim (yani, rehberlik doğruydu ve olmasa bile, genellikle daha sonra ne yapılacağı belliydi):

Yakınsamayı iyileştirmeye dayalı RoT :

Model oluşturmaya başladığınızda , gizli katmandaki daha fazla düğümün yanında hata yapın .

Neden? İlk olarak, gizli katmandaki birkaç ekstra düğüm muhtemelen herhangi bir zarar vermez - MLP'niz yine de birleşecektir. Öte yandan, gizli katmandaki çok az düğüm yakınsamayı engelleyebilir. Bu şekilde düşünün, ek düğümler biraz fazla kapasite sağlar - yineleme sırasında (eğitim veya model oluşturma) sinyali ağa depolamak / bırakmak için ek ağırlıklar. İkinci olarak, gizli katmanınızda ek düğümlerle başlarsanız, onları daha sonra budamak kolaydır (yineleme işlemi sırasında). Bu yaygındır ve size yardımcı olacak teşhis teknikleri vardır (örneğin ağırlık matrislerinin sadece görsel bir tasviri olan Hinton Diyagramı, ağırlık değerlerinin bir 'ısı haritası').

Giriş katmanının boyutuna ve çıktı katmanının boyutuna dayalı RoT'ler :

Bu [gizli] katmanın boyutunun, girdi katmanı boyutu ... ve çıktı katmanı boyutu .... arasında bir yerde olması genel bir kuraldır.

Gizli düğümlerin sayısını hesaplamak için genel bir kural kullanıyoruz: (Giriş sayısı + çıkış sayısı) x 2/3

Temel bileşenlere dayalı RoT :

Tipik olarak, girdi veri kümesinin varyansının% 70-90'ını yakalamak için gereken boyutlar [ana bileşenler] kadar gizli düğüm belirtiriz .

Yine de NN SSS yazarı bu Kuralları "saçma" (kelimenin tam anlamıyla) olarak adlandırır çünkü bunlar: eğitim vakalarının sayısını, hedeflerdeki gürültüyü (yanıt değişkenlerinin değerleri) ve özellik uzayının karmaşıklığını göz ardı eder.

Onun görüşüne göre (ve bana her zaman neden bahsettiğini biliyormuş gibi geldi), gizli katmandaki nöronların sayısını MLP'nizin bir tür düzenleme veya erken durdurma içerip içermediğine göre seçin .

Gizli Katmandaki nöron sayısını optimize etmek için tek geçerli teknik:

Model oluştururken takıntılı bir şekilde test edin; test, "yanlış" ağ mimarisinin imzalarını ortaya çıkaracaktır. Örneğin, az sayıda düğümden oluşan gizli bir katmana sahip bir MLP ile başlarsanız (test sonuçlarına göre gerektiğinde kademeli olarak artıracaksınız) eğitim ve genelleme hatanız hem önyargı hem de yetersiz uyum nedeniyle yüksek olacaktır.

Daha sonra gizli katmandaki düğüm sayısını, genelleme hatası artmaya başlayana kadar teker teker artırın, bu sefer aşırı uyum ve yüksek varyans nedeniyle.


Pratikte bunu şu şekilde yapıyorum:

girdi katmanı : veri boşaltıcımın boyutu (modelimdeki özelliklerin sayısı) sapma düğümü için + 1 ve tabii ki yanıt değişkeni dahil değil

çıktı katmanı : modelim tarafından belirlenen soley: regresyon (bir düğüm) ve sınıflandırma (softmax varsayılarak sınıf sayısına eşdeğer düğüm sayısı)

Gizli katman : başlatmak için , bir gizli katmangiriş katmanının boyutuna eşit sayıda düğüm ile. "İdeal" boyut, daha büyük olmaktan ziyade daha küçüktür (yani, giriş katmanındaki sayı ile çıktı katmanındaki sayı arasındaki bazı düğüm sayısı) - yine, bu yalnızca deneysel bir gözlemdir ve toplu bu gözlem benim kendi deneyimimdir. Proje gerekli ek süreyi haklı çıkardıysa, o zaman az sayıda düğümden oluşan tek bir gizli katmanla başlıyorum, sonra (hemen yukarıda açıkladığım gibi) Genelleştirmeyi hesaplarken Gizli Katmana her seferinde bir düğüm ekliyorum hata, eğitim hatası, önyargı ve varyans. Genelleme hatası azaldığında ve tekrar artmaya başlamadan hemen önce, o noktadaki düğüm sayısı benim seçimim. Aşağıdaki şekle bakın.

görüntü açıklamasını buraya girin


1
1 numaralı RoT ile ilgili bazı ilgili sonuçları eklemek istiyorum: Başarılı SVM'lerde, girdinizi aslında daha yüksek boyutlu bir uzaya eşlersiniz (NN sözlüğünde giriş katmanındaki düğümlerden daha fazla gizli düğüm). Çıktı katmanının görevi, bu aşırı tam temsilden karar almaktır. Rastgele Tahminlere de bir bağlantı olabilir. Adam Coates ve Andrew Y. Ng'nin (2011) parlak makalesi ilgili konuları tartışıyor.
Vladislavs Dovgalecs

Güzel açıklama. Sklearn ve MLPClassifier kullanırken yukarıdaki gibi bir rakamı nasıl çizebileceğime dair bir fikriniz var mı?
seralouk

1
@sera xkcd stilini mi kastediyorsunuz?
denfromufa

Prensip olarak, gizli katmandaki nöron sayısını optimize etme sürecini otomatikleştirebilir misiniz? Ayrıca, gizli katmanların sayısını da otomatik olarak optimize edebilir misiniz?
Addison

2

Gizli bir katmandaki nöron sayısını seçmek ve sinir ağınızdaki gizli katman sayısını seçmek çok zordur.

Çoğu uygulama için genellikle bir gizli katman yeterlidir. Ayrıca, bu gizli katmandaki nöron sayısı, giriş sayısı (örneğinizde 10) ve çıkış sayısı (örneğinizde 5) arasında olmalıdır.

Ancak nöronların ve gizli katmanların sayısını seçmenin en iyi yolu deney yapmaktır. Farklı sayıda gizli katman ve gizli nöron içeren birkaç sinir ağını eğitin ve çapraz doğrulama kullanarak bu ağların performansını ölçün . En iyi performans gösteren ağı veren numaraya bağlı kalabilirsiniz.


2

Katmanların her biri için en iyi katman sayısının ve en iyi nöron sayısının seçimini otomatikleştirmek için genetik optimizasyonu kullanabilirsiniz .

Anahtar parçalar şunlar olacaktır:

  1. Kromozom : Her bir gizli katmanda kaç birim olduğunu tanımlayan vektör (ör. [20,5,1,0,0], birinci gizli katmanda 20 birim, ikinci katmanda 5, ..., katman 4 ve 5 eksik) anlamına gelir). Denenecek maksimum katman sayısı ve her katmandaki maksimum birim sayısı için bir sınır belirleyebilirsiniz. Ayrıca, kromozomların nasıl oluşturulduğuna dair kısıtlamalar koymalısınız. Örneğin [10, 0, 3, ...] oluşturulmamalıdır, çünkü eksik bir katmandan ('3, ...') sonraki birimler alakasız olur ve değerlendirme döngülerini boşa harcar.
  2. Uygunluk İşlevi : Belirli bir kromozom tarafından tanımlanan bir ağın çapraz doğrulama kümesindeki en düşük eğitim hatasının karşılığını döndüren bir işlev. "En küçük / en hızlı ancak en doğru ağı" bulmak istiyorsanız, toplam birim sayısını veya hesaplama süresini de dahil edebilirsiniz.

Ayrıca şunları da düşünebilirsiniz:

  • Budama : Büyük bir ağ ile başlayın, ardından çapraz doğrulama seti performansını takip ederken katmanları ve gizli birimleri azaltın.
  • Büyüme : Çok küçük bir ağla başlayın, ardından birimler ve katmanlar ekleyin ve tekrar CV set performansını takip edin.

0

Son zamanlarda bu https://arxiv.org/abs/1809.09953 üzerinde teorik çalışma var . Bir RELU MLP kullandığınızı varsayarsak, tüm gizli katmanlar aynı sayıda düğüme sahiptir ve kayıp işleviniz ve bir sinir ağıyla yaklaştığınız gerçek işlev bazı teknik özelliklere uyun (kağıtta), derinliğinizi seçebilirsiniz. $ \ log (n) $ sipariş edin ve gizli katman genişliğiniz $ n ^ {d / (2 (\ beta + d))} \ log ^ 2 (n) $ şeklinde olsun. Burada $ n $ örnek boyutunuzdur, $ d $ girdi vektörünüzün boyutudur ve $ \ beta $ gerçek işleviniz için bir düzgünlük parametresidir. $ \ Beta $ bilinmediğinden, muhtemelen onu bir hiperparametre olarak ele almak isteyeceksiniz.

Bunu yaparak, örneklem büyüklüğünün fonksiyonu olarak 1 $ 'a yakınsama olasılığıyla yaklaşık hatanızın, örneklem büyüklüğünün bir fonksiyonu olarak 0 $' a yakınsadığını garanti edebilirsiniz. Oranı veriyorlar. Bunun 'en iyi' mimari olacağının garanti edilmediğini unutmayın, ancak en azından size başlamak için iyi bir yer sağlayabilir. Dahası, kendi deneyimlerime göre okul terki gibi şeyler pratikte hala yardımcı olabilir.

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.