Aktivasyon Fonksiyonları

Aktivasyon fonksiyonları nöronların toplam fonksiyonunda üretilen çıktıların nasıl bir değişimden geçmesi gerektiğini belirler. Genellikle yapay sinir ağı (YSA) modellerimizde kullandığımız aktivasyon fonksiyonları lineer(doğrusal) olamayan fonksiyonlardır. Doğrusal olmayan aktivasyon fonksiyonları modellerimizin karmaşıklık seviyesini artırırlar. Bu sayede YSA modellerimiz veri setleri üzerindeki karmaşık yapıları daha iyi bir şekilde öğrenerek daha başarılı sonuçlar verir. Karmaşık gerçek hayat problemlerine daha etkili çözümler bulur.

Aktivasyon fonksiyonlarının bir diğer görevi ise nöronların çıktılarını belirli değerler arasında sıkıştırır. Fonksiyondan fonksiyona değişmekle birlikte bu değer [-1,1], [0,1] gibi aralıklardır. Bu değerler nöronların modelden elde ettiğimiz çıktıya etkisini gösterir. 0 veya 0’ a yakın değer veren nöronlar tahmin değerine pek etki etmezken, 1 veya -1’ e yakın değer verenlerin tahmine katkısı fazladır.

Aktivasyon Fonksiyonlarında Olması Gereken Özellikler

İyi bir aktivasyon fonksiyonun sahip olması gereken bazı özellikler vardır.

1 -) Doğrusal Olmama: Önceki paragraflarda bahsettiğimiz gibi aktivasyon fonksiyonları daha karmaşık problemlere çözüm bulabilmek için doğrusal olmamalıdır.

2 -) Türevlenebilirlik: Aktivasyon fonksiyonları sürekli olmalı ve bununla birlikte birinci dereceden türevi alınabilmelidir. Bir sonraki yazılarımızda anlatacağımız optimizasyon tekniklerinde türevin gerekliliğinden daha detaylı bir şekilde bahsedeceğiz.

3 -) Aralık: Daha efektif bir model eğitimi için aktivasyon fonksiyonlarının değerinin sonsuza gitmesini değil, belirli aralıklar içinde olmasını isteriz.

4 -) Monotonluk: Aktivasyon fonksiyonlarının monoton olması minimum veya maksimum noktalarının olacağı anlamına gelir ve bu da öğrenmenin olacağının göstergesidir.

5 -) Orijine Göre Yakınsak: Aktivasyon fonksiyonları orijine göre yakınsak olduğunda YSA modellerinin başlangıç ağırlıkları rastgele küçük değerler olarak atandığında öğrenme gerçekleşir. Aksi takdirde daha farklı yöntemler ile modelin ağırlıkları atanmalıdır.

Aktivasyon Fonksiyonu Çeşitleri

Daha önceki yazımızda bahsettiğimiz gibi yapay sinir ağları girdi katmanı, gizli katmanlar ve çıktı katmanları olmak üzere üç çeşit katmandan oluşur. Girdi katmanı direkt olarak veri setinden aldığımız eğitim değerlerini gizli katmanlara aktardığı için bu katmanda aktivasyon fonksiyonları kullanılmaz. Aktivasyon fonksiyonları gizli katmanlarda ve çıktı katmanında kullanılır. Genellikle gizli katmanlar aynı aktivasyon fonksiyonunu kullanır. Çıktı katmanı için aktivasyon fonksiyonunu belirlerken yapılan tahmin çeşidi önemlidir. Öncelikle çıktı katmanı için aktivasyon fonksiyonlarını inceleyelim.

Çıktı Katmanlarında Kullanılan Aktivasyon Fonksiyonları

Yapay sinir ağlarında regresyon, sınıflandırma ve çoklu sınıflandırma olacak şekilde üç çeşit tahmin tipi bulunur. Regresyon tahminini neden sonuç ilişkisine benzetebiliriz. Örnek olarak herhangi bir evin özelliklerini YSA modeline verip çıktı olarak evin tahmini fiyatını elde edebiliriz. Sınıflandırmaya örnek olarak bir kedi resminin piksel değerlerini YSA modeline verip çıktı olarak ise bu resimde kedinin olup olmadığının olasılık değerini alabiliriz. Çoklu sınıflandırmada ise bir resimde kedi ve köpeğin ayrı ayrı bulunma olasılıklarının çıktısını alabiliriz. Yapacağımız tahmine göre kullanacağımız aktivasyon fonksiyonumuzu seçeriz.

Lineer(Doğrusal) Fonksiyon

Regresyonlarda kullanılır. Doğrusal aktivasyon fonksiyonları girdi değerlerinin değiştirmeden çıktı olarak verir.

from matplotlib import pyplot
 
# doğrusal fonksiyon
def lineer(x):
	return x
 

