LossGradient

Calcula un vector o matriz de gradientes de la función de pérdida.

vector vector::LossGradient(
  const vector&       vect_true,     // vector de valores verdaderos
  ENUM_LOSS_FUNCTION  loss,          // tipo de función de pérdida
   ...                               // parámetro adicional
   );
 
 
matrix matrix::LossGradient(
  const matrix&       matrix_true,   // matriz de valores verdaderos
  ENUM_LOSS_FUNCTION  loss,          // función de pérdida
   );
 
 
matrix matrix::LossGradient(
  const matrix&       matrix_true,   // matriz de valores verdaderos
  ENUM_LOSS_FUNCTION  loss,          // función de pérdida
  ENUM_MATRIX_AXIS    axis,          // eje
   ...                               // parámetro adicional
   );

Parámetros

vect_true/matrix_true

 [in] Vector o matriz de valores verdaderos.

loss

[in]  Función de pérdida de la enumeración ENUM_LOSS_FUNCTION.

axis

[in]  Valor de la enumeración ENUM_MATRIX_AXIS (AXIS_HORZ – eje horizontal, AXIS_VERT – eje vertical).

...

[in]  Solo la función de pérdida de Hubert (LOSS_HUBER) puede tener el parámetro delta adicional

Valor retornado

Vector o matriz de valores de los gradientes de la función de pérdida. El gradiente es la derivada parcial de dx (x es el valor previsto) de la función de pérdida en un punto determinado.

Observación

Los gradientes se utilizan en las redes neuronales para ajustar los valores de la matriz de pesos cuando el error se propaga de forma inversa durante el entrenamiento del modelo.

La tarea de entrenar una red neuronal consiste en encontrar coeficientes que minimicen el error en la muestra de entrenamiento, usando para ello la función de pérdida (loss function).

Dependiendo del tipo de tarea a resolver se usarán diferentes funciones de pérdida. Por ejemplo: para un problema de regresión, será mean squared error (MSE), para la clasificación binaria, será binary cross-entropy (BCE)..

Ejemplo de cálculo de gradientes de la función de pérdida

   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);
 
/* Resultado
   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]]
*/