Çok küçük bir Boltzmann makinesi
(eoinmurray.info)- Boltzmann makinesinin yapısı ve amacı hakkında kısa bir giriş sunuluyor
- Enerji fonksiyonu ve olasılık dağılımı formüllerle tanımlanıyor
- Ağırlıklar ve bias'ların güncelleme kuralları türev yoluyla çıkarılıyor
- Pozitif/negatif aşamalar ve Gibbs örneklemesi ile model beklentisinin nasıl yaklaşıklandığı açıklanıyor
- Son olarak Contrastive Divergence algoritması bütünlüklü biçimde özetleniyor
Boltzmann makinesi ve Contrastive Divergence kavramı
- Boltzmann makinesinde giriş katmanı (visible layer) ve gizli katman (hidden layer) ile bunları bağlayan ağırlık matrisi ve her iki katman için ayrı bias vektörleri bulunur
Enerji fonksiyonu ve olasılık dağılımı
-
Enerji fonksiyonu matris biçiminde şu şekilde tanımlanır
E(v, h) = -ΣiΣj wij vi hj - Σi bi vi - Σj cj hj- v: görünür katman vektörü, h: gizli katman vektörü, w: ağırlıklar, b/c: her katmanın bias'ı
-
Boltzmann makinesinin birleşik dağılımı
P(v, h) = (1/Z) * exp(-E(v, h))- Z (bölüm fonksiyonu), olasılık dağılımını normalize etme görevini üstlenir
Log-likelihood ve türev
-
Eğitim verisinin olabilirliği maksimize edilerek öğrenme yürütülür
log(P(v)) = log(Σh exp(-E(v, h))) - log(Z) -
Log-likelihood'in ağırlık wij için kısmi türevi
∂(log P(v))/∂wij = <vi hj>veri - <vi hj>model- < · >veri: gerçek veriye ilişkin beklenti
- < · >model: modelin ürettiği veriye ilişkin beklenti
Ağırlık ve bias öğrenme kuralları
- Ağırlıklar ve bias'lar şu şekilde güncellenir
- Δwij = η(<vi hj>veri - <vi hj>model)
- Δbi = η(<vi>veri - <vi>model)
- Δcj = η(<hj>veri - <hj>model)
- η öğrenme oranıdır
Contrastive Divergence algoritması
- Model beklentisi < · >model doğrudan hesaplanması zor olduğu için Gibbs örneklemesi kullanılır
- Contrastive Divergence bunu şu prosedürle yaklaşıklar
- Pozitif aşama: gizli katman h(0), P(h | v(0)=veri) dağılımından örneklenir
- Negatif aşama: Gibbs örneklemesi k kez tekrarlanır
- Sırayla v(t+1) ~ P(v | h(t)), h(t+1) ~ P(h | v(t)) şeklinde örnekleme yapılır
- Güncelleme sırasında veri beklentisi ile model beklentisi arasındaki fark kullanılır
- Δwij = η(<vi hj>veri - <vi hj>model)
- Δbi = η(<vi>veri - <vi>model)
- Δcj = η(<hj>veri - <hj>model)
Özet
- Boltzmann makinesinde öğrenmenin özü, bir enerji tabanlı model olarak gerçek veri ile modelin ürettiği dağılım arasındaki beklenti farkını azaltmaktır
- Contrastive Divergence, bu farkın hızlı ve verimli biçimde yaklaşıklanmasını sağlayan temel eğitim yöntemidir
- Gibbs örneklemesi aracılığıyla model dağılımı ile gerçek veri arasında köprü kurar; bu süreç tekrarlandıkça Boltzmann makinesinin veriyi iyi temsil edebilmesi için ağırlıklar ve bias'lar güncellenir
1 yorum
Hacker News yorumları
1990’da saf C’de void pointer dizileriyle “nöronlar” oluşturup Boltzmann makineleri ve perceptron’lar yaptığım zamanları hatırlattı
O dönemde “AI” ile yaptığımız işler, MIDI melodisinde bir sonraki notayı tahmin etmek ya da 5×9 noktalı bir ızgarada birlik, ikilik, dörtlük ve sekizlik nota şekillerini tanımak gibiydi; %85 doğruluk “yeterince iyi” sayılırdı
Çizgili porte üzerindeki notaları okumak eğlenceli bir proje gibi geliyor. Özellikle 3Blue1Brown’un sayı sinir ağı örneği[1] gibi sıfırdan kendin yapınca daha da öyle
Chuck[2] gibi bir şeyle birleştirince, günümüz teknolojisiyle tamamen istemci tarafında çalışan bir uygulama bile yapılabilir
[1] - https://www.3blue1brown.com/lessons/neural-networks
[2] - https://chuck.stanford.edu/
Çıktının müzik gibi duyulup duyulmadığını merak ediyorum
Anladığım kadarıyla Harmonium (Smolensky) ilk kısıtlı Boltzmann makinesiydi, ama “enerjiyi” en aza indirmek yerine “uyumu” en üst düzeye çıkarıyordu
Smolensky, Hinton ve Rummelhart birlikte çalışırken buna sanırım “uygunluk” diyorlardı. Harmonium makalesi[1] gerçekten okunması keyifli; Hinton elbette süperstar oldu, Smolensky ise dilbilim üzerine uzun kitaplar yazdı. Bu tarih hakkında daha fazlasını bilen var mı merak ediyorum
[1] https://stanford.edu/~jlmcc/papers/PDP/Volume%201/Chap6_PDP8...
David Ackley hakkında ilginç bir yazı: https://news.unm.edu/news/24-nobel-prize-in-physics-cited-gr...
T2 Tile Project de kesinlikle görülmeye değer
Lisansüstü öğrencilerin değeri sık sık hafife alınıyor, oysa gerçekte muazzam katkı sağlıyorlar ve daha sonra araştırmayı daha da ileri taşıyorlar. Araştırma bu kadar çok şeyi ileriye taşımışken ABD’nin neden araştırmayı israf gibi gördüğünü anlamıyorum
Başlığı yanlışlıkla “A Tiny Boltzmann Brain” diye okudum[0]
Doğal zihnim hemen bilmecenin cevabını verdi. Çok küçük bir modele rastgele üretilmiş ağırlıklar koyup gerçekten işe yarar bir şey yapıp yapmadığını test eden bir durum sandım. Sonuçta model ne kadar küçükse, basit rastgele üretimin boyutuna kıyasla ilginç bir şey üretme olasılığı o kadar artar
Düzeltmeyi kabul ediyorum ama moralim bozulmadı. “Unbiased-Architecture Instant Boltzmann Model” (UA-IBM) adlı yeni bir model sınıfı öneriyorum. Bir gün yeterince büyük kuantum bilgisayarlar ortaya çıktığında, tüm veri kümesini, tüm parametre ve yapı ayarlarını temsil eden N adet serileştirilmiş değerle tanımlanan modelin klasik kısıtları olarak ayarlayabileceğiz. Ardından N kübitli bir kuantum sisteminin olası tüm parametreleri ve yapıları kuantum süperpozisyonunda tutup tüm klasik örnekler üzerinde bir çıkarım adımı çalıştırmasını, sonra sonucu çökertip en iyi ya da en iyiye yakın modelin parametrelerini ve yapısını klasik biçimde geri vermesini sağlayacağız
Bunu deneyecek birkaç boş kübiti olan var mı merak ediyorum. Her şey kuantum olmasına rağmen aşırı kaygan olduğu için hâlâ neredeyse hiç yararlanamıyor olmamızda bir ironi var
Bilimkurgu ortamı olarak, tek kullanımlık bir kuantum sensörü evrimleştirmiş, bunun da bütün bir kuantum duyusal sisteme ve sinir sistemine yol açıp en baştan eksiksiz bir kuantum zekâya evrildiği bir uzaylı türü hayal edilebilir. Böyle bir toplum ve teknoloji rotası nasıl görünürdü? Patlayıcı ilerlemeleri henüz bizi tehdit etmesin diye kara delik yakınındaki bir yörüngede olmalarını umuyorum. Sonra bir gün kütleçekim kuyusundan kaçarlar ve…
[0] https://en.wikipedia.org/wiki/Boltzmann_brain
Açıklama iyi. Bu arada nedense fare tekerleğiyle kaydırma fazla hassas
Mobilde kaydırmanın iyi olacağını tahmin ediyorum ama kontrol etmedim. Kaydırmaya her çalıştığımda ilk “sayfadan” son “sayfaya”, sonra da tersine zıplıyordu. Neyse ki klavye girişi çalıştı da yazının tamamını okuyabildim
Doğru anladıysam, bugün alışık olduğumuz sinir ağlarındaki gibi gradyan tabanlı ileri besleme ve geri yayılım kullanmak yerine, ağırlık güncellemesini hesaplamak için Gibbs örneklemesi gerekiyor gibi görünüyor
Bunun nedenini anlayan var mı merak ediyorum
Bu değer log-olabilirliğin gradyanını hesaplamak için gerekli, ama dağılımı entegre etmek başa çıkılması zor olduğu için böyle yapılıyor. VAE’lerde temsili örnekler çekmek için MCMC kullanmaya benziyor. Derin öğrenme tipi sinir ağlarında ise açıkça modellenmiş bir olasılık dağılımı yerine veri kümesindeki batch’ler üzerinden gradyan tahmin ediliyor
Genelde Gibbs, doğrudan gradyanın basit olmadığı ya da nokta tahmini değil dağılımın kendisini yeniden üretmek istediğiniz durumlarda kullanılır. Buna karşılık örneklemesi kolay marjinal/koşullu olabilirlikler olduğunda işe yarar. Her görünür düğüm her gizli düğüme bağımlı ve her gizli düğüm de tüm görünür düğümleri etkilediği için gradyan çok karmaşık hale gelir; bu yüzden marjinal olabilirliğe dayanarak ayarlama yapan Gibbs örneklemesi çok daha basit olur
Bu yüzden ileri beslemeli sinir ağlarındaki gibi aynı şekilde bir hesaplama grafiği kurulamıyor
Temiz ve iyi bir açıklama. Eski anıları çok canlandırdı
Utanarak biraz kendimi tanıtayım: birkaç yıl önce bir RBM eğitim görselleştirmesi yapmıştım: https://www.youtube.com/watch?v=lKAy_NONg3g
Demo harika. 15 yıl önce üniversitede Geoff Hinton’ın sinir ağları dersini almıştım; birkaç ders boyunca Boltzmann makinelerini anlatmıştı
“Kısıtlı Boltzmann makinesi, görünür nöronlar ile gizli nöronların birbirine bağlı olmadığı özel bir durumdur” ifadesi yanlış. Bu ifade, görünür nöronların gizli nöronlarla bağlantılı olmadığı anlamına geliyormuş gibi duruyor
Doğru ifade şu olmalı: “Görünür nöronlar kendi aralarında bağlı değildir ve gizli nöronlar da kendi aralarında bağlı değildir.” Ya da “görünür nöronlar ve gizli nöronlar, kendi türleri içinde bağlantılara sahip değildir” denebilir
Düzenleme: Tamam. Giriş düzeyindeki özeti görmek için yukarı kaydırmam gerektiğini bilmiyordum
0xTJ’nin [flagged][dead] yorumunda dediği gibi, kaydırmayı ele geçirme ya da yeniden icat etme girişimlerinin iyi olmadığı tespiti doğru