Yapay Sinir Ağlarında Transfer Fonksiyonları

Yapay Sinir Ağlarında Transfer Fonksiyonları

8 Ocak 2017 0 Yazar: İbrahim AY

Giriş

Yapay sinir ağı kurarken kullandığımız transfer fonksiyonları hakkında bilgi sahibi olmalı ve ezbere çalışmamalıyız. Eğitimin her denemesinde başarısız ve aynı sonuçları alıyorsak, seçtiğimiz transfer fonksiyonunun doğru seçim olup olmadığından emin olmalıyız. Bunun için de bu fonksiyonları tanımalı ve çıktıları hakkında bilgi sahibi olmalıyız.

Deneysel veriler ile çalışarak YSA eğitimine yeni başlayan arkadaşlarımız genellik literatürde en çok kullanılan logsig ve tansig fonksiyonu ile işe başladıkları için ciddi sorunlar ile karşılaşmazlar. Ola ki diğer transfer fonksiyonları da denenmek istendiğinde hangi fonksiyonların kendisi için kullanılabilir olduğunu öngörebilmek için fonksiyonların denklemlerini bilmelidirler. Bazı durumlarda girdilerimiz arasındaki sayısal farktan dolayı da fonksiyonlarımız başarısız veya daha az başarılı olabilirler. Bunun nedeninin transfer fonksiyonundan kaynaklı olup olamayacağını öngörebilmek için de bu bilgilere sahip olmalıyız. Ki bazı durumlarda mecburiyetten veya daha iyi neticelere ulaşmak için verilerin normalleştirilerek güncellenmesi ile bu fonksiyonların neden daha verimli çalıştıklarını da anlayacağız.

Fonksiyon sonuçlarını EXCEL’de denklemde yerine koyma işlemi ile değerlendirebileceğiniz gibi sayısal işlem yapmadan MATLAB ile de sorgulayabileceksiniz. Bu arada hardlim gibi bazı fonksiyonlar koşullu fonksiyonlardır ve sayısal hesaplama gerektiren denklemlerden değildirler.

Bu arada girdilerimizin rastgele sabitler ile çarpılıp yine rastgele bir sabit ile toplanarak fonksiyonlara girdiğini göz önüne almayı unutmayın. Örneğin x,y ve z olan 3 girdimiz rastgele çarpanlar ile çarpılıp bir sabit ile toplandıktan sonra fonksiyona giriyor. az+by+cz+d gibi. Bu işlemin detayı için İleri Beslemeli Çok Katmanlı Ağ sayfasında ki yazının son kısmını inceleyebilirsiniz.

Bu ders ile ilgili bilgileri de içeren verdiğim İngilizce kaynağı da indiriniz. Daha farklı konularda da bilgi içeren bu kaynak her zaman lazım olur. NNET.PDF

Kul hatasız olmaz, konuya hâkimseniz ve hatalı gördüğünüz bir yer var ise lütfen iletişime geçerek bilgileri güncellememe yardımcı olunuz. Hepinize iyi dersler.
Haydi başlayalım.

 

Denklemimiz:
hardlim(n) = 1 if n>=0; 0

Girdi değerimiz 0 veya 0’dan büyük ise sonuç 1’dir. Aksi durumda sonuç 0’dır. Örnek MATLAB çıktılarına bakalım:

>>hardlim(5)
ans =1
>>hardlim(0)
ans =1
>>hardlim(-8)
ans =0

Symmetric Hard-Limit Transfer Function

Denklemimiz:
hardlims(n) = 1 if n>=0 ; -1

Girdi değerimiz 0 veya 0’dan büyük ise sonuç 1’dir. Aksi durumda sonuç -1’dir. Örnek MATLAB çıktılarına bakalım:

>>hardlims(12)
ans =1
>>hardlims(0)
ans =1
>>hardlims(-5)
ans =-1

Log-Sigmoid Transfer Function

Denklemimiz:
logsig(n) = 1 / (1 + exp(-n))

Bu fonksiyonda exp ifadesi bildiğimiz e (Euler) sayısıdır. Yani exp(1) ifadesi e üzeri 1 demektir. exp(-5) ifadesi e üzeri -5 demektir. Bu işlemleri EXCEL’de yapan ifade “ÜS” tür.

Toparlarsak exp ifadesi için;
MATLAB=EXCEL=sonuç olmak üzere exp(-5)=ÜS(-5)=0,067

Bu fonksiyon sonucunu MATLAB’de elde etmek için logsig(n) yazmak yeterlidir. Meraktan veya başka bir nedenle işlemi EXCEL’de yapmak istersek kodumuz şöyledir. n yerine sayıyı veya sayıyı içeren hücreyi yazarsınız:

=1/(1+ÜS(-n))