girdiler = [x for x in range(-10, 10)]

ciktilar = [lineer(x) for x in girdiler]

pyplot.plot(girdiler, ciktilar)
pyplot.show()

Sigmoid Fonksiyonu

Tekli sınıflandırmalarda kullanılır. Gelen girdi değerini (0,1) aralığında sıkıştırır. Fonksiyonun grafiği ve formülü şekildeki gibidir.

Aktivasyon Fonksiyonları

Örnek olarak eğer kedi olan bir resmi YSA modeline verip çıktı olarak sigmoid fonksiyonunda 0.85 değerini alıyorsak, bu resimde kedi olma ihtimalini %85 olarak değerlendirebiliriz. Tam tersi kedi olmayan resmi modelimize verip çıktı olarak 0.05 alıyorsak, bu resimde kedi olmama ihtimalini %99.95 olarak veya resimde kedi olma ihtimalini %0.05 olarak düşünebiliriz.

from math import exp
from matplotlib import pyplot
 
# sigmoid fonksiyonu
def sigmoid(x):
	return 1.0 / (1.0 + exp(-x))
 
# girdiler
girdiler = [x for x in range(-10, 10)]
# ciktilar
ciktilar = [sigmoid(x) for x in girdiler]
# grafigi cizdir
pyplot.plot(girdiler, ciktilar)
pyplot.show()

Softmax Fonksiyonu

Çoklu sınıflandırmalarda kullanılır. Çıktı olarak vektör verir. Formülü şekildeki gibidir.

Aktivasyon Fonksiyonları

Çıktı vektörü her bir sınıfın olasılık değerinin tutar. Bu olasılık değerlerinin toplamı 1.0 eder. Örnek olarak 0’ dan 9’ a kadar olan sayıların resimlerini YSA modelimize verdiğimizde çıktı olarak [0.03, 0.07, 0.1, 0.04, 0.005, 0.001, 0.06, 0.67, 0.02, 0.004] vektörünü veriyor ise resimde %67 olasılığında 7 rakamı var diyebiliriz.


import numpy as np
 
# softmax fonksiyonu
def softmax(x):
	return np.exp(x) / np.exp(x).sum()
 
# girdiler
girdiler = [1.0, 3.0, 2.0]
# ciktilar
ciktilar = softmax(girdiler)
# olasilik degerlerini(ciktilari) bastir
print(ciktilar)
# olasiliklarin toplamini bastir
print(ciktilar.sum())

Gizli Katmanlarda Kullanılan Aktivasyon Fonksiyonları

Gizli katmanlarda en yaygın olarak kullanılan aktivasyon fonksiyonları ReLU, Sigmoid ve Tanh’ dir. Sigmoid fonksiyonundan çıktı katmanlarında kullanılan fonksiyonlarda bahsetmiştik. O zaman ReLU ve Tanh fonksiyonlarını inceleyebiliriz.

ReLU Fonksiyonu

Gizli katmanlarda en yaygın olarak kullanılan aktivasyon fonksiyonlarının başında gelir. Formülü ve grafiği aşağıda gösterildiği gibidir.

Aktivasyon Fonksiyonları

Gelen girdi değeri 0’ dan büyük ise aynen, değişmeden çıktı olarak verilir. Bir nevi doğrusal fonksiyon gibi çalışır. Eğer 0’ dan küçük eşit ise direkt 0 olarak çıkar.

from matplotlib import pyplot
 
# ReLU fonksiyonu
def ReLU(x):
	return max(0.0, x)
 
# girdiler
girdiler = [x for x in range(-10, 10)]
# ciktilar
ciktilar
 = [ReLU(x) for x in girdiler]
# grafigi cizdir
pyplot.plot(girdiler, ciktilar)
pyplot.show()

Tanh Fonksiyonu

Sigmoid fonksiyonuna çok benzerdir. Tek farkı sigmoid (0,1) arasında değer alırken, Tanh fonksiyonu (-1,1) arasında değer alır. Formülü ve grafiği şekildeki gibidir.

Aktivasyon Fonksiyonları

Yüksek girdi değerleri çıktı olarak 1’ e yakın değerler verirken, düşük girdi değerleri -1’ e yakın değerler verir.

Aktivasyon Fonksiyonları Nasıl Seçilir ?

Çıktı katmanlarında kullanacağımız fonksiyonu seçmek gizli katmana göre biraz daha kolay çünkü yapacağımız tahmine göre uygun aktivasyon fonksiyonumuzu kullanıyoruz. Gizli katmanlarda ise kullanacağımız fonksiyonu deneme yanılma yöntemi ile seçeriz. Modelimizi farklı aktivasyon fonksiyonlarını kullanarak eğitip en iyi performans aldığımız fonksiyon ile yolumuza devam edebiliriz.