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'只能由Hubert损失函数(LOSS_HUBER)使用

返回值

损失函数梯度值的向量或矩阵。梯度是损失函数在给定点上对dx的偏导数(x是预测值)。

注意

神经网络在训练模型时,在反向传播过程中使用梯度来调整权重矩阵的权重。

神经网络的目标是找到最小化训练样本误差的算法,为此使用损失函数。

根据不同的问题使用不同的损失函数。例如,均方误差(MSE)用于回归问题,二元交叉熵(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);
 
/* Result
   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]]
*/