Activation

活性化関数の値を計算し、渡されたベクトル/行列に書き込みます。

bool vector::Activation(
vector&                  vect_out,      // 値を取得するベクトル
ENUM_ACTIVATION_FUNCTION  activation,   // 活性化関数
  ...                                    // 追加のパラメータ
  );
 
 
bool matrix::Activation(
matrix&                  matrix_out,    // 値を取得する行列
ENUM_ACTIVATION_FUNCTION  activation     // 活性化関数
  );
 
 
bool matrix::Activation(
matrix&                  matrix_out,    // 値を取得する行列
ENUM_ACTIVATION_FUNCTION  activation,   // 活性化関数
 ENUM_MATRIX_AXIS         axis,         // 軸
  ...                                    // 追加のパラメータ
  );

パラメータ

vect_out/matrix_out

[out] 活性化関数の計算値を取得するためのベクトルまたは行列

activation

[in] ENUM_ACTIVATION_FUNCTION列挙体からの活性化関数

axis

[in] ENUM_MATRIX_AXIS列挙体から野値(AXIS_HORZ — 水平軸、AXIS_VERT — 垂直軸)

...

[in] 一部の活性化関数に必要な追加パラメータ。パラメータの指定がない場合は初期値が使用されます。

戻り値

成功の場合は true、それ以外の場合は false

追加のパラメータ

一部の活性化関数は追加パラメータを受け入れます。パラメータの指定がない場合は初期値が使用されます。

  AF_ELU  (Exponential Linear Unit)  
    double alpha=1.0
 
  活性化関数:if(x>=0) f(x) = x
                    else f(x) = alpha * (exp(x)-1)
 
 
  AF_LINEAR  
    double alpha=1.0
    double beta=0.0
 
  活性化関数:f(x) = alpha*x + beta
 
 
  AF_LRELU   (Leaky REctified Linear Unit)  
    double alpha=0.3
 
  活性化関数:if(x>=0) f(x)=x
                    else f(x) = alpha*x
 
                       
  AF_RELU  (REctified Linear Unit)  
    double alpha=0.0
    double max_value=0.0
    double treshold=0.0
 
  活性化関数:if(alpha==0) f(x) = max(x,0)
                    else if(x>max_value) f(x) = x
                    else f(x) = alpha*(x - treshold)
 
 
  AF_SWISH  
    double beta=1.0
 
  活性化関数:f(x) = x / (1+exp(-x*beta))
 
 
  AF_TRELU   (Thresholded REctified Linear Unit)  
    double theta=1.0
 
  活性化関数:if(x>theta) f(x) = x
                    else f(x) = 0
 
 
  AF_PRELU   (Parametric REctified Linear Unit)  
    double alpha[] - learned array of coeefficients
 
  活性化関数:if(x[i]>=0) f(x)[i] = x[i]
                    else f(x)[i] = alpha[i] * x[i]

注意事項

人工ニューラル ネットワークでは、ニューロンの活性化関数によって出力信号が決定され、出力信号は入力信号または入力信号のセットによって定義されます。活性化関数の選択は、ニューラルネットワークのパフォーマンスに大きな影響を与えます。異なるモデルパーツ(層)では、異なる活性化関数を使用することができます。

追加のパラメータの使用例:

  vector x={0.1, 0.4, 0.9, 2.0, -5.0, 0.0, -0.1};
  vector y;
 
  x.Activation(y,AF_ELU);
  Print(y);
  x.Activation(y,AF_ELU,2.0);
  Print(y);
 
  Print("");
  x.Activation(y,AF_LINEAR);
  Print(y);
  x.Activation(y,AF_LINEAR,2.0);
  Print(y);
  x.Activation(y,AF_LINEAR,2.0,5.0);
  Print(y);
 
  Print("");
  x.Activation(y,AF_LRELU);
  Print(y);
  x.Activation(y,AF_LRELU,1.0);
  Print(y);
  x.Activation(y,AF_LRELU,0.1);
  Print(y);
 
  Print("");
  x.Activation(y,AF_RELU);
  Print(y);
  x.Activation(y,AF_RELU,2.0,0.5);
  Print(y);
  x.Activation(y,AF_RELU,2.0,0.5,1.0);
  Print(y);
 
  Print("");
  x.Activation(y,AF_SWISH);
  Print(y);
  x.Activation(y,AF_SWISH,2.0);
  Print(y);
 
  Print("");
  x.Activation(y,AF_TRELU);
  Print(y);
  x.Activation(y,AF_TRELU,0.3);
  Print(y);
 
  Print("");
  vector a=vector::Full(x.Size(),2.0);
  x.Activation(y,AF_PRELU,a);
  Print(y);
 
/* 結果
  [0.1,0.4,0.9,2,-0.993262053000915,0,-0.095162581964040]
  [0.1,0.4,0.9,2,-1.986524106001829,0,-0.190325163928081]
 
  [0.1,0.4,0.9,2,-5,0,-0.1]
  [0.2,0.8,1.8,4,-10,0,-0.2]
  [5.2,5.8,6.8,9,-5,5,4.8]
 
  [0.1,0.4,0.9,2,-1.5,0,-0.03]
  [0.1,0.4,0.9,2,-5,0,-0.1]
  [0.1,0.4,0.9,2,-0.5,0,-0.01]
 
  [0.1,0.4,0.9,2,0,0,0]
  [0.2,0.8,0.9,2,-10,0,-0.2]
  [-1.8,-1.2,0.9,2,-12,-2,-2.2]
 
  [0.052497918747894,0.239475064044981,0.6398545523625035,1.761594155955765,-0.03346425462142428,0,-0.047502081252106]
  [0.054983399731247,0.275989792451045,0.7723340415895611,1.964027580075817,-0.00022698934351217,0,-0.045016600268752]
 
  [0,0,0,2,0,0,0]
  [0,0.4,0.9,2,0,0,0]
 
  [0.1,0.4,0.9,2,-10,0,-0.2]
*/