LossGradient

Calcula o vetor ou a matriz de gradiente da função de perda.

vector vector::LossGradient(
  const vector&       vect_true,     // vetor de valores reais
  ENUM_LOSS_FUNCTION  loss,          // tipo de função de perda
   ...                               // parâmetro adicional
   );
 
 
matrix matrix::LossGradient(
  const matrix&       matrix_true,   // matriz de valores reais
  ENUM_LOSS_FUNCTION  loss,          // função de perda
   );
 
 
matrix matrix::LossGradient(
  const matrix&       matrix_true,   // matriz de valores reais
  ENUM_LOSS_FUNCTION  loss,          // função de perda
  ENUM_MATRIX_AXIS    axis,          // eixo
   ...                               // parâmetro adicional
   );

Parâmetros

vect_true/matrix_true

 [in] Vetor ou matriz de valores reais.

loss

[in]  Função de perda a partir da enumeração ENUM_LOSS_FUNCTION.

axis

[in]  Valor a partir da enumeração ENUM_MATRIX_AXIS (AXIS_HORZ – eixo horizontal, AXIS_VERT – eixo vertical).

...

[in]  Somente a função de perda Huber (LOSS_HUBER) pode ter o parâmetro delta adicional

Valor retornado

Vetor ou matriz de valores de gradiente da função de perda. O gradiente é a derivada parcial sobre dx (x é o valor previsto) da função de perda em um determinado ponto.

Observação

Os gradientes são usados em redes neurais para ajustar os valores da matriz de peso quando o erro se propaga de volta ao treinamento do modelo.

A tarefa de treinamento de rede neural é encontrar coeficientes que minimizem o erro na amostra de treinamento, usando a função de perda.

Diferentes funções de perda são usadas, dependendo do tipo de problema a ser resolvido. Por exemplo: para um problema de regressão, o erro quadrático médio (mean squared error , MSE), para uma classificação binária, a entropia cruzada binária (binary cross-entropy, BCE).

Exemplo de cálculo dos gradientes de uma função de perda

   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]]
*/