均方误差(Mean Square Error,MSE)和平均绝对误差(Mean Absolute Error,MAE) 是回归中最常用的两个损失函数,但是其各有优缺点。为了避免MAE和MSE各自的优缺点,在Faster R-CNN和SSD中使用SmoothL1SmoothL1损失函数,当误差在[−1,1][−1,1] 之间时,SmoothL1SmoothL1损失函数近似于MSE,能够快速的收敛;在其他的区间则近似于MAE,其导数为±1±1,不会对离群值敏感。

本文再介绍几种回归常用的损失函数

  • Huber Loss
  • Log-Cosh Loss
  • Quantile Loss

Huber Loss

Huber损失函数(SmoothL1SmoothL1损失函数是其的一个特例)整合了MAE和MSE各自的优点,并避免其缺点

Lδ(y,f(x))={12(y−f(x))2δ∣y−f(x)∣−12δ2∣y−f(x)∣≤δotherwiseLδ(y,f(x))={12(y−f(x))2∣y−f(x)∣≤δδ∣y−f(x)∣−12δ2otherwise

δδ 是Huber的一个超参数,当真实值和预测值的差值∣y−f(x)∣≤δ∣y−f(x)∣≤δ 时,Huber就是MSE;当差值在(−∞,δ)(−∞,δ)或者 (δ,+∞)(δ,+∞) 时,Huber就是MAE。这样,当误差较大时,使用MAE对离群点不那么敏感;在误差较小时使用MSE,能够快速的收敛;

这里超参数δδ的值的设定就较为重要,和真实值的差值超过该值的样本为异常值。误差的绝对值小于δδ 时,使用MSE;当误差大于δδ 时,使用MAE。

下图给出了不同的δδ 值,Huber的函数曲线。

横轴表示真实值和预测值的差值,纵轴为Huber的函数值。可以看出,δδ 越小其曲线越趋近于MSE;越大,越趋近于MAE。

另外,使用MAE训练神经网络最大的一个问题就是不变的大梯度,这可能导致在使用梯度下降快要结束时,错过了最小点。而对于MSE,梯度会随着损失的减小而减小,使结果更加精确。

在这种情况下,Huber损失就非常有用。它会由于梯度的减小而落在最小值附近。比起MSE,它对异常点更加鲁棒。因此,Huber损失结合了MSE和MAE的优点。但是,Huber损失的问题是我们可能需要不断调整超参数δδ 。

Smooth L1Smooth L1 损失函数可以看作超参数δ=1δ=1 的Huber函数。

Log-Cosh Loss

Log-Cosh是比L2L2 更光滑的损失函数,是误差值的双曲余弦的对数

L(y,f(x))=∑i=1nlogcosh(y−f(x))L(y,f(x))=∑i=1nlog⁡cosh⁡(y−f(x))

其中,yy为真实值,f(x)f(x) 为预测值。

对于较小的误差∣y−f(x)∣∣y−f(x)∣ ,其近似于MSE,收敛下降较快;对于较大的误差∣y−f(x)∣∣y−f(x)∣ 其近似等于∣y−f(x)∣−log(2)∣y−f(x)∣−log(2) ,类似于MAE,不会受到离群点的影响。 Log-Cosh具有Huber 损失的所有有点,且不需要设定超参数。

相比于Huber,Log-Cosh求导比较复杂,计算量较大,在深度学习中使用不多。不过,Log-Cosh处处二阶可微,这在一些机器学习模型中,还是很有用的。例如XGBoost,就是采用牛顿法来寻找最优点。而牛顿法就需要求解二阶导数(Hessian)。因此对于诸如XGBoost这类机器学习框架,损失函数的二阶可微是很有必要的。但Log-cosh损失也并非完美,其仍存在某些问题。比如误差很大的话,一阶梯度和Hessian会变成定值,这就导致XGBoost出现缺少分裂点的情况。

Quantile Loss 分位数损失

通常的回归算法是拟合训练数据的期望或者中位数,而使用分位数损失函数可以通过给定不同的分位点,拟合训练数据的不同分位数。 如下图

设置不同的分位数可以拟合出不同的直线。

分位数损失函数如下:

Lquantile=1N∑i=1N⨿y>f(x)(1−γ)∣y−f(x)∣+⨿y<f(x)γ∣y−f(x)∣Lquantile=1N∑i=1N⨿y>f(x)(1−γ)∣y−f(x)∣+⨿y<f(x)γ∣y−f(x)∣

该函数是一个分段函数,γγ 为分位数系数,yy为真实值,f(x)f(x)为预测值。根据预测值和真实值的大小,分两种情况来开考虑。y>f(x)y>f(x) 为高估,预测值比真实值大;y<f(x)y<f(x)为低估,预测值比真实值小,使用不同过得系数来控制高估和低估在整个损失值的权重 。

特别的,当γ=0.5γ=0.5 时,分位数损失退化为平均绝对误差MAE,也可以将MAE看成是分位数损失的一个特例 - 中位数损失。下图是取不同的中位点[0.25,0.5,0.7][0.25,0.5,0.7]得到不同的分位数损失函数的曲线,也可以看出0.5时就是MAE。

总结

均方误差(Mean Square Error,MSE)和平均绝对误差(Mean Absolute Error,MAE) 可以说是回归损失函数的基础。但是MSE对对离群点(异常值)较敏感,MAE在梯度下降的过程中收敛较慢,就出现各种样的分段损失函数,在loss值较小的区间使用MSE,loss值较大的区间使用MAE。

  • Huber Loss ,需要一个超参数δδ ,来定义离群值。smooth L1smooth L1 是δ=1δ=1 的一种情况。
  • Log-Cosh Loss, Log-Cosh是比L2L2 更光滑的损失函数,是误差值的双曲余弦的对数.
  • Quantile Loss , 分位数损失,则可以设置不同的分位点,控制高估和低估在loss中占的比重。

回归损失函数2 : HUber loss,Log Cosh Loss,以及 Quantile Loss相关推荐

  1. 回归损失函数:Huber Loss

    Huber损失函数,平滑平均绝对误差 相比平方误差损失,Huber损失对于数据中异常值的敏感性要差一些.在值为0时,它也是可微分的.它基本上是绝对值,在误差很小时会变为平方值.误差使其平方值的大小如何 ...

  2. 机器学习初学者都应该知道的5类回归损失函数

    来源: https://heartbeat.fritz.ai/5-regression-loss-functions-all-machine-learners-should-know-4fb140e9 ...

  3. Sklearn 损失函数如何应用到_机器学习大牛最常用的5个回归损失函数,你知道几个?...

    "损失函数"是机器学习优化中至关重要的一部分.L1.L2损失函数相信大多数人都早已不陌生.那你了解Huber损失.Log-Cosh损失.以及常用于计算预测区间的分位数损失么?这些可 ...

  4. 分位数回归损失函数代码实现解析

    目录 1. 绪论 2. 分位数回归 3. 分位数回归损失函数 4. (γ−1)(\gamma - 1)(γ−1)的放入 5. 程序代码表达 1. 绪论 对于分位数回归损失函数,最近看到了两种不同的实现 ...

  5. 回归损失函数:L1,L2,Huber,Log-Cosh,Quantile Loss

    回归损失函数:L1,L2,Huber,Log-Cosh,Quantile Loss 机器学习中所有的算法都需要最大化或最小化一个函数,这个函数被称为"目标函数".其中,我们一般把最 ...

  6. 回归损失函数:Log-Cosh Loss

    Log-Cosh损失函数 Log-Cosh是应用于回归任务中的另一种损失函数,它比L2损失更平滑.Log-cosh是预测误差的双曲余弦的对数. 优点: 对于较小的X值,log(cosh(x))约等于( ...

  7. 目标检测回归损失函数简介:SmoothL1/IoU/GIoU/DIoU/CIoU Loss

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 来源:极市平台 目标检测任务的损失函数由Classificitio ...

  8. 【回归损失函数】L1(MAE)、L2(MSE)、Smooth L1 Loss详解

    1. L1 Loss(Mean Absolute Error,MAE) 平均绝对误差(MAE)是一种用于回归模型的损失函数.MAE 是目标变量和预测变量之间绝对差值之和,因此它衡量的是一组预测值中的平 ...

  9. 目标检测回归损失函数:SmoothL1/IoU/GIoU/DIoU/CIoU Loss

    文章目录 1. Smooth L1 Loss 1.1 假设x为预测框和真实框之间的数值差异,常用的L1和L2 Loss定义为: 1.2 上述的3个损失函数对x的导数分别为: 1.3 实际目标检测框回归 ...

最新文章

  1. vm安装u盘linux,vmware 安装centos 插入u盘报错,大神请指导
  2. 为何要把你的SAP运行在Oracle数据库上?
  3. nginx 配置404错误页面
  4. linux make编译卡死,为linux内核编译make文件时出现问题?
  5. 【ARM】Tiny4412裸板编程之异常(软中断)
  6. enkey java_近期的Java项目(前端)
  7. .NET 4.0新增命名空间:System.Collections.Concurrent
  8. 原版英文书籍《Linux命令行》阅读记录3 | 解析文件的描述含义和阅读文件
  9. Linux下端口占用解决方法
  10. java实例摘要(四)
  11. ORACLE数据库异步IO介绍
  12. 2018,扬帆起航!
  13. 数据挖掘入门到精通—R语言视频教程
  14. oracle数据库的sql语句练习1
  15. XML/HTML/CSS/JS之间的区别和联系
  16. 聚类分析的基本概念和方法
  17. 《如何搭建小微企业风控模型》第三节 风控模型概览
  18. 教你如何优秀的选择付费代理ip的提供商
  19. Android第三方开发包值高德地图SDK使用介绍
  20. Halcon模版匹配

热门文章

  1. 利用FFmpeg玩转Android视频录制与压缩(三)
  2. 访问虚拟机上的本地网站
  3. java上机实验学习笔记————实验七 图形用户界面设计
  4. 潜龙号开启水下机器人_潜龙二号水下机器人:我的老家在沈阳
  5. EventBus 事件驱动
  6. 河北工程科技学院计算机专业,计算机科学与技术系与河北工程大学信息与电气工程学院联合召开一流专业建设交流会...
  7. online learning的介绍
  8. 认知安全:安全分析师的超级助手
  9. 项目开发-树形层级结构中的数量统计
  10. 八年级下册册计算机计划,长春版八年级信息技术下册全册教案