- 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ı
Benim anladığım kadarıyla Harmonium (Smolensky), ilk restricted Boltzmann machine'di ve “energy”yi minimize etmek yerine “harmony”yi maksimize eden bir kavramdı. Smolensky, Hinton ve Rummelhart birlikte çalışırken buna “goodness of fit” diyorlardı. Harmonium makalesi gerçekten etkileyici bir okuma. Hinton yapay zeka dünyasında bir süperstar oldu, Smolensky ise dilbilimle ilgili uzun bir kitap yazdı. Bu tarih hakkında daha fazlasını bilen var mı merak ediyorum
David Ackley hakkında ilginç bir yazı paylaşımı. Ayrıca T2 Tile Project'e de bakmaya değer
Yazının yazarıyım. Çok sayıdaki yorum için teşekkürler, bunun bu kadar popüler olacağını beklemiyordum. Yazım hataları, boşluklar, kaydırma sorunları vb. üzerinde düzeltme yapıyorum; bildirdiğiniz için teşekkürler
Başlığı "A Tiny Boltzmann Brain" diye okudum. Doğal beynim bu karışıklığı anında çözdü. Bunun, çok küçük bir modele rastgele ağırlıklar verip anlamlı bir şey yapıp yapamayacağını test eden bir deney olacağını düşündüm. Model ne kadar küçükse, rastgele üretimde ilginç bir şey çıkma olasılığı göreli olarak o kadar yüksek gibi geliyor. Tahminim yanlış çıktı ama yine de moralimi bozmadım. “Unbiased-Architecture Instant Boltzmann Model” (UA-IBM) adında yeni bir model ailesi öneriyorum. Bir gün yeterince büyük kuantum bilgisayarlar olursa, tüm veri kümesini modelin tüm parametreleri ve mimarisiyle birlikte kuantum durumunda üst üste bindirip tek seferde çıkarım yapabileceğimizi hayal ediyorum. Bunu deneyecek boştaki qubit'leri olan var mı? (Aslında her şeyin kuantum olması ama bunu hâlâ pratikte düzgün kullanamıyor olmamız ironik. Ayrıca bir uzaylı uygarlığın tek bir kuantum sensörden başlayıp tümüyle kuantum sinir sistemine sahip varlıklara dönüşmesi için nasıl bir toplumsal ve teknolojik yol izleyeceğini de hayal ediyorum)
Açıklama çok iyi. Bu arada fareyle kaydırma aşırı hassas (muhtemelen mobilde sorun yoktur). Her kaydırmada ilk ve son sayfaya fırladığı için kullanımı zordu. Neyse ki klavyeyle tümünü normal şekilde okuyabildim
Doğru anladıysam, bugün kullandığımız sinir ağlarından farklı olarak, weight update için gradient tabanlı forward/backward pass yerine Gibbs sampling gerekiyor. Bunun nedenini bilen var mı merak ediyorum
Bu yazı bana eski günleri hatırlattı. 1990'da void pointer kullanarak sinir ağı düğümlerini diziler halinde oluşturup C ile Boltzmann machine ve perceptron gerçekleştirmiştim. O zamanlar “AI” kullanımı, MIDI melodilerinde bir sonraki notayı tahmin etmek ya da 5x9 nokta alanında minim, crotchet, quaver gibi nota şekillerini tanımak gibi şeylerdi. %85 tanıma oranı gayet “iyi” sayılıyordu
Yazı kolay anlaşılır ve açıktı. Çok nostaljik hissettirdi. Utanmaz bir tanıtım olacak ama, bir zamanlar RBM eğitimi sürecini görselleştiren bir video yapmıştım
Gerçekten çok temiz bir demo. Eskiden Geoff Hinton'ın sinir ağları derslerinde Boltzmann machine hakkında birkaç ders dinlediğimi hatırladım. Bir noktaya dikkat çekmek isterim: “restricted Boltzmann machine'de visible ve hidden nöronlar birbirine bağlı değildir” gibi bir açıklama hatalı bir ifade. Çünkü bu, visible düğümler ile hidden düğümlerin birbirine bağlı olmadığı izlenimini verebilir. Doğru ifade, aynı tür içindeki bağlantıların olmadığıdır; yani visible-visible ya da hidden-hidden bağlantıları yoktur. Ya da visible ve hidden düğümlerin kendi türleri içinde iç bağlantıları olmadığı söylenebilir