Loss

損失関数の値を計算します。

double vector::Loss(
const vector&      vect_true,     // 真の値のベクトル
ENUM_LOSS_FUNCTION  loss,         // 損失関数
  ...                              // 追加のパラメータ
  );
 
 
double matrix::Loss(
const matrix&      matrix_true,   // 真の値の行列
ENUM_LOSS_FUNCTION  loss,         // 損失関数
  );
 
 
double matrix::Loss(
const matrix&      matrix_true,   // 真の値の行列
ENUM_LOSS_FUNCTION  loss,         // 損失関数
 ENUM_MATRIX_AXIS   axis,         // 軸
  ...                              // 追加のパラメータ
  );

パラメータ

vect_true/matrix_true

 [in] 真の値のベクトルまたは行列

loss

[in] ENUM_LOSS_FUNCTION列挙体からの損失関数

axis

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

...

[in] 追加パラメータ「delta」は、Huber損失関数(LOSS_HUBER)でのみ使用できます。

戻り値

double値

Huber損失関数(LOSS_HUBER)での「delta」パラメーターの使用方法

  double delta = 1.0;
  double error = fabs(y - x);
  if(error<delta)
    loss = 0.5 * error^2;
  else
    loss = 0.5 * delta^2 + delta * (error - delta);

注意事項

ニューラルネットワークは、損失関数が使用される訓練サンプルの誤差を最小限に抑えるアルゴリズムを見つけることを目的としています。

損失関数の値は、モデルによって予測された値が実際の値からどれだけずれているかを示します。

問題に応じて異なる損失関数が使用されます。たとえば、平均二乗誤差(MSE)は回帰問題に使用され、バイナリ交差エントロピー(BCE) は二項分類に使用されます。

Huber損失関数呼び出しの例

  vector y_true = {0.0, 1.0, 0.0, 0.0};
  vector y_pred = {0.6, 0.4, 0.4, 0.6};
  double loss=y_pred.Loss(y_true,LOSS_HUBER);
  Print(loss);
  double loss2=y_pred.Loss(y_true,LOSS_HUBER,0.5);
  Print(loss2);
 
/* 結果
  0.155
  0.15125
*/