常见的损失函数

本文深入解析了机器学习中常见的损失函数,包括均方差损失、平均绝对误差损失、Huber损失、交叉熵损失和合页损失等。探讨了它们的基本形式、背后的假设以及在回归和分类问题中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 损失函数、代价函数、目标函数
  • 损失函数(Loss Function)通常是针对单个训练样本而言,给定一个模型输出y^\hat{y}y^和一个真实yyy,损失函数输出一个实值损失L=f(yi,yi^)L=f(y_i,\hat{y_i})L=f(yi,yi^)
  • 代价函数(Cost Function)通常是针对整个训练集(或者是mini-batch Gradient Descent时一个mini-batch)的总损失J=Σi=1Nf(yi,yi^)J=\Sigma^N_{i=1}f(y_i,\hat{y_i})J=Σi=1Nf(yi,yi^)
  • 目标函数(Objective Function)表示任意希望被优化的函数,用于机器学习领域和非机器学习领域。
    A loss function is a part of a cost function which is a type of an objective function.
2. 损失函数
1)均方差损失(Mean Squared Error Loss)
  • 基本形式与原理
    均方差损失是机器学习、深度学习回归任务中最常用的一种损失函数,也成为L2 Loss,其基本形式如下JMSE=1N∑i=1N(yi−yi^)2J_{MSE}=\frac1N\sum^N_{i=1}(y_i-\hat{y_i})^2JMSE=N1i=1N(yiyi^)2从直觉上理解均方差损失,这个损失函数的最小值为0(当预测值等于真实值时),最大值为无穷大。如下图,对于真实值y=0y=0y=0,不同的预测值[−1.5,1.5][-1.5,1.5][1.5,1.5]的均方差损失的变化图。横轴是不同的预测值,纵轴是均方差损失,可以看到随着预测与真实值绝对误差∣y−y^∣|y-\hat{y}|yy^的增加,均方差损失呈二次方地增加。
  • 背后的假设
    实际上在一定的假设下,我们可以使用最大化似然得到均方差损失的形式。假设模型预测与真实值之间的误差服从标准高斯分布(μ=0,σ=1)(μ=0,\sigma=1)(μ=0σ=1),则给定一个xix_ixi模型输出真实值yiy_iyi的概率为p(yi∣xi)=12πexp(−(yi−yi^)22)p(y_i|x_i)=\frac1{\sqrt{2π}}exp(-\frac{(y_i-\hat{y_i})^2}{2})p(yixi)=2π1exp(2(yiyi^)2)进一步我们假设数据集中 N 个样本点之间相互独立,则给定所有 xxx输出所有真实值yyy的概率,即似然Likelihood,为所有p(yi∣xi)p(y_i|x_i)p(yixi)的累乘L(x,y)=∏i=1N12πexp(−(yi−yi^)22)L(x,y)=\prod^N_{i=1}\frac1{\sqrt{2π}}exp(-\frac{(y_i-\hat{y_i})^2}{2})L(x,y)=i=1N2π1exp(2(yiyi^)2)通常为了计算方便,我们通常最大化对数似然Log-LikelihoodLL(x,y)=log⁡(L(x,y))=−N2log⁡2π−12∑i=1N(yi−yi^)2LL(x,y)=\log(L(x,y))=- \frac N2\log{2π}-\frac12\sum^N_{i=1}(y_i-\hat{y_i})^2LL(x,y)=log(L(x,y))=2Nlog2π21i=1N(yiyi^)2去掉与yi^\hat{y_i}yi^ 无关的第一项,然后转化为最小化负对数似然 Negative Log-LikelihoodNLL(x,y)=12∑i=1N(yi−yi^)2NLL(x,y)=\frac12\sum^N_{i=1}(y_i-\hat{y_i})^2NLL(x,y)=21i=1N(yiyi^)2可以看到这个实际上就是均方差损失的形式。也就是说在模型输出与真实值的误差服从高斯分布的假设下,最小化均方差损失函数与极大似然估计本质上是一致的,因此在这个假设能被满足的场景中(比如回归),均方差损失是一个很好的损失函数选择;当这个假设没能被满足的场景中(比如分类),均方差损失不是一个好的选择。
