Uzun zamandır algoritma simulasyonlarına ve özellikle de yapay sinir ağlarına ara vermiştim. Bu sefer bu alana Hebb öğrenme kuralıyla bir dönüş yapmak istedim.
Bu basit kural Donald Hebb’in 1949 yılında yayınlanan “The Organization of Behaviour” kitabında tanımlanmıştır. Eğer bir nöronun bir aksonu başka bir nörona yeterince yakınsa ve bu nöron diğer nöronun ateşlenmesinde sık sık bir rol oynuyorsa aradaki bu bağlantı güçlenir.
Evet , bu kural biyolojik bir şekilde tanımlanmış. Çok normal, çünkü Donald Hebb nöropsikoloji alanında çalışan bir psikologtu. Peki yapay sinir ağlarında bu kuralı nasıl düşünebiliriz?
Bu şekilde simulasyonda da kullandığım basit bir örneği görüyorsunuz. Şistemin girdileri x1 ve x2 değerleri. Bunları başka nöronların çıktıları olarak da düşünebilirsiniz. Bu çıktılar w1 ve w2 ağırlıklarıyla çarpıldıktan sonra nöronda toplanıyor ve nöronun ateşleyip ateşlemediğine bakılıyor. Eğer ateşlemişse y çıktısı 1 değerini alıyor, ateşlememişse -1 değerini.
Kuralı şekle göre yazarsak yapay sinir ağlarında kullandığımız şekli şöyle oluyor:
\(\Delta w = \eta \cdot x \cdot y \)
Burada \(\Delta \) ağırlıklardaki değişimi göstermekte. \(\eta \) da öğrenme faktörü oluyor, genelde küçük bir sayıdır ve simulasyonda 0.1 değerini kullandım.
bu gösterimde x ve w vektördür. Bunları daha açık yazarsam şöyle olur.
\(\Delta w1 = \eta \cdot x1 \cdot y \)
\(\Delta w2 = \eta \cdot x2 \cdot y \)
Hesapta kullandığım şekli de şöyle:
\(w1 (sonraki) = w1 (önceki) + \eta \cdot x1 \cdot y \)
\(w2 (sonraki) = w2 (önceki) + \eta \cdot x2 \cdot y \)
Her adımda önce bir girdi seçiliyor. Yani o adım için x1 ve x2 değerleri seçiliyor. Ardından y çıktısı o anki ağırlık değerleriyle hesaplanıyor. Ardından o girdiler ve çıktılar için ağırlıkların yeni değerleri yukarıdaki formüllere göre hesaplanıyor ve ağırlık değerleri güncelleniyor.
Simulasyonda bu modeli yukarıda açıkladığım şekilde kullandım. Simulasyon başlatıldığında ağırlıklara rastgele değerler atanıyor. Simulasyonun altında ağırlıkları nasıl güncellediğimi gösterdim. En altta ise öğrenme için kullandığım girdi noktalarını bir koordinat sisteminde kırmızı noktalarla ve ağırlık vektörünün de bu noktaları birbirinden nasıl ayırdığını gösterdim. Bu öğrenmede sistem kendi kendine öğreniyor, yani sisteme kullanılan nokta için ulaşılması gereken çıktı değeri hiçbir şekilde verilmiyor. Bu durumda sistem verilen noktaları kendine göre sınıflandırıyor. Tabii ki sadece iki nokta ile bu kuralın öğrenme yeteneği yeterli bir şekilde anlaşılamaz ama en azından algoritmanın nasıl çalıştığını görebiliriz.