21 Haziran 2018 Perşembe

YAPAY SİNİR AĞLARI HAKKINDA TEMEL BİLGİLER

DOĞAL SİNİR AĞI
Doğal bir sinir ağı, nöronlar arası bağlantılardan müteşekkildir. Bir insanın beyninde yaklaşık 86 milyar, bir şempanzede yaklaşık 28 milyar, bal arasında 960 bin nöron vardır. 1 milimetre uzunluğunda ve 65 mikrometre kalınlığında bir canlı olan iplik kurdunda ise 320 adet nöron vardır.. 

Tipik bir nöronun yapısı şekildeki gibidir.


Axon terminalleri başka nöronların dendritlerine bağlıdır. Bağlantı noktalarına sinaps, bağlantıların tamamına ise sinaptik bağlantı denir. Sinaptik bir bağlantı yapısı aşağıdaki şekildeki gibidir.
 

 
Akson ve dendritler arasında elektrokimyasal etkileşim vardır. İyon seviyelerindeki değişim belirli bir eşik değerini aştığında bir taraftan diğerine elektron akışı gerçekleşir. Elektronlar yani elektrik akımı ise hareketlerimizi, düşüncelerimizi ve tüm eylemlerimizi yaratır. Kolumuzu kaldırırken elektronlar kas hücrelerinin kasılmasını sağlar, hayal kurarken bazı nöron gruplarından başka gruplara akışlar gerçekleşir, hormanların salgılanması sağlanır vesaire.

Bilim insanları, nöronların yukarıda özetlediğimiz yapılarını gözlemlediklerinde bunun matematiksel olarak modellenebileceğini düşündüler. Bir sistem matematiksel olarak modellendikten sonra farklı yapay yapılarda taklit edilebilir. Yapay sinir ağlarının temeli bu şekilde atılmıştır. 


Yukarıdaki matematiksel model şunu ifade eder; inputlardan (dendritlerden) alınan bilgi W denilen bazı ağırlık oranlarıyla çarpılır (dendrit kanallarındaki kimyasal seviyeler), toplanır (nöron gövdesine girer), sonra f denilen bir aktivasyon fonksiyonuna girer (aksonun kimyasal yapısı), sonrası ise çıkış. Doğal yapıda akson çıkışında hangi miktarda elektron üretileceği bizim bu modelimizde çıkış kavramına denk geliyor.

Şimdi biz aklımızın ürünü yani doğal zeka ürünü olan bir problemi, yukarıdaki gibi modellediğimiz bir yapay sinir ağına çözdüreceğiz. 

XOR MANTIK KAPISININ YAPAY SİNİR AĞI İLE GERÇEKLEŞTİRİLMESİ
 
XOR mantık kapısı için giriş (x1,x2) ve çıkış (y) bağlantıları şu şekildedir;
 
 
İki giriş ve bir çıkışa sahip bir yapay sinir ağı tasarlamalıyız. Mesela şöyle bir şey;
 
 
Burada X1, X2 giriş, A,B,C ara katman (buna gizli de derler) ve Ç çıkış nöronlarıdır. w1-w9 ise ağırlık çarpanlarıdır. Bir yapay sinir ağında girişler ve ağırlık çarpanları çarpılıp toplanarak çıkış değerleri oluşturulur. Yapay sinir ağının başka bir numarası yoktur. Keza beynin temel çalışma yapısının da bundan çok bir farkı yoktur. Fakat bu yapı binlerce ve milyonlarca elemandan oluştuğunda hayran kalınacak güzellikler yaratmaktadır.

Temel amacımız Öyle matematiksel çarpanlar bulacağız ki girişe uygulanan her bir “XOR giriş” değeri için sistem uygun “XOR çıkış” değerini verecek.

İlk aşamada ağırlık çarpanlarını rastgele alıyoruz çünkü ne oldularını bilmiyoruz. Amacımız bunların değerlerini bulmak olacaktır.
 
 
x1*w1 değeri A nöronuna girmektedir, aynı zamanda x2*w2 değeri de A nöronuna girmektedir. Yani giriş ile ağırlık çarpımı ilgili nöronun girdisidir. Örneğin 1. giriş değerimize göre A nöronu;

A = x1*w1 + x2*w2 = 0 * 0.1 + 0 * 0.2 = 0 ‘dır.

X1, X2 haricindeki her bir nöronun bir aktivasyon fonksiyonu vardır. Giriş değeri bu aktivasyon fonksiyonunun girdisidir, fonksiyonun çıktısı ise nöronun çıkışına yansır. Farklı aktivasyon fonksiyonları kullanılmaktadır. En yaygın olanlarından biri sigmoid fonksiyonudur. 

