Yapay Sinir Ağlarına Giriş

Caner Erden
6 min readApr 15, 2020

Bu yazıda yapay sinir ağlarının temel kavramları giriş seviyesinde gösterilmeye çalışılacaktır.

Öncelikle tablodaki gibi bir veri setimiz olduğunu düşünelim. Bu veri setinde 3 adet girdi değişkeni bir adet çıktı değişkenine dönüşüyor. YSAda X’ler arasında nasıl bir işlem gerçekleşirse sonuçta çıkan Y’ler gerçeğe daha yakın olur sorusu cevaplanır. Genel olarak girdiler ve girdilerin arasında yapılan bir takım matematiksel işlemler ardından çıktı ya da çıktılar hesaplanır. Bu veri setindeki her bir satırı ya da veriyi sisteme verdiğimizde alacağımız değer var olan Y değerlerine nasıl benzetilebilir şimdi beraber bakalım.

Bir defa veri setine dikkatli bakarsak Y=1 değerinin döndüğü durumlarda X değerlerinden en az 1 tanesinin 1 olduğunu görülür. Bunun gibi kuralları bizim kurabildiğimiz gibi acaba makine de bu kuralları kurabilir mi diye inceleyelim.

YSA Modelleri

YSA modelleri insan sinir hücrelerinin yapısı taklit edilerek ortaya çıkmıştır. Biraz biyoloji bilgilerimizi tazeleyecek olursak. Sinir hücreleri ya da başka ifade ile nöronların gövdesinde aksonlar bulunur. Aksonlar nöronlar arasındaki bilginin aktarılmasını sağlar. 2 nöron birbirlerine Dendritler ile bağlanır. Dentrit ile akson arasındaki bağlantı noktasında sinapslar vardır. Sinir bilimciler insandaki öğrenmenin bu sinapslardaki enerji değişimlerinden kaynaklandığını keşfetmişler. İnsan vücudunda bu nöronlardan milyarlarca var ve sürekli sinapslar arasında enerji değişimleri oluyor ve öğrenme olayı sinir hücrelerinde gerçekleşiyor.

Yapay sinir hücresine bakacak olursak basit bir perceptron yani girdi ve çıktıdan oluşan bir sinir hücresi şekildeki gibi gösterilebilir. YSA’da az önce bahsettiğmiz sinapslar YSA’da ağırlıklar olarak isimlendirilir ve öğrenmeden kasıt bu ağırlıkların ve parametrelerin belirlenmesidir. Girdi katmanındaki her bir sinir hücresine nöron ya da birim(unit) denir. Girdi katmanında bulunan X değerleri bir ağırlık alarak Y değişkenine katkı sunar. Girdi katmanında özellik sayısı kadar birim ya da nöron bulunur. Çıktı katmanında ise hedef değerimizin alacağı değerler hesaplanır. Az önceki örneğimizde çıktı değişkenlerimiz sadece 1 ve -1 değeri aldığı için aşağıdaki gibi bir fonksiyon belirlememiz gerekir. Bu fonksiyon çıkan değer eğer negatif ise -1, pozitif ise 1 değerini dönderir. Çıktı denklemini yazacak olursak, her bir girdi değerimizi bir ağırlıkla çarpıp çıktı katmanındaki bias(ek bir girdi) değerinden çıkararak sonuca ulaşmış oluruz.

Örneğin x_1 = 1, x2=1, x3=0 olursa ve tüm ağırlık değerleri 0,3 ek girdi bias değerimiz 0,4 olursa y değerimiz 1*0,3 + 1*0,3 +0*0,3–0,4 = 0,2 yani pozitif çıkar. Fonksiyona bu değeri verdiğimizde çıktımız +1 olarak verilecek. Burada kullanılan fonksiyona işaret fonksiyonu diyebiliriz. Çünkü çıktının işaretini belirtiyor. Aslında başka bir ifade ile aktivasyon fonksiyonu da denilebilir. Yani sistemin aktive edilmesini sağlayan bir fonksiyon görevini ifa etmekte.

Öğrenme işlemi bahsettiğimiz bu ağırlıkların ve bias değerlerinin değiştirilmesi ile gerçekleştirilir ve öğrenmenin iyi bir hale gelmesine kadar devam eder. Peki ağırlıklar nasıl değişiyor? Bunun için şekildeki formülü inceleyelim.

Yeni ağırlık değeri bir önceki ağırlık değeri ile öğrenme oranının öğrenme kalitesi ile çarpılması ile elde edilen değerle toplanarak bulunuyor. Y-y_şapka değeri öğrenmenin hatasını gösteriyor. Bu değer ne kadar düşük olursa ağırlık değeri bir önceki iterasyondaki ağırlık değerine o kadar yakın olur. Ne kadar büyük olursa o kadar uzak olur. Peki ya 0 olursa? İşte o zaman da bir önceki ağırlık değeri değişmeden kalır. Öğrenme katsayısı da sabit bir parametre olarak belirlenir. 0 ile 1 arasında bir değer alır. Her bir iterasyondaki ayarlamaları bu parametre ile kontrol ederiz. Eğer öğrenme oranı 1'e yakın olursa yeni ağırlık değeri mevcut iterasyondaki ayarlamaya daha yakın olmaya çalışır. Eğer 0a yakın olursa yine ağırlık değeri bir önceki iterasyondaki değere daha yakın değer alma hassasiyetindedir deriz.

