LossGradient

損失関数勾配のベクトルまたは行列を計算します。

vector vector::LossGradient(
const vector&      vect_true,     // 真の値のベクトル
ENUM_LOSS_FUNCTION  loss,         // 損失関数型
  ...                              // 追加のパラメータ
  );
 
 
matrix matrix::LossGradient(
const matrix&      matrix_true,   // 真の値の行列
ENUM_LOSS_FUNCTION  loss,         // 損失関数
  );
 
 
matrix matrix::LossGradient(
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)でのみ使用できます。

戻り値

損失関数勾配値のベクトルまたは行列。勾配は、特定の点における損失関数のdx(xは予測値))に関する偏導関数です。

注意事項

勾配は、モデルの訓練時に逆伝播中に重み行列の重みを調整するためにニューラル ネットワークで使用されます。

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

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

損失関数勾配の計算例

  matrixf y_true={{ 1, 2, 3, 4 },
                  { 5, 6, 7, 8 },
                  { 9,10,11,12 }};
  matrixf y_pred={{ 1, 2, 3, 4 },
                  {11,10, 9, 8 },
                  { 5, 6, 7,12 }};
  matrixf loss_gradient =y_pred.LossGradient(y_true,LOSS_MAE);
  matrixf loss_gradienth=y_pred.LossGradient(y_true,LOSS_MAE,AXIS_HORZ);
  matrixf loss_gradientv=y_pred.LossGradient(y_true,LOSS_MAE,AXIS_VERT);
  Print("loss gradients\n",loss_gradient);
  Print("loss gradients on horizontal axis\n",loss_gradienth);
  Print("loss gradients on vertical axis\n",loss_gradientv);
 
/* 結果
  loss gradients
  [[0,0,0,0]
   [0.083333336,0.083333336,0.083333336,0]
   [-0.083333336,-0.083333336,-0.083333336,0]]
  loss gradients on horizontal axis
  [[0,0,0,0]
   [0.33333334,0.33333334,0.33333334,0]
   [-0.33333334,-0.33333334,-0.33333334,0]]
  loss gradients on vertical axis
  [[0,0,0,0]
   [0.25,0.25,0.25,0]
   [-0.25,-0.25,-0.25,0]]
*/