Derin bir sinir ağında donatı ile mücadele nasıl


50

Yapay sinir ağları (NN) ile başladığımda, asıl sorun olarak fazla donmakla savaşmam gerektiğini düşündüm. Ancak uygulamada NN'imin% 20 hata oranı engelini aşmasını bile sağlayamıyorum. Rasgele ormandaki puanımı bile geçemiyorum!

NN'in verilerdeki trendleri yakalamaya başlaması için ne yapılması gerektiği konusunda çok genel veya çok genel bir tavsiye arıyorum.

NN uygulanması için ben Theano Yığın Oto Encoder kullanmak öğreticisindeki kodu MNIST veri kümesi sınıflandırmak için büyük (% 5'ten az hata oranı) çalışır. Her biri daha sonra otomatik kodlayıcı olarak önceden eğitilmiş olan softmax katmanı üstte olan çok katmanlı bir algılayıcıdır ( öğretici , bölüm 8'de tamamen açıklanmıştır ). ~ 50 giriş özelliği ve ~ 10 çıkış sınıfı vardır. NN sigmoid nöronlara sahiptir ve tüm veriler [0,1] olarak normalleştirilmiştir. Birçok farklı konfigürasyon denedim: İçlerinde gizli katmanların ve nöronların sayısı (100-> 100-> 100, 60-> 60-> 60, 60-> 30-> 15, vb.), Farklı öğrenme ve tren öncesi fiyatlar, vs.

Ve alabileceğim en iyi şey validasyon setinde% 20 hata oranı ve test setinde% 40 hata oranıdır.

Öte yandan, Random Forest kullanmaya çalıştığımda (scikit-learn'dan) doğrulama setinde% 12 ve test setinde% 25 (!) Kolayca hata alıyorum.

Eğitim öncesi derin NN'imin bu kadar kötü davranması nasıl olabilir? Ne denemeliyim?

Yanıtlar:


34

Derin ağların sorunu, ayarlamak için çok fazla hiperparametreye ve çok küçük bir çözüm alanına sahip olmalarıdır. Dolayısıyla, iyi olanları bulmak mühendislik işi yerine bir sanat gibidir. Ben öğretici çalışma örneği ile başlar ve sonuçların nasıl değiştiğini görmek için parametreleri ile oynardım - bu, parametreler ve sonuçlar arasındaki bağımlılıklar (hem - hem de final) arasındaki iyi bir sezgiyi (resmi bir açıklama olmasa da) verir.

Ayrıca aşağıdaki makaleleri çok faydalı buldum:

Her ikisi de RBM'leri tanımlamaktadır, ancak genel olarak derin ağlar hakkında bazı görüşler içermektedir. Örneğin, kilit noktalardan biri, ağların katman bazında hata ayıklanması gerektiğidir - eğer önceki katman özelliklerin iyi bir gösterimini sunmuyorsa, diğer katmanların bunu düzeltmek için neredeyse hiç şansı yoktur.


14

Arkadaşımın cevabı sinir ağlarının nasıl düzgün bir şekilde ayarlanmasının (son derece) zor olacağı hakkında daha fazla bilgi edinmek için bazı mükemmel ipuçları verirken, şu anda sinir ağında en iyi performans gösteren sınıflandırma mimarilerinde kullanılan birkaç özel tekniğin listelenmesinin yararlı olabileceğini düşündüm. Edebiyat.

Doğrultulmuş doğrusal aktivasyonlar

f(z)=(1+e-z)-1f(z)=maksimum(0,z)

Relu aktivasyonunun iki büyük avantajı vardır:

  • çıkışı için gerçek bir sıfırdır (sıfıra yakın küçük bir değer değildir) vez0
  • türevi sabittir, için veya için 1'dir .z0z>0

Bir relu birimleri ağı temel olarak üssel olarak birçok lineer ağlar topluluğu gibi davranır, birimler esasen "kapalı" dır (çıktısı 0'dır), alan birimler ise tek bir lineerde daraltılır. bu giriş için model. Aynı zamanda, sabit türevler önemlidir, çünkü relu aktivasyonlarına sahip derin bir ağ, kaybolma gradyan problemini önleme eğilimindedir ve tabaka halinde ön işleme olmadan eğitilebilir.z0z>0

Bu konular hakkında iyi bir bildiri için Glorot, Bordes ve Bengio'nun "Derin Seyrek Doğrultucu Sinir Ağları" na bakınız ( http://jmlr.csail.mit.edu/proceedings/papers/v15/glorot11a/glorot11a.pdf ).

Bırakmak

Geçtiğimiz birkaç yıldaki birçok araştırma grubu, aşırı eğitimleri önlemek için sınıflandırıcı ağlarda "bırakma" kullanımını savunuyorlar. (Bkz. Örneğin, “Bırakma: Sinir ağlarının aşırı yüklenmesini önlemenin basit bir yolu” Srivastava, Hinton, Krizhevsky, Sutskever ve Salakhutdinov tarafından http://www.cs.toronto.edu/~hinton/absps/JMLRdropout.pdf ) Bırakma, eğitim sırasında, belirli bir katmandaki birimlerin sabit bir kısmı, ağın işlediği her girdi için rastgele 0'a ayarlanır. Bu, 0'a ayarlanmamış birimleri "eksik" birimler için "telafi" etmeye zorlar. Bırakma, sınıflandırma görevlerinde sinir ağı modelleri için son derece etkili bir düzenleyici olarak görünmektedir. Bununla ilgili bir blog makalesine bakın : http: // fastml.


7
Fakat asıl mesele, giydirmeyle ilgili, giydirmeyle ilgili değil.
Valentas,

8

Microsoft Research araştırmacıları tarafından aşağıdaki makaleyi okumak isteyebilirsiniz:

Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun: arxiv'de Görüntü Tanıma için Derin Kalıcı Öğrenme , 2015.

Seninle benzer problemleri vardı:

Daha derin ağlar birleşmeye başlayabildiğinde, bir bozulma sorunu ortaya çıkmıştır: ağ derinliği arttıkça, doğruluk doygun hale gelir (bu şaşırtıcı olmayabilir) ve sonra hızlı bir şekilde düşer. Beklenmedik bir şekilde, bu tür bir bozulmaya neden olmamak ve uygun şekilde derin bir modele daha fazla katman eklemek , [11, 42] 'de bildirildiği ve deneylerimiz tarafından tam olarak doğrulandığı gibi, daha yüksek eğitim hatasına neden olur .

Sorunu çözmek için, bir atlama mimarisini kullandılar. Bununla, çok derin ağlar (1202 katmanlar) geliştirdiler ve ILSVRC 2015 yarışmasında en iyi sonucu aldılar.


Anlayışınız için teşekkür ederiz, onaylama acc'sinin acc eğitiminden daha yüksek olması durumunda ne yapılması gerektiğini öğrenmek için degrade problemini ortadan kaldırırsınız. Val setindeki az sayıdaki veri için olabilir, ancak bazen val setine bağlı değildir. Bunun, val acc'nin eğitim acc'den daha yüksek olmasının başka bir nedeni olduğunu soruyorum.
Sudip Das
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.