深度学习中常用的损失函数_机器学习log loss-程序员宅基地

技术标签: 算法  机器学习  

1 什么是损失函数

在机器学习中,损失函数(loss function)是用来估量模型的预测值f(x)与真实值Y的不一致程度,损失函数越小,一般就代表模型的鲁棒性越好,正是损失函数指导了模型的学习。

机器学习的任务本质上是两大类,分类问题与回归问题,再加上综合了判别模型和生成模型后在各类图像任务中大展拳脚的生成对抗网络,这一次我们就重点讲述这些内容。

 

2 分类任务损失 

2.1、0-1 loss

 

0-1 loss是最原始的loss,它直接比较输出值与输入值是否相等,对于样本i,它的loss等于:

当标签与预测类别相等时,loss为0,否则为1。可以看出,0-1 loss无法对x进行求导,这在依赖于反向传播的深度学习任务中,无法被使用,0-1 loss更多的是启发新的loss的产生。

 

2.2、熵与交叉熵loss

 

在物理学有一个概念,就是熵,它表示一个热力学系统的无序程度。为了解决对信息的量化度量问题,香农在1948年提出了“信息熵”的概念,它使用对数函数表示对不确定性的测量。熵越高,表示能传输的信息越多,熵越少,表示传输的信息越少,我们可以直接将熵理解为信息量

 

按照香农的理论,熵背后的原理是任何信息都存在冗余,并且冗余大小与信息中每个符号(数字、字母或单词)的出现概率或者说不确定性有关。概率大,出现机会多,则不确定性小,这个关系就用对数函数来表征。

 

为什么选择对数函数而不是其他函数呢?首先,不确定性必须是概率P的单调递降函数,假设一个系统中各个离散事件互不相关,要求其总的不确定性等于各自不确定性之和,对数函数是满足这个要求的。将不确定性f定义为log(1/p)=-log(p),其中p是概率。

 

对于单个的信息源,信源的平均不确定性就是单个符号不确定性-logpi的统计平均值,信息熵的定义如下。

假设有两个概率分布p(x)和q(x),其中p是已知的分布,q是未知的分布,则其交叉熵函数是两个分布的互信息,可以反应其相关程度。

 

从这里,就引出了分类任务中最常用的loss,即log loss,又名交叉熵loss,后面我们统一称为交叉熵:

n对应于样本数量,m是类别数量,yij 表示第i个样本属于分类j的标签,它是0或者1。对于单分类任务,只有一个分类的标签非零。f(xij) 表示的是样本i预测为j分类的概率。loss的大小完全取决于分类为正确标签那一类的概率,当所有的样本都分类正确时,loss=0,否则大于0。

 

2.3、softmax loss及其变种

 

假如log loss中的f(xij)的表现形式是softmax概率的形式,那么交叉熵loss就是我们熟知的softmax with cross-entropy loss,简称softmax loss,所以说softmax loss只是交叉熵的一个特例。

 

softmax loss被广泛用于分类分割等任务,而且发展出了很多的变种,有针对不平衡样本问题的weighted softmax loss,  focal loss,针对蒸馏学习的soft softmax loss,促进类内更加紧凑的L-softmax Loss等一系列改进,公众号早在一年前就撰写过综述如下:

 

【技术综述】一文道尽softmax loss及其变种

 

 

2.4、KL散度

 

Kullback和Leibler定义了KL散度用于估计两个分布的相似性,定义如下;

 

Dkl是非负的,只有当p与q处处相等时,才会等于0。上面的式子也等价于

其中l(p,p)是分布p的熵,而l(p,q)就是p和q的交叉熵。假如p是一个已知的分布,则熵是一个常数,此时dkl(p|q)与l(p,q)也就是交叉熵只有一个常数的差异,两者是等价的。

 

同时值得注意的是,KL散度并不是一个对称的loss,即dkl(p|q) != dkl(q|p),KL散度常被用于生成式模型。

 

2.5、Hinge loss

 

Hinge loss主要用于支持向量机中,它的称呼来源于损失的形状,定义如下:

如果分类正确,loss=0,如果错误则为1-f(x),所以它是一个分段不光滑的曲线。Hinge loss被用来解SVM问题中的间距最大化问题。

 

2.6、Exponential loss与Logistic loss

 

Exponential loss是一个指数形式的loss,它的特点就是梯度比较大,主要用于Adaboost集成学习算法中,定义如下:

logistic loss取了Exponential loss的对数形式,它的定义如下:

logistic loss 梯度相对变化更加平缓。

 

此外还有sigmoid cross_entropy_loss,可以被用于多标签分类任务或者不需要创建类间竞争机制的分类任务,在Mask RCNN中就被用了。

 

以上就涵盖了大部分常用的分类任务损失,多半都是对数的形式,这是由信息熵的定义,参数似然估计的本质决定的。

 