sigmoid = 1 / (1+e^(-x)) fonksiyonudur ve eğrisi aşağıdaki gibidir.
 

 
şimdi her nöronun 1. giriş değeri için yani (x1,x2) = (0,0) için ürettiği çıkış değerini görelim.
 
 
çıkış nöronu olan Ç için giriş değeri;
Ç-giriş = sigmoid(A)*w7 + sigmoid(B)*w8 + sigmoid(C)*w9
= 0.5*0.7 + 0.5*0.8 + 0.5*0.9
= 1.2
 
Ç nöronunun çıkışı giriş değerinin sigmoid değeri olduğuna göre
Çıkış = sigmoid(Ç) = 0.7685248 

Şimdiye değin yaptıklarımızı özetlersek giriş değeri (x1,x2) = (0,0) için ve rastgele belirlediğimiz w1-9 ağırlık değerlerine göre 0.7685248 çıkış değeri bulduk. Benzer şekilde, her giriş çifti için bulduğumuz çıkış değerlerini ve bulduklarımız ile olması gereken değerler arasındaki farkları yani hataları yazalım; 
 
 
Çıkıştaki hatayı minimize edecek yeni w değerleri bulmalıyız ama nasıl bulacağız? Bu iş için farklı algoritmalar kullanılabilir. Bizim kullanacağımız yöntemde aktivasyon fonksiyonunun türevini alacağız. Türev, değişim hızı ve yönünü bize verecektir. Çıkış hatası ile bu türevi çarparak w ağırlıklarını hangi yönde ve ne oranda artırıp azaltabileceğimizi buluruz. Bu işlemi defalarca yaparak en uygun ağırlık değerlerini buluruz. Bu yönteme backpropagation denir. Türkçesi geri yayılma. Çıkış nöronu için bunun nasıl hesaplanacağını adım adım görelim; 
 
Çıkış nöronunun giriş değeri = w7*Aout + w8*Bout + w9*Cout
Çıkış nöronunun çıkış değeri = sigmoid(Çıkış nöronunun giriş değeri)
Hata = Çıkış nöronunun çıkış değeri - istenilen çıkış değeri
Delta çıkış = SigmoidinTürevi(Çıkış nöronunun giriş değeri) * hata
Buna "global hata" da diyebiliriz.

Hataya göre yeni ağırlık çarpanları bulmalıyız. Örneğin;
Yeni w7 değeri = Eski w7 değeri + Delta çıkış * Aout

w1-w6 ağırlıkları aynı mantıkla hesaplanabilir;
Yeni w1 değeri = Eski w1 değeri + x1*(SigmoidinTürevi(Ain)*Delta çıkış*eski w7)

Bu şekilde w1-w9 yeni ağırlık çarpanlarını buluruz. Her bir w için ilgili giriş çıkış nöronlarıyla aynı hesaplamaları yaparız. Yeni çarpanları sisteme uygularsak, çıkış değerlerinin bizim istediğimiz çıkışlara yaklaştığını görürüz. 
 

Gördüğünüz gibi her defasında çıkışlar olması gerektiği değere doğru evriliyor.
Bu işlemi 10000 defa yaparsak..

 10 bin düzeltme sonrası değerler olması gereken değerleri bir hayli yakınsamış görünüyor. 10bin düzeltme sonra mesela (x1,x2) = (1,1) değerleri için hesaplanan w1-w9 ağırlık çarpanlarımız ise şunlar; 


(1.251617 1.351617 0.7538233 0.8538233 7.1306686 7.2306686 -2.1630681 -2.2256228 -1.628696 )

Başlangıçta ağırlık çarpanlarını rastgele w = [0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9] yazmıştık. 10 bin defa hata düzeltmesi yaptık yeni ağırlık çarpanları bulduk. Son bulduğumuz ağırlık çarpanlarını aşağıdaki şekilde görülen sistemimizde yerine koyarsak (1,1) giriş değerlerine karşın 0.0040834 çıkış değerini verir. 0 olmalıydı fakat çok küçük bir hata payıyla bu değere yaklaştık. 

İşte yapay sinir ağlarının en temel işleyişi böyledir..

Hiç yorum yok:

Yorum Gönder

UNDERSTANDING ARTIFICIAL NEURAL NETWORKS

NATURAL NEURAL NETWORKS A natural neural network is composed of connections between neurons. The human brain has approximately 86 billion ne...