2)平均绝对误差损失 (Mean Absolute Error Loss)
  • 基本形式与原理
    平均绝对误差是另一类常用的损失函数,也称为 L1 Loss。其基本形式如下JMAE=1N∑i=1N∣yi−yi^∣J_{MAE}=\frac1N\sum^N_{i=1}|y_i-\hat{y_i}|JMAE=N1i=1Nyiyi^同样的我们可以对这个损失函数进行可视化如下图,MAE 损失的最小值为 0(当预测等于真实值时),最大值为无穷大。可以看到随着预测与真实值绝对误差∣y−y^∣|y-\hat{y}|yy^的增加,MAE 损失呈线性增长。
  • 背后的假设
    同样的我们可以在一定的假设下通过最大化似然得到 MAE 损失的形式,假设模型预测与真实值之间的误差服从拉普拉斯分布 Laplace distribution(μ=0,b=1)(μ=0,b=1)(μ=0,b=1),则给定一个xix_ixi模型输出真实值yiy_iyi的概率为p(yi∣xi)=12exp(−∣yi−yi^∣)p(y_i|x_i)=\frac12exp(-|y_i-\hat{y_i}|)p(yixi)=21exp(yiyi^)与上面推导 MSE 时类似,我们可以得到的负对数似然实际上就是 MAE 损失的形式L(x,y)=∏i=1N12exp(−∣yi−yi^∣)L(x,y)=\prod^N_{i=1}\frac12exp(-|y_i-\hat{y_i}|)L(x,y)=i=1N21exp(yiyi^)LL(x,y)=−N2−∑i=1N∣yi−yi^∣LL(x,y)=-\frac N2-\sum^N_{i=1}|y_i-\hat{y_i}|LL(x,y)=2Ni=1Nyiyi^NLL(x,y)=∑i=1N∣yi−yi^∣NLL(x,y)=\sum^N_{i=1}|y_i-\hat{y_i}|NLL(x,y)=i=1Nyiyi^
3)MAE 与 MSE 区别
  • MSE 损失相比 MAE 通常可以更快地收敛
    当使用梯度下降算法时,MSE 损失的梯度为−yi^-\hat{y_i}yi^,,而 MAE 损失的梯度为±1\pm1±1,即 MSE 的梯度的 scale 会随误差大小变化,而 MAE 的梯度的 scale 则一直保持为 1,即便在绝对误差∣yi−yi^∣|y_i-\hat{y_i}|yiyi^很小的时候 MAE 的梯度 scale 也同样为 1,这实际上是非常不利于模型的训练的。当然你可以通过在训练过程中动态调整学习率缓解这个问题,但是总的来说,损失函数梯度之间的差异导致了 MSE 在大部分时候比 MAE 收敛地更快。这个也是 MSE 更为流行的原因。
  • MAE 损失对于 outlier 更加健壮,即更加不易受到 outlier 影响。
    第一个角度是直观地理解,下图是 MAE 和 MSE 损失画到同一张图里面,由于MAE 损失与绝对误差之间是线性关系,MSE 损失与误差是平方关系,当误差非常大的时候,MSE 损失会远远大于 MAE 损失。因此当数据中出现一个误差非常大的 outlier 时,MSE 会产生一个非常大的损失,对模型的训练会产生较大的影响。
    在这里插入图片描述
    第二个角度是从两个损失函数的假设出发,MSE 假设了误差服从高斯分布,MAE 假设了误差服从拉普拉斯分布。拉普拉斯分布本身对于 outlier 更加 robust。参考下图(来源:Machine Learning: A Probabilistic Perspective 2.4.3 The Laplace distribution Figure 2.8),当右图右侧出现了 outliers 时,拉普拉斯分布相比高斯分布受到的影响要小很多。因此以拉普拉斯分布为假设的 MAE 对 outlier 比高斯分布为假设的 MSE 更加 robust。
    在这里插入图片描述
4)Huber Loss

上文我们分别介绍了 MSE 和 MAE 损失以及各自的优缺点,MSE 损失收敛快但容易受 outlier 影响,MAE 对 outlier 更加健壮但是收敛慢,Huber Loss 则是一种将 MSE 与 MAE 结合起来,取两者优点的损失函数,也被称作 Smooth Mean Absolute Error Loss 。其原理很简单,就是在误差接近 0 时使用 MSE,误差较大时使用 MAE。

5)交叉熵损失 (Cross Entropy Loss)

