Yapay Sinir Ağları ile ilgili Temel Bilgiler
Herkese merhabalar
Bugün tamamen farklı bir alan ile ilgili bir yazı derlemek istedim. Aktif olarak Backend ve Frontend teknolojileri üzerine yazılar okuyorum, eğitimler dinliyorum ve bunlardan yansıyanları bloğumda paylaşmaya çalışıyorum. Bugün biraz üniversite yıllarıma dönmek istedim. Farkettim ki hem matematiksel işlemlere olan özlemim artmış, hem de profesyonel olarak ilgilenmediğim ama merak ettiğim bir alan ile ilgili araştırma yapmayı özlemişim.
O halde haydi başlayalım 🙂
Yapay sinir ağlarının biyolojik temellerine; canlıların davranışlarının incelenmesi ve bu davranışların; matematiksel olarak modellenip, biyolojik duruma benzer modellerin üretilmesi durumu sibernetik olarak adlandırılmaktadır. Aslında varılmak istenen nokta kendi kendine eğitilebilen sinir ağları ile insan beyninin uygulama yapısının modellemeye çalışmaktır. Bir işi bilgisayarda gerçekleyebilmek için algoritmasını bilmek gerekir. Bazı problemleri çözmek için bilinen bir algoritma olmayabilir. İstenen veya istenmeyen durumlarda değişiklik gösterebilir. Veya kullanıcıya göre değişkenlik gösteren uygulamalar; sabit algoritmaya sahip olmayabilir. Bilgisayarların bir iş için kendi başına algoritmasını oluşturmaları istenebilir. Bu gibi durumlara karşın yapay sinir ağları insanların yardımına koşar. Normal bir sinir ağında bir akson bulunur ve bu akson boyunca sinir iletimi gerçekleştirilir. Çıkış terminallerine dentritlerin uçlarından elde edilen sensor verileri, çekirdekte ağırlandırılarak bir başka sinir hücresine bağlanır. Bu şekilde sinirler arası iletişim oluşmuş olur. Matematiksel olarak modellendiğinde; dentrit denilen yollar boyunca ağırlıklar mevcuttur. Bir giriş, bir de çıkış değeri mevcuttur. Giriş değeri ve dentritteki ağırlık ile çarpıldıktan sonra sinir hücresine iletilir. Ve sinir hücresinde bu çarpma işlemi gerçekleştirilir. Tüm dentritlerden gelen dentrit ve ağırlıklar çarpılıp toplanır; en sonda bu hesaplamalar bayes ile toplanır. Aktivasyon fonksiyonu ardından çıkışa aktarılır. Bu çıkış nihai çıkış olabilir veya başka bir hücrenin girişi olabilir. Matematiksel olarak düşünüldüğünde ağırlıklar ve giriş çarpılıp ; bayes eklenir.


Her bir sinir hücresi ; birbirlerine seri ve parelel şekilde bağlanır.Giriş katmanı, gizli katmanlar ve çıkış katmanı olmak üzere üç kısımda incelenebilir. Tek katmanlı ve çok katmanlı sinir ağı olmak üzere iki grupta incelenir.
Tek Katmanlı Sinir Ağları
Tek katmanlı sinir ağları en basit yapay sinir ağı türüdür. Mantık devrelerinde kullanılan kapılar gibidir. İki girdisi bir de çıktısı olur. Girişler sinapslar boyunca uzanır ve ağırlıklarla çarpılarak eşik değerinden geçirilir. Vladimir Vapnik 1995’ta sınıf dağılımlarını kestirmenin; sınırları kestirmekten daha zor olduğunu açıklamıştır.

Yapay bir problem çözmek için; daha zor bir problem çözmek gereksizdir. İki sınıfı ayıran bir doğru tek katmanlı sinir ağı ile çözülebilir. Birden fazla sınıf varsa birden çok doğruyu ayrı ayrı birer katmanlı sinir ağlarını birleştirilerek elde edilmesi mümkündür. Ağırlığı büyük olan girdi önemli bir girdi demektir. Girişten gelen önemli özellikleri taşıyor. anlamına gelir. Doğrusal olarak ayrılabilen iki sınıf için bir ayırtaç tanımlanması yeterlidir.