3 回归任务损失

在回归任务中,回归的结果是一些整数或者实数,并没有先验的概率密度分布,常使用的loss是L1 loss和L2 loss。

 

3.1、L1 loss

 

Mean absolute loss(MAE)也被称为L1 Loss,是以绝对误差作为距离:

由于L1 loss具有稀疏性,为了惩罚较大的值,因此常常将其作为正则项添加到其他loss中作为约束。L1 loss的最大问题是梯度在零点不平滑,导致会跳过极小值。

 

3.2、L2 loss

 

Mean Squared Loss/ Quadratic Loss(MSE loss)也被称为L2 loss,或欧氏距离,它以误差的平方和作为距离:

L2 loss也常常作为正则项。当预测值与目标值相差很大时, 梯度容易爆炸,因为梯度里包含了x−t。

 

3.3、L1 loss与L2 loss的改进

 

原始的L1 loss和L2 loss都有缺陷,比如L1 loss的最大问题是梯度不平滑,而L2 loss的最大问题是容易梯度爆炸,所以研究者们对其提出了很多的改进。

 

在faster rcnn框架中,使用了smooth L1 loss来综合L1与L2 loss的优点,定义如下:

在x比较小时,上式等价于L2 loss,保持平滑。在x比较大时,上式等价于L1 loss,可以限制数值的大小。

 

为了增强L2 loss对噪声(离群点)的鲁棒性,研究者提出了Huber loss,定义如下:

 

Huber对于离群点非常的有效,它同时结合了L1与L2的优点,不过多出来了一个delta参数需要进行训练。

 

除此之外还有Log-Cosh Loss等损失,大家可以自己了解,也欢迎补充。

 

从上面可以看出,L1/L2各有优劣,设计一个通用的框架同时满足L1/L2损失的优点是研究重点,我见过的最夸张的是这样的。

 

 

3.4、perceptual loss

 

对于图像风格化,图像超分辨率重建等任务来说,早期都使用了图像像素空间的L2 loss,但是L2 loss与人眼感知的图像质量并不匹配,恢复出来的图像往往细节表现不好。

 

现在的研究中,L2 loss逐步被人眼感知loss所取代。人眼感知loss也被称为perceptual loss(感知损失),它与MSE采用图像像素进行求差的不同之处在于所计算的空间不再是图像空间。

 

研究者们常使用VGG等网络的特征,令φ来表示损失网络,Cj表示网络的第j层,CjHjWj表示第j层的特征图的大小,感知损失的定义如下:

可以看出,它有与L2 loss同样的形式,只是计算的空间被转换到了特征空间。

 

4 生成对抗网络损失

 

生成对抗网络即Generative Adversarial Networks,简称GAN,它是2014年以后兴起的无监督学习网络,现在有非常多的解读了,我们一年前也解读过,欢迎移步,适合初学者。

 

【技术综述】有三说GANs(上)

 

原始的用于生成图片的GAN的损失函数包括了生成式模型和判别式模型两部分,如今GAN被用于各类任务,其他的各种损失也加入了进来,不过我们这里还是专门针对GAN的基本损失进行讲述。

 

4.1、GAN的基本损失

 

GAN是在生成模型和判别模型的相互博弈中进行迭代优化,它的优化目标如下:

从中可以看出,包括两个部分,Ex∼pdata(x)[logD(x)]和Ez∼pz(z)[log(1−D(G(z)))]要求最大化判别模型对真实样本的概率估计,最小化判别模型对生成的样本的概率估计,生成器则要求最大化D(G(z)),即最大化判别模型对生成样本的误判,这个loss是对数log的形式。

 

原始的GAN的损失使用了JS散度,两个分布之间越接近,它们的JS散度越小,但实际上这并不适合衡量生成数据分布和真实数据分布的距离,相关的分析已经非常的多了,本文如果展开就太长了,因此直接给解决方案。

 

4.2、-log D trick

 

Ian Goodfellow提出了-log D trick,即把生成器loss改成如下,使得生成器的损失不依赖于生成器G

这个等价最小化目标存在两个严重的问题。第一是它同时要最小化生成分布与真实分布的KL散度,却又要最大化两者的JS散度,这是矛盾的会导致梯度不稳定。第二,因为KL散度不是对称的,导致此时loss不对称,对于正确样本误分和错误样本误分的惩罚是不一样的。第一种错误对应的是“生成器没能生成真实的样本”,即多样性差,惩罚微小;第二种错误对应的是“生成器生成了不真实的样本”,即准确性低,惩罚巨大。这样造成生成器生成多样性很差的样本,出现了常说的模式崩塌(collapse mode)问题。

 

4.3、Wasserstein GAN(简称wgan)等改进方案

 

wgan采用了Earth-Mover距离(EM距离)作为loss,它是在最优路径规划下的最小消耗,计算的是在联合分布γ下,样本对距离的期望值:

