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

机器学习中所有的算法都需要最大化或最小化一个函数,这个函数被称为“目标函数”。其中,我们一般把最小化的一类函数,称为“损失函数”。它能根据预测结果,衡量出模型预测能力的好坏。

在实际应用中,选取损失函数会受到诸多因素的制约,比如是否有异常值、机器学习算法的选择、梯度下降的时间复杂度、求导的难易程度以及预测值的置信度等等。因此,不存在一种损失函数适用于处理所有类型的数据。损失函数大致可分为两类:分类问题的损失函数和回归问题的损失函数。这篇文章介绍不同种类的回归损失函数以及它们的作用。

1、MAE / L1 + MSE / L2

(1)平均绝对误差(MAE / L1)

Y轴:MAE损失。X轴:预测值。

平均绝对误差(MAE)是一种用于回归模型的损失函数。MAE是目标值和预测值之差的绝对值之和。其只衡量了预测值误差的平均模长,而不考虑方向,取值范围也是从0到正无穷(如果考虑方向,则是残差/误差的总和——平均偏差(MBE))。

(2)均方误差(MSE / L2)

Y轴:MSE损失。X轴:预测值。

均方误差(MSE)是最常用的回归损失函数,计算方法是求预测值与真实值之间距离的平方和。MSE函数的图像中,目标值是100,预测值的范围从-10000到10000,Y轴代表的MSE取值范围是从0到正无穷,并且在预测值为100处达到最小。

(3)MSE(L2损失)与MAE(L1损失)的分析

简单来说,MSE计算简便,但MAE对异常点有更好的鲁棒性。训练一个机器学习模型时,目标就是找到损失函数达到极小值的点。当预测值等于真实值时,这两种函数都能达到最小。

分析:MSE对误差取了平方(令e=真实值-预测值),因此若e>1,则MSE会进一步增大误差。如果数据中存在异常点,那么e值就会很大,而e²则会远大于|e|。因此,相对于使用MAE计算损失,使用MSE的模型会赋予异常点更大的权重。用RMSE(即MSE的平方根,同MAE在同一量级中)计算损失的模型会以牺牲了其他样本的误差为代价,朝着减小异常点误差的方向更新。然而这就会降低模型的整体性能。

直观上可以这样理解:如果我们最小化MSE来对所有的样本点只给出一个预测值,那么这个值一定是所有目标值的平均值。但如果是最小化MAE,那么这个值,则会是所有样本点目标值的中位数。对异常值而言,中位数比均值更加鲁棒,因此MAE对于异常值也比MSE更稳定。

如何选择损失函数:如果训练数据被异常点所污染(比如,在训练数据中存在大量错误的反例和正例标记,但是在测试集中没有这个问题)或者异常点代表在商业中很重要的异常情况,并且需要被检测出来,则应选用MSE损失函数。相反,如果只把异常值当作受损数据,则应选用MAE损失函数。

MAE存在一个严重的问题(特别是对于神经网络):更新的梯度始终相同,也就是说,即使对于很小的损失值,梯度也很大。这样不利于模型的学习。为了解决这个缺陷,可以使用变化的学习率,在损失接近最小值时降低学习率。

MSE在这种情况下的表现就很好,即便使用固定的学习率也可以有效收敛。MSE损失的梯度随损失增大而增大,而损失趋于0时则会减小。这使得在训练结束时,使用MSE模型的结果会更精确。

总结:处理异常点时,L1损失函数更稳定,但它的导数不连续,因此求解效率较低。L2损失函数对异常点更敏感,但通过令其导数为0,可以得到更稳定的封闭解。

二者兼有的问题是:在某些情况下,上述两种损失函数都不能满足需求。例如,若数据中90%的样本对应的目标值为150,剩下10%在0到30之间。那么使用MAE作为损失函数的模型可能会忽视10%的异常点,而对所有样本的预测值都为150。这是因为模型会按中位数来预测。而使用MSE的模型则会给出很多介于0到30的预测值,因为模型会向异常点偏移。上述两种结果在许多商业场景中都是不可取的。最简单的办法是对目标变量进行变换。而另一种办法则是换一个损失函数。

2、Huber Loss

Y轴:Huber损失。X轴:预测值。真值取0。

Huber损失,平滑的平均绝对误差。Huber损失对数据中的异常点没有平方误差损失那么敏感。它在0也可微分。本质上,Huber损失是绝对误差,只是在误差很小时,就变为平方误差。误差降到多小时变为平方误差由超参数δ(delta)来控制。当Huber损失在 [0-δ,0+δ] 之间时,等价为MSE,而在 [-∞,δ] 和 [δ,+∞] 时为MAE。

这里超参数delta的选择非常重要,因为这决定了对异常点的定义。当残差大于delta,应当采用L1(对较大的异常值不那么敏感)来最小化,而残差小于超参数,则用L2来最小化。

如何选择损失函数:使用MAE训练神经网络最大的一个问题就是不变的大梯度,这可能导致在使用梯度下降快要结束时,错过了最小点。而对于MSE,梯度会随着损失的减小而减小,使结果更加精确。在这种情况下,Huber损失就非常有用。它会由于梯度的减小而落在最小值附近。比起MSE,它对异常点更加鲁棒。因此,Huber损失结合了MSE和MAE的优点。但是,Huber损失的问题是可能需要不断调整超参数delta

3、Log-Cosh Loss

Y轴:Log-cosh损失。X轴:预测值。真值取0。

Log-cosh损失是另一种应用于回归问题中的,且比L2更平滑的的损失函数。它的计算方式是预测误差的双曲余弦的对数