Çok Katmanlı Sinir Ağları
Amaç beyindeki sinir ağlarının modellenmesini oluşturmaktır. Ve problemlere insansı çözümler üretmektir. Eğer beynin bu işlevleri nasıl gerçekleştirdiğini anlaşılırsa ; algoritmalara döküp bunlar hayata geçirilebilir. İnsan beyni bilgisayardan oldukça farklıdır. Beyin sinir hücresi denen 10 üzeri 11 gibi işlemciden oluşur. Bu işlemci hücrelerin bilgisayarların işlemcilerine gore daha basit ve hızlı olduğu düşünülmektedir. Beyindeki sinir hücresinin ortalama olarak 10 üzeri 4 farklı sinir hücresine bağlantısı vardır. İşlemler ağ üzerindeki hücrelerde gerçekleştirilmektedir. Çok katmanlı doğrusal olmayan yani nonlinear regresyon gerçeklemelerde kullanılabilir.

Gözetimli Öğrenme
Eğiticili öğrenme sınıflandırma yöntemleri’ne örnek olarak ; Destek Vektör Makineleri ( SVM ), Ayrıştırma Analizi ( DA ) , Naive Bayes (NB) ve En Yakın Komşu ( Nearest Neighbor ) yöntemleri örnek verilebilir. En Yakın Komşu ( NN) algoritması; sınıf sayısı ve örnek gruptaki her örneğin hangi sınıfa ait olduğunun bilindiği durumlarda tercih edilir. Eğitilen sistem ortam hakkındaki bilgiye sahip değildir. Sistem aslında kendine geri dönülen hataya göre ortamdan aldığı bilgiyle eğitilmiş olmaktadır.

Gözetimsiz Öğrenme
Kümeleme yöntemi olarak düşünülebilir. Hangi nesnenin hangi sınıfa ait oluğu ve grup sayısı belli değilse eğiticisiz öğrenme kullanılmaktadır. Eğitilen sistem tamamen ortamdaki ödül ceza ağırlığına göre bir atama gerçekleştirir. Ve ortamın davranışına göre hareket eder. Herhangi bir etiket kavramını kullanmaz. Bu öğrenmeye pekiştirmeli öğrenme de diyebiliriz.

Yapay Sinir Ağları Kullanım Alanları
- Hesaplamalı Finans (Kredi Skorlama, Algoritmik Ticaret )
- Görüntü İşleme ve Bilgisayarla görü ( Yüz Tanıma, Hareket Tanıma, Nesne Tanıma)
- Hesaplamalı Biyoloji ( Tümer Bulma, İlaç Keşfi, DNA Dizilimi. )
- Enerji Üretimi ( Fiyat ve Yük Tahmini )
- Otomotiv, havacılık ve üretim (Ön görücü bakım )
- Doğal Dil İşleme (Duygu Analizi )

Yapay Sinir Ağlarında Öğrenme Nasıl Gerçekleşir ?
Elde edilen Z değerinin düğümde seçilmiş olan bir aktivasyon fonksiyonuna tabi tutulması gerekmektedir.

Her bir nöron için ayrı ayrı hesap yapılmaktadır. Hiçbir zaman girişler bir katman sayılmaz. Gizli katman ve çıkışlardan oluşur. Birinci ve ikinci katman için ayrı ayrı ağırlıklar ve bayes değerleri toplanarak hesaplanır. Ve bu hesaplamaların sonucu bir aktivasyon değerine tabi tutulur.

Geriye yayılım yapılırken ; türev alınmaktadır. Bu türevleme işlemi ile ; yeni ağırlıklar beslenir. Ve ardından yeni ağırlıklarla tekrar ileri yönlü olarak işlem yapılır. Her bir nöron girişe bağlı olarak ağırlıklar ve bias değeri içerir. Birinci katman için olan ağırlıklar nöron sayısı vektör uzunluğunu temsil etmektedir. İkinci değer ise bir önceki katmandan gelen değerleri yansıtmaktadır.
Matris aktivasyon sonucunda nöronları bir sonraki katmana nasıl ileteceği gösterilmektedir. İleri yönde beslenirken bu işlem gerçekleştirilir.

