损失函数 订阅
损失函数(loss function)或代价函数(cost function)是将随机事件或其有关随机变量的取值映射为非负实数以表示该随机事件的“风险”或“损失”的函数。在应用中,损失函数通常作为学习准则与优化问题相联系,即通过最小化损失函数求解和评估模型。例如在统计学和机器学习中被用于模型的参数估计(parameteric estimation) [1]  ,在宏观经济学中被用于风险管理(risk mangement)和决策 [2]  ,在控制理论中被应用于最优控制理论(optimal control theory) [3]  。 展开全文
损失函数(loss function)或代价函数(cost function)是将随机事件或其有关随机变量的取值映射为非负实数以表示该随机事件的“风险”或“损失”的函数。在应用中,损失函数通常作为学习准则与优化问题相联系,即通过最小化损失函数求解和评估模型。例如在统计学和机器学习中被用于模型的参数估计(parameteric estimation) [1]  ,在宏观经济学中被用于风险管理(risk mangement)和决策 [2]  ,在控制理论中被应用于最优控制理论(optimal control theory) [3]  。
信息
外文名
loss function
类    型
函数
应用学科
统计学
中文名
损失函数
应用领域
机器学习,经济学,控制理论
损失函数函数定义
在样本空间 内有可测状态 和随机变量 根据法则 所做的决策 ,此时若在乘积空间 上有函数 满足: ,即对任意的 , 是非负可测函数,则 被称为损失函数,表示状态 下采取决策 所对应的损失或风险 [4]  。机器学习中,给定独立同分布(independent and identically distributed,iid)的学习样本 ,和模型 ,损失函数是模型输出和观测结果间概率分布差异的量化 [1]  : 式中 表示模型参数,上式右侧具体的量化方法视问题和模型而定,但要求满足损失函数的一般定义,即样本空间的非负可测函数。
收起全文
精华内容
下载资源
问答
  • 之前在代码中经常看见交叉熵损失函数(CrossEntropy Loss),只知道它是分类问题中经常使用的一种损失函数,对于其内部的原理总是模模糊糊,而且一般使用交叉熵作为损失函数时,在模型的输出层总会接一个softmax函数,...
  • 损失函数5.1 什么是损失函数5.2 常见的损失函数5.3 逻辑回归为什么使用对数损失函数5.4 对数损失函数是如何度量损失的 在本文中着重介绍机器学习中的目标函数(代价函数,Cost Function)以及损失函数(Loss Fu
  • 损失函数一般分为4种,平方损失函数,对数损失函数,HingeLoss 0-1 损失函数,绝对值损失函数。 我们先定义两个二维数组,然后用不同的损失函数计算其损失值。 import torch from torch.autograd import Variable ...
  • 为解决人脸表情识别任务中存在的类内表情差异性大、类间表情相似度高的问题,基于传统的Softmax损失函数和Island损失函数,提出一种新的基于余弦距离损失函数来指导深度卷积神经网络的学习。该方法不仅可以减小特征...
  • 均方损失函数: 这里 loss, x, y 的维度是一样的,可以是向量或者矩阵,i 是下标。 很多的 loss 函数都有 size_average 和 reduce 两个布尔类型的参数。因为一般损失函数都是直接计算 batch 的数据,因此返回的 ...
  • 损失函数(loss function)或代价函数(cost function)是将随机事件或其有关随机变量的取值映射为非负实数以表示该随机事件的“风险”或“损失”的函数。在应用中,损失函数通常作为学习准则与优化问题相联系,即...
  • YOLOV3-损失函数及其源代码理解(yolo_layer.c) 讲得好 https://github.com/AlexeyAB/darknet/issues/821 x,y,w,h 损失 原版的bbox损失为MSE,其后又GIOU,DIOU… delta即为求完损失的梯度 公式对应图 思路及具体...
  • 信息熵: 表示随机变量不确定的度量,是对所有可能发生的事件产生的信息量的期望。熵越大,随机变量或系统的不确定性就越大。公式如下: 相对熵: 又称KL散度,用于衡量对于同一个随机变量x的两个分布p(x)和q(x)...
  • 损失函数loss:该参数为模型试图最小化的目标函数,它可为预定义的损失函数名,如categorical_crossentropy、mse,也可以为一个损失函数。详情见losses 可用的损失目标函数: mean_squared_error或mse mean_absolute...
  • 为了提高卷积神经网络在人体姿势估计任务上的精度,提出了一种基于均方损失函数(Mean Squared Error,MSE)的改进损失函数来处理网络学习中回归热点图的前景(高斯核)和背景之间像素点不均衡问题,根据前景与背景...
  • 损失函数

    千次阅读 2018-04-28 20:08:37
    损失函数介绍损失函数用于描述模型预测值与真实值的差距大小。一般有有两种常见的算法——均值平方差(MSE)和交叉熵。下面来分别介绍每个算法的具体内容。1 均值平方差均值平方差(Mean Squared Error,MSE),...
    一 损失函数介绍
    损失函数用于描述模型预测值与真实值的差距大小。一般有有两种常见的算法——均值平方差(MSE)和交叉熵。下面来分别介绍每个算法的具体内容。
    1 均值平方差
    均值平方差(Mean Squared Error,MSE),也称“均方误差”,在神经网络中主要是表达预测值和真实值之间的差异,在数理统计中,均方误差是指参数估计值与参数真值之差平方的预期值。
    公式如下:主要是对每一个真实值与预期值相减的平方取平均值:
    均方误差的值越小,表明模型越好。
    类似的损失算法还有均方根误差RMSE(将MSE开平方):
    平均绝对值误差MAD(对一个真实值与预测值相减的绝对值取平均值)
    2 交叉熵
    交叉熵(crossentropy)也是loss算法的一种,一般用在分类问题上,表达意思为预测输入样本属于哪一类的概率。其表达式如下,其中y代表真实值分类(0或1),a代表预测值。
    二分类情况下的公式:
    交叉熵也是值越小,代表预测结果越准。
    3 损失算法的选取
    损失函数的选取取决于输入标签数据的类型:
    如果输入的实数、无界的值,损失函数使用平方差。
    如果输入标签是位矢量(分类标志),使用交叉熵会更适合。

    二 损失函数举例
    下面是3个训练样本经过使用softmax作为激活函数的神经网络的输出(computed)、真实结果(targets)以及是否预测正确的对比表格。
    下面是另外一个网络的训练结果
    1 交叉熵计算(三分类交叉熵)
    第一个样本的交叉熵为:
    −(0∗ln0.3+0∗ln0.3+1∗ln0.4)=−ln0.4
    对于神经网络来说,交叉熵的计算有点古怪,因为只有一项会被保留下来。因此三个样本的平均交叉熵为:
    −(ln0.4+ln0.4+ln0.1)/3=1.38
    第二个网络的平均交叉熵为:
    −(ln0.7+ln0.7+ln0.3)/3=0.64
    2 均方误差(Root Mean Square Error, RMSE)
    第一个网络:0.81
    第二个网络:0.34

    三 参考
    展开全文
  • 应该是目前为止互联网上能找到的关于yolo v1目标检测开源算法损失函数的最详尽的代码注释了吧!对于初学人工智能的朋友们应该有所帮助。
  • 我们会发现,在机器学习实战中,做分类问题的时候经常会使用一种损失函数(Loss Function)——交叉熵损失函数(CrossEntropy Loss)。但是,为什么在做分类问题时要用交叉熵损失函数而不用我们经常使用的平方损失...
  • 可以实现windows下画caffe训练过程的损失函数,精度等的变化情况,
  • LINEX是指线性指数损失函数,用于分析统计估计和预测问题,该函数在零的一侧呈指数增长,在零的另一侧几乎呈线性增长。 它被用于高估和低估问题中。 Ali Shadrokh和Hassan Pazira [1]在LINEX损失函数下的Gamma II型...
  • RetinaNet深入理解(损失函数详解),RetinaNet深入理解(损失函数详解)
  • 机器学习中的常见问题——损失函数
  • 论文中"Holistically-Nested Edge Detection"使用的加权损失函数,具体用法见博客http://blog.csdn.net/majinlei121/article/details/78884531
  • 深刻理解交叉熵损失函数

    千次阅读 2019-02-21 00:33:16
    说起交叉熵损失函数「Cross Entropy Loss」,脑海中立马浮现出它的公式: 我们已经对这个交叉熵函数非常熟悉,大多数情况下都是直接拿来使用就好。但是它是怎么来的?为什么它能表征真实样本标签和预测概率之间的...

    说起交叉熵损失函数「Cross Entropy Loss」,脑海中立马浮现出它的公式:

    我们已经对这个交叉熵函数非常熟悉,大多数情况下都是直接拿来使用就好。但是它是怎么来的?为什么它能表征真实样本标签和预测概率之间的差值?上面的交叉熵函数是否有其它变种?

    1.交叉熵损失函数的推导

    我们知道,在二分类问题模型:例如逻辑回归「Logistic Regression」、神经网络「Neural Network」等,真实样本的标签为 [0,1],分别表示负类和正类。模型的最后通常会经过一个 Sigmoid 函数,输出一个概率值,这个概率值反映了预测为正类的可能性:概率越大,可能性越大。
    Sigmoid 函数的表达式和图形如下所示:

    其中 s 是模型上一层的输出,Sigmoid 函数有这样的特点:s = 0 时,g(s) = 0.5;s >> 0 时, g ≈ 1,s << 0 时,g ≈ 0。显然,g(s) 将前一级的线性输出映射到 [0,1] 之间的数值概率上。这里的 g(s) 就是交叉熵公式中的模型预测输出 。

    我们说了,预测输出即 Sigmoid 函数的输出表征了当前样本标签为 1 的概率:

    很明显,当前样本标签为 0 的概率就可以表达成:

    重点来了,如果我们从极大似然性的角度出发,把上面两种情况整合到一起:

    不懂极大似然估计也没关系。我们可以这么来看:

    当真实样本标签 y = 0 时,上面式子第一项就为 1,概率等式转化为:

    当真实样本标签 y = 1 时,上面式子第二项就为 1,概率等式转化为:

    两种情况下概率表达式跟之前的完全一致,只不过我们把两种情况整合在一起了。

    重点看一下整合之后的概率表达式,我们希望的是概率 P(y|x) 越大越好。首先,我们对 P(y|x) 引入 log 函数,因为 log 运算并不会影响函数本身的单调性。则有:

    我们希望 log P(y|x) 越大越好,反过来,只要 log P(y|x) 的负值 -log P(y|x) 越小就行了。那我们就可以引入损失函数,且令 Loss = -log P(y|x)即可。则得到损失函数为:

    非常简单,我们已经推导出了单个样本的损失函数,是如果是计算 N 个样本的总的损失函数,只要将 N 个 Loss 叠加起来就可以了:

    这样,我们已经完整地实现了交叉熵损失函数的推导过程。

    2. 交叉熵损失函数的直观理解

    我已经知道了交叉熵损失函数的推导过程。但是能不能从更直观的角度去理解这个表达式呢?而不是仅仅记住这个公式。好问题!接下来,我们从图形的角度,分析交叉熵函数,加深理解。

    首先,还是写出单个样本的交叉熵损失函数:

    我们知道,当 y = 1 时

    这时候,L 与预测输出的关系如下图所示:

    看了 L 的图形,简单明了!横坐标是预测输出,纵坐标是交叉熵损失函数 L。显然,预测输出越接近真实样本标签 1,损失函数 L 越小;预测输出越接近 0,L 越大。因此,函数的变化趋势完全符合实际需要的情况。

    当 y = 0 时:

    这时候,L 与预测输出的关系如下图所示:

    同样,预测输出越接近真实样本标签 0,损失函数 L 越小;预测函数越接近 1,L 越大。函数的变化趋势也完全符合实际需要的情况。

    从上面两种图,可以帮助我们对交叉熵损失函数有更直观的理解。无论真实样本标签 y 是 0 还是 1,L 都表征了预测输出与 y 的差距。

    另外,重点提一点的是,从图形中我们可以发现:预测输出与 y 差得越多,L 的值越大,也就是说对当前模型的 “ 惩罚 ” 越大,而且是非线性增大,是一种类似指数增长的级别。这是由 log 函数本身的特性所决定的。这样的好处是模型会倾向于让预测输出更接近真实样本标签 y。

    3. 交叉熵损失函数的其它形式

    什么?交叉熵损失函数还有其它形式?没错!我刚才介绍的是一个典型的形式。接下来我将从另一个角度推导新的交叉熵损失函数。

    这种形式下假设真实样本的标签为 +1 和 -1,分别表示正类和负类。有个已知的知识点是Sigmoid 函数具有如下性质:

    这个性质我们先放在这,待会有用。

    好了,我们之前说了 y = +1 时,下列等式成立:

    如果 y = -1 时,并引入 Sigmoid 函数的性质,下列等式成立:

    重点来了,因为 y 取值为 +1 或 -1,可以把 y 值带入,将上面两个式子整合到一起:

    这个比较好理解,分别令 y = +1 和 y = -1 就能得到上面两个式子。

    接下来,同样引入 log 函数,得到:

    要让概率最大,反过来,只要其负数最小即可。那么就可以定义相应的损失函数为:

    还记得 Sigmoid 函数的表达式吧?将 g(ys) 带入:

    好咯,L 就是我要推导的交叉熵损失函数。如果是 N 个样本,其交叉熵损失函数为:

    接下来,我们从图形化直观角度来看。当 y = +1 时:

    这时候,L 与上一层得分函数 s 的关系如下图所示:

     

    横坐标是 s,纵坐标是 L。显然,s 越接近正无穷,损失函数 L 越小;s 越接近负无穷,L 越大。

    另一方面,当 y = -1 时:

    这时候,L 与上一层得分函数 s 的关系如下图所示:

    同样,s 越接近负无穷,损失函数 L 越小;s 越接近正无穷,L 越大。

    4.总结

    本文主要介绍了交叉熵损失函数的数学原理和推导过程,也从不同角度介绍了交叉熵损失函数的两种形式。第一种形式在实际应用中更加常见,例如神经网络等复杂模型;第二种多用于简单的逻辑回归模型。

    需要注意的是:第一个公式中的变量是sigmoid输出的值,第二个公式中的变量是sigmoid输入的值。

    展开全文
  • 平方损失函数与交叉熵损失函数

    万次阅读 2018-05-07 15:21:43
    对于机器学习中常见的损失函数有:平方损失函数与交叉熵损失函数。在本文中将讲述两者含义与响应的运用区别。 2. 平方损失函数 平方损失函数较为容易理解,它直接测量机器学习模型的输出与实际结果之间的距离。...

    1. 前言

    在机器学习中学习模型的参数是通过不断损失函数的值来实现的。对于机器学习中常见的损失函数有:平方损失函数与交叉熵损失函数。在本文中将讲述两者含义与响应的运用区别。

    2. 平方损失函数

    平方损失函数较为容易理解,它直接测量机器学习模型的输出与实际结果之间的距离。这里可以定义机器学习模型的输出为 y i y_i yi,实际的结果为 t i t_i ti,那么平方损失函数可以被定义为:
    L ( x ) = 1 N ∑ i = 1 N ( y i − t i ) 2 L(x)=\frac{1}{N}\sum_{i=1}^{N}{(y_i-t_i)^2} L(x)=N1i=1N(yiti)2
    对于这样的定义简单直接,能够很清楚的解释损失函数的含义,但是对于交叉熵损失函数其含义就不是那么好理解了,接下来的内容将具体讲解。

    3. 交叉熵损失函数

    3.1 交叉熵损失函数定义

    交叉熵(Cross Entry)是用来评估当前训练得到的概率分布与真实分布的差异情况,减少交叉熵损失就是在提高模型的预测准确率。其离散函数形式
    H ( p , q ) = − ∑ x p ( x ) l o g ( q ( x ) ) H(p,q)=-\sum_x{p(x)log(q(x))} H(p,q)=xp(x)log(q(x))
    参数解释: p ( x ) p(x) p(x)是真实分布的概率, q ( x ) q(x) q(x)是模型通过数据计算出来的概率估计。
    例如在二分类问题中,对于 y i y_i yi的取值无非是1或是0,表示为 y i ∈ { 1 , 0 } y_i\in{\{1, 0\}} yi{1,0}
    y i = 1 y_i=1 yi=1时:
    P ( y i = 1 ∣ x i ) = 1 , P ( y + i = 0 ∣ x i ) = 0 P(y_i=1|x_i)=1, P(y+i=0|x_i)=0 P(yi=1xi)=1,P(y+i=0xi)=0
    反之当 y i = 0 y_i=0 yi=0时:
    P ( y i = 1 ∣ x i ) = 0 , P ( y + i = 0 ∣ x i ) = 1 P(y_i=1|x_i)=0, P(y+i=0|x_i)=1 P(yi=1xi)=0,P(y+i=0xi)=1
    对于模型的估计概率,可以表示为:
    P ( y i = 1 ∣ x i ) = y i , , P ( y + i = 0 ∣ x i ) = 1 − y i , P(y_i=1|x_i)=y_{i}^{,}, P(y+i=0|x_i)=1-y_i^, P(yi=1xi)=yi,,P(y+i=0xi)=1yi,
    因而,对于该二分类模型其交叉熵损失函数可以定义为:
    H ( p , q ) = 1 N ∑ i = 0 N − y i l o g y i , − ( 1 − y i ) l o g ( 1 − y i , ) H(p,q)=\frac{1}{N}\sum_{i=0}^{N}-y_ilogy_i^,-(1-y_i)log(1-y_i^,) H(p,q)=N1i=0Nyilogyi,(1yi)log(1yi,)

    3.2 交叉熵损失函数信息论角度理解

    信息熵是在结果出来之前对可能产生的信息量的期望。相对熵表示两个概率分布的差异,即KL散度。当两个分布相同时,相对熵的值为 0 0 0,其余情况下都大于 0 0 0
    D ( p ∣ ∣ q ) = ∫ x p ( x ) l o g p ( x ) q ( x ) = − ∫ x p ( x ) l o g q ( x ) d x − ( − ∫ x p ( x ) l o g p ( x ) d x ) D(p||q)=\int_xp(x)log\frac{p(x)}{q(x)}=−\int_xp(x)logq(x)dx−(−\int_xp(x)logp(x)dx) D(pq)=xp(x)logq(x)p(x)=xp(x)logq(x)dx(xp(x)logp(x)dx)
    前者是交叉熵,而后者是真实分布的信息熵。由于真实分布是固定的,所以信息熵的值是固定的。当交叉熵越小,相对熵则越小,估计的概率分布 q ( x ) q(x) q(x)越接近真实的分布 p ( x ) p(x) p(x)

    3.3 训练与测试集正样本比例不同的影响

    交叉熵最小化等价于似然函数最大化。假设我们对每个标签为正例的样本都预测一个固定的概率,根据似然函数最大化,得到
    y i , = 正 样 本 数 量 全 部 样 本 数 量 y_i^,=\frac{正样本数量}{全部样本数量} yi,=
    如果测试集的正例的比例也接近这个值,那么在该假设情况下我们得到的损失函数最小。
    但是,如果训练集和测试集的正例比例不同,那么模型越复杂,越接近临界值的样本(越难判断结果的样本)就越容易受到训练集中正例比例的影响而偏离真实分布。

    3.4 正样本比例不同的解决办法

    为了解决训练集与测试集中正样本比例不一致的问题,常用到的解决办法就是抽样,假设正样本以 α \alpha α的比例进行抽样,而负样本以 β \beta β的比例进行抽样,则最后的交叉熵损失函数可以表示为:
    H ( p , q ) = 1 N ∑ i = 0 N − α y i l o g y i , − β ( 1 − y i ) l o g ( 1 − y i , ) H(p,q)=\frac{1}{N}\sum_{i=0}^{N}-\alpha y_ilogy_i^,-\beta(1-y_i)log(1-y_i^,) H(p,q)=N1i=0Nαyilogyi,β(1yi)log(1yi,)

    4. 两种损失函数的区别

    平方损失函数与交叉熵损失函数都可以用作为机器学习模型的目标函数,但是在何种场景下使用何种损失函数才是较为合理的选择呢?一般来讲,如果学习模型致力于解决的问题是回归问题的连续变量,那么使用平方损失函数较为合适;若是对于分类问题的离散Ont-Hot向量,那么交叉熵损失函数较为合适

    4.1 直观理解

    从平方损失函数运用到多分类场景下,可知平方损失函数对每一个输出结果都十分看重,而交叉熵损失函数只对正确分类的结果看重。例如,对于一个多分类模型其模型结果输出为 ( a , b , c ) (a,b,c) (a,b,c),而实际真实结果为 ( 1 , 0 , 0 ) (1, 0, 0) (1,0,0)。则根据两种损失函数的定义其损失函数可以描述为:
    L S = ( a − 1 ) 2 + ( b − 0 ) 2 + ( c − 0 ) 2 = ( a − 1 ) 2 + b 2 + c 2 L_S=(a-1)^2+(b-0)_2+(c-0)_2=(a-1)^2+b^2+c^2 LS=(a1)2+(b0)2+(c0)2=(a1)2+b2+c2
    L C = − 1 ∗ l o g a − 0 ∗ l o g b − 0 ∗ l o g c = − l o g a L_C=-1*loga-0*logb-0*logc=-loga LC=1loga0logb0logc=loga
    从上述的结果中可以看出,交叉熵损失函数只和分类正确的预测结果有关。而平方损失函数还和错误的分类有关,该损失函数除了让正确分类尽量变大,还会让错误分类都变得更加平均,但实际中后面的这个调整使没必要的。但是对于回归问题这样的考虑就显得重要了,因而回归问题上使用交叉熵并不适合。

    4.2 理论角度分析

    平方数损失函数假设最终结果都服从高斯分布,而高斯分布实际上是一个连续变量,并不是一个离散变量。如果假设结果变量服从均值 u u u,方差为 σ \sigma σ,那么利用最大似然法就可以优化它的负对数似然,公式最终变为了:
    = m a x ∑ i N [ − 1 2 l o g ( 2 π σ 2 ) − ( t i − y ) 2 σ 2 ] =max\sum_i^N[-\frac{1}{2}log(2\pi\sigma^2)-\frac{(t_i-y)}{2\sigma^2}] =maxiN[21log(2πσ2)2σ2(tiy)]
    出去与 y y y无关的项目,最后剩下的就是平方损失函数的形式。

    5. Reference

    1. Quora Question Pairs整理 - 理解交叉熵损失函数
    展开全文
  • 损失函数设计

    千次阅读 2020-05-27 15:14:06
    1.常见损失函数 1.1 平方损失函数 1.2 绝对值损失函数 1.3 Huber损失函数 1.4 Hinge损失函数 1.5 交叉熵损失函数 1.6 指数损失函数 2.不对称损失函数设计 3.面向容错的损失函数设计 4.评测指标不可导时的...

    目录

    1.常见损失函数

    1.1 平方损失函数

    1.2 绝对值损失函数

    1.3 Huber损失函数

    1.4 Hinge损失函数

    1.5 交叉熵损失函数

    1.6 指数损失函数

    2.不对称损失函数设计

    3.面向容错的损失函数设计

    4.评测指标不可导时的损失函数设计

    5.没有“Groud Truth“的损失函数设计

    6.度量学习(Metric Learning)损失函数设计

    7.面向稀疏样本的损失函数设计

    8.层次损失函数设计

    9.序列识别问题损失函数设计

    10.多目标损失函数

     

    机器学习建模时,尤其是传统方法中我们能自由发挥的地方除了各种特征工程外也就是目标函数的设计。在各种装X时刻(面试、答辩等)能对损失函数的设计发表下自己的见解或所用的奇淫技巧,还是很抓人眼球的。也是体现算法工程师“业务sense”的重要抓手!

    先思考一个问题。损失函数、代价函数和目标函数是一回事吗? 三者之间的关系大概是这样的。

    其中损失函数的设计要考虑符合问题所选定的ground truth,如果有多个ground truth,还需要做好trade-off。同时,损失函数要求有合理的梯度,可以被求解。

    1.常见损失函数

    损失函数是一个非负实数函数,用来量化模型预测和真实标签之间的差异。

    1.1 平方损失函数

    简单直观,易于求导,通常用于回归任务。但其背后也是有深刻的数学原理的。

    推导过程从最大似然出发,并且在误差服从正太分布的假设下,得出极大化最大似然等价于最小化残差平方和的结论。不过稍微了解下就可以了。

    参考资料:

    1.平方损失函数

    https://blog.csdn.net/Vici__/article/details/100184798​blog.csdn.net

     

    2.平方损失函数为什么可以作为目标函数?

    https://blog.csdn.net/qq_38374423/article/details/79058983​blog.csdn.net

     

    1.2 绝对值损失函数

    这里只简单总结下MAE与MSE的区别:

    更具体的可以参考:

    1. L1 vs. L2 Loss function

    L1 vs. L2 Loss function​rishy.github.io图标

    2.机器学习大牛最常用的5个回归损失函数,你知道几个?

    机器学习大牛最常用的5个回归损失函数,你知道几个?​baijiahao.baidu.com图标

     

    1.3 Huber损失函数

    Huber Loss是一种用于回归问题有参损失函数,其结合了MSE(处处可导)MAE(对异常值不敏感)的优点。当预测偏差小于delta时,采用平方误差;当预测偏差大于delta时,采用线性误差。其中delta是需要确定的超参数。

    Huber Loss定义如下:

    Huber Loss在实践中得到广泛了的应用。但是在要求损失函数二阶可导的情况下似乎有些问题,比如xgboost。此时可以用Psuedo-Huber Loss代替。

    参考资料:

    1. 回归损失函数:Huber Loss

    https://blog.csdn.net/u013841196/article/details/89923475

    2. Xgboost-How to use “mae” as objective function?

    https://stackoverflow.com/questions/45006341/xgboost-how-to-use-mae-as-objective-function

    3. 模型融合---Xgboost总结

    https://blog.csdn.net/dili8870/article/details/101506486

     

    1.4 Hinge损失函数

    Hinge Loss通常用于分类问题,比如SVM。其中, [公式] 为目标值(-1或+1), [公式] 是分类器输出的预测值,并不直接是类标签。其含义为,当 [公式] 和 [公式] 的符号相同时(表示 [公式] 预测正确)并且| [公式] |≥1时,hinge loss为0;当 [公式] 和 [公式] 的符号相反时,hinge loss随着 [公式] 的增大线性增大。

    再从 Hinge损失的观点看下SVM.

    参考资料:

    1.机器学习中常见的几种损失函数

    https://www.cnblogs.com/hejunlin1992/p/8158933.html

    2. Hinge loss

    https://blog.csdn.net/hustqb/article/details/78347713

     

    1.5 交叉熵损失函数

    1.5.1 logistics loss

    logistics loss通常用于逻辑回归分(类模型。

    上述推导过程同样从极大似然出发得出二分类交叉熵损失形式。

    更详细的推导:

    https://blog.csdn.net/weixin_39910711/article/details/81607386

     

    1.5.2 softmax loss

    多分类问题时通常可以采用softmax loss。

    注意在softmax loss中,由于需要经过归一化操作,因此每个类别的预测不是相互独立的。为了加深理解我们可以看下softmax loss的梯度更新公式。

    可以看出softmax loss在梯度传到时每个类别也不是相互独立的。“不相互独立“意味着每个样本只能属于一个类,而不能做多标签预测。如果想要做多标签预测可以参考下sigmoid cross entropy loss

    参考资料:

    1.卷积神经网络系列之softmax loss对输入的求导推导

    https://blog.csdn.net/u014380165/article/details/79632950

     

    1.6 指数损失函数

    敬请期待(没有时间写了).

    // TODO

    2.不对称损失函数设计

    当基本的损失函数与业务场景不能很好匹配的时候,就需要做些微调。或许这是最能体现“算法工程师”功力的地方。考虑以下实际场景:

    1).送达时间预估问题

    XX业务中,展示给用户的ETA(预计送达时间)是一个基础变量,是用户下单决策的重要参考。显然要求ETA完全等价于“实际送达时长”是不可能的,除非开启上帝模式。因此用户感知上必然存在“迟到”和“早到”两种状态,其中“迟到”对用户体验的损伤更大一些,当然也偶有骑手送达而我们还在外面的情况发生。因此我们更希望模型的预估结果尽量“大”一些,尽量减少“迟到”的可能。很多时候用户需要的是“确定性”而非“有多快”

    2).疾病检测问题

    在疾病监测领域中,一般认为假阴性比假阳性严重的多,因为错过最佳治疗时机的风险会更高。

    上面2个例子告诉我们,在某些场景下要求模型对错误预测的惩罚是不对称的。本质上来源于风险的不对称性。此类问题的可以从样本分布损失函数等多个角度优化,本小节重点说下如何从损失函数上优化。

    在美团公开的资料中了解到在其ETA(预计送达时间)预估中采用如下形状的损失函数。

     

    以LightGBM树模型为例,自定义Loss可能如下:

    对模型预测结果做残差分析,可能如下图:

    可以看出在采用非对称损失后残差分布相比与原有模型往右移动,也就是更偏高估了。

    除了上述的方法外,还可以考虑Quantile Loss,即分位数损失。

    由上图可以看出,“真实值小于预测值”和“真实值大于预测值”两种情况下损失是不一样的。通过这种区分处理来决定模型是倾向于高估还是低估。

    对,你是个“懂业务”的算法工程师。

     

    3. 面向容错的损失函数设计

    假设一个回归任务,可以容忍一定的误差。比如ground truth为7,则预测为[6,8]都是可以的,Loss可以设计如下:

    本质上是L2 Loss和Hinge Loss的结合。

     

    4.评测指标不可导时的损失函数设计

    理想情况下,如果可以直接把评测指标作为损失函数结果肯定是最优的。但是很多情况下评测指标通常非凸且不可导,不容易直接优化。比如在搜索排序学习任务(LTR)中的NDCG指标。

    NDCG指标

     

    搜索中的LTR

    LTR(Learn to rank),其任务是寻找一个能够精确预测位置样本X的标号(序号)的决策函数,即排序学习所学习的预测函数将最小化对排序的预测错误。根据训练模型时输入数据的不同,曾经先后出现了Point-wisePair-wiseList-wise三种框架。

    首先,Point-wise框架。

    只考虑单个样本信息时,此时退化为点击率(CTR)预估问题。似乎也讲得通,CTR越高的样本越要排在前面。但是离我们的终极目标NDCG还是有Gap的。模型只学到了单个样本的信息,没有学习到样本间的“序”关系以及忽略了整个List内部信息

    其次,Pair-wise框架。

    可见在Pair-wise框架下,损失函数考虑了“某一对样本u和v之间的序关系”。比上述Point-wise更接近我们的NDCG目标。可还是有问题的,如下图。

    上图两个List中U都排在V之前,显然程度是不同的。因此Pair-wise的问题在于虽然考虑了Pair对的因素,而忽略了整个List的信息

    最后,List -wise框架。

    好难啊! 相当于我们的输入是整个List,直接优化NDCG。但NDCG非凸且不可导,该怎么办呢? 参考下LambdaRank/LambdaMART的实现思路,既然无法定义一个符合要求的loss,那就直接定义一个符合我们要求的梯度

    上述推导过程就不必细看了,直接看最后的结果。

    而我们可以根据业务需求自定义:

    既然如此回到我们的优化目标NDCG,就可以定义:

    为对特定List,将Ui,Uj的位置调换,NDCG值的变化。所以我们就做到在NDCG非凸且不可导的情况下直接优化NDCG了。

    参考文档:

    1. 浅谈Learning to Rank中的RankNet和LambdaRank算法

    https://zhuanlan.zhihu.com/p/68682607

    2. 走马观花Google TF-Ranking的源代码

    https://zhuanlan.zhihu.com/p/52447211

    3. learning to rank 算法总结之pairwise

    https://www.jianshu.com/p/235756fbf6b6

    4. 学习排序 Learning to Rank:从 pointwise 和 pairwise 到 listwise,经典模型与优缺点

    https://blog.csdn.net/lipengcn/article/details/80373744

     

    5.没有"Groud Truth"的损失函数设计

    没有Groud Truth,模型还可以Work?

    Airbnb的研究人员在KDD 2018发表了一篇名为<<Customized Regression Model for Airbnb Dynamic Pricing>>的论文,描述了机器学习在动态定价中的应用。在Airbnb中,动态定价主要用于帮助房东指定最优价格。

    何谓最优? 专业点说是使得供需平衡。通俗点说,可以包括以下两方面:

    首先别太贵,否则租不出去。

    其次别太便宜,否则让房东感觉亏了。

    从上面可以看出,此问题最难的是如何确定Groud Truth(真值),什么样的定价是合适的? 暂且不管Groud Truth,先从建模角度了解下动态定价原理。Paper中介绍在最新的动态定价方案中将该问题直接建模为回归问题,即模型参考各种因素后直接输出推荐的价格

    考虑的因素主要如下:

    页面因素,例如每晚的价格、房间类型、可住人数、房间数量、洗手间数量、房间设施、地理位置、评价、历史入住率、能否立即预定等等。

    时间因素,例如季节、日期、可入住时间等等。

    供给因素,例如周围是否有相似房源、评价、搜索率等等。

    接下来还是要回到绕不开的Groud Truth问题。这里有两个假设。

    首先,假设某一房源在历史上曾经以标价Pi租出去,说明在当时各种因素(房间、时间、供给等)下看来标价Pi是一个比较实惠的价格。这时房东有点心有不甘,倘若提高当时的价格到C2*Pi(C2是大于1的常数),也是有可能租出去的,因此此时的合理价格区间应该是[Pi,C2*Pi]。

    其次,假设某一房源在历史上曾经以标记Pi没有租出去,说明在当时各种因素(房间、时间、供给等)下来看Pi是一个有些昂贵的价格。这时房东有点后悔,倘若降低当时的价格到C1*Pi(C1是0到1之间的常数),可能就租出去了,因此此时的合理价格区间应该是[C1*Pi,Pi]。

    综上,此时的Groud Truth不再是一个点,而变成了一个合理区间[C1*Pi, C2*Pi]。到这,就可以写出损失函数了。

    给定参数xi,fθ(xi)是输出的建议价格,L是下限函数,U是上限函数。

    当建议价格在合理区间时,损失是零,否则损失就是建议价格和界限之间的距离。

    参考资料:

    1. Airbnb使用的动态定价模型

    Airbnb使用的动态定价模型-电子发烧友网​m.elecfans.com图标

     

    6. 度量学习(Metric Learning)损失函数设计

    为什么需要度量学习? 最早接触度量学习是源于研究生时代的课题”基于人脸的血缘关系识别”。与人脸识别不同,血缘关系识别要回答的问题是“输入的两个人脸图像判断是否有血缘关系“。比如输入成龙和房祖名的人脸图像,期望得到的结果是“有血缘关系”。强势介绍下导师也是该领域的专家,周修庄老师

    传统的分类任务(比如MINIST和ImageNet等),有一个很强但也很隐蔽的先验,即测试集中的类别一定在训练集类别中,此时模型已经学到了不同类之间的分界面。然而在人脸识别任务中此先验不再成立。假设全世界70亿人,对于人脸识别就相当于有70亿个类,而通常的人脸识别数据集也就1w左右的样本。所以需要改造传统的Loss,除了保证可分性外,还要做到特征向量类内尽可能紧凑类间尽可能分离。相当于引导分类器可以学习到能区分不同类的特征组合

    6.1 Contrastive Loss

    常用于深度度量学习。从拓扑的观点来看,Contrastive Loss使得网络学习到一种映射关系(神经网络或转换矩阵),把向量从原始空间映射到新的空间从而使得向量在新的空间有更好的拓扑性质,即类内尽可能紧凑类间尽可能分离

    当两个样本标签相同,即相似y=1,则欧式距离越大损失函数越大,反之,欧式距离越小,损失函数越小;当两样本不相似时y=0,只有后一项,若欧式距离越小反而loss越大;欧式距离越大loss越小。

    代码参考:https://blog.csdn.net/u013841196/article/details/89875889

    参考资料:

    1. Siamese network 孪生神经网络--一个简单神奇的结构

    https://zhuanlan.zhihu.com/p/35040994

    2. 商品分类(一):Contrastive Loss + Softmax Loss

    https://www.jianshu.com/p/713ab3a9ce9e

    3. Contrastive Loss

    https://blog.csdn.net/u013841196/article/details/89875889

    4. Contrastive Loss(对比损失)

    https://www.jianshu.com/p/21be99fb58ca

    6.2 Center Loss

    在最大化类间距离的同时,最小化类内距离。

    上图可以看出,随着lambda的增大类间的边界越来越清晰。

    6.3 Triplet Loss

    不多说了,都在图里。经常用在人脸识别任务中。

    参考资料:

    1. 深度学习干货学习(2)—— triplet loss

    https://blog.csdn.net/zhuiqiuk/article/details/90640126

    2. 详解Triplet loss三元组损失

    https://blog.csdn.net/S20144144/article/details/102911057

    6.4 LMCL Loss

    敬请期待(没有时间写了)。

     

    7.面向稀疏样本的损失函数设计

    曾听别人说过,"做让自己难受的事情,是进步最快的捷径"。

    上学那会,经常会发现有些看上去非常勤奋的同学成绩总是不尽人意。仔细观察就会发现,这些同学总是首先选择做那些自己得心应手的题目,而那些不会的题目则留在后面做甚至不做。所以看上去非常努力,实际上大部分时间在做无用功。

    类似的问题同样存在于机器学习中。比如在计算机视觉目标检测任务中,通常存在着极度不平衡的样本比例问题。Anchor是一种类似sliding windows的选框方式(如下图)。在通过Anchor方法采样时,往往会使得正负样本的比例接近1:1000。并且这些负样本都是easy example类比于那些容易做的题目。在优化过程中,梯度更新方向会被这些easy example过度影响。这些easy example的loss虽然不高,但由于数量众多最终会对loss有很大贡献,导致模型过度关注这些简单样本而忽略了占比比较小的困难样本。最终使得模型收敛到一个不好的结果。

    发表于2017年ICCV的<<Focal Loss for Dense Object Detection>>提出了“Focal loss“来缓解one-stage目标检测中比例严重失衡的问题。Focal loss是在交叉熵损失函数基础上进行的修改,首先回顾二分类交叉上损失:

    [公式] 是经过激活函数的输出,所以在0-1之间。可见普通的交叉熵对于正样本而言,输出概率越大损失越小。对于负样本而言,输出概率越小则损失越小。该定义符合认知,在样本分布均衡时是没有问题的。但在样本分布极其不均衡时,损失函数在大量简单样本的迭代过程中比较缓慢且可能无法优化至最优

    那么Focal loss是怎么改进的呢?

    接着“把想的、要的挤进Loss“,如下:

    首先在原有的基础上加了一个因子gamma。其中gamma>0使得减少易分类样本的损失,使得更关注于困难的、错分的样本。例如gamma为2,对于正类样本而言,预测结果为0.95肯定是简单样本,所以(1-0.95)的gamma次方就会很小,这时损失函数值就变得更小。而预测概率为0.3的样本其损失相对很大。对于负类样本而言同样,预测0.1的结果应当远比预测0.7的样本损失值要小得多。对于预测概率为0.5时,损失只减少了0.25倍,所以更加关注于这种难以区分的样本。这样减少了简单样本的影响,大量预测概率很小的样本叠加起来后的效应才可能比较有效。

    综上,Focal Loss本质是通过各种调节因子对原始损失函数做修正

    参考资料:

    1. Focal Loss for Dense Object Detection解读

    https://www.jianshu.com/p/204d9ad9507f

     

    8. Hierarchical Loss

    在短文本分类、意图识别等任务中,目前工业界常用的模型是Fasttext。Fasttext在结构上与word2vec有很多相似之处,毕竟出自同一人。首先,图模型结构很像,都是采用embedding向量的形式,得到 word的隐向量表达。其次,采用相似的优化方法,比如Hierarchical softmax。

    为什么要采用Hierarchical softmax呢?先回顾下传统的分类任务中常用的softmax回归。

    为了缓解这个问题,Fasttext引入了分层Softmax。

    树的结构是根据类标的频数构造的霍夫曼树。K个不同的类标组成所有的叶子节点,K-1个内部节点作为内部参数,从根节点到某个叶子节点经过的节点和边形成一条路径,路径长度被表示为 [公式] 。于是, [公式] 就可以被写成:

     

    于是,从根节点走到叶子节点 [公式] ,实际上是在做了3次二分类的逻辑回归。其中上图所示的树结构是根据类标的频数构造的霍夫曼树。假设我们现在用Fasttext模型做类目识别,还是用哈夫曼树构建树会存在什么问题呢? 很显然我们的类目树与哈夫曼树是不一致的哈夫曼树在构建时仅仅考虑了频次,导致相邻节点之间并没有语义关系。既然发现了问题,解决思路也很简单了。

    Fasttext也要做相应的扩展。

    参考资料:

    1.文本处理——fastText原理及实践

    https://blog.csdn.net/u010417185/article/details/80649009

    2. Hierarchical softmax(分层softmax)简单描述

    Hierarchical softmax(分层softmax)简单描述.

    3. Deep Metric Learning with Hierarchical Triplet Loss 阅读笔记

    https://blog.csdn.net/gzw110605110/article/details/90186634

     

    9.序列识别问题损失函数设计

    CTC Loss常用于语音识别、手写字符识别等长度不确定的序列化建模场景。

    先看下,确定长度的序列识别问题:

    不确定长度的序列识别问题:

    显然不确定长度的序列识别问题更困难一下。

    一直觉得 CTC Loss是非常神奇的Loss,所以敬请期待(没有时间写了)。

    参考资料:

    1.CTC算法详解

    https://www.jianshu.com/p/0cca89f64987

    10. 多目标损失函数

    子曾经曰过:“ 鱼,我所欲也;熊掌,亦我所欲也。二者不可得兼,舍鱼而取熊掌者也。”人生中很多问题需要我们做出抉择,比如工作与生活。我们既不能像偶像剧中的男女主人公一样天天琢磨怎么谈恋爱,也不能像某些同学一样周末还在写文章。因此我们需要对两者做出折中,也就是所谓的Trade-off。

    言归正传,在实际的业务中,多目标相互“拉扯”的问题普遍存在。比如PV、GMV、用户体验等。通常在机器学习中解决多目标问题的思路大概有如下几种:

    1.规则

    单独训练ctr和cvr模型,线上排序时做经验加权。

    2.样本分布重构

    考虑对有转化的样本重采样reweight。

    3.多目标联合建模

    10.1 目标检测中的多目标

    目前基于深度学习的Object Detection任务中,广泛采用end2end的方式,即目标位置、目标分类、目标框检测各子任务同时训练和预测而不再是传统的串联结构。在深度模型席卷计算机视觉领域以来,聪明的Cver设计出了很多end2end的深度目标检测模型。这里简单介绍下Redmond提出的YOLO(You only look once)模型。

    从上图看出,输入Image只要经过一次YOLO模型就可以Inference出每个目标的坐标、大小以及类型信息。YOLO的核心在于目标函数的设计。

    先看下,YOLOv1的损失函数。

    接着是YOLOv2的损失函数。

    最后欣赏下YOLOv3的损失函数。

    不难看出,YOLO损失函数设计的精髓是“把所有想要、爱的都挤在Loss!”。

    10.2 电商CTR预估中的多任务

    在电商搜索排序任务中,同时存在着ctr、cvr、gmv等多个优化目标。理想情况下,提升ctr就能提升gmv,但是实际情况可能会有偏差。单纯追求ctr的提升可能会导致“标题党”等吸引力较高但实际转化较低的商品占据头部流量,长此以往对用户体验和平台利益都有极大的损害。因此,实际线上搜索业务通常会同时优化ctr和cvr等指标。如下:

    阿里在2018提出的ESMM(Entire Space Multi-Task Model)模型中同时考虑了ctr和cvr,本质是多目标学习。loss函数如下:

    网络架构如下:

    同时在信息流短视频推荐中也面临“感知相关性(CTR/CLICK)”和“真实相关性(停留时长RDTM/播放完成率PCR)”直接的trade-off。UC同时采用了reweight和多任务建模的方法。

    参考资料:

    1.yolov3损失函数https://blog.csdn.net/weixin_43384257/article/details/100986249

    2. 从yolov1到yolov3

    http://shartoo.github.io/yolo-v123/

    3. YOLOv1到YOLOv3的演变过程及每个算法详解

    https://www.cnblogs.com/ywheunji/p/10761239.html

    4. 深度学习在美团搜索广告排序的应用实践

    https://tech.meituan.com/2018/06/07/searchads-dnn.html

    5. 电商多目标优化小结

    https://zhuanlan.zhihu.com/p/76413089

    6. 推荐系统5---多目标排序

    https://blog.csdn.net/weixin_40924580/article/details/85163372

    7. 进击的下一代推荐系统:多目标学习如何让知乎用户互动率提升 100%?

    https://www.jianshu.com/p/ed041f10f083

    8. 信息流短视频时长多目标优化

    https://yq.aliyun.com/articles/627734/

    9. 深度多目标学习模型

    深度多目标学习模型 - 云+社区 - 腾讯云

    10.为风控业务定制损失函数与评价函数(XGB/LGB)

    https://zhuanlan.zhihu.com/p/96899266

     

     

    编辑于 2019-12-18

    展开全文
  • 语义分割损失函数总结

    千次阅读 2020-12-15 21:07:44
    图像分割中最常用的损失函数是逐像素交叉熵损失。该损失函数分别检查每个像素,将类预测(softmax or sigmoid)与目标向量(one hot)进行比较。 1.1 理论指导 二分类: 二分类最终模型采用sigmoid激活函数,最后一层...
  • 【论文理解】yolov3损失函数

    万次阅读 多人点赞 2019-09-18 15:59:17
    看了很多关于yolov3的算法讲解,但是对于损失函数一直没怎么看懂,再看代码,发现完全不懂,所以决定再仔细看看yolov3的损失函数。 先回顾下YOLOv1的损失函数: Loss=λcoord∑i=0S2∑j=0BIijobj[(xi−x^i)2+(yi−y...
  • 机器学习中的目标函数、损失函数、代价函数有什么区别? 首先给出结论:损失函数和代价函数是同一个东西, 目标函数是一个与他们相关但更广的概念,对于目标函数来说在有约束条件下的最小化就是损失函数(loss ...
  • 可视化损失函数空间三维图

    千次阅读 2021-09-28 08:52:29
    一般情况下我们都是使用折线图绘制和监控我们的损失函数, y 轴是损失函数的值,x 轴是训练的轮次。 这种情况下我们只有损失函数空间的一维视图,并且只能看到小范围的参数梯度。 有没有一种方法能够让我们将的GPT的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 270,320
精华内容 108,128
关键字:

损失函数