Fonksiyonumuza gelirsek birkaç örneğe bakalım ve yorumda bulunalım:

>>logsig(1)
ans = 0.7311
>>logsig(0)
ans = 0.5000
>>logsig(-1)
ans = 0.2689
>>logsig(-7)
ans = 9.1105e-004
>>logsig(9)
ans = 0.9999
>>logsig(10)
ans = 1.0000
>>logsig(25)
ans = 1.0000
>>logsig(90)
ans = 1

Dikkat ediniz; logsig fonksiyonu 10 ve daha büyük sayılara her zaman yaklaşık 1 değerini vermektedir. Buradaki sonuç net olarak 1 değilsede (incelememe göre 35’e kadar) 1’e çok yakındır (0,9999 gibi). Yani bu fonksiyondan geçen 10’dan büyük bütün değerlerin birbirinden farklı olmasının önemi yoktur çünkü hepsinin çıkış değeri 1 olmak üzere aynıdır. Benzer şekilde sayı -10’dan küçüldükçe de 0’a çok yakın sonuçlar elde edilmektedir.

Örneğin 1. katmanda bu fonksiyonu kullanmış olalım. YSA bu fonksiyona girmeden önce girdileri rastgele birer sayı ile çarpar ve hepsini yine rastgele bir sayı ile toplayarak fonksiyona giriş yapar. Bu işlemin detayı için İleri Beslemeli Çok Katmanlı Ağ sayfasında ki yazının son kısmını inceleyiniz. Bu işlemlerde fonksiyon öncesi değerlerin 10’dan küçük veya -10’dan büyük olacağının garantisi yoktur ve bu hususu her fonksiyonda dikkate almayı unutmayınız.

Poslin (Positive Linear Transfer Function)

Denklemimiz:
poslin(n) = n, if n >= 0
poslin(n) = 0, if n <= 0

Girdi değerimiz 0 veya 0’dan büyük ise sonuç girdi ile aynıdır. Girdi değerimiz 0 veya 0’dan küçük ise sonuç 0’dır. Örnek MATLAB çıktılarına bakalım:

>>poslin(0)
ans = 0
>>poslin(-1)
ans = 0
>>poslin(1)
ans = 1
>>poslin(7)
ans = 7
>>poslin(-5)
ans = 0

Purelin (Linear Transfer Function)

Genellikle YSA çıkışlarında kullandığımız fonksiyondur.

Denklemimiz:
purelin(n) = n

Yani girdi değeri ne ise çıktı değeri de odur. YSA’da kullandığımızda eğitimimizin çıkış kapısıdır diyebiliriz. Şart mı? Değil. İsteyen çıkış nöronunda transfer fonksiyonu kullanabilir ancak pek tercih edildiğine şahit olmadım.

Radbas (Radial Basis Transfer Function)

Denklemimiz:
radbas(n) = exp(-n^2)

Bu fonksiyon sonucunu MATLAB’de radbas(n) ile öğrenebileceğimiz gibi EXCEL’de yapmak için şu denklemi kullanabilirsiniz:

=ÜS(-(n^2))

Bu fonksiyonumuzu da birkaç örnekle inceleyelim ve yorumda bulunalım:

>>radbas(0)
ans = 1
>>radbas(1)
ans = 0.3679
>>radbas(-1)
ans = 0.3679
>>radbas(3)
ans =1.2341e-004
>>radbas(-3)
ans = 1.2341e-004
>>radbas(4)
ans = 1.1254e-007
>>radbas(-4)
ans = 1.1254e-007
>>radbas(5)
ans = 1.3888e-011
>>radbas(-5)
ans = 1.3888e-011
>>radbas(9)
ans = 6.6397e-036
>>radbas(-9)
ans = 6.6397e-036

Gördüğünüz gibi değerimiz 3’ten yukarı çıktıkça veya -3’ten azaldıkça 0’a daha da yaklaşmaktadır.

Satlin (Saturating Linear Transfer Function)

Denklemimiz:
satlin(n) = 0, if n <= 0
satlin(n) = n, if 0 <= n <= 1
satlin(n) = 1, if 1 <= n

Denklemden de anlaşılacağı üzere n; 0’dan küçük veya 0’a eşit ise sonuç 0’dır. Eğer n, 0 veya 1’e eşit ise veya bu iki sayı arasında ise sonuç girdi(n) ile aynıdır. Eğer n, 1 veya 1’den büyük ise çıktı 1’dir. Birkaç örnek görelim;

>>satlin(0)
ans = 0
>>satlin(1)
ans = 1
>>satlin(-1)
ans = 0
>>satlin(10)
ans = 1
>>satlin(18)
ans = 1
>>satlin(-25)
ans = 0
>>satlin(0.5)
ans = 0.5000
>>satlin(-0.2)
ans = 0

Satlins (Symmetric Saturating Linear Transfer Function)

Denklemimiz:
satlins(n) = -1, if n <= -1
satlins(n) = n, if -1 <= n <= 1
satlins(n) = 1, if 1 <= n

Denklemden de anlaşılacağı üzere n; -1’den küçük veya -1’e eşit ise sonuç -1’dir. Eğer n, -1 veya 1’e eşit ise veya bu iki sayı arasında ise sonuç girdi(n) ile aynıdır. Eğer n, 1 veya 1’den büyük ise çıktı 1’dir. Birkaç örnek görelim;

>>satlins(0)
ans = 0
>>satlins(1)
ans = 1
>>satlins(-1)
ans = -1
>>satlins(10)
ans = 1
>>satlins(18)
ans = 1
>>satlins(-25)
ans = -1
>>satlins(0.5)
ans = 0.5000
>>satlins(-0.2)
ans = -0.2000

Softmax (Soft Max Transfer Function)

Denklemimiz:
softmax(n) = exp(n)/sum(exp(n))

Bu fonksiyonda sum (toplam) ifadesinde görüldüğü gibi bütün girdiler devreye girmektedir. Dolayısıyla softmax(n) ifadesini tek başına kullanırsak her zaman 1 değerini verecektir. Yani softmax(0), softmax(10), softmax(-1) vs vs sorgularsak her zaman 1 sonucunu alırız. Sağlamalı bir inceleme yapmadım ama formülden anlaşıldığı kadarıyla, ağ kurarken bu fonksiyonu kullandığımızda bütün girdilerin e üssünü alacak ve her birini bu değerlerin toplamına bölecektir. 1 sütunlu 5 satırlı bir setten örnek vermem iyi olacak gibi.

nexp(n)exp(n)/sum(exp(n))
320,08620,086/26,620=0,75455
-20,1350,135/26,620=0,00507
1,33,6693,669/26,620=0,13783
-50,0110,011/26,620=0,00041
12,7182,718/26,620=0,10210
?26,620

Görüldüğü gibi bu veri setinde n=3 iken softmax fonksiyonu ile alınan çıktı 0,75455; -5 için 0,0004’tir. Vs vs

Tansig (Hyperbolic Tangent Sigmoid Transfer Function)

Denklemimiz:
tansig(n) = 2/(1+exp(-2*n)) -1

Bu fonksiyon sonucunu MATLAB’de tansig(n) ile öğrenebileceğimiz gibi EXCEL’de yapmak için şu denklemi kullanabilirsiniz:

=2/(1+ÜS(-2*n))-1

Bu fonksiyonumuzu da birkaç örnekle inceleyelim ve yorumda bulunalım:

>>tansig(0)
ans = 0
>>tansig(1)
ans = 0.7616
>>tansig(-1)
ans = -0.7616
>>tansig(5)
ans = 0.9999
>>tansig(6)
ans = 1.0000
>>tansig(10)
ans = 1.0000
>>tansig(27)
ans = 1
>>tansig(-3)
ans = -0.9951
>>tansig(-5)
ans = -0.9999
>>tansig(-8)
ans = -1.0000
>>tansig(-10)
ans = -1.0000

Gördüğünüz gibi değerimiz 5’ten yukarı çıktıkça 1’e; -5’ten azaldıkça -1’e yaklaşmaktadır.

Tribas (Triangular Basis Transfer Function)

Denklemimiz:
tribas(n) = 1 – abs(n), if -1 <= n <= 1; 0

n; -1 veya 1’e eşitse ve/veya ikisi arasında bir değer ise 1-abs(n) formülü uygulanır. Abs ifadesi mutlak değer demektir. Eğer n -1’den küçük veya 1’den büyük ise sonuç 0’dır. Birkaç örnek görelim;

>> tribas(0)
ans = 1
>> tribas(1)
ans = 0
>> tribas(-1)
ans = 0
>> tribas(3)
ans = 0
>> tribas(10)
ans = 0
>> tribas(-5)
ans = 0
>> tribas(-15)
ans = 0
>>tribas(-0.3)
ans = 0.7000
>>tribas(0.8)
ans = 0.2000

Fonksiyonlar hakkında MATLAB’den bilgi almak için
help logsig Algorithm veya help hardlim Algorithm
örneklerinde görüldüğü gibi fonksiyon adlarını değiştirmeniz yeterli. Ayrıca bu fonksiyonların türevleri de mevcuttur ve fonksiyonun önüne d eklenerek uygulanmaktadır. dhardlms, dposlin, dradbas vb gibi.
Yardım için ise help dposlin Algorithm vb. ifadelerinden yararlanabilirsiniz.

İçindekiler