经典损失函数一览

本文介绍了回归问题中的绝对值损失、平方损失和Huber损失,以及分类问题中的0-1 Loss、Cross Entropy Loss、Hinge Loss和Exponential Loss。重点探讨了各类损失函数的特点和应用场景,例如平方损失对异常点敏感,而Huber损失结合了L1和L2的优点。Cross Entropy Loss因连续可导和对异常点干扰小而广泛应用。
部署运行你感兴趣的模型镜像

损失函数(Loss Function)用来估量模型的预测值 y ^ = f ( x ) \hat y = f(x) y^=f(x) 与真实值 y y y 的不一致程度。这里做一个简单梳理,以备忘,原文见损失函数清单

回归问题

常见的回归问题损失函数有绝对值损失、平方损失、Huber损失。

绝对值损失

又叫做L1损失。

L ( y , y ^ ) = ∣ y − y ^ ∣ L(y, \hat y) = |y - \hat y| L(y,y^)=yy^

M A E = 1 n ∑ i = 1 n ∣ y − y ^ ∣ MAE = \frac{1}{n} \sum_{i=1}^{n} |y - \hat y| MAE=n1i=1nyy^

MAE一个问题是在 y − y ^ = 0 y - \hat y=0 yy^=0 处不可导,优化比较困难。

平方损失

又称为L2损失。

L ( y , y ^ ) = ( y − y ^ ) 2 L(y, \hat y) = (y - \hat y)^2 L(y,y^)=(yy^)2

M S E = 1 n ∑ i = 1 n ( y ^ − y ) 2 MSE = \frac{1}{n} \sum_{i=1}^{n}(\hat y - y)^2 MSE=n1i=1n(y^y)2

MSE一个问题是对异常点敏感,由于平方的存在,会放大对异常点的关注。

Huber损失

相当于是L1和L2损失的一个结合。