优点:对于较小的x,log(cosh(x))近似等于(x^2)/2,对于较大的x,近似等于abs(x)-log(2)。这意味着‘logcosh’基本类似于均方误差,但不易受到异常点的影响。它具有Huber损失所有的优点,但不同于Huber损失的是,Log-cosh二阶处处可微。

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

4、Quantile Loss

γ是所需的分位数,其值介于0和1之间。

Y轴:分位数损失。X轴:预测值。Y的真值为0。

许多商业问题的决策通常希望了解预测中的不确定性,更关注区间预测而不仅是点预测时,分位数损失函数就很有用。

使用最小二乘回归进行区间预测,基于的假设是残差(y-y_hat)是独立变量,且方差保持不变。一旦违背了这条假设,那么线性回归模型就不成立。这时,就可以使用分位数损失和分位数回归,因为即便对于具有变化方差或非正态分布的残差,基于分位数损失的回归也能给出合理的预测区间

理解分位数损失函数:如何选取合适的分位值取决于我们对正误差和反误差的重视程度。损失函数通过分位值(γ)对高估和低估给予不同的惩罚。例如,当分位数损失函数γ=0.25时,对高估的惩罚更大,使得预测值略低于中值。

这个损失函数也可以在神经网络或基于树的模型中计算预测区间。在用Sklearn实现梯度提升树回归模型的示例中,使用分位数损失可以得到90%的预测区间。其中上限为γ=0.95,下限为γ=0.05。

参考:

不同种类的损失函数以及它们的作用

回归损失函数:L1,L2,Huber,Log-Cosh,Quantile Loss相关推荐

  1. 回归损失函数2 : HUber loss,Log Cosh Loss,以及 Quantile Loss

    均方误差(Mean Square Error,MSE)和平均绝对误差(Mean Absolute Error,MAE) 是回归中最常用的两个损失函数,但是其各有优缺点.为了避免MAE和MSE各自的优缺 ...

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

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

  3. 目标检测回归损失函数——L1、L2、smooth L1

    一. L1 Loss 1. 函数特性 L1 Loss也称为平均绝对值误差(MAE),是指模型预测值f(x)和真实值y之间绝对差值的平均值,公式如下: 其中 和 分别表示第 个样本的预测值及相应真实值, ...

  4. 如何为模型选择合适的损失函数?所有ML学习者应该知道的5种回归损失函数

    作者 | Prince Grover 译者 | 张建军 整理 | 阿司匹林.Jane 出品 | AI科技大本营 [导读]没有一个损失函数可以适用于所有类型的数据.损失函数的选择取决于许多因素,包括是否 ...

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

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

  6. 机器学习02——回归问题中的损失函数 (L2损失L1损失Huber损失函数)

    回归问题预测中的残差 • 预测残差:真实值和预测值之间的差异: ? = ? − ?1 • 忽略预测残差的正负号:残差的平方:?**2 • 最佳模型:残差平方和(Residual Sum of Squa ...

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

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

  8. 目标检测中的BBox 回归损失函数-L2,smooth L1,IoU,GIoU,DIoU,CIoU,Focal-EIoU,Alpha-IoU,SIoU

    目标检测的两个任务,分类和位置回归,本帖将经典的位置回归损失函数总结如下,按发表时间顺序. L1.L2.smooth L1 loss 提出smooth L1 loss的论文: L1最低点是不可导的,所 ...

  9. 目标检测——Faster R_CNN使用smooth L1作为bbox的回归损失函数原因

    目标检测--Faster R_CNN使用smooth L1作为bbox的回归损失函数原因 前情提要-- 网上关于目标检测框架--faster r_cnn有太多太好的博文,这是我在组会讲述faster  ...

最新文章

  1. 图片怎么等比缩放_图片300kb,50kb压缩【方法笔记】
  2. CMD指令收集(持续)
  3. notepad++中的unexpected indent
  4. mariadb mysql同步_CentOS7安装配置MariaDB(mysql)数据主从同步
  5. 数据库的硬迁移和mysql 5.5.38源码安装
  6. [转]Intellij idea创建javaWeb以及Servlet简单实现
  7. STM32与多台MS5803压力传感器I2C通讯
  8. FOC电机控制之SVPWM原理与实现
  9. 《游戏引擎架构》中英词汇索引表
  10. ffmpeg gl-transitions 图片合成视频 转场特效
  11. 不能错过!​9个让你随时保持精力充沛的习惯
  12. 第一讲_SQP添加与查询语句
  13. deepin系统维护(系统扩容)deepin live
  14. 用计算机弹奏全球变冷,《全球变冷,钢琴谱》许嵩(五线谱 钢琴曲 指法)-弹吧|蛐蛐钢琴网...
  15. 编译Kodi(XBMC 14) 和XBMC-13.2-Gotham版本的记录
  16. python学习之旅_第1天
  17. Python编程:给定y和m,计算y年m月有多少天
  18. STM32 FMPI2C 简单访问代码
  19. 路在脚下【心情转帖】
  20. Kelvin connection-开尔文连接

热门文章

  1. 软件测试Selenium-API 操作(上机练习文档)分享
  2. 这个社会最大的现实是“大鱼吃小鱼,小鱼吃虾米”
  3. Android单元测试技巧
  4. c++并发编程:迅雷笔试题
  5. TexturePacker的用法
  6. 腾讯X5 浏览器内核加载
  7. 人机对话比拼,Chat GPT和文心一言谁更接近真实交流?”
  8. xp sp3 远程桌面连接到控制台
  9. 卷积层(1D,2D,3D..反卷积)
  10. stm32——中断优先级管理