Derin Sinir Ağları için Aktivasyon Fonksiyonları

Bir sinir ağındaki nöron, n sayıda girdi alan ve tek bir çıktı üreten temel hesaplama birimidir. Bir yapay nöron x girdilerin, w ağırlıkları toplamını hesaplar ve bias değeri ekleyerek aşağıdaki gibi bir y çıktısı üretir:

y=Aktivasyon(∑(w*x+b))

Aktivasyon fonksiyonu burada y değerini kontrol etmek için yani  bir nöronun aktif olup olmayacağına karar vermek için kullanılmaktadır. Aktivasyon fonksiyonları, bu yönüyle derin sinir ağları için önemli bir özelliktir. Yaygın olarak kullanılan aktivasyon fonksiyonları ve bu aktivasyon fonksiyonlarının Python uygulaması bu yazımızda sunulmuştur.

  1. Step Fonksiyonu: Bir eşik değeri alarak ikili bir sınıflandırma çıktısı (0 yada 1) üretir.
  2. Sigmoid Fonksiyonu: En yaygın kullanılan aktivasyon fonksiyonlarından birisidir, [0,1] aralığında çıktı üretir.
  3. Tanh Fonksiyonu: [-1,1] aralığında çıktı üreten doğrusal olmayan bir fonksiyondur.
  4. ReLU Fonksiyonu: Doğrultulmuş lineer birim (rectified linear unit- RELU) doğrusal olmayan bir fonksiyondur. ReLU fonksiyonu negatif girdiler için 0 değerini alırken, x pozitif girdiler için x değerini almaktadır.
  5. Softmax Fonksiyonu: Çoklu sınıflandırma problemleri için kullanılan bu fonksiyon, verilen her bir girdinin bir sınıfa ait olma olasılığını gösteren [0,1] arası çıktılar üretmektedir.
  6. Softplus Fonksiyonu: Sigmoid ve Tanh gibi geleneksel aktivasyon fonksiyonlarına alternatif olarak sunulan bu fonksiyon (0, +∞) aralığında türevlenebilir bir çıktı üretmektedir.
  7. ELU Fonksiyonu: Üstel lineer birim ( Exponential Linear Unit-ELU), negatif girdiler hariç ReLU ile benzerdir. Negatif girdilerde ise genellikle 1.0 alınan alfa parametresi almaktadır.
  8. PReLU Fonksiyonu: Parametrik ReLU olarak geçen bu aktivasyon fonksiyonu da negatif girdiler için extra alfa sabiti ile verilen girdinin çarpım sonucunu çıktı olarak üretmektedir.
  9. Swish Fonksiyonu:  Google araştırmacıları tarafından yeni keşfedilen bu fonksiyon girdiler ile sigmoid fonksiyonunun çarpımını çıktı olarak üretmektedir.

 

Şekil 1. Yaygın kullanılan aktivasyon fonksiyonları [1]

import math
import matplotlib.pyplot as plt
import numpy as np
import matplotlib
matplotlib.use('Agg')

#aktivasyon fonksiyonları, activation functions

def step(x):
    return np.array(x > 0, dtype=np.int)

def sigmoid(x):
    return 1 / (1 + np.exp(-x))

def relu(x):
    return np.maximum(0, x)

def softmax(x):
    return np.exp(x) / np.sum(np.exp(x))

def softplus(x):
    return np.log(1.0 + np.exp(x))

def tanh(x):
    return np.tanh(x)

def swish(x):
    #return x*sigmoid(x)
    return x*(1 / (1 + np.exp(-x)))

def prelu(x,alpha):
    a = []
    for item in x:
        if item < 0:
            a.append(alpha*item)
        else:
            a.append(item)
    return a

def elu(x,alpha):
    a = []
    for item in x:
        if item >= 0:
            a.append(item)
        else:
            a.append(alpha * (np.exp(item)-1))
    return a

x = np.arange(-5., 5., 0.1)

step=step(x)
sigmoid=sigmoid(x)
relu=relu(x)
softmax=softmax(x)
softplus=softplus(x)
tanh=tanh(x)
prelu=prelu(x,0.1)
elu=elu(x,1.0)
swish=swish(x)

#grafik çizimleri, plotting

plt.figure()
plt.xlabel("Girdiler")
plt.ylabel("Fonksiyon Çıktıları")
plt.grid(True)
plt.plot(x,step, label="Step", color='C0', lw=3)
plt.plot(x,sigmoid, label="Sigmoid", color='C1', lw=3)
plt.plot(x,relu, label="ReLU", color='C2', lw=3)
plt.plot(x,softmax, label="Softmax", color='C3', lw=3)
plt.plot(x,softplus, label="SoftPlus", color='C4', lw=3)
plt.plot(x,tanh, label="TanH", color='C5', lw=3)
plt.plot(x,prelu, label="PReLU", color='C6', lw=3)
plt.plot(x,elu, label="ELU", color='C8', lw=3)
plt.plot(x,swish, label="Swish", color='C9', lw=3)
plt.legend()
plt.show()

Github: https://github.com/betulaykarakus/activation_functions