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 может быть только у функции потерь Юбера (LOSS_HUBER)

Возвращаемое значение

Вектор или матрица значений градиентов функции потерь. Градиент — это частная производная по dx (x — предсказанное значение) от функции потерь в данной точке.

Примечание

Градиенты используются в нейронных сетях для корректировки значений матрицы весов при обратном распространении ошибки при обучении модели.

Задача обучения нейронной сети заключается в поиске коэффициентов, минимизирующих ошибку на обучающей выборке, для чего используется функция потерь (loss function).

В зависимости от типа решаемой задачи используются различные функции потерь. Например: для задачи регрессии mean squared error (MSE), для бинарной классификации — binary cross-entropy (BCE).

Пример вычисления градиентов функции потерь

   matrixf y_true={{ 1234 },
                   { 5678 },
                   { 9,10,11,12 }};
   matrixf y_pred={{ 1234 },
                   {11,1098 },
                   { 567,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]]
*/