Aktivasyon Fonksiyonları

Aktivasyon fonksiyonları öğrenme aşamasında çok önemli bir yer tutar. Eğer bu fonksiyonlar olmasaydı ağırlıklar ile çarptığımız ve bias ile çıkardığımız değeri çıktı olarak almamız gerekirdi. Bu değer de — sonsuz ile + sonsuz arasında değişir. Ancak bizim çıktı değerimiz örneğimizde ya -1 ya da +1. Bu nedenle bir aktivasyon fonksiyonuna ihtiyaç duyuyoruz. Bu örnekte kullandığımız aktivasyon fonksiyonu işaret ya da sign olarak geçen fonksiyon, basitçe negatif değerlere -1 pozitif değerlere +1 değeri dönderir. Eşik değeri de 0 noktasıdır. Tabi bu işaret fonksiyonu 2 değerin olduğu durumlarda işe yarayabilir ancak 2'den fazla sınıfın olduğu durumlarda bu fonksiyon işe yaramaz. Diyelim ki üçüncü sınıfımız da +2 olsun. Bu durumda aktivasyon fonksiyonu pozitif değerde +1'i mi yoksa +2'yi mi aktive edeceğini bilemez. Peki bu durumla nasıl baş edeceğiz? Tabii ki başka bir aktivasyon fonksiyonu kullanarak.

Bakın görselde 4 adet aktivasyon fonksiyonu var. Birincisi lineer fonksiyon. Bu fonksiyon ağırlıklarla toplanmış değeri alarak belirli bir katsayıyla çarpar ve dönderir. Yani f(x) = ax + b gibi bir fonksiyondur. Bu fonksiyonu kullanarak yine bir eşik değeri belirleriz ve eşik değerinin üstüne ve altına farklı çıktı sınıflarını atayabiliriz.

Sol taraftaki 2. grafikte de sigmoid fonksiyonu var. Bu fonksiyon da sürekli bir fonksiyondur. — sonsuz ile + sonsuz arasındaki değerleri 0–1 aralığına getirir. Modelimize bağlı olarak kullanabiliriz ki yaygın bir şekilde bu fonksiyon aktivasyon fonksiyonu olarak kullanılır.

Diğer grafikte tanh fonksiyonu var bu da sigmoid fonksiyonuna benzer ancak farklı olarak verileri -1 +1 aralığında dönderir.

Bunlar gibi başka aktivasyon fonksiyonları da var. Aktivasyon fonksiyonları geri beslemede türev işlemleri ile hesaplamalar yapılacağı için türevi kolay alınabilen fonksiyonlar arasından seçilir. Daha fazla aktivasyon fonksiyonu örneği verebilirdik örneğin Relu aktivasyon fonksiyonu var özellikle derin öğrenmede çokça kullanılıyor. Daha detaylı bilgi isteyen bu konuda araştırma yapabilir deyip aktivasyon fonksiyonlarını şimdilik burada bırakıyoruz.

Çok Katmanlı YSA

Bir önceki sinir ağı yapısında perceptronu gördük. Sadece bir çıktı ve bir girdi katmanlarından oluşuyordu. Ancak YSA modelleri bu basit yapıdan daha karmaşık şekilde çalışır. Bu karmaşıklık araya gizli katmanlar eklenerek artırılır. Şekilde çok katmanlı bir YSA yapısını görüyorsunuz. İleri beslemeli bir modelde bilgiler önce girdi katmanına oradan gizli katmana en son da çıktı katmanına geçer. İleri ve geri beslemeli bir modelde çıktı katmanından sonra tekrar girdi katmanına doğru geri besleme işlemi gerçekleştirilir. Gizli katmanda da aktivasyon fonksiyonu kullanılır. Az önce bahsettiğimiz aktivasyon fonksiyonlardan birisini kullanarak gizli katmandaki birimlerin aktive edilmesini veya edilmemesini sağlayabiliriz. İşte bu çok katmanlı yapı YSA’nın lineer olmayan ilişkileri de ortaya çıkarmasını sağlamaktadır. Yani diyebiliriz ki YSA aslında gücünü bu katmanların fazlalığından almaktadır. Derin öğrenme konusunu incelerseniz buradaki yapının benzerinin orada da geçerli olduğunu görürsünüz. İşte gizli katman sayısı derin öğrenmede birden fazla olur. Ayrıca nöronların öğrenme şekillerinde de farklı davranışlar söz konusu olabilir. Derin öğrenme de YSA’nın bir alt konusu ancak biraz ileri seviyesi diyebiliriz diyelim şimdilik derin öğrenme ile ilgili.

Kaynaklar

--

--

Caner Erden

Meta-heuristics, optimization algorithms, discrete event simulations, machine learning, statistics