上文介绍的几种损失函数都是适用于回归问题损失函数,对于分类问题,最常用的损失函数是交叉熵损失函数。

  • 二分类
    考虑二分类,在二分类中我们通常使用 Sigmoid 函数将模型的输出压缩到 (0, 1) 区间内yi^∈(0,1)\hat{y_i}\in(0,1)yi^(0,1),用来代表给定输入xix_ixi,模型判断为正类的概率。由于只有正负两类,因此同时也得到了负类的概率。p(yi=1∣xi)=yi^p(y_i=1|x_i)=\hat{y_i}p(yi=1xi)=yi^p(yi=0∣xi)=1−yi^p(y_i=0|x_i)=1-\hat{y_i}p(yi=0xi)=1yi^将两条式子合并成一条p(yi∣xi)=(yi^)yi(1−yi^)1−yip(y_i|x_i)=(\hat{y_i})^{y_i}(1-\hat{y_i})^{1-y_i}p(yixi)=(yi^)yi(1yi^)1yi假设数据点之间独立同分布,则似然可以表示为L(x,y)=∏i=1N(yi^)yi(1−yi^)1−yiL(x,y)=\prod^N_{i=1}(\hat{y_i})^{y_i}(1-\hat{y_i})^{1-y_i}L(x,y)=i=1N(yi^)yi(1yi^)1yi对似然取对数,然后加负号变成最小化负对数似然,即为交叉熵损失函数的形式NLL(x,y)=JCE=−∑i=1N(yilog⁡(yi^)+(1−yi)log⁡(1−yi^))NLL(x,y)=J_{CE}=-\sum^N_{i=1}(y_i\log(\hat{y_i})+(1-y_i)\log(1-\hat{y_i}))NLL(x,y)=JCE=i=1N(yilog(yi^)+(1yi)log(1yi^))下图是对二分类的交叉熵损失函数的可视化,蓝线是目标值为 0 时输出不同输出的损失,黄线是目标值为 1 时的损失。可以看到约接近目标值损失越小,随着误差变差,损失呈指数增长。
  • 多分类
    在多分类的任务中,交叉熵损失函数的推导思路和二分类是一样的,变化的地方是真实值yiy_iyi现在是一个 One-hot 向量,同时模型输出的压缩由原来的 Sigmoid 函数换成 Softmax 函数。Softmax 函数将每个维度的输出范围都限定在(0,1)(0,1)(0,1)之间,同时所有维度的输出和为 1,用于表示一个概率分布。p(yi∣xi)=∏k=1K(yi^k)yikp(y_i|x_i)=\prod^K_{k=1}(\hat{y_i}^k)^{y_i^k}p(yixi)=k=1K(yi^k)yik其中k∈Kk\in KkK表示 K 个类别中的一类,同样的假设数据点之间独立同分布,可得到负对数似然为NLL(x,y)=JCE=−∑i=1N∑k=1Kyiklog⁡(yi^k)NLL(x,y)=J_{CE}=-\sum^N_{i=1}\sum^K_{k=1}y_i^k\log(\hat{y_i}^k)NLL(x,y)=JCE=i=1Nk=1Kyiklog(yi^k)由于yiy_iyi是一个 one-hot 向量,除了目标类为 1 之外其他类别上的输出都为 0,因此上式也可以写为JCE=−∑i=1Nyicilog⁡(yi^ci)J_{CE}=-\sum^N_{i=1}y_i^{c_i}\log(\hat{y_i}^{c_i})JCE=i=1Nyicilog(yi^ci)其中cic_ici是样本xix_ixi的目标类。通常这个应用于多分类的交叉熵损失函数也被称为 Softmax Loss 或者 Categorical Cross Entropy Loss。
7) log对数损失函数

对数损失函数假设样本服从泊松0–1分布。

  • 特点:
    (1) log对数损失函数能非常好的表征概率分布,在很多场景尤其是多分类,如果需要知道结果属于每个类别的置信度,那它非常适合。
    (2)健壮性不强,相比于hinge loss对噪声更敏感。
    (3)逻辑回归的损失函数就是log对数损失函数。
6)合页损失(Hinge Loss)

合页损失是另外一种二分类损失函数,适用于 maximum-margin 的分类,支持向量机 Support Vector Machine (SVM) 模型的损失函数本质上就是 Hinge Loss + L2 正则化。合页损失的公式如下Jhinge=∑i=1Nmax(0,1−sgn(yi)yi^)J_{hinge}=\sum^N_{i=1}max(0,1-sgn(y_i)\hat{y_i})Jhinge=i=1Nmax(0,1sgn(yi)yi^)下图是yyy为正类, 即sgn(y)=1sgn(y)=1sgn(y)=1时,不同输出的合页损失示意图

可以看到当yyy为正类时,模型输出负值会有较大的惩罚,当模型输出为正值且在 (0,1)(0,1)(0,1)区间时还会有一个较小的惩罚。即合页损失不仅惩罚预测错的,并且对于预测对了但是置信度不高的也会给一个惩罚,只有置信度高的才会有零损失。使用合页损失直觉上理解是要找到一个决策边界,使得所有数据点被这个边界正确地、高置信地被分类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值