Neden Türevlenebilir Fonksiyonlar Kullanılmalıdır ?
Klasik yöntemlerde Sigmoid fonksiyonu kullanılmaktadır. Ancak yerini farklı fonksiyonlara bırakmıştır. Notasyon olarak G harfi kullanılır. Sigmoid doğrusal olmayan bir fonksiyon olmalıdır. Sigmoid 0–1 arasında üstel değişen bir yapıya sahiptir. Hiperbolik Tanjant fonksiyonu ise bunun -1 ile 1 arasında kaydırılmış halidir. Aktivasyon fonksiyonu katmanlarda kullanılır ve türevlenebilir olması gerekmektedir. Çünkü geriye yayılımda ağırlıklar güncellenirken, modellerin performansı etkilenebilir. Geri yayılımda türevlenebilir olmaması takdirinde bir besleme yapamayacaktır. Hiperbolik Tanjant’ın ortalaması sıfır olduğu için daha iyi performans sergilemektedir. Ara katmanlarda hiperbolik tanjant avantajlı bile olsa çıkış katmanında Sigmoid kullanmak gerekli olabilir. Sigmoid 0–1 arasında bir değer üretileceği için istenen bir durumdur. Ancak bu alanda Sigmoid seçildiği için hep bu seçileceği anlamına gelinmez. Son zamanlarda kullanılan bir diğer aktivasyon yöntemi ise RELU Rectified Linear Unit yöntemidir. Bu aktivasyon fonksiyonu Z’nin sıfırdan küçük değerlerinde tamamen sıfır alınmaktadır. Sıfırdan büyükse artan lineer değerler alınmaktadır. Yani sıfırdan büyük ise aslında türevlenebilir anlamına gelmektedir. Ama sıfırdan küçük veya eşit ise türevlenmez, bu alanda hareket yok demektir. Ve bu nedenle de öğrenme gerçekleşmez. Z’nin sıfırlanabilir değerlerinde de türevin sonucu olduğu ve öğrenmenin gerçekleşmesi durumu Leaky RELU örneğindeki gibidir. Ancak sürekli türevlenebilir olması avantajlı bir yöntem değildir. İşlem yükü anlamına gelmektedir. Son zamanlarda en çok kullanılan RELU yöntemidir. Hiperbolik Tanjant da kullanılmaktadır ancak Sigmoid neredeyse hiç kullanılmamaktadır. Leaky RELU ise işlem yükü önemsiz ise kullanım olarak seçebileceğiniz bir aktivasyon fonksiyonu yöntemi olabilir. Aktivasyon fonksiyonu seçimlerinde matematiksel gerçekler göz ardı edilmemelidir.

Geriye yayılım algoritması ile ilgili bilinmesi gerekenler
Kaç nöronlu veya kaç katmanlı sinir ağı çıkarsa çıksın çözümleme yapılabilmesi sağlanan bir algoritmadır. Elimizde bir F(X) fonksiyonu ‘nda X Y ve Z girişlerdir. X+Y ise düğümdür. (X+Y).Z ise yeni bir düğümdür.

Yukarıda ileriye doğru giderken herhangi bir sorun yoktur. Ancak geriye doğru gitmek istediğimizde, türev alınması gerekir. Bu alanda türevin zincir kuralı birçok işlemde kullanılmaktadır

Geriye yayılımda her bir hücrede genel resme bakılacak olursa ; geriye yayılım yapıldığında türev işlemi ve bu türev işleminde zincir kuralı kullanılmaktadır. İleri yönde ve geriye dönme algoritmaları sürekli çalışır, parametreler güncellenir. Fonksiyon minimize edilene kadar bu işlem devam eder.

Yukarıda deki fonksiyon ağırlık ve girişlerden oluşmuş bir fonksiyondur. W0 X0, W1 X1 noktalarında hem ağırlık hem de giriş değeri varken ; W2 de ise sadece ağırlık değeri bulunmaktadır, giriş değeri bulunmamaktadır. Bu alanda ileriye doğru gidildiğinde normal işlem yapılırken; geriye doğru dönüldüğünde ise türev işlemi yapılması gerekir.

Bir sonraki yazımda görüşmek üzere..
Kaynakça
Udemy ( Deep Learning A-Z Python ile Derin Öğrenme ), Merve Ayyüce Kızrak