Sınıflandırma için RBM nasıl kullanılır?


12

Şu anda Kısıtlı Boltzmann Makineleri ile oynuyorum ve o zamandan beri el yazısı rakamları onunla sınıflandırmayı denemek istiyorum.

Oluşturduğum model şimdi oldukça süslü bir üretken model ama onunla nasıl daha ileri gideceğimi bilmiyorum.

Gelen bu makalede yazar diyelim, bu iyi bir üretken bir model oluşturduktan sonra, bir " sonra bir ayrımcılık sınıflandırıcı trenler (yani doğrusal sınıflandırıcı, Destek Vektör Makinesi) RBM üst etiketli örnekleri kullanma hakkında " "ve furtherly durumlarını sen ürediklerinden gizli birim vektörleri almak için RBM modelinin gizli birimlerine veri vektörleri veya verilerin daha üst düzey bir temsili ". Sorun şu ki, doğru anladığımdan emin değilim.

Bu, tek yapmam gereken girdinin gizli birimlere yayılması anlamına mı geliyor ve orada sınıflandırma için RBM özelliğim var mı?

Birisi bu süreci bana açıklayabilir mi?


Kısıtlı Boltzmann makinesi, derin öğrenme için kullanılan en eski bileşenlerden biridir. Aslında, DNN'de ilk önemli çalışma Hinton tarafından yapıldı, derin inanç ağı RBM'ye dayanıyor Daha fazla bilgi için lütfen bu makaleyi (derin inanç ağı, 2007, Hinton için) arayın. Web sitesinde çok önemli kaynakları ve bir demo denemesini bulabilirsiniz cs.toronto.edu/~hinton/digits.html
Beşar Haddad

@hbaderts RBM ile oynamaya başladım. Kabul edilen cevabı okumak kolaydı. Açıklık istemek istedim, RBM gizli katmanı ikili dağılımdan örneklendikten sonra rastgele. Sınıflandırma için, gizli birim olasılıkları kullanılıyor mu veya bir ikili dağıtımdan (1 ve 0) örneklenen gizli birimler sınıflandırıcıya aktarılıyor mu?
M3tho5

Yanıtlar:


15

Sınırlı Boltzmann Makinelerinin Gözden Geçirilmesi

Kısıtlı Boltzmann makinesi (RBM), girdi üzerinde bir olasılık dağılımını öğrenen üretken bir modeldir. Bu, eğitildikten sonra, RBM'nin öğrenilen olasılık dağılımından yeni örnekler üretebileceği anlamına gelir. Görünür birimleri üzerinden olasılık dağılımı verilir p ( v | h ) = V Π i = 0 s ( v ı | h ) , p ( v ı | h ) = σ ( bir i + Σv

p(v|h)=Πben=0Vp(vben|h),
veσolan sigmoid fonksiyonu,birigörünür düğüm için önyargıivewjıden ağırlığıh, jiçinvı. Bu iki denklemden,p(vh) 'ninsadece gizli durumlarahbağlı olduğu anlaşılmaktadır. Bu, görünür birvnumunesinin nasılüretildiğihakkındaki bilginingizli birimlerde, ağırlıklarda ve sapmalarda saklanması gerektiğianlamına gelir.
p(vben|h)=σ(birben+Σj=0'Hwjbenhj)
σbirbenbenwjbenhjvbenp(v|h)hv

Sınıflandırma için RBM kullanma

h

Bu gizli vektör, giriş verilerinin dönüştürülmüş bir sürümüdür - bu, hiçbir şeyi kendi başına sınıflandıramaz. Bir sınıflandırma yapmak için, girdi olarak "ham" eğitim verileri yerine herhangi bir sınıflandırıcıyı (doğrusal sınıflandırıcı, SVM, ileri beslemeli sinir ağı veya başka bir şey) gizli vektör ile eğitirsiniz.

Derin beslemeli sinir ağlarını denetimsiz bir şekilde önceden eğitmek için kullanılan derin bir inanç ağı (DBN) oluşturuyorsanız, bu gizli vektörü alıp yığtığınız yeni bir RBM'nin girişi olarak kullanırsınız üstünde. Bu şekilde, etiketlenmiş verilere ihtiyaç duymadan, istediğiniz boyuta ulaşana kadar ağı katman katman eğitebilirsiniz. Son olarak, örneğin üstüne bir softmax katmanı ekler ve tüm ağı sınıflandırma görevinizde backpagagation ile eğitirsiniz.


@ Seanny123 düzenlemesi için teşekkür ederim, bu okumayı çok daha kolay hale getiriyor.
hbaderts

5

@hbaderts tüm iş akışını mükemmel bir şekilde açıkladı. Ancak, bu fikirde tamamen yeni olmanız hiç mantıklı olmayabilir. Bu nedenle, bunu layman'ın yolundan açıklayacağım (bu nedenle, ayrıntıları atlayacağım):

Derin ağları verilerinizi dönüştürmenin bir işlevi olarak düşünün. Dönüşümlere örnek olarak normalleştirme, veri kaydı vb. Verilebilir. Eğittiğiniz derin ağların birden fazla katmanı vardır. Bu katmanların her biri bir tür öğrenme algoritması kullanılarak eğitilir. İlk katman için, orijinal verileri girdi olarak iletir ve çıktı olarak bu "aynı orijinal verileri" geri verecek bir işlev elde etmeye çalışırsınız. Ancak, mükemmel çıktı elde edemezsiniz. Bu nedenle, ilk katmanın çıktısı olarak girdinizin dönüştürülmüş bir sürümünü elde edersiniz.

Şimdi, ikinci katman için, bu "dönüştürülmüş verileri" alıp bunları girdi olarak iletir ve tüm öğrenme sürecini tekrarlarsınız. Bunu derin ağınızdaki tüm katmanlar için yapmaya devam edersiniz.

Son katmanda, elde ettiğiniz şey orijinal giriş verilerinizin "dönüştürülmüş bir versiyonudur". Bu, orijinal giriş verilerinizin daha yüksek düzeyde soyutlanması olarak düşünülebilir. Derin ağınızdaki etiketleri / çıktıları henüz kullanmadığınızı unutmayın. Bu nedenle, bu noktaya kadar her şey denetimsiz öğrenmedir. Buna katman bazında ön eğitim denir.

Şimdi, bir sınıflandırıcı / regresyon modeli eğitmek istiyorsunuz ve bu denetimli bir öğrenme problemidir. Bu hedefe ulaşmanın yolu, orijinal girişinizin "son dönüştürülmüş sürümünü" derin ağınızdaki son katmandan alıp herhangi bir sınıflandırıcıya (ör. Knn sınıflandırıcı / softmax sınıflandırıcı / lojistik regresyon vb.) Girdi olarak kullanmaktır. Buna yığınlama denir.

Bu son adım sınıflandırıcısını / öğrenicisini eğitirken, tüm öğrenmenizi tüm ağda yayarsınız. Bu, etiketlerden / çıktılardan öğrenebilmenizi ve öğrenilen katman bazlı parametreleri buna göre değiştirebilmenizi sağlar.

Dolayısıyla, üretken modelinizi eğittikten sonra, üretken modelinizin çıktısını alın ve bunu bir sınıflandırıcıya / öğreniciye girdi olarak kullanın. Öğrenme devam ederken hatanın tüm ağ üzerinden akmasına izin verin, böylece önceki adımlarda öğrenilen katman bazlı parametreyi değiştirebilirsiniz.


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.