English Русский 中文 Español Deutsch 日本語 Português 한국어 Français Italiano
preview
MQL5'te matrisler ve vektörler: Aktivasyon fonksiyonları

MQL5'te matrisler ve vektörler: Aktivasyon fonksiyonları

MetaTrader 5Örnekler | 17 Ocak 2024, 14:53
174 0
MetaQuotes
MetaQuotes

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.

PNG dosyasını kaydetme


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.

Tüm aktivasyon fonksiyonlarını içeren demo komut dosyası

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

ELU aktivasyon fonksiyonu

   vector_a.Activation(vector_c,AF_ELU,3.0);  // call with alpha=3.0

alpha=3.0 parametresi ile ELU aktivasyon fonksiyonu


Ü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);

Üssel aktivasyon fonksiyonu


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);

GELU aktivasyon fonksiyonu


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);

Sert sigmoid aktivasyon fonksiyonu


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

Lineer aktivasyon fonksiyonu

vector_a.Activation(vector_c,AF_LINEAR,2.0,5.0);  // call with alpha=2.0 and beta=5.0

Lineer aktivasyon fonksiyonu, alpha=2, beta=5


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

LReLU aktivasyon fonksiyonu

vector_a.Activation(vector_c,AF_LRELU,0.1);  // call with alpha=0.1

alpha=0.1 ile LReLU aktivasyon fonksiyonu


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

ReLU aktivasyon fonksiyonu

vector_a.Activation(vector_c,AF_RELU,2.0,0.5);      // call with alpha=2.0 and max_value=0.5

ReLU aktivasyon fonksiyonu, alpha=2, 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

ReLU aktivasyon fonksiyonu, alpha=2, max_value=0.5, treshold=1


Ö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);

SELU aktivasyon fonksiyonu


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);

Sigmoid aktivasyon fonksiyonu



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);

Softplus aktivasyon fonksiyonu


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);

Softsign aktivasyon fonksiyonu


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

Swish aktivasyon fonksiyonu

vector_a.Activation(vector_c,AF_SWISH,2.0);     // call with beta = 2.0

Swish aktivasyon fonksiyonu, beta=2

vector_a.Activation(vector_c,AF_SWISH,0.5);   // call with beta=0.5

Swish aktivasyon fonksiyonu, 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);

TanH aktivasyon fonksiyonu


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

TReLU aktivasyon fonksiyonu

vector_a.Activation(vector_c,AF_TRELU,0.0);     // call with theta = 0.0

TReLU aktivasyon fonksiyonu, theta=0

vector_a.Activation(vector_c,AF_TRELU,2.0);      // call with theta = 2.0

TReLU aktivasyon fonksiyonu, theta=2


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);

PReLU aktivasyon fonksiyonu


Ö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

Softmax aktivasyon fonksiyonu

-1'den 1'e kadar değerler içeren vektör aktivasyon fonksiyonu grafiği

Softmax aktivasyon fonksiyonu


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

ONNX modellerini sınıflara sarma ONNX modellerini sınıflara sarma
Nesne yönelimli programlama, okunması ve değiştirilmesi kolay olan daha kompakt bir kod oluşturulmasını sağlar. Burada üç ONNX modeli için örneğe bir göz atacağız.
MQL5'te ONNX modellerinin nasıl bir araya getirileceğine dair bir örnek MQL5'te ONNX modellerinin nasıl bir araya getirileceğine dair bir örnek
Açık sinir ağı santrali (Open Neural Network eXchange, ONNX), sinir ağlarını temsil etmek için oluşturulmuş açık bir formattır. Bu makalede, bir Uzman Danışmanda aynı anda iki ONNX modelinin nasıl kullanılacağını göstereceğiz.
ONNX modellerinin regresyon metrikleri kullanılarak değerlendirilmesi ONNX modellerinin regresyon metrikleri kullanılarak değerlendirilmesi
Regresyon, etiketlenmemiş bir örnekten gerçek değeri tahmin etme görevidir. Regresyon metrikleri, regresyon modeli tahminlerinin doğruluğunu değerlendirmek için kullanılır.
Sıfırdan bir ticaret Uzman Danışmanı geliştirme (Bölüm 25): Sistemin sağlamlığını artırma (II) Sıfırdan bir ticaret Uzman Danışmanı geliştirme (Bölüm 25): Sistemin sağlamlığını artırma (II)
Bu makalede, Uzman Danışmanın performansına yönelik son adımı atacağız. Bu yüzden uzun bir okumaya hazırlıklı olun. Uzman Danışmanımızı sağlam hale getirmek için, öncelikle ticaret sisteminin bir parçası olmayan her şeyi koddan kaldıracağız.