
MQL5'te matrisler ve vektörler: Aktivasyon fonksiyonları
Giriş
Sinir ağlarının eğitimi konusunda çok sayıda kitap ve makale yayınlanmıştır. Ayrıca, MQL5.com üyeleri de çeşitli makale serileri dahil olmak üzere çok sayıda materyal yayınlamıştır.
Burada makine öğreniminin sadece bir yönünü - aktivasyon fonksiyonlarını - açıklayacağız. Sürecin iç işleyişini derinlemesine inceleyeceğiz.
Kısa genel bakış
Yapay sinir ağlarında, bir nöron aktivasyon fonksiyonu, bir girdi sinyalinin veya bir dizi girdi sinyalinin değerlerine dayalı olarak bir çıktı sinyali değerini hesaplar. Aktivasyon fonksiyonu tüm değerler kümesi üzerinde türevlenebilir olmalıdır. Bu durum, sinir ağlarını eğitirken hata geri yayılımı olasılığını sağlar. Hata geri yayılımı için aktivasyon fonksiyonunun gradyanı hesaplanmalıdır - girdi sinyali vektörünün her bir değeri için aktivasyon fonksiyonunun kısmi türevlerinin vektörü. Lineer olmayan aktivasyon fonksiyonlarının eğitim için daha iyi olduğuna inanılmaktadır. Tamamen lineer ReLU fonksiyonu birçok modelde etkinliğini göstermiş olsa da.
Çizimler
Aktivasyon fonksiyonunun ve türevlerinin grafikleri -5'ten 5'e kadar monoton olarak artan bir sırayla çizimler olarak hazırlanmıştır. Fonksiyon grafiğini fiyat grafiğinde görüntüleyen komut dosyası da geliştirilmiştir. Page Down tuşuna basıldığında, kaydedilen görüntünün adını belirtmek için bir dosya açma iletişim kutusu görüntülenir.
ESC tuşu komut dosyasını sonlandırır. Komut dosyasının kendisi aşağıda eklenmiştir. Benzer bir komut dosyası, MQL5 matrislerini kullanan geri yayılım sinir ağları makalesinin yazarı tarafından yazılmıştır. Bu fikri, ilgili aktivasyon fonksiyonu türevlerinin değerlerinin grafiğini, aktivasyon fonksiyonunun kendi grafiğiyle birlikte görüntülemek için kullandık.
Aktivasyon fonksiyonu mavi renkle gösterilirken, fonksiyon türevleri kırmızı renkle gösterilmektedir.
Üssel lineer birim (Exponential Linear Unit, ELU) aktivasyon fonksiyonu
Fonksiyon hesaplama
if(x >= 0) f = x; else f = alpha*(exp(x) - 1);
Türev hesaplama
if(x >= 0) d = 1; else d = alpha*exp(x);
Bu fonksiyon ek bir 'alpha' parametresi alır. Belirtilmezse, varsayılan değeri 1'dir.
vector_a.Activation(vector_c,AF_ELU); // call with the default parameter
vector_a.Activation(vector_c,AF_ELU,3.0); // call with alpha=3.0
Üssel aktivasyon fonksiyonu
Fonksiyon hesaplama
f = exp(x);
Aynı exp fonksiyonu, exp fonksiyonunun bir türevi olarak hizmet eder.
Hesaplama denkleminden görebileceğimiz gibi, üssel aktivasyon fonksiyonunun ek parametresi yoktur.
vector_a.Activation(vector_c,AF_EXP);
Gauss hata lineer birimi (Gaussian Error Linear Unit, GELU) aktivasyon fonksiyonu
Fonksiyon hesaplama
f = 0.5*x*(1 + tanh(sqrt(M_2_PI)*(x+0.044715*pow(x,3)));
Türev hesaplama
double x_3 = pow(x,3); double tmp = cosh(0.0356074*x + 0.797885*x); d = 0.5*tanh(0.0356774*x_3 + 0.398942*x)+(0.535161*x_3 + 0.398942*x)/(tmp*tmp) + 0.5;
Ek parametre yoktur.
vector_a.Activation(vector_c,AF_GELU);
Sert sigmoid aktivasyon fonksiyonu
Fonksiyon hesaplama
if(x < -2.5) f = 0; else { if(x > 2.5) f = 1; else f = 0.2*x + 0.5; }
Türev hesaplama
if(x < -2.5) d = 0; else { if(x > 2.5) d = 0; else d = 0.2; }
Ek parametre yoktur.
vector_a.Activation(vector_c,AF_HARD_SIGMOID);
Lineer aktivasyon fonksiyonu
Fonksiyon hesaplama
f = alpha*x + beta
Türev hesaplama
d = alpha
Ek parametreler alpha=1.0 ve beta=0.0’dır.
vector_a.Activation(vector_c,AF_LINEAR); // call with default parameters
vector_a.Activation(vector_c,AF_LINEAR,2.0,5.0); // call with alpha=2.0 and beta=5.0
Sızıntılı düzeltilmiş lineer birim (Leaky Rectified Linear Unit, LReLU) aktivasyon fonksiyonu
Fonksiyon hesaplama
if(x >= 0) f = x; else f = alpha * x;
Türev hesaplama
if(x >= 0) d = 1; else d = alpha;
Bu fonksiyon ek bir 'alpha' parametresi alır. Belirtilmezse, varsayılan değeri 0.3'tür.
vector_a.Activation(vector_c,AF_LRELU); // call with the default parameter
vector_a.Activation(vector_c,AF_LRELU,0.1); // call with alpha=0.1
Düzeltilmiş lineer birim (Rectified Linear Unit, ReLU) aktivasyon fonksiyonu
Fonksiyon hesaplama
if(alpha==0) { if(x > 0) f = x; else f = 0; } else { if(x >= max_value) f = x; else f = alpha * (x - treshold); }
Türev hesaplama
if(alpha==0) { if(x > 0) d = 1; else d = 0; } else { if(x >= max_value) d = 1; else d = alpha; }
Ek parametreler alpha=0, max_value=0 ve treshold=0’dır.
vector_a.Activation(vector_c,AF_RELU); // call with default parameters
vector_a.Activation(vector_c,AF_RELU,2.0,0.5); // call with alpha=2.0 and max_value=0.5
vector_a.Activation(vector_c,AF_RELU,2.0,0.5,1.0); // call with alpha=2.0, max_value=0.5 and treshold=1.0
Ölçekli üssel lineer birim (Scaled Exponential Linear Unit, SELU) aktivasyon fonksiyonu
Fonksiyon hesaplama
if(x >= 0) f = scale * x; else f = scale * alpha * (exp(x) - 1); where scale = 1.05070098, alpha = 1.67326324
Türev hesaplama
if(x >= 0) d = scale; else d = scale * alpha * exp(x);
Ek parametre yoktur.
vector_a.Activation(vector_c,AF_SELU);
Sigmoid aktivasyon fonksiyonu
Fonksiyon hesaplama
f = 1 / (1 + exp(-x));
Türev hesaplama
d = exp(x) / pow(exp(x) + 1, 2);
Ek parametre yoktur.
vector_a.Activation(vector_c,AF_SIGMOID);
Softplus aktivasyon fonksiyonu
Fonksiyon hesaplama
f = log(exp(x) + 1);
Türev hesaplama
d = exp(x) / (exp(x) + 1);
Ek parametre yoktur.
vector_a.Activation(vector_c,AF_SOFTPLUS);
Softsign aktivasyon fonksiyonu
Fonksiyon hesaplama
f = x / (|x| + 1)
Türev hesaplama
d = 1 / (|x| + 1)^2
Ek parametre yoktur.
vector_a.Activation(vector_c,AF_SOFTSIGN);
Swish aktivasyon fonksiyonu
Fonksiyon hesaplama
f = x / (1 + exp(-x*beta));
Türev hesaplama
double tmp = exp(beta*x); d = tmp*(beta*x + tmp + 1) / pow(tmp+1, 2);
Ek parametre beta=1’dir.
vector_a.Activation(vector_c,AF_SWISH); // call with the default parameter
vector_a.Activation(vector_c,AF_SWISH,2.0); // call with beta = 2.0
vector_a.Activation(vector_c,AF_SWISH,0.5); // call with beta=0.5
Hiperbolik tanjant (Hyperbolic Tangent, TanH) aktivasyon fonksiyonu
Fonksiyon hesaplama
f = tanh(x);
Türev hesaplama
d = 1 / pow(cosh(x),2);
Ek parametre yoktur.
vector_a.Activation(vector_c,AF_TANH);
Eşikli düzeltilmiş lineer birim (Thresholded Rectified Linear Unit, TReLU) aktivasyon fonksiyonu
Fonksiyon hesaplama
if(x > theta) f = x; else f = 0;
Türev hesaplama
if(x > theta) d = 1; else d = 0;
Ek parametre theta=1’dir.
vector_a.Activation(vector_c,AF_TRELU); // call with default parameter
vector_a.Activation(vector_c,AF_TRELU,0.0); // call with theta = 0.0
vector_a.Activation(vector_c,AF_TRELU,2.0); // call with theta = 2.0
Parametrik düzeltilmiş lineer birim (Parametric Rectified Linear Unit, PReLU) aktivasyon fonksiyonu
Fonksiyon hesaplama
if(x[i] >= 0) f[i] = x[i]; else f[i] = alpha[i]*x[i];
Türev hesaplama
if(x[i] >= 0) d[i] = 1; else d[i] = alpha[i];
Ek parametre 'alpha' katsayı vektörüdür.
vector alpha=vector::Full(vector_a.Size(),0.1); vector_a.Activation(vector_c,AF_PRELU,alpha);
Özel Softmax fonksiyonu
Softmax aktivasyon fonksiyonunun hesaplanmasının sonucu sadece belirli bir değere değil, aynı zamanda tüm vektör değerlerine de bağlıdır.
sum_exp = Sum(exp(vector_a)) f = exp(x) / sum_exp
Türev hesaplama
d = f*(1 - f)
Böylece, tüm aktifleştirilmiş vektör değerlerinin toplamı 1'dir. Bu nedenle, Softmax aktivasyon fonksiyonu sınıflandırma modellerinin son katmanı için sıklıkla kullanılır.
-5'ten 5'e kadar değerler içeren vektör aktivasyon fonksiyonu grafiği
-1'den 1'e kadar değerler içeren vektör aktivasyon fonksiyonu grafiği
Aktivasyon fonksiyonu yoksa (AF_NONE)
Aktivasyon fonksiyonu yoksa, girdi vektöründeki değerler herhangi bir dönüşüm olmadan çıktı vektörüne aktarılır. Aslında bu, alpha=1 ve beta=0 olan lineer aktivasyon fonksiyonudur.
Sonuç
Aşağıda ekli ActivationFunction.mqh dosyasında bulunan aktivasyon fonksiyonları ve türevlerinin kaynak kodlarını inceleyebilirsiniz.
MetaQuotes Ltd tarafından Rusçadan çevrilmiştir.
Orijinal makale: https://www.mql5.com/ru/articles/12627





- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz