常用损失函数

常用损失函数介绍
python
machine learning
deep learning
loss function
Author
Published

Friday, June 7, 2024

loss function

在机器学习/深度学习任务中,衡量模型预测值与真实值之间的差异的指标称为损失函数。损失函数是模型训练的关键组成部分,它可以帮助我们优化模型参数,使得模型的预测值更加接近真实值。预测任务的目标也是最小化损失函数,如,我们利用反向传播算法等方法,通过更新损失函数相对于模型参数的梯度来最小化损失函数,提高模型的预测能力。此外,有效的损失函数还可以帮助我们平衡模型的偏差和方差,提高模型的泛化能力。

依据预测任务的不同,损失函数可以分为回归任务和分类任务两大类。回归任务的损失函数通常是均方误差(MSE)或平均绝对误差(MAE),而分类任务的损失函数则有交叉熵损失函数、Hinge损失函数等。本文将介绍常用的损失函数及其应用场景。

均方误差(MSE)

均方误差(Mean Squared Error,MSE)是回归任务中最常用的损失函数之一,它衡量模型预测值与真实值之间的差异。MSE的计算公式如下:

\[ MSE = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 \]

可以看到,MSE是预测值与真实值之间差值的平方和的均值,它对较大差异分配更高的惩罚。MSE非负,越小,说明模型的预测值与真实值之间的差异越小,模型的预测能力越好。MSE对异常值敏感,因为它是差值的平方和,异常值的平方会放大差异,导致模型的预测能力下降。

其在pytorch中的实现:

torch.nn.MSELoss(reduction='mean')

平均绝对误差(MAE)

平均绝对误差(Mean Absolute Error,MAE)是回归任务中另一种常用的损失函数。MAE的计算公式如下:

\[ MAE = \frac{1}{n} \sum_{i=1}^{n} |y_i - \hat{y}_i| \]

相比于MSE,MAE是预测值与真实值之间差值的绝对值的均值,它对异常值不敏感,因为它是差值的绝对值的和,不会对某一异常值的差异分配过高的权重。MAE的值越小,说明模型的预测值与真实值之间的差异越小,模型的预测能力越好。

针对MAE和MSE的优缺点,我们可以根据具体的任务需求选择合适的损失函数。如果任务需要重点关注异常值,可以选择MSE,否则选择MAE。

torch.nn.L1Loss(reduction='mean')

Huber loss

Huber loss是一种结合了MSE和MAE的损失函数,它在差值较小的情况下使用MSE,差值较大的情况下使用MAE。Huber loss的计算公式如下:

\[ L_{\delta}(y, \hat{y}) = \left\{ \begin{array}{ll} \frac{1}{2}(y - \hat{y})^2, & \text{if } |y - \hat{y}| \leq \delta \\ \delta |y - \hat{y}| - \frac{1}{2} \delta^2, & \text{otherwise} \end{array} \right. \]

其中,\(\delta\)是一个超参数,用于控制MSE和MAE之间的平衡。Huber loss对异常值不敏感,同时保留了MSE的平滑性,是一种较为稳健的损失函数。

torch.nn.SmoothL1Loss(reduction='mean')

二元交叉熵损失函数(Binary Cross Entropy Loss)

交叉熵损失函数(Cross Entropy Loss)是二分类任务中最常用的损失函数之一,我们前面也以及介绍过。交叉熵损失函数的计算公式如下:

\[ L(y, \hat{y}) = -\frac{1}{n} \sum_{i=1}^{n} y_i \log(\hat{y}_i) + (1 - y_i) \log(1 - \hat{y}_i) \]

其中,\(y_i\)是真实标签,\(\hat{y}_i\)是模型预测的概率值。交叉熵损失函数对于模型预测的概率值和真实标签之间的差异进行了惩罚,使得模型更加关注预测正确的类别。交叉熵损失函数是一种凸函数,可以通过梯度下降等方法进行优化。

torch.nn.BCELoss(weight=None, reduction='mean')

多类交叉熵损失函数(Categorical Cross Entropy Loss)

多类交叉熵损失函数是多分类任务中常用的损失函数之一,它是交叉熵损失函数的扩展。多类交叉熵损失函数的计算公式如下:

\[ L(y, \hat{y}) = -\frac{1}{n} \sum_{i=1}^{n} \sum_{j=1}^{m} y_{ij} \log(\hat{y}_{ij}) \]

其中,\(y_{ij}\)是真实标签,\(\hat{y}_{ij}\)是模型预测的概率值。

torch.nn.CrossEntropyLoss(weight=None,ignore_index=-100, reduction='mean')

Hinge损失函数

Hinge损失函数是支持向量机(SVM)中常用的损失函数之一,它适用于二分类任务。Hinge损失函数的计算公式如下:

\[ L(y, \hat{y}) = \max(0, 1 - y \cdot \hat{y}) \]

Hinge损失函数旨在最大化决策边界的间隔,即使得正确分类的样本距离决策边界的距离尽可能大。Hinge损失函数对于误分类的样本进行了惩罚,使得模型更加关注分类边界附近的样本,从而尽可能把数据点推向远离决策边界的方向。

代码已经放进了星球里。