损失函数_损失函数值 - CSDN
损失函数 订阅
损失函数(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]  : 式中 表示模型参数,上式右侧具体的量化方法视问题和模型而定,但要求满足损失函数的一般定义,即样本空间的非负可测函数。
收起全文
精华内容
参与话题
  • [深度学习] 损失函数

    千次阅读 2019-01-23 16:00:34
    深度学习中损失函数是整个网络模型的“指挥棒”, 通过对预测样本和真实样本标记产生的误差反向传播指导网络参数学习。 分类任务的损失函数 假设某分类任务共有N个训练样本,针对网络最后分层第 i 个样本的输入特征...

    深度学习中损失函数是整个网络模型的“指挥棒”, 通过对预测样本和真实样本标记产生的误差反向传播指导网络参数学习。

    分类任务的损失函数
    假设某分类任务共有N个训练样本,针对网络最后分层第 i 个样本的输入特征为 XiXi ,其对应的标记为YiYi是最终的分类结果(C个分类结果中的一个),h=(h1,h2,...,hch1,h2,...,hc)为网络的最终输出,即样本 i 的预测结果。其中 C 是最后所有分类的数量。

    交叉熵损失函数(cross entropy)
    交叉熵损失函数又叫 softmax 损失函数。 是目前卷积神经网络中最常用的分类目标损失函数。 
    举个例子,比如 C = 3 ,也就是最后分类结果有三种,分别是0,1,2.假设对于第 i 个样本正确分类是1,h=(2,5,1),那么交叉熵损失函数就等于: 
    -(1 / 3)* (log((e^5) / (e^2 + e^5 + e^1))) 
    LcrossEntropyLoss=LsoftmaxLoss=−1Nlog(ehyi∑Cj=1ehj)
    LcrossEntropyLoss=LsoftmaxLoss=−1Nlog(ehyi∑j=1Cehj)
    合页损失函数(hinge loss)
    合页函数广泛在支持向量机中使用,有时也会在损失函数中使用。

    LhingeLoss=1N∑i=1Nmax(0,1−hyi)
    LhingeLoss=1N∑i=1Nmax(0,1−hyi)
    在分类任务中,通常使用交叉熵函数要优于使用合页损失函数。 
    缺点:合页损失函数是对错误越大的样本施以更严重的惩罚。可是这样会导致损失函数对噪音敏感。举例,如果一个样本的标记错误或者是离群点,则由于错分导致分类误差会很大,如此便会影响整个分类超平面的学习,从而降低模型泛化能力。

    坡道损失函数(ramp loss function)
    优点:克服了合页损失函数鲁棒性差的特点,对噪声数据和离群数据有很好的抗噪能力。因此也被称作鲁棒损失函数。这类损失函数的特点是在分类(回归)问题误差较大区域进行了截断,使得较大的误差不再影响整个损失函数。

    LrampLoss=LhingeLoss−1Nmax(0,s−hyi)
    LrampLoss=LhingeLoss−1Nmax(0,s−hyi)

    =1N∑i=1N(max(0,1−hyi)−max(0,s−hyi))
    =1N∑i=1N(max(0,1−hyi)−max(0,s−hyi))
    s指定了截断点的位置。 
    合页损失函数和坡道损失函数对比图: 


    截断点 s = - 0.5 。 
    问题:坡道损失函数在x=1 和 x=s两处不可导,如何进行误差方向传播。真实情况下并不要求必须严格满足数学上的连续。因为计算机内部的浮点计算并不会得到完全导数落在尖点上的非常情况,最多只会落在尖点附近,仅需给出对应的导数值,因此数学上的尖点不影响使用。 
    对于截断点的设置,s的取值最好根据类别数C来定,一般设置为s = -1 / (C - 1)

    交叉熵损失函数, 合页损失函数和坡道损失函数只是简单衡量模型预测值与样本真实值之间的误差从而指导训练。他们并没有显示的将特征判别性学习考虑到整个网络训练中,对此,为了进一步提高学习到的特征表示的判别性,近期研究者设计了一些新的损失函数如下:

    大间隔交叉熵损失函数
    网络的输出结果 h 实际上是全连接层参数 W 和最后一层的特征向量xixi的内积, 即h=WTxih=WTxi。(为了简洁并未加入偏置 b ),因此传统的交叉熵损失函数可以表现为: 
    LsoftmaxLoss=−1N∑i=1Nlog(eWTyixi∑Cj=1eWTjxi)
    LsoftmaxLoss=−1N∑i=1Nlog(eWyiTxi∑j=1CeWjTxi)
    其中WTiWiT为WW的第 i 列参数, 则WTixiWiTxi是一个具体的数据, 根据内积的定义,可以转换为下式子:

    LsoftmaxLoss=−1N∑i=1Nlog(e||Wyi||||xi||cos(θyi)∑Cj=1e||Wyi||||xi||cos(θj))
    LsoftmaxLoss=−1N∑i=1Nlog(e||Wyi||||xi||cos(θyi)∑j=1Ce||Wyi||||xi||cos(θj))
    式子中 θjθj (0 <= θjθj <= ππ)为WTiWiT和 xixi 的夹角

    以二分类为例,我们希望正确样本的分数大于错误样本的分数,因此希望参数WT1xiiW1Txii> WT2xiiW2Txii, 也就是||W1|| ||xi|| cos(θ1θ1) > ||W2|| ||xi|| cos(θ2θ2)。

    那么大间隔交叉熵损失函数为了让特征更具有分辨能力则在这个基础上要求两者差距更大,于是引入m拉开差距, 这便是大间隔的由来。||W1|| ||xi|| cos(mθ1) > ||W2|| ||xi|| cos(θ2) (0 <= θ1θ1 <= πmπm)。式子中m为正整数,起到控制间隔大小的作用,m越大,类间间隔越大。反之亦然。 当m=1, 大间隔交叉熵损失函数退化为传统的交叉熵损失函数。

    综上: ||W1|| ||xixi|| cos(θ1θ1) >= ||W1|| ||xixi|| cos(mθ1θ1) > ||W2|| ||xi|| cos(θ2θ2)

    定义: 
    LlargeMarginSoftmaxLoss=−1N∑i=1Nlog(e||Wyi||||xi||ϕ(θyi)e||Wyi||||xi||ϕ(θyi)+∑j!=yie||Wyi||||xi||cos(θj))
    LlargeMarginSoftmaxLoss=−1N∑i=1Nlog(e||Wyi||||xi||ϕ(θyi)e||Wyi||||xi||ϕ(θyi)+∑j!=yie||Wyi||||xi||cos(θj))
    相比于传统的交叉熵损失函数,仅仅是将第i类间隔拉大了, 其中: 
    ϕ(θ)=(−1)kcos(mθ)−2k
    ϕ(θ)=(−1)kcos(mθ)−2k

    θ=[kπm,(k+1)πm]
    θ=[kπm,(k+1)πm]
    k 为整数, k 属于[0, m-1]

    下图表示了在二分类情况下,W1, W2 的模在等于, 小于, 大于三种不同关系下的决策边界。

    可以看出大间隔交叉熵损失函数扩大了类间的距离, 由于它不仅要求分类正确且要求分开的类保持较大的间隔。使得目标比传统交叉熵更加困难。训练目标变得困难带来的一个额外的好处就是起到防止过拟合的作用。并且在分类性能方面,大间隔交叉熵损失函数要优于交叉熵损失函数和合页函数。

    中心损失函数
    大间隔交叉熵损失函数主要考虑增加类间距离, 而中心损失函数则在考虑类间距离的同时还将一些注意力放在减少类间差异上。

    中心损失函数定义: 
    LcenterLoss=12∑i=1N||xi−cyi||22
    LcenterLoss=12∑i=1N||xi−cyi||22
    其中cyicyi为第yiyi类所有深度特征的均值(中心),因此叫中心损失函数。直观上,上式迫使所有隶属于yi类的样本和中心不要太远,否则将增大惩罚。在实际中,由于中心损失函数本身考虑类内差异,因此中心损失函数应与主要考虑类间的损失函数配合使用,如交叉熵函数,例如:

    Lfinal=LcrossEntropyLoss+λLcenterLoss
    Lfinal=LcrossEntropyLoss+λLcenterLoss
    式子中 λ 为两个损失函数之间的调节,λ 越大类内差异占整个目标函数较大比重。

    回归任务的损失函数
    在分类任务中,样本的真实标记实际上对应 one hot vector : 对样本ii, 该向量在 yiyi 处为 1 表征该样本的真实隶属类别,而其余C-1维均为0。 在回归任务中,回归任务真实标记每一维为一个实数, 而非二值。 
    在介绍不同回归任务的损失函数之前,首先介绍一个回归的基本概念,残差或称预测误差,用于衡量预测值和真实标记的靠近程度。假设回归问题对应第ii个输入特征xixi的真实标记为yi=(y1,y2,y3,...,yM)yi=(y1,y2,y3,...,yM), M为标记向量的总维度,则 litlti即表示样本 ii 在网络回归预测值 y′tyt′ 与真实值在第t维的预测误差: 
    lit=yt−y′t
    lti=yt−yt′
    l1损失函数
    常用的回归问题的损失函数是l1 和 l2损失函数。对N个样本的L1损失函数定义如下: 
    Ll1Loss=1N∑i=1N∑t=1M|lit|
    Ll1Loss=1N∑i=1N∑t=1M|lti|
    l2损失函数
    Ll2Loss=1N∑i=1N∑t=1M|lit|2
    Ll2Loss=1N∑i=1N∑t=1M|lti|2
    Tukey’s biweight 损失函数
    同分类中提到的坡道损失函数一样, Tukey’s biweight损失函数也是一类非凸损失函数。可克服回归任务中离群点或样本噪声对整体回归模型的干扰和影响,是回归任务中一种鲁棒的损失函数,其定义:

    LTukey=⎧⎩⎨c26N∑Ni=1∑Mt=1[1−(1−(litc)2)3],c2M6,|lit|<=cother values
    LTukey={c26N∑i=1N∑t=1M[1−(1−(ltic)2)3],|lti|<=cc2M6,other values


    式子中,常数C指定了函数拐点,需要指出的是,该超参数并不需要人为设定,常用的C=4.6851 时, Tukey’s biweight损失函数可取得与 l2 损失函数 在最小化符合标准正态分布的残差类似的回归效果。

    参考
    解析卷积神经网络——深度学习实践手册
     

    展开全文
  • 常见损失函数

    千次阅读 2017-05-08 09:21:36
    损失函数(loss function)是用来估量你模型的预测值f(x)与真实值Y的不一致程度,它是一个非负实值函数,通常使用L(Y, f(x))来表示,损失函数越小,模型的鲁棒性就越好。损失函数是经验风险函数的核心部分,也是结构...

    转自:http://blog.csdn.net/shenxiaoming77/article/details/51614601

    损失函数(loss function)是用来估量你模型的预测值f(x)与真实值Y的不一致程度,它是一个非负实值函数,通常使用L(Y, f(x))来表示,损失函数越小,模型的鲁棒性就越好。损失函数是经验风险函数的核心部分,也是结构风险函数重要组成部分。模型的结构风险函数包括了经验风险项和正则项,通常可以表示成如下式子:
    $$\theta^* = \arg \min_\theta \frac{1}{N}{}\sum_{i=1}^{N} L(y_i, f(x_i; \theta) + \lambda\  \Phi(\theta)$$

    其中,前面的均值函数表示的是经验风险函数,L代表的是损失函数,后面的ΦΦ是正则化项(regularizer)或者叫惩罚项(penalty term),它可以是L1,也可以是L2,或者其他的正则函数。整个式子表示的意思是找到使目标函数最小时的θθ。下面主要列出几种常见的损失函数。

    一、log对数损失函数(逻辑回归)

    有些人可能觉得逻辑回归的损失函数就是平方损失,其实并不是。平方损失函数可以通过线性回归在假设样本是高斯分布的条件下推导得到,而逻辑回归得到的并不是平方损失。在逻辑回归的推导中,它假设样本服从伯努利分布(0-1分布),然后求得满足该分布的似然函数,接着取对数求极值等等。而逻辑回归并没有求似然函数的极值,而是把极大化当做是一种思想,进而推导出它的经验风险函数为:最小化负的似然函数(即max F(y, f(x)) —-> min -F(y, f(x)))。从损失函数的视角来看,它就成了log损失函数了。

    log损失函数的标准形式

    L(Y,P(Y|X))=logP(Y|X)L(Y,P(Y|X))=−log⁡P(Y|X)

    刚刚说到,取对数是为了方便计算极大似然估计,因为在MLE中,直接求导比较困难,所以通常都是先取对数再求导找极值点。损失函数L(Y, P(Y|X))表达的是样本X在分类Y的情况下,使概率P(Y|X)达到最大值(换言之,就是利用已知的样本分布,找到最有可能(即最大概率)导致这种分布的参数值;或者说什么样的参数才能使我们观测到目前这组数据的概率最大)。因为log函数是单调递增的,所以logP(Y|X)也会达到最大值,因此在前面加上负号之后,最大化P(Y|X)就等价于最小化L了。
    逻辑回归的P(Y=y|x)表达式如下:
    P(Y=y|x)=11+exp(yf(x))P(Y=y|x)=11+exp(−yf(x))

    将它带入到上式,通过推导可以得到logistic的损失函数表达式,如下:
    L(y,P(Y=y|x))=log(1+exp(yf(x)))L(y,P(Y=y|x))=log⁡(1+exp(−yf(x)))

    逻辑回归最后得到的目标式子如下:

    $$J(\theta) = - \frac{1}{m}\left [ \sum_{i=1}^m y^{(i)} \log h_{\theta}(x^{(i)}) + (1-y^{(i)}) \log(1-h_{\theta}(x^{(i)}))  \right ]$$

    如果是二分类的话,则m值等于2,如果是多分类,m就是相应的类别总个数。这里需要解释一下:之所以有人认为逻辑回归是平方损失,是因为在使用梯度下降来求最优解的时候,它的迭代式子与平方损失求导后的式子非常相似,从而给人一种直观上的错觉

    这里有个PDF可以参考一下:Lecture 6: logistic regression.pdf.

    二、平方损失函数(最小二乘法, Ordinary Least Squares )

    最小二乘法是线性回归的一种,OLS将问题转化成了一个凸优化问题。在线性回归中,它假设样本和噪声都服从高斯分布(为什么假设成高斯分布呢?其实这里隐藏了一个小知识点,就是中心极限定理,可以参考【central limit theorem】),最后通过极大似然估计(MLE)可以推导出最小二乘式子。最小二乘的基本原则是:最优拟合直线应该是使各点到回归直线的距离和最小的直线,即平方和最小。换言之,OLS是基于距离的,而这个距离就是我们用的最多的欧几里得距离。为什么它会选择使用欧式距离作为误差度量呢(即Mean squared error, MSE),主要有以下几个原因:

    • 简单,计算方便;
    • 欧氏距离是一种很好的相似性度量标准;
    • 在不同的表示域变换后特征性质不变。

    平方损失(Square loss)的标准形式如下:

    L(Y,f(X))=(Yf(X))2L(Y,f(X))=(Y−f(X))2

    当样本个数为n时,此时的损失函数变为:
    $$L(Y, f(X)) = \sum _{i=1}^{n}(Y - f(X))^2$$
    Y-f(X)表示的是残差,整个式子表示的是残差的平方和,而我们的目的就是最小化这个目标函数值(注:该式子未加入正则项),也就是最小化残差的平方和(residual sum of squares,RSS)。

    而在实际应用中,通常会使用均方差(MSE)作为一项衡量指标,公式如下:

    MSE=1ni=1n(Yi~Yi)2MSE=1n∑i=1n(Yi~−Yi)2

    上面提到了线性回归,这里额外补充一句,我们通常说的线性有两种情况,一种是因变量y是自变量x的线性函数,一种是因变量y是参数αα的线性函数。在机器学习中,通常指的都是后一种情况。

    三、指数损失函数(Adaboost)

    学过Adaboost算法的人都知道,它是前向分步加法算法的特例,是一个加和模型,损失函数就是指数函数。在Adaboost中,经过m此迭代之后,可以得到fm(x)fm(x):

    $$f_m (x) = f_{m-1}(x) + \alpha_m G_m(x)$$

    Adaboost每次迭代时的目的是为了找到最小化下列式子时的参数αα 和G:

    $$\arg \min_{\alpha, G} = \sum_{i=1}^{N} exp[-y_{i} (f_{m-1}(x_i) + \alpha G(x_{i}))]$$

    而指数损失函数(exp-loss)的标准形式如下

    $$L(y, f(x)) = \exp[-yf(x)]$$

    可以看出,Adaboost的目标式子就是指数损失,在给定n个样本的情况下,Adaboost的损失函数为:

    L(y, f(x)) = \frac{1}{n}\sum_{i=1}^{n}\exp[-y_if(x_i)]

    关于Adaboost的推导,可以参考Wikipedia:AdaBoost或者《统计学习方法》P145.

    四、Hinge损失函数(SVM)

    机器学习算法中,hinge损失函数和SVM是息息相关的。在线性支持向量机中,最优化问题可以等价于下列式子:
    $$\min_{w,b}  \ \sum_{i}^{N} [1 - y_i(w\cdot x_i + b)]_{+} + \lambda||w||^2 $$
    下面来对式子做个变形,令:
    $$[1 - y_i(w\cdot x_i + b)]_{+} = \xi_{i}$$
    于是,原式就变成了:
    $$\min_{w,b}  \ \sum_{i}^{N} \xi_i + \lambda||w||^2 $$
    如若取λ=12Cλ=12C,式子就可以表示成:
    $$\min_{w,b}  \frac{1}{C}\left ( \frac{1}{2}\ ||w||^2 $$ + C \sum_{i}^{N} \xi_i\right )$$
    可以看出,该式子与下式非常相似:
    $$\frac{1}{m} \sum_{i=1}^{m} l(w \cdot  x_i + b, y_i) + ||w||^2$$

    前半部分中的ll就是hinge损失函数,而后面相当于L2正则项。

    Hinge 损失函数的标准形式

    L(y)=max(0,1yy~),y=±1L(y)=max(0,1−yy~),y=±1

    可以看出,当|y|>=1时,L(y)=0。

    更多内容,参考Hinge-loss

    补充一下:在libsvm中一共有4中核函数可以选择,对应的是-t参数分别是:

    • 0-线性核;
    • 1-多项式核;
    • 2-RBF核;
    • 3-sigmoid核。

    五、其它损失函数

    除了以上这几种损失函数,常用的还有:

    0-1损失函数
    L(Y, f(X)) = \left\{\begin{matrix}1 ,& Y \neq f(X)\\ 0 ,& y = f(X)    \end{matrix}\right.
    绝对值损失函数
    $$L(Y, f(X)) = |Y-f(X)|$$
    下面来看看几种损失函数的可视化图像,对着图看看横坐标,看看纵坐标,再看看每条线都表示什么损失函数,多看几次好好消化消化。

    OK,暂时先写到这里,休息下。最后,需要记住的是:参数越多,模型越复杂,而越复杂的模型越容易过拟合。过拟合就是说模型在训练数据上的效果远远好于在测试集上的性能。此时可以考虑正则化,通过设置正则项前面的hyper parameter,来权衡损失函数和正则项,减小参数规模,达到模型简化的目的,从而使模型具有更好的泛化能力。

    展开全文
  • 机器学习总结(三)——损失函数

    万次阅读 2018-09-16 21:49:40
    损失函数分为经验风险损失函数和结构风险损失函数,经验风险损失函数反映的是预测结果和实际结果之间的差别,结构风险损失函数则是经验风险损失函数加上正则项(L0、L1(Lasso)、L2(Ridge))。 不同的算法常用的...

    经典机器学习算法,他们最本质的区别是分类思想(预测y的表达式)不同,有的是基于概率模型,有的是动态规划,表象的区别就是最后的损失函数不同。

    损失函数分为经验风险损失函数和结构风险损失函数,经验风险损失函数反映的是预测结果和实际结果之间的差别,结构风险损失函数则是经验风险损失函数加上正则项(L0、L1(Lasso)、L2(Ridge))。

    不同的算法常用的损失函数(Loss Function)有:

    一、0-1损失函数(gold standard 标准式)

           0-1损失是指,预测值和目标值不相等为1,否则为0: 

                                                       

          该损失函数不考虑预测值和真实值的误差程度,也就是说只要预测错误,预测错误差一点和差很多是一样的。感知机就是用的这种损失函数,但是由于相等这个条件太过严格,我们可以放宽条件,即满足 |Y−f(X)|<T时认为相等。 

                                                         

           这种损失函数用在实际场景中比较少,更多的是用俩衡量其他损失函数的效果。

    二、绝对值损失函数

            绝对值损失函数,(暂时还不知道用在啥场合,了解后改正):

                                                   

    三、平方损失函数(squared loss)

           实际结果和观测结果之间差距的平方和,一般用在线性回归中,可以理解为最小二乘法:

                                                           

           

    四、对数损失函数(logarithmic loss)

           主要在逻辑回归中使用,样本预测值和实际值的误差符合高斯分布,使用极大似然估计的方法,取对数得到损失函数:

                                                                 

           损失函数L(Y,P(Y|X))L(Y,P(Y|X))是指样本X在分类Y的情况下,使概率P(Y|X)达到最大值。

           经典的对数损失函数包括entropy和softmax,一般在做分类问题的时候使用(而回归时多用绝对值损失(拉普拉斯分布时,μ值为中位数)和平方损失(高斯分布时,μ值为均值))。

     

    五、指数损失函数(Exp-Loss)

           在boosting算法中比较常见,比如Adaboosting中,标准形式是:

                                                                  

    六、铰链损失函数(Hinge Loss)

           铰链损失函数主要用在SVM中,Hinge Loss的标准形式为:

                                                                  

           y是预测值,在-1到+1之间,t为目标值(-1或+1)。其含义为,y的值在-1和+1之间就可以了,并不鼓励|y|>1|y|>1,即并不鼓励分类器过度自信,让某个正确分类的样本的距离分割线超过1并不会有任何奖励,从而使分类器可以更专注于整体的分类误差。



     

    展开全文
  • 损失函数loss大大总结

    万次阅读 多人点赞 2019-02-23 11:16:22
    二分类交叉熵损失sigmoid_cross_entropy: TensorFlow 接口: tf.losses.sigmoid_cross_entropy( multi_class_labels, logits, weights=1.0, label_smoothing=0, scope=None, loss_c...

    分类任务loss:

     

    二分类交叉熵损失sigmoid_cross_entropy:

    TensorFlow 接口:

    tf.losses.sigmoid_cross_entropy(
        multi_class_labels,
        logits,
        weights=1.0,
        label_smoothing=0,
        scope=None,
        loss_collection=tf.GraphKeys.LOSSES,
        reduction=Reduction.SUM_BY_NONZERO_WEIGHTS
    )
    tf.nn.sigmoid_cross_entropy_with_logits(
        _sentinel=None,
        labels=None,
        logits=None,
        name=None
    )
    

    keras 接口:

    binary_crossentropy(y_true, y_pred)

     

    二分类平衡交叉熵损失balanced_sigmoid_cross_entropy:

     

    该损失也是用于2分类的任务,相比于sigmoid_cross_entrop的优势在于引入了平衡参数 ,可以进行正负样本的平衡,得到比sigmoid_cross_entrop更好的效果。

    多分类交叉熵损失softmax_cross_entropy:

    TensorFlow 接口:

    tf.losses.softmax_cross_entropy(
        onehot_labels,
        logits,
        weights=1.0,
        label_smoothing=0,
        scope=None,
        loss_collection=tf.GraphKeys.LOSSES,
        reduction=Reduction.SUM_BY_NONZERO_WEIGHTS
    )
    tf.nn.softmax_cross_entropy_with_logits(
        _sentinel=None,
        labels=None,
        logits=None,
        dim=-1,
        name=None
    )
    tf.nn.sparse_softmax_cross_entropy_with_logits(
        _sentinel=None,
        labels=None,
        logits=None,
        name=None
    )
    

    keras 接口:

    categorical_crossentropy(y_true, y_pred)
    sparse_categorical_crossentropy(y_true, y_pred)
    

    focal loss

    focal loss为凯明大神的大作,主要用于解决多分类任务中样本不平衡的现象,可以获得比softmax_cross_entropy更好的分类效果。

    论文中α=0.25,γ=2效果最好。

    dice loss:

     

    2分类任务时使用的loss,本质就是不断学习,使得交比并越来越大。

    TensorFlow 接口:

    def dice_coefficient(y_true_cls, y_pred_cls):
        '''
        dice loss
        :param y_true_cls:
        :param y_pred_cls:
        :return:
        '''
        eps = 1e-5
        intersection = tf.reduce_sum(y_true_cls * y_pred_cls )
        union = tf.reduce_sum(y_true_cls ) + tf.reduce_sum(y_pred_cls) + eps
        loss = 1. - (2 * intersection / union)
        tf.summary.scalar('classification_dice_loss', loss)
        return loss

     

    合页损失hinge_loss:

    也叫铰链损失,是svm中使用的损失函数。

    由于合页损失优化到满足小于一定gap距离就会停止优化,而交叉熵损失却是一直在优化,所以,通常情况下,交叉熵损失效果优于合页损失。

    TensorFlow 接口:

    tf.losses.hinge_loss(
        labels,
        logits,
        weights=1.0,
        scope=None,
        loss_collection=tf.GraphKeys.LOSSES,
        reduction=Reduction.SUM_BY_NONZERO_WEIGHTS
    )
    

    keras 接口:

    hinge(y_true, y_pred)

     

    Connectionisttemporal classification(ctc loss):

    对于预测的序列和label序列长度不一致的情况下,可以使用ctc计算该2个序列的loss,主要用于文本分类识别和语音识别中。

    TensorFlow 接口:

    tf.nn.ctc_loss(
        labels,
        inputs,
        sequence_length,
        preprocess_collapse_repeated=False,
        ctc_merge_repeated=True,
        ignore_longer_outputs_than_inputs=False,
        time_major=True
    )
    

    keras 接口:

    tf.keras.backend.ctc_batch_cost(
        y_true,
        y_pred,
        input_length,
        label_length
    )
    

    编辑距离 edit loss:

    编辑距离,也叫莱文斯坦Levenshtein 距离,指的是两个字符串之间,由一个转换成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。
    该损失函数的优势在于类似于ctc loss可以计算2个长度不等的序列的损失。
    TensorFlow 接口:

    tf.edit_distance(
        hypothesis,
        truth,
        normalize=True,
        name='edit_distance'
    )
    

    KL散度:

    KL散度( Kullback–Leibler divergence),也叫相对熵,是描述两个概率分布P和Q差异的一种方法。它是非对称的,这意味着D(P||Q) ≠ D(Q||P)。特别的,在信息论中,D(P||Q)表示当用概率分布Q来拟合真实分布P时,产生的信息损耗,其中P表示真实分布,Q表示P的拟合分布。

    从上面式子可以看出,kl散度,也就是相对熵,其实就是交叉熵+一个常数项。

    TensorFlow 接口:

    tf.distributions.kl_divergence(
        distribution_a,
        distribution_b,
        allow_nan_stats=True,
        name=None
    )
    
    tf.contrib.distributions.kl(
    dist_a,
        dist_b,
        allow_nan =False,
        name=None
    )
    

    最大间隔损失large margin softmax loss:

    用于拉大类间距离的损失函数,可以训练得到比传统softmax loss更好的分类效果。

    最大间隔损失主要引入了夹角cos值进行距离的度量。假设bias为0的情况下,就可以得出如上的公式。

    其中fai(seita)需要满足下面的条件。

     

    为了进行距离的度量,在cos夹角中引入了参数m。该m为一个正整数,可以起到控制类间间隔的作用。M越大,类间间隔越大。当m=1时,等价于传统交叉熵损失。基本原理如下面公式

     

     

    论文中提供的满足该条件的公式如下

     

    中心损失center loss:

    中心损失主要主要用于减少类内距离,虽然只是减少了累内距离,效果上却可以表现出累内距离小了,类间距离就可以增大的效果。该损失不可以直接使用,需要配合传统的softmax loss一起使用。可以起到比单纯softmax loss更好的分类效果。



    回归任务loss:

     

    均方误差mean squareerrorMSE)和L2范数:

    MSE表示了预测值与目标值之间差值的平方和然后求平均

    L2损失表示了预测值与目标值之间差值的平方和然后开更方,L2表示的是欧几里得距离。

    MSE和L2的曲线走势都一样。区别在于一个是求的平均np.mean(),一个是求的更方np.sqrt()

    TensorFlow 接口:

    tf.losses.mean_squared_error(
        labels,
        predictions,
        weights=1.0,
        scope=None,
        loss_collection=tf.GraphKeys.LOSSES,
        reduction=Reduction.SUM_BY_NONZERO_WEIGHTS
    )
    tf.metrics.mean_squared_error(
        labels,
        predictions,
        weights=None,
        metrics_collections=None,
        updates_collections=None,
        name=None
    )
    

    keras 接口:

    mean_squared_error(y_true, y_pred)

    平均绝对误差meanabsolute error(MAE )L1范数:

    MAE表示了预测值与目标值之间差值的绝对值然后求平均

    L1表示了预测值与目标值之间差值的绝对值,L1也叫做曼哈顿距离

    MAE和L1的区别在于一个求了均值np.mean(),一个没有求np.sum()。2者的曲线走势也是完全一致的。

    TensorFlow 接口:

    tf.metrics.mean_absolute_error(
        labels,
        predictions,
        weights=None,
        metrics_collections=None,
        updates_collections=None,
        name=None
    )
    

    keras 接口:

    mean_absolute_error(y_true, y_pred)

    MSE,MAE对比:

    MAE损失对于局外点更鲁棒,但它的导数不连续使得寻找最优解的过程低效;MSE损失对于局外点敏感,但在优化过程中更为稳定和准确。

    Huber Losssmooth L1

    Huber loss具备了MAE和MSE各自的优点,当δ趋向于0时它就退化成了MAE,而当δ趋向于无穷时则退化为了MSE。

    Smooth L1 loss也具备了L1 loss和L2 loss各自的优点,本质就是L1和L2的组合。

    Huber loss和Smooth L1 loss具有相同的曲线走势,当Huber loss中的δ等于1时,Huber loss等价于Smooth L1 loss。

    对于Huber损失来说,δ的选择十分重要,它决定了模型处理局外点的行为。当残差大于δ时使用L1损失,很小时则使用更为合适的L2损失来进行优化。

    Huber损失函数克服了MAE和MSE的缺点,不仅可以保持损失函数具有连续的导数,同时可以利用MSE梯度随误差减小的特性来得到更精确的最小值,也对局外点具有更好的鲁棒性。

    但Huber损失函数的良好表现得益于精心训练的超参数δ。

    TensorFlow接口:

    tf.losses.huber_loss(
        labels,
        predictions,
        weights=1.0,
        delta=1.0,
        scope=None,
        loss_collection=tf.GraphKeys.LOSSES,
        reduction=Reduction.SUM_BY_NONZERO_WEIGHTS
    )

    对数双曲余弦logcosh:

    其优点在于对于很小的误差来说log(cosh(x))与(x**2)/2很相近,而对于很大的误差则与abs(x)-log2很相近。这意味着logcosh损失函数可以在拥有MSE优点的同时也不会受到局外点的太多影响。它拥有Huber的所有优点,并且在每一个点都是二次可导的。

    keras 接口:

    logcosh(y_true, y_pred)





     

    展开全文
  • 常用损失函数小结

    万次阅读 多人点赞 2018-05-27 11:01:58
    一、摘要本文主要总结一下常见的损失函数,包括:MSE均方误差损失函数、SVM合页损失函数、Cross Entropy交叉熵损失函数、目标检测中常用的Smooth L1损失函数。其中还会涉及到梯度消失、梯度爆炸等问题:ESM均方误差+...
  • 经典损失函数一览

    2019-04-09 21:26:24
    损失函数(Loss Function)用来估量模型的预测值 y^=f(x)\hat y = f(x)y^​=f(x) 与真实值 yyy 的不一致程度。这里做一个简单梳理,以备忘,原文见损失函数清单。 回归问题 常见的回归问题损失函数有绝对值损失、平方...
  • 几种常见的损失函数

    千次阅读 2019-07-09 10:33:30
    1. 损失函数、代价函数与目标函数   损失函数(Loss Function):是定义在单个样本上的,是指一个样本的误差。   代价函数(Cost Function):是定义在整个训练集上的,是所有样本误差的平均,也就是所有损失函...
  • 机器学习中的目标函数、损失函数、代价函数有什么区别? 首先给出结论:损失函数和代价函数是同一个东西, 目标函数是一个与他们相关但更广的概念,对于目标函数来说在有约束条件下的最小化就是损失函数(loss ...
  • 这是专栏《AI初识境》的第11篇文章。所谓初识,就是对相关技术有基本了解,掌握了基本的使用方法。...在机器学习中,损失函数(loss function)是用来估量模型的预测值f(x)与真实值Y的不一致程度,损失函数越小...
  • [机器学习笔记] 什么是损失函数

    千次阅读 2018-02-01 11:40:29
    用于计算损失的函数称为损失函数。模型每一次预测的好坏用损失函数来度量。 常用的损失函数有以下几种(引用自李航的《统计学习方法》) 1. 0-1损失函数 二类分类任务中,预测值与真实值不同,就是预测错误,则...
  • 总结各类损失函数【修】

    千次阅读 2019-01-23 19:11:34
    损失函数 损失函数(Loss function)是用来估量你模型的预测值f(x)f(x)f(x)与真实值 yyy 的不一致程度,它是一个非负实值函数,通常用 L(y,f(x))L(y,f(x))L(y,f(x))来表示。损失函数越小,模型的鲁棒性就越好。损失...
  • 深度学习笔记(三):激活函数和损失函数

    万次阅读 多人点赞 2016-11-01 15:27:32
    这一部分来探讨下激活函数和损失函数。在之前的logistic和神经网络中,激活函数是sigmoid, 损失函数是平方函数。但是这并不是固定的。事实上,这两部分都有很多其他不错的选项,下面来一一讨论3. 激活函数和损失函数...
  • 交叉熵损失函数原理详解

    万次阅读 多人点赞 2019-09-23 14:06:19
    之前在代码中经常看见交叉熵损失函数(CrossEntropy Loss),只知道它是分类问题中经常使用的一种损失函数,对于其内部的原理总是模模糊糊,而且一般使用交叉熵作为损失函数时,在模型的输出层总会接一个softmax函数,...
  • 机器学习中的损失函数

    万次阅读 多人点赞 2016-07-11 17:56:25
    损失函数(loss function)是用来估量你模型的预测值f(x)与真实值Y的不一致程度,它是一个非负实值函数,通常使用L(Y, f(x))来表示,损失函数越小,模型的鲁棒性就越好。损失函数是经验风险函数的核心部分,也是结构...
  • 交叉熵损失函数 交叉熵损失函数的求导 前言 说明:本文只讨论Logistic回归的交叉熵,对Softmax回归的交叉熵类似。 首先,我们二话不说,先放出交叉熵的公式: J(θ)=−1m∑i=1my(i)log(hθ(x(i)))+(1−y(i))...
  • 平方损失函数与交叉熵损失函数

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

    万次阅读 多人点赞 2018-09-02 17:51:24
    机器学习中常见的损失函数   一般来说,我们在进行机器学习任务时,使用的每一个算法都有一个目标函数,算法便是对这个目标函数进行优化,特别是在分类或者回归任务中,便是使用损失函数(Loss Function)作为其...
  • 我主要分三篇文章给大家介绍tensorflow的损失函数,本篇为tensorflow内置的四个损失函数 (一)tensorflow内置的四个损失函数 (二)其他损失函数 (三)自定义损失函数 损失函数(loss function),量化...
  • L1 和 L2 是机器学习中的两个损失函数,用于最小化误差。 L1 损失函数代表最小绝对偏差,也称为 LAD L2 损失函数代表最小二乘误差,也称为 LS 文章目录一、L1 损失函数二、L2 损失函数三、如何确定L1 和 L2 损失函数...
  • 我主要分三篇文章给大家介绍tensorflow的损失函数,本篇为tensorflow自定义损失函数。 (一)tensorflow内置的四个损失函数 (二)其他损失函数 (三)自定义损失函数 自定义损失函数损失函数章节的结尾,学习...
1 2 3 4 5 ... 20
收藏数 203,872
精华内容 81,548
关键字:

损失函数