Yazan : Şadi Evren ŞEKER

Bu yazının amacı yapay sinir ağlarında (Artificial Neural Networks) konusunda nöronların (neurons) nasıl kullanıldığı ve programlara nasıl dahil edildiğini açıklamaktır.

Bilindiği üzere nöron (sinir hücresi, neuron) bir yapay sinir ağının en temel öğesidir. Bu tanımı şöyle genişletmek mümkündür, bir nöron kendi girişi olan, kendi içerisinde bir işlem yapan ve bir sonuç üreten basit bir işlem ünitesidir. Bu giriş ve çıkışlar ise diğer sinir hücreleri (nöronlar) ile sinapsisler (synapses) vasıtasıyla iletişim kurar.

Bir nöron bir işlem yaparak sonuç ürettiği zaman bu nöron için hareketlendi veya ateşlendi terimleri kullanılabilir. Aslında bu hareketlenme eylemi basit bir matematiksel modelle gösterilebilir. Bu modelin inşası için bazı kabuller şu şekilde yapılabilir:

k: bir nöronun kaç farklı diğer nörona bağlı olduğu

w: bir nöronun bağlı olduğu diğer nöronlarla olan bağlantısının ağırlığı

x: bir nörona bağlı olan diğer nöronlardan w etkisi altında gelen giriş değeri

yukarıdaki tanımları şu şekilde tasvir edebiliriz:

Yukarıdaki çift çizgi ile gösterilen nöron’a giriş olarak gelen 3 farklı nöron çıktısı bulunmaktadır. Her nöronun çıktısı ayrı bir x değeri ile gösterilmiştir. Ayrıca bu çıktı değerleri nöronları birbirine bağlayan sinapsisler üzerinde birer ağırlık kazanarak bahsi geçen nöronumuza ulaşmaktadır. Bu durumda bir nöron girdisini xw çarpımı olarak göstermek mümkündür. Yukarıdaki örnek için işaretli olan (çift çizgi ile gösterilen) nöronumuzun 3 girdisi olduğu için k=3 olarak düşünülür.

Yukarıdaki bu tanım ışığında bir nöronun girişi:

u=∑wkxk

olarak tanımlanabilir. Bu tanıma göre giriş değeri nöronun bağlı olduğu nöronlardaki çıkış değerlerinin sinapsislerdeki ağırlıklar ile çarpımının toplamıdır.

Bir nöronun hareketlenip hareketlenmemesi ise bu nöronda bulunan eşik değerine (treshold).

Örneğin bir nöronun giriş değeri 10 ile 20 arasında ise hareketlenecek olsun. (Buna göre sinir hücremizin alt eşik (thrashold) değeri 10, üst eşik değeri 20 olup bu değerlerin ötesindeki değerlere sinir hücremiz duyarsızdır diyebiliriz). Bu durumu basit bir JAVA fonksiyonu ile şu şekilde tanımlayabiliriz:

boolean esikDeger(double giris)
{
   if( (giris >= 10) && (giris <= 20) )
      return true;
   else
      return false;
}

yukarıdaki kod örneğinden de görüleceği üzere giriş değeri 10 ve 20 arasında olduğunda fonksiyon true döndürürken bunun dışındaki değerler için false dönmektedir.

Bu hareket fonksiyonları çok çeşitli olabilmektedir. Örneğin yukarıda basit bir aralık kontrolü yapılan eşik için örneğin hiperbolik tanjant fonksiyonu da kullanılabilir.

Yukarıda verilen bu giriş değeri için aşağıdaki JAVA kodu yazılabilir:

public double tanh (double u)
{
   double a = Math.exp( u );
   double b = Math.exp( -u );
   return ((a-b)/(a+b));
}

Yukarıda verilen hiperbolik tanjant fonksiyonu aşağıdaki şekilde bir eşik oluşturmaktadır:


Görüleceği üzere bu eşik fonksiyonunda 0’ın üzerinde ve altında belirli bir sayı kümesi kabul edilmekte olup bunun dışındaki değerler kabul edilmemektedir.

Bu konuda daha detaylı bilgi için Eşik Fonkisyonları (Treshold Functions) konusunu okuyabilirsiniz.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir