‘Yapay Zeka’ Kategorisi için Arşiv

Hebb Öğrenme Kuralı

Mayıs 25, 2009

Hebb öğrenme kuralı, YSA’ larda, en eski ve en basit öğrenme kuralıdır. Eğer birbirine bağlı iki nöron, aynı anda aynı işarete sahipse, bu nöronlar arasındaki ağırlık değeri artırılır.

Algoritması

0. Tüm ağırlıkları ilkle:

w(i)=0        (i=1 to n)

1. Her bir eğitim vektörü (s) ve hedef vektörü (t) için  2 -4 işlemlerini yap:

2. Giriş birimlerine eğitim vektörlerini al

x(i)=s(i)        (i=1 to n)

3. Çıkış birimlerine hedef vektörlerini al

y=t

4. Ağırlıkları güncelle:

w(i)_yeni=w(i)_eski+x(i)*y      (i=1 to n)

b_yeni=b_eski+y

Şimdi bir örnek üzerinden algoritmamızı işletelim. Bu örnekte AND fonksiyonunu, bipolar (yani 1 ve -1) temsille öğrenebilen bir Hebb Ağı geliştireceğiz.

x1 x2 b t
1  1  1  1
1 -1 1 -1
-1 1 1 -1
-1 -1 1 -1

Bu sinir ağının yapısından bahsedelim ilk önce. Bu ağ iki girişi (x1 ve x2) ve bir bias ve de bir çıkışı olan bir sinir ağıdır. Üç tane ağırlık bağlantısı (w1, w2, w3) vardır o halde.

Herşeyden önce ağırlıkların hepsine birden o  değerini atayalım.
(w1=0, w2=0, w3=0)

Şimdi ilk eğitim setimizi girelim ağa. (yani x1=1, x2=1 ve b=1 ve de t=1 olan eğitim setini)

x1 x2 b t w1 w2 w3
1   1  1 1  0   0   0

w1_yeni=w1_eski+x1*y

w1_yeni=0+1*1
w1_yeni=1

w2_yeni=0+1*1
w2_yeni=1

b_yeni=b_eski+y
b_yeni=1

Ağırlıklarımızın yeni değerlerini bulduktan sonra, ikinci eğitim vektörü içinde de aynı işlem yapılır.
Sonra üçüncü ve daha sonra da dördüncü eğitim seti için hesaplama yapılır.

Eğitim bittiği vakit w1=2, w2=2 ve b=-2 olmaldır.  Şimdi test edelim:

x1=1, x2=-1 olsun… Çıkış nöronuna net girdi=x1*w1+x2*w2+b  ise:
f_net=((1*2)+(-1*2)+(1*-2))=-2

f(f_net)= Eğer f_net>=0 ise 1; f_net<0 ise -1 dir. O halde çıkış değerimiz -1 olacaktır.

Bu problemi bir de polar (1 ve 0) değerler ile çözün bakalım.
Sonuca ulaşacak mısınız? Kolay gelsin.

“Yapay Zeka Nedir?” sunumu…

Mayıs 20, 2009

Yapay Sinir Ağları dersi için arkadaşlarla hazırlamış olduğumuz “Yapay Zeka Nedir?” konulu sunum umarım işinize yarar.

İndirmek için tıklayın.

Görüşmek üzere.

Diophantine ve Genetik Algoritmalar

Ağustos 4, 2008

Genetik algoritmaları öğrenmek için çözdüğüm ilk problem “diophantine denklemleri”dir. O zamanlar Java’da bu uygulamayı gerçekleştirmiştim.

Bu aralar Python’a merak sardım. Bari şu diophantine’yi bir de GA ile Python’da çözeyim dedim. Çok basit bir çözüm ama GA’nın da mantığını yansıtan bir örnek oldu.

Problemimiz: a+2*b+3*c+4*d=30 denklemini sağlayan a,b,c,d doğal sayılar nelerdir?

Tasarımız ise şu şekilde oldu: Her bir kromozom aday bir çözümdür. O halde kromozomumuz 4 tane gen içerir ve her bir gen, denklemde bir bilinmeyene karşılık gelir. Uygunluk fonksiyonumuz zaten denklemin kendisidir. Çaprazlama fonksiyonumuz anneden ilk iki gen, babadan ise son iki geni alıp yavru bir kromozom oluşturur. Seçme fonksiyonu ise son derece ilkeldir. Populasyondaki tüm kromozomları uygunluk değerine göre sıralar ve belli aralıktaki kromozomlardan anne ve baba kromozomu seçer. Mutasyon işleminde ise sadece bie kromozomun ilk genine yeniden değer ataması yapılır.

Afiyet olsun.


 (devamı...)

Sekiz vezir Problemi ve Genetik Algoritmalar

Ağustos 3, 2008

İnternette genetik algoritmaların ne olduğuna dair yeterince kaynak var. Bundan dolayı ben işin sadece uygulama kısmına değineceğim. Genetik algoritmalarla ilgili bilgilere kod ve us‘ tan , learnartificialneuralnetworks‘ den ve obitko‘ dan ulaşabilirsiniz.

Sekiz vezir problemi içinde yeterince kaynak var. Bu bilgilere Türkçe wikipedia‘dan, ekşisözlük‘ten ulaşabilirsiniz. Ve bu applet de hediyemiz olsun :) .

Şimdi asıl işe gelelim. Ben bu aralar bir genetik algoritmalar kütüphanesi üzerinde çalışıyorum. Bu arada da sekiz vezir problemini çözeyim, böylece kütüphaneyi de test etmiş olurum diye düşündüm. . Burada ben sadece bu problemi çözerken kullandığım sınıfları yazacağım…

(devamı…)