常见损失函数总结

常见损失函数

  • 损失函数: 用来评价模型的预测值和真实值不一致的程度,损失函数越好,通常模型的性能越好。不同的模型用的损失函数一般也不一样。

0-1损失函数(zero-one loss)

  • 公式: L ( Y , f ( X ) ) = { 1 Y = f ( X ) 0 Y ≠ f ( X ) L(Y,f(X))= \begin{cases} 1 & Y=f(X) \\ 0 & Y≠f(X)\end{cases} L(Y,f(X))={10Y=f(X)Y=f(X)即预测值等于真实值则损失为0,否则损失为1
  • 0-1损失函数对应分类错误的个数,但是它是一个非凸函数,不太适用.

均方差损失损失函数

  • 均方差Mean Squared Error(MSE)损失是机器学习、深度学习回归任务中最常用的一种损失函数,也称为L2 Loss。其基本形式如下: J M S E = 1 N ∑ i = 1 N ( y i − y i ^ ) 2 J_{MSE}=\frac{1}{N} ∑_{i=1}^N(y_i-\hat{y_i} )^2 JMSE=N1i=1N(yiyi^)2
  • 均方误差的由来
    • 实际上在一定的假设下,我们可以使用最大化似然得到均方差损失的形式。
    • 假设模型预测 ( y i ^ ) (\hat{y_i}) (yi^)与真实值 ( y i ) (y_i) (yi)之间的误差服从标准正太分布: p ( x ) = 1 2 π e x p ⁡ ( x 2 2 ) p(x)=\frac{1}{\sqrt{2π}}exp⁡(\frac{x^2}{2}) p(x)=2π 1exp(2x2)
    • 则给定一个样本 x i x_i xi模型输出真实值 y i y_i yi的概率为: p ( y i ∣ x i ) = 1 2 π e x p ⁡ ( y i − y i ^ 2 2 ) p(y_i |x_i )=\frac{1}{\sqrt{2π}} exp⁡(\frac{y_i-\hat{y_i}^2}{2}) p(yixi)=2π 1exp(2yiyi^2)
    • 进一步我们假设数据集中 N N N个样本点之间相互独立,则给定所有 X X X输出所有真实值 Y Y Y的概率,即似然函数为: L ( X , Y ) = ∏ i = 1 N 1 2 π e x p ⁡ ( y i − y i ^ 2 2 ) L(X,Y)=∏_{i=1}^N \frac{1}{\sqrt{2π}} exp⁡(\frac{y_i-\hat{y_i}^2}{2}) L(X,Y)=i=1N2π 1exp(2yiyi^2)
    • 取对数,得到对数似然函数: L L ( X , Y ) = l o g ⁡ ( L ( X , Y ) ) = − N 2 l o g 2 π − 1 2 ∑ i = 1 N ( y i − y i ^ ) 2 LL(X,Y)=log⁡(L(X,Y))=-\frac{N}{2} log2π-\frac{1}{2} ∑_{i=1}^N (y_i-\hat{y_i })^2 LL(X,Y)=log(L(X,Y))=2Nlog2π21i=1N(yiyi^)2
    • 那最大似然估计,就可以通过最小化最后一项来实现: N L L ( X , Y ) = − 1 2 ∑ i = 1 N ( y i − y i ^ ) 2 NLL(X,Y)=-\frac{1}{2} ∑_{i=1}^N (y_i-\hat{y_i })^2 NLL(X,Y)=21i=1N(yiyi^)2
    • 可以看到实际上就是均方差损失的形式。也就是假设模型输出与观察值的误差服从高斯分布的前提下,最小化均方差损失函数与极大似然估计本质上是一致的。

绝对值损失函数

  • 平均绝对误差Mean Absolute Error(MAE) 也是一种常用的损失函数,也称为 L1 Loss。其基本形式为绝对值损失函数是计算预测值与目标值的差的绝对值: J M A E = ∣ Y − f ( X ) ∣ = 1 N ∑ i = 1 N ∣ y i − f ( x i ) ∣ J_{MAE}=|Y-f(X)|=\frac{1}{N} ∑_{i=1}^N|y_i-f(x_i)| JMAE=Yf(X)=N1i=1Nyif(xi)
  • 均方误差的由来
    • 假设模型预测 y i ^ \hat{y_i} yi^与真实值 y i y_i yi之间的误差服从拉普拉斯分布: p ( x ) = 1 2 e x p ⁡ ( − ∣ x ∣ ) p(x)=\frac{1}{2}exp⁡(-|x|) p(x)=21exp(x)
    • 则给定一个样本 x i x_i xi模型输出真实值 y i y_i yi的概率为: p ( y i ∣ x i ) = 1 2 e x p ⁡ ( − ∣ y i − y i ^ ∣ ) p(y_i |x_i )=\frac{1}{2} exp⁡(-|y_i-\hat{y_i}|) p(yixi)=21exp(yiyi^)
    • 进一步我们假设数据集中 N N N个样本点之间相互独立,则给定所有 X X X输出所有真实值 Y Y Y的概率,即似然函数为: L ( X , Y ) = ∏ i = 1 N 1 2 e x p ⁡ ( − ∣ y i − y i ^ ∣ ) L(X,Y)=∏_{i=1}^N\frac{1}{2} exp⁡(-|y_i-\hat{y_i}|) L(X,Y)=i=1N21exp(yiyi^)
    • 取对数得到对数似然函数: L L ( X , Y ) = l o g ⁡ ( L ( X , Y ) ) = − N 2 − 1 2 ∑ i = 1 N ∣ y i − y i ^ ∣ LL(X,Y)=log⁡(L(X,Y))=-\frac{N}{2}-\frac{1}{2} ∑_{i=1}^N|y_i-\hat{y_i}| LL(X,Y)=log(L(X,Y))=2N21i=1Nyiyi^
    • 那最大似然估计,就可以通过最小化最后一项来实现: N L L ( X , Y ) = 1 2 ∑ i = 1 N ∣ y i − y i ^ ∣ NLL(X,Y)=\frac{1}{2} ∑_{i=1}^N|y_i-\hat{y_i}| NLL(X,Y)=21i=1Nyiyi^
  • MAE 和 MSE 作为损失函数的主要区别是:MSE 损失相比 MAE 通常可以更快地收敛,但 MAE 损失对于 outlier 更加健壮,即更加不易受到 outlier 影响。

交叉熵损失

  • 上文介绍的几种损失函数都是适用于回归问题损失函数,对于分类问题,最常用的损失函数是交叉熵损失函数 Cross Entropy Loss。
  • 二分类情况:
    • 在二分类中我们通常使用Sigmoid函数将模型的输出压缩到(0, 1)区间内,即 y i ^ ∈ ( 0 , 1 ) \hat{y_i}∈(0,1) yi^(0,1)
    • 通常我们将模型输出值 y i ^ \hat{y_i} yi^用来代表输入 x i x_i xi为正类的概率。同时也得到了为负类的概率为 1 − y i ^ 1-\hat{y_i} 1yi^: p ( y i = 1 │ x i ) = y i ^ p(y_i=1│x_i )=\hat{y_i} p(yi=1xi)=yi^ p ( y i = 0 │ x i ) = 1 − y i ^ p(y_i=0│x_i )=1-\hat{y_i} p(yi=0xi)=1yi^
    • 将两条式子合并成一条: p ( y i │ x i ) = ( y i ^ ) y i ( 1 − y i ^ ) 1 − y i p(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 = 1 N ( y i ^ ) y i ( 1 − y i ^ ) 1 − y i L(X,Y)=∏_{i=1}^N(\hat{y_i})^{y_i} (1-\hat{y_i} )^{1-y_i} L(X,Y)=i=1N(yi^)yi(1yi^)1yi
    • 取对数,得到对数似然函数: L L ( X , Y ) = l o g ⁡ ( L ( X , Y ) ) = ∑ i = 1 N y i l o g ⁡ ( y i ^ ) + ( 1 − y i ) l o g ⁡ ( 1 − y i ^ ) LL(X,Y)=log⁡(L(X,Y))=∑_{i=1}^Ny_i log⁡(\hat{y_i})+(1-y_i)log⁡(1-\hat{y_i}) LL(X,Y)=log(L(X,Y))=i=1Nyilog(yi^)+(1yi)log(1yi^)
    • 最大化对数似然函数,等价于最小化下面这个函数: N L L ( X , Y ) = J C E = − ( ∑ i = 1 N y i l o g ⁡ ( y i ^ ) + ( 1 − y i ) l o g ⁡ ( 1 − y i ^ ) ) NLL(X,Y)=J_{CE}=-(∑_{i=1}^Ny_i log⁡(\hat{y_i})+(1-y_i)log⁡(1-\hat{y_i})) NLL(X,Y)=JCE=(i=1Nyilog(yi^)+(1yi)log(1yi^))
    • 下图是对二分类的交叉熵损失函数的可视化,蓝线是目标值为0(标签为0)时不同输出值的损失,黄线是目标值为1(标签为0)时的损失。可以看到越接近目标值损失越小,随着误差变差,损失呈指数增长。
  • 多分类情况:
    • 在多分类的任务中,交叉熵损失函数的推导思路和二分类是一样的,变化的地方是真实值 y i y_i yi现在是一个One-hot编码的向量,同时模型输出的压缩由原来的 Sigmoid 函数换成 Softmax 函数。
    • 假设真实值为: y i = [ y i 1 , y i 2 , … , y i K ] y_i=[y_i^1,y_i^2,…,y_i^K] yi=[yi1,yi2,,yiK],其中只有一个元素 y i j y_i^j yij为1,表示 x i x_i xi属于第 j j j类,其他都为0, K K K为类别个数。模型经过Softmax函数后的输出为 y i ^ = [ y i 1 ^ , y i 2 ^ , … , y i K ^ ] \hat{y_i}=[\hat{y_i^1},\hat{y_i^2},…,\hat{y_i^K}] yi^=[yi1^,yi2^,,yiK^],其中 y i j ^ ∈ ( 0 , 1 ) \hat{y_i^j}∈(0,1) yij^(0,1),表示模型将 x i x_i xi分为第 j j j类的概率,并且有 ∑ j = 1 d y i j ^ = 1 ∑_{j=1}^d\hat{y_i^j}=1 j=1dyij^=1
    • 那么分类模型的可以表示为下面的条件概率公式: p ( y i ∣ x i ) = ∏ k = 1 K ( y i k ^ ) ( y i k ) p(y_i |x_i)=∏_{k=1}^K(\hat{y_i^k})^(y_i^k ) p(yixi)=k=1K(yik^)(yik)
    • 似然函数: L ( X , Y ) = ∏ i = 1 N ∏ k = 1 K ( y i k ^ ) ( y i k ) L(X,Y)=∏_{i=1}^N∏_{k=1}^K(\hat{y_i^k})^(y_i^k ) L(X,Y)=i=1Nk=1K(yik^)(yik)
    • 对数似然函数: L L ( X , Y ) = l o g ⁡ ( L ( X , Y ) ) = ∑ i = 1 N ∑ k = 1 K y i k l o g ( y i k ^ ) LL(X,Y)=log⁡(L(X,Y))=∑_{i=1}^N∑_{k=1}^Ky_i^k log(\hat{y_i^k}) LL(X,Y)=log(L(X,Y))=i=1Nk=1Kyiklog(yik^)
    • 最大化对数似然函数,相当与最小化下面函数: N L L ( X , Y ) = J C E = − ∑ i = 1 N ∑ k = 1 K y i k l o g ( y i k ^ ) NLL(X,Y)=J_{CE}=-∑_{i=1}^N∑_{k=1}^Ky_i^k log(\hat{y_i^k}) NLL(X,Y)=JCE=i=1Nk=1Kyiklog(yik^)
    • 由于 y i y_i yi是中只有一个1其余都是0,所以可以写作: N L L ( X , Y ) = J C E = − ∑ i = 1 N y i c i l o g ( y i c i ^ ) NLL(X,Y)=J_{CE}=-∑_{i=1}^Ny_i^{c_i} log(\hat{y_i^{c_i}}) NLL(X,Y)=JCE=i=1Nyicilog(yici^) c i c_i ci是样本 x i x_i xi的目标类别.
  • 分类使用交叉熵损失函数的原因:
    • 分类中为什么不用均方差损失?上文在介绍均方差损失的时候讲到实际上均方差损失假设了误差服从高斯分布,在分类任务下这个假设没办法被满足,因此效果会很差。
    • 为什么是交叉熵损失呢?也可以用信息论来解释交叉熵损失:
    • 假设对于样本 x i x_i xi存在一个最优分布 y i ∗ y_i^* yi真实地表明了这个样本属于各个类别的概率,那么我们希望模型的输出 y i ^ \hat{y_i} yi^尽可能地逼近这个最优分布.
    • 在信息论中,我们可以使用 KL散度来衡量两个分布的相似性。给定分布 p p p和分布 q q q,两者的 KL 散度公式: K L ( p , q ) = ∑ k = 1 K p l o g ( p ) − ∑ k = 1 K p l o g ( q ) KL(p,q)=∑_{k=1}^Kplog(p) -∑_{k=1}^Kplog(q) KL(p,q)=k=1Kplog(p)k=1Kplog(q)其中第一项为分布 p p p的信息熵,第二项为分布 p p p q q q的交叉熵。
    • y i ∗ y_i^* yi y i ^ \hat{y_i} yi^ 带入公式得到: K L ( y i ∗ , y i ^ ) = ∑ k = 1 K y i ∗ l o g ( y i ∗ ) − ∑ k = 1 K y i ∗ l o g ( y i ^ ) KL(y_i^*,\hat{y_i})=∑_{k=1}^Ky_i^*log(y_i^*) -∑_{k=1}^Ky_i^*log(\hat{y_i}) KL(yi,yi^)=k=1Kyilog(yi)k=1Kyilog(yi^)
    • 由于我们希望两个分布尽量相近,因此我们最小化KL散度。同时由于上式第一项信息熵仅与最优分布 y i ∗ y_i^* yi本身相关,变成最小化最后一项: − ∑ k = 1 K y i ∗ l o g ( y i ^ ) -∑_{k=1}^Ky_i^*log(\hat{y_i}) k=1Kyilog(yi^)
    • 这个是针对单个训练样本的损失函数,如果考虑整个数据集,则: J C E = − ∑ i = 1 N ∑ k = 1 K y i k l o g ( y i k ^ ) = − ∑ i = 1 N y i c i l o g ( y i c i ^ ) J_{CE}=-∑_{i=1}^N∑_{k=1}^Ky_i^k log(\hat{y_i^k}) =-∑_{i=1}^Ny_i^{c_i} log(\hat{y_i^{c_i }} ) JCE=i=1Nk=1Kyiklog(yik^)=i=1Nyicilog(yici^)
    • 可以看到通过最小化交叉熵的角度推导出来的结果和使用最大 化似然得到的结果是一致的

合页损失Hinge Loss

  • 合页损失Hinge Loss是另外一种二分类损失函数,适用于maximum-margin的分类,软间隔支持向量机模型的损失函数本质上就是 Hinge Loss + L2 正则化。
  • 合页损失的公式如下: J h i n g e = ∑ i = 1 N m a x ⁡ ( 0 , 1 − s g n ( y i ) y i ^ ) J_{hinge}=∑_{i=1}^N max⁡(0,1-sgn(y_i ) \hat{y_i } ) Jhinge=i=1Nmax(0,1sgn(yi)yi^)
  • 下图是 y i y_i yi正类,即 s g n ( y i ) = 1 sgn(y_i )=1 sgn(yi)=1时,不同输出的合页损失示意图:
  • 可以看到当 y i y_i yi为正类时,模型输出负值会有较大的惩罚,当模型输出为正值且在 ( 0 , 1 ) (0,1) (0,1)区间时还会有一个较小的惩罚。即合页损失不仅惩罚预测错的,并且对于预测对了但是置信度不高的也会给一个惩罚,只有置信度高的才会有零损失。使用合页损失直觉上理解是要找到一个决策边界,使得所有数据点被这个边界正确地、高置信地被分类。

参考连接:https://zhuanlan.zhihu.com/p/77686118

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值