LossGradient
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={{ 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);
/* 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]]
*/