与原始的GAN的loss形式相比,其实wgan就是生成器和判别器的loss不取log。wessertein距离相比KL散度和JS散度的优势在于,即使两个分布的支撑集没有重叠或者重叠非常少,仍然能反映两个分布的远近。而JS散度在此情况下是常量,KL散度可能无意义。

 

wgan有一些问题,wgan-gp改进了wgan连续性限制的条件,后面还有一些研究,大家可以自行跟进,我们后面也会讲述。

 

4.4、LS-GAN

 

 

LS-GAN即Least Squares Generative Adversarial Networks。它的原理部分可以一句话概括,即使用了最小二乘损失函数代替了GAN的损失函数,相当于最小化P和Q之间的Pearson卡方散度(divergence),这属于f-divergence的一种,有效地缓解了GAN训练不稳定和生成图像质量差多样性不足的问题。作者认为使用JS散度并不能拉近真实分布和生成分布之间的距离,使用最小二乘可以将图像的分布尽可能的接近决策边界,其损失函数定义如下:

 

以交叉熵作为损失,它的特点是会使得生成器不会再优化那些被判别器识别为真实图片的生成图片,即使这些生成图片距离判别器的决策边界仍然很远,也就是距真实数据比较远,这意味着生成器的生成图片质量并不高。而要想最小二乘损失比较小,则在混淆判别器的前提下还得让生成器把距离决策边界比较远的生成图片拉向决策边界,这就是LS-GAN的优势。

 

4.5、Loss-sensitive-GAN

 

在原始的GAN的损失函数后添加了一个约束项来直接限定GAN的建模能力,它的损失函数如下:

优化将通过最小化这个目标来得到一个“损失函数" (下文称之为L函数)。L函数在真实样本上越小越好,在生成的样本上越大越好。它是以真实样本x和生成样本的一个度量为各自L函数的目标间隔,把x和生成样本分开。好处是如果生成的样本和真实样本已经很接近,就不必要求他们的L函数有个固定间隔,因为生成的样本已经很好。这样就可以集中力量提高那些距离真实样本还很远,真实度不那么高的样本,能更合理地使用LS-GAN的建模能力,被称为“按需分配”。

 

关于GAN的损失优化,这是一个不小的研究领域,下面是一个简单的汇总。

如果你对GAN还有更多兴趣,那就看这个参考网址吧,https://hollobit.github.io/All-About-the-GAN/,不多不多,也就几千篇文章,我大概看了1000篇的摘要,等闲下来再跟大家搞GAN,是Generative Adversarial Networks噢。

 

总结

本文讲述了深度学习领域中常见的损失,学习灵活运用和设计损失本来不是初识境界的要求,不过还是让大家先有个基本感知吧。

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_42189368/article/details/107403276

智能推荐

JSTL中 fn 标签库的使用_jstl中<fn:split>标签的功能-程序员宅基地

文章浏览阅读5k次。在jstl中的fn标签也是我们在网页设计中经常要用到的很关键的标签,在使用的时候要先加上头http://java.sun.com/jsp/jstl/functions" prefix="fn"%>就可以使用fn标签了。使用此标签可以帮我们在jsp页面不再嵌入那么多的java代码,如分割函数split()的使用等。具体使用方法请参见下表:_jstl中标签的功能

PageRank算法以及Python实现(简洁版)_python实现pageranksuanfa-程序员宅基地

文章浏览阅读1.3w次,点赞10次,收藏82次。简述PageRank有点被神化了,其实公式很简单。文章目录简述算法模型定义Flow版本Google Formula实现算法主要是分为两种:The ‘Flow’ formulaThe Google formula模型定义很多个网页,直接存在链路关系,设为G,N*N的矩阵这里先只考虑有向无权无环图,即边有方向,且权重都一样,且没有自己到自己的边(环)。N为节点数或者是网页数..._python实现pageranksuanfa

反向传播学习算法_fanxiangxuexi-程序员宅基地

文章浏览阅读845次。1969年被发明,但直到上世级八十年代才得到重视。通用的网络训练伪代码:function neural-network-learning( training-records ) returns networknetwork start loopfor each example in training-records donetwork-output = neural-net_fanxiangxuexi

MCU编程_基础-程序员宅基地

文章浏览阅读584次。包含头文件符号的区别有这样的包含头文件语句#include <reg52.h>#include"reg52.h"两者区别在于:<>:编译器先进入软件安装文件目录下寻找这个头文件,如果这个目录下没有这个文件,则会报错。"":编译器先进入当前工程文件夹目录下寻找这个头文件,如果这个目录下没有这个文件,则会进入软件安装文件目录下寻找这个头文件,若两个地方都..._mcu编程

ODPS JDBC链接方式_odps-jdbc-程序员宅基地