L δ ( y , y ^ ) = { 1 2 ( y − y ^ ) 2 , f o r ∣ y − y ^ ∣ ≤ δ δ ∣ y − y ^ ∣ − 1 2 δ 2 , o t h e r w i s e L_{\delta}(y, \hat y) = \begin{cases} \frac{1}{2}(y - \hat y)^2, && for |y - \hat y| \le \delta \\ \delta |y - \hat y| - \frac{1}{2} \delta ^2, && otherwise \end{cases} Lδ(y,y^)={21(yy^)2,δyy^21δ2,foryy^δotherwise

Huber损失是对上述两者的综合,当 ∣ y − y ^ ∣ \mid y-\hat y\mid yy^小于指定的值 δ \delta δ 时,变为平方损失,大于 δ \delta δ 时,则变成类似于绝对值损失。即避免了在 ∣ y − y ^ ∣ \mid y-\hat y\mid yy^在0处不可导问题,也解决了其值过大对异常值敏感的问题。值得注意的是,该函数在 δ \delta δ处连续。

三种Loss随残差 ∣ y − y ^ ∣ \mid y-\hat y\mid yy^的大致走势如下图。

algo-huber-loss

分类问题

一般来说,二分类机器学习模型输出有两个部分:线性输出 s s s和非线性输出 g ( s ) g(s) g(s)。其中,线性输出score一般是

s = w T x s = w^Tx s=wTx

非线性输出常见的如sigmoid:

g ( s ) = 1 1 + e − s g(s) = \frac{1}{1 + e^{-s}} g(s)=1+es1

对应label y y y一般两种表示方式, { + 1 , − 1 } \{+1, -1\} {+1,1} { 1 , 0 } \{1, 0\} {1,0}表示正负类。其中用 { + 1 , − 1 } \{+1, -1\} {+1,1}表示正类有个好处,就是从 y s ys ys可以看出是否是误分类。

  • y s ≥ 0 ys \ge 0 ys0,则预测正确
  • y s &lt; 0 ys \lt 0 ys<0,则预测错误

这样, y s ys ys和回归模型中残差 s − y s - y sy非常类似,以 y s ys ys为自变量作图,方便理解。

0-1 Loss

0-1 Loss很直观,如果误分类则误差为1,否则为0。

L ( y , s ) = { 0 , y s ≥ 0 1 , y s &lt; 0 L(y, s) = \begin{cases} 0, &amp;&amp; ys \ge 0\\ 1, &amp;&amp; ys \lt 0 \end{cases} L(y,s)={0,1,ys0ys<0

有两个明显的问题

  • 0-1 Loss对每个误分类点惩罚相同,即使错的比较离谱(ys远小于0)
  • 0-1 Loss不连续、非凸、不可导,梯度优化算法不适用

所以实际模型中0-1 Loss用的很少,后续介绍的误差,多数可看做0-1 Loss的一个上界。

Cross Entropy Loss

Cross Entropy Loss是非常重要的损失函数,也是应用最多的分类损失函数之一。根据label的表示方式,一般有两种常见形式。

如果label表示为 { 1 , 0 } \{1, 0\} {1,0},形式如下

L ( y , y ^ ) = − [ y l o g ( y ^ ) + ( 1 − y ) l o g ( 1 − y ^ ) ] L(y, \hat y) = -[ylog(\hat y) + (1 - y)log(1 - \hat y)] L(y,y^)=[ylog(y^)+(1y)log(1y^)]

简单看其来由。模型输出预测类别的概率

p = { p ( y = 1 ∣ x ) = y ^ p ( y = 0 ∣ x ) = 1 − y ^ p = \begin{cases} p(y = 1|x) = \hat y \\ p(y = 0|x) = 1 - \hat y \end{cases} p={p(y=1x)=y^p(y=0x)=1y^

以上可整合到一个公式中

p ( y ∣ x ) = y ^ y ( 1 − y ^ ) ( 1 − y ) p(y|x) = \hat y^y(1 - \hat y)^{(1 - y)} p(yx)=y^y(1y^)(1y)

根据极大似然估计原理,我们希望p越大越好,为了方便计算,同时引入负对数(不影响单调性)。

L ( y , y ^ ) = − l o g ( p ( y ∣ x ) ) = − [ y l o g ( y ^ ) + ( 1 − y ) l o g ( 1 − y ^ ) ] L(y, \hat y) = -log(p(y|x)) = -[ylog(\hat y) + (1 - y)log(1 - \hat y)] L(y,y^)=log(p(yx))=[ylog(y^)+(1y)log(1y^)]

其中

y ^ = 1 1 + e − s \hat y = \frac {1}{1 + e^{-s}} y^=1+es1

代入可得出

$$
L(y, \hat y) = \begin{cases}

  • log(\hat y) = log(1 + e^{-s}) && y = 1 \
  • log(1 - \hat y) = log(1 + e^s) && y = 0
    \end{cases}
    $$

当y=1时,s越大loss越小;当y=0时,s越小loss越小,make sense。

如果label表示为 { + 1 , − 1 } \{+1, -1\} {+1,1},形式如下

L ( y , y ^ ) = l o g ( 1 + e − y s ) L(y, \hat y) = log(1 + e^{-ys}) L(y,y^)=log(1+eys)

其实上述式子完全等价,只不过将y=1或y=0两种情况整合到一起。ys的符号反映预测准确性,其数值大小反映预测置信度。

交叉熵损失在实数域内,Loss近似线性变化。尤其是当 ys << 0 的时候,Loss 更近似线性。这样,模型受异常点的干扰就较小。 而且交叉熵 Loss 连续可导,便于求导计算,应用比较广泛。

Hinge Loss

The hinge loss is used for maximum-margin classification, most notably for support vector machines (SVMs).

L ( y , s ) = m a x ( 0 , 1 − y s ) L(y, s) = max(0, 1 - ys) L(y,s)=max(0,1ys)

Hinge Loss名字很象形,其形状类似合页。一般用于SVM中,体现SVM距离最大化思想。当Loss大于0时,是线性函数,可以用梯度优化算法。此外 y s &gt; 1 ys &gt; 1 ys>1损失皆为0,可以带来稀疏解,使得SVM仅通过少量支持向量就能确定最终超平面。

algo-hinge-loss

Exponential Loss

指数损失,多用于AdaBoost中,其它算法中用的较少。

L ( y , s ) = e − y s L(y, s) = e^{-ys} L(y,s)=eys

Modified Huber Loss

Huber Loss整合MAE和MSE的优点,稍作改进,同样可用于分类问题,称为Modified Huber Loss。

L ( y , s ) = { m a x ( 0 , 1 − y s ) 2 , y s ≥ − 1 − 4 y s , y s &lt; − 1 L(y, s) = \begin {cases} max(0, 1 - ys)^2, &amp;&amp; ys \ge -1 \\ -4ys, &amp;&amp; ys \lt -1 \end{cases} L(y,s)={max(0,1ys)2,4ys,ys1ys<1

该函数分三段

  • [ − I n f , − 1 ] [-Inf, -1] [Inf,1]线性
  • [ − 1 , 1 ] [-1, 1] [1,1]二次
  • [ 1 , I n f ] [1, Inf] [1,Inf]常数0
分类问题损失函数对比

对比不同损失函数随ys的变化趋势。有一点值得注意,就是各个损失函数在 y s ys ys很小时,损失一般不超过线性(指数损失除外),否则对异常值太敏感。

algo-loss-function-1

algo-loss-function-2

您可能感兴趣的与本文相关的镜像

GPT-oss:20b

GPT-oss:20b

图文对话
Gpt-oss

GPT OSS 是OpenAI 推出的重量级开放模型,面向强推理、智能体任务以及多样化开发场景

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值