文章浏览阅读1.2k次。这里写目录标题MAVEN正文MAVEN<dependency> <groupId>com.aliyun.odps</groupId> <artifactId>odps-jdbc</artifactId> <version>3.0.1</version> </dependency>正文import java.sql.Connection;import java.sql._odps-jdbc

凡事求慎始善终-曾仕强-程序员宅基地

文章浏览阅读585次。凡事求慎始善终一、慎始指谋定而后动,必须和干部互动、好商量。二、让干部先开口,才听得见不一样的声音,好意见。三、慎始不一定善终,必须重视过程中阶段性的调整。  你太太生小孩的时候,产房里面有小孩声音传出来“ 哇!哇!哇!”。请问你第一句话是什么?你敢不敢问“是男的,是女的”?不敢。会传的你很难听。你只有一个反应:看几分几秒生的。一个人出生的时候,时间非常重要。只要你..._曾仕强辞职能要赔偿吗

随便推点

VP9 vs H.265——下一代视频编码标准的王道之争-程序员宅基地

文章浏览阅读1k次。目前下一代主流的视频编码标准有 ITU-T VCEG 推出来的 H.265 和 Google 推出 VP9 。H.265 在 H.264 的基础上保留其中的部分技术,并对相关技术加以改进研发而成。新技术主要通过提升压缩效率、鲁棒性,提高错误恢复能力,减少实时时延、减少信道获取时间等方面,让视频编码达到效率更高。同时 H.265 可以实现利用 1~2Mbps 传输速度传送 720P 普..._upto 100 mbps for h.265, vp9 upto 130 mbps for h.26

element ui实现抽屉效果_抽屉效果的导航菜单-程序员宅基地

文章浏览阅读1.2k次。抽屉效果的导航菜单看了很多应用,觉得这种侧滑的抽屉效果的菜单很好。不用切换到另一个页面,也不用去按菜单的硬件按钮,直接在界面上一个按钮点击,菜单就滑出来,而且感觉能放很多东西。关于实现,搜索了一下,有如下两种:1.用SlidingDrawer:但是不知道为什么这个类官方不建议再继续用了:Deprecated since API level 172.用DrawerLayout:Guide在这里:库的..._elementui 抽屉菜单

2021牛客多校#4 H-Convolution_convolution 牛客多校-程序员宅基地

文章浏览阅读131次。原题链接 https://ac.nowcoder.com/acm/contest/11255/H题目大意定义运算⊗:•设pip_ipi​表示第iii个素数,若x=∏ipiai,y=∏ipibix=\prod_{i}p^{a_i}_{i} ,y=\prod_{i}p^{b_i}_{i}x=∏i​piai​​,y=∏i​pibi​​,则x⊗y=∏ipi∣ai−bi∣x⊗y=\prod_{i}p^{|a_i-b_i|}_{i}x⊗y=∏i​pi∣ai​−bi​∣​。现在有一个长度为n(1≤n≤10_convolution 牛客多校

Java多线程中经典案例——生产者与消费者_java生产者的作用-程序员宅基地

文章浏览阅读134次。该问题描述了两个共享固定大小缓冲区的线程——即所谓的“生产者”和“消费者”——在实际运行时会发生的问题。生产者的主要作用是生成一定量的数据放到缓冲区中,然后重复此过程。与此同时,消费者也在缓冲区消耗这些数据。解决问题的思想:让消费者在商品为空的时候进行休眠等等待生产者运行后的唤醒 ,让生产者在商品为最大限制的时候进行休眠不再生产。利用 wait / notifyAll 解决代码示例:商品仓库类:class Obj{//定义一个仓库 //定义生产的产品goods的初始值为0; priv_java生产者的作用

在FireFox中使用IE Tab插件_ie tab 火狐插件-程序员宅基地

文章浏览阅读6.3k次。现在发现FireFox用上IE插件后就能像Netscape一样支持两种浏览器模式了下载的官发网址如下:http://addons.mozine.cn/firefox/53/history/,如果你的FireFox是3.03版本以上的,用最新的(现在是IE Tab 1.5.20080310版),我的FireFox是2.0.0.12的,所以我用了历史版本IE Tab 1.3.3.20070528。直接_ie tab 火狐插件

安装mplayer遇到的问题_mplayer av_alloc_vdpaucontext, version libavcodec_-程序员宅基地

文章浏览阅读1.9k次。1.必须存在的软件gtk2-devel(版本任意) glib2-devel(版本任意) libpng(版本任意) libpng-devel(版本任意)yasm2.没有声音昨晚,我试了一下CentOS下安装的mplayer播放器,能看到时间在走,就是没有声音。在网上找到许多朋友也遇到类似的问题。他们的解决方法是: $ mknod /dev/dsp c_mplayer av_alloc_vdpaucontext, version libavcodec_58

推荐文章

热门文章

相关标签