深度学习中常用的损失函数

2023-11-08

一、什么是损失函数?

在机器学习中,损失函数(loss function)是用来估量模型的预测值f(x)与真实值Y的不一致程度,损失函数越小,一般就代表模型的鲁棒性越好,正是损失函数指导了模型的学习。
在这里插入图片描述
机器学习的任务本质上是两大类,分类问题与回归问题,再加上综合了判别模型和生成模型后在各类图像任务中大展拳脚的生成对抗网络,这一次我们就重点讲述这些内容。

二、分类任务损失

1、0-1 loss

0-1 loss是最原始的loss,它直接比较输出值与输入值是否相等,对于样本i,它的loss等于:
在这里插入图片描述
当标签与预测类别相等时,loss为0,否则为1。可以看出,0-1 loss无法对x进行求导,这在依赖于反向传播的深度学习任务中,无法被使用,0-1 loss更多的是启发新的loss的产生。

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。

3、softmax loss及其变种

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

softmax loss被广泛用于分类分割等任务,而且发展出了很多的变种,有针对不平衡样本问题的weighted softmax lossfocal loss,针对蒸馏学习的soft softmax loss,促进类内更加紧凑的L-softmax Loss等一系列改进。

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散度常被用于生成式模型。

5、Hinge loss

Hinge loss主要用于支持向量机中,它的称呼来源于损失的形状,定义如下:
在这里插入图片描述
如果分类正确,loss=0,如果错误则为1-f(x),所以它是一个分段不光滑的曲线。Hinge loss被用来解SVM问题中的间距最大化问题。

6、Exponential loss与Logistic loss

Exponential loss是一个指数形式的loss,它的特点就是梯度比较大,主要用于Adaboost集成学习算法中,定义如下:
在这里插入图片描述
logistic loss取了Exponential loss的对数形式,它的定义如下:
在这里插入图片描述
logistic loss 梯度相对变化更加平缓。

此外还有sigmoid cross_entropy_loss,可以被用于多标签分类任务或者不需要创建类间竞争机制的分类任务,在Mask RCNN中就被用了。
在这里插入图片描述
以上就涵盖了大部分常用的分类任务损失,多半都是对数的形式,这是由信息熵的定义,参数似然估计的本质决定的。

三、回归任务损失

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

1、L1 loss

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

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

2、L2 loss

Mean Squared Loss/ Quadratic Loss(MSE loss)也被称为L2 loss,或欧氏距离,它以误差的平方和作为距离:
在这里插入图片描述
L2 loss也常常作为正则项。当预测值与目标值相差很大时, 梯度容易爆炸,因为梯度里包含了x−t。

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损失的优点是研究重点,我见过的最夸张的是这样的
在这里插入图片描述

4、perceptual loss

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

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

研究者们常使用VGG等网络的特征,令φ来表示损失网络,Cj表示网络的第j层,CjHjWj表示第j层的特征图的大小,感知损失的定义如下:
在这里插入图片描述
可以看出,它有与L2 loss同样的形式,只是计算的空间被转换到了特征空间。

四、生成对抗网络损失

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

1、GAN的基本损失

GAN是在生成模型和判别模型的相互博弈中进行迭代优化,它的优化目标如下:
在这里插入图片描述
从中可以看出,包括两个部分,Ex∼pdata(x)[logD(x)]Ez∼pz(z)[log(1−D(G(z)))]要求最大化判别模型对真实样本的概率估计,最小化判别模型对生成的样本的概率估计,生成器则要求最大化D(G(z)),即最大化判别模型对生成样本的误判,这个loss是对数log的形式。

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

2、-log D trick

Ian Goodfellow提出了-log D trick,即把生成器loss改成如下,使得生成器的损失不依赖于生成器G
在这里插入图片描述
这个等价最小化目标存在两个严重的问题。第一是它同时要最小化生成分布与真实分布的KL散度,却又要最大化两者的JS散度,这是矛盾的会导致梯度不稳定。第二,因为KL散度不是对称的,导致此时loss不对称,对于正确样本误分和错误样本误分的惩罚是不一样的。第一种错误对应的是“生成器没能生成真实的样本”,即多样性差,惩罚微小;第二种错误对应的是“生成器生成了不真实的样本”,即准确性低,惩罚巨大。这样造成生成器生成多样性很差的样本,出现了常说的模式崩塌(collapse mode)问题。

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

wgan采用了Earth-Mover距离(EM距离)作为loss,它是在最优路径规划下的最小消耗,计算的是在联合分布γ下,样本对距离的期望值:
在这里插入图片描述
与原始的GAN的loss形式相比,其实wgan就是生成器和判别器的loss不取log。wessertein距离相比KL散度和JS散度的优势在于,即使两个分布的支撑集没有重叠或者重叠非常少,仍然能反映两个分布的远近。而JS散度在此情况下是常量,KL散度可能无意义。

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

4、LS-GAN

LS-GAN即Least Squares Generative Adversarial Networks。它的原理部分可以一句话概括,即使用了最小二乘损失函数代替了GAN的损失函数,相当于最小化P和Q之间的Pearson卡方散度(divergence),这属于f-divergence的一种,有效地缓解了GAN训练不稳定和生成图像质量差多样性不足的问题。作者认为使用JS散度并不能拉近真实分布和生成分布之间的距离,使用最小二乘可以将图像的分布尽可能的接近决策边界,其损失函数定义如下:
在这里插入图片描述
以交叉熵作为损失,它的特点是会使得生成器不会再优化那些被判别器识别为真实图片的生成图片,即使这些生成图片距离判别器的决策边界仍然很远,也就是距真实数据比较远,这意味着生成器的生成图片质量并不高。而要想最小二乘损失比较小,则在混淆判别器的前提下还得让生成器把距离决策边界比较远的生成图片拉向决策边界,这就是LS-GAN的优势。

5、Loss-sensitive-GAN

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深度学习中常用的损失函数 的相关文章

  • ScheduledThreadPoolExecutor 及 ThreadPoolExecutor的基本使用及说明

    关于作者 CSDN内容合伙人 技术专家 从零开始做日活千万级APP 专注于分享各领域原创系列文章 擅长java后端 移动开发 人工智能等 希望大家多多支持 目录 一 导读 二 概览 2 1 为什么不推荐使用Executors去创建线程池 三
  • js创建文件发向服务器,Node.js创建HTTP文件服务器的使用示例

    HelloWorld示例只有演示意义 这次我们来搞一个实际的例子 文件服务器 我们使用Node js创建一个HTTP协议的文件服务器 你可以使用浏览器或其它下载工具到文件服务器上下载文件 为了读取文件 我们会用到File System模块
  • 素数p阶群乘法循环群啥意思_如何证明素数阶群都是abel群?

    这个证明需要分两步 1 首先证明素数阶群都是循环群 2 其次证明循环群一定是abel群 我先来证明1 过程如下 首先我们假设p为任意素数 存在一个群G 群G的阶数是 G p 根据拉格朗日定理我们知道 G的所有元素的阶都可以被p整除 这里的关
  • openGauss5.0企业版CentOS一主两从安装

    目录 一 前期规划 二 依赖包安装 三 环境配置 四 安装前准备 五 预安装 六 安装 一 前期规划 主机名 IP CPU 内存 操作系统 python 节点 node4 192 168 5 7 2核 4G CentOS 7 9 3 6 8
  • yolo格式、voc格式、coco格式相互转换(xml,json,txt)

    yolo转voc keras版yolov3训练格式是name box class这种形式 转voc格式使用一下代码 根据别人的代码改了一点 list txt为yolo的标签 转换的voc格式的标签为 xml文件 都存放在Annotation
  • 计算机程序的构造和解释习题3.28

    计算机程序的构造和解释习题3 28 问题 请将或门定义为一个基本功能块 令构造函数为or gate 程序 define or gate in1 in2 out define or action procedure let new value
  • CH4-程序活动单元Activity

    文章目录 目标 一 Activity的生命周期 目标 1 1 生命周期状态 1 2 生命周期方法 二 Activity的创建 配置 启动和关闭 目标 2 1 创建Activity 2 2 配置Activity 2 3 启动和关闭Activi
  • 点击按钮复制想要复制的文字, 三行代码搞定。。 想粘贴到哪里就粘贴到哪里。。...

    UIPasteboard pab UIPasteboard generalPasteboard NSString string 这个方法走完之后有文本框的时候长按就可以粘贴啦 pab setString string 转载于 https w
  • 【数据结构】【王道】【线性表】单链表的实现及基本操作(带头结点)(可直接运行)

    总目录 文章目录 1 基本操作 1 1 结构体定义 1 2 初始化 1 3 判空 1 4 按位序插入 1 5 指定结点后插操作 1 6 指定结点前插操作 1 7 按位序删除 1 8 按位查找 1 9 按值查找 1 10 表的长度 1 11
  • 西门子et200 分布式i/o_西门子S7-1500H冗余系统硬件及网络结构

    1 1 软件及硬件要求 SIMATIC S7 1500 R H冗余PLC的冗余功能集成在冗余PLC操作系统中 不需要安装额外的冗余包 软件要求为STEP7 Professional V15 1 S7 1500H只有一个CPU型号 CPU15
  • 老码农教你学英语

    说说码农应该如何学习英语 达到熟练掌握英语的水平 首先 我要明确一个概念 英语学习是不可能速成的 一心想速成的同学们可以不用往下看了 不然浪费了你们的时间我可担不起责任啊 作为码农的习惯 自然第一个重点是要准确定义 熟练掌握英语 的概念 我
  • redis未授权漏洞详细利用

    redis未授权漏洞详细利用 攻击机 kali 192 168 52 130 靶机 Ubuntu 192 168 52 134 1 启动redis服务 2 未授权访问漏洞测试 3 利用redis写webshell 前提 1 靶机redis链
  • 通过简单的实验深入透析子网掩码,网关与ARP协议的作用

    http www knowsky com 383893 html 子网掩码 网关与ARP协议的概念和工作原理是学习网络知识的初学者首先碰到的几个重要的知识点 其中子网掩码与ARP协议的作用和基本工作原理更是思科网络技术学院教程Semeste
  • C++项目:Json_parser

    我的json parser generator 我的json parsergenerator 我的json parsergenerator 功能简介 1 解析器部分 2 生成器部分 3 测试部分 部分实现 1整体框架 1json value
  • SpringBoot中静态资源不能访问

    解决SpringBoot中静态资源不能访问的问题 在编写SpringBoot项目上的html页面时 直接调试html页面时 页面可以正常显示 但是在启动项目后 html页面样式丢失 因此想到了 可能是讲台资源被过滤掉了 参考一些大神的博客
  • HTML表单

  • AcWing 422. 校门外的树

    题目 某校大门外长度为L的马路上有一排树 每两棵相邻的树之间的间隔都是1米 我们可以把马路看成一个数轴 马路的一端在数轴0的位置 另一端在L的位置 数轴上的每个整数点 即0 1 2 L 都种有一棵树 由于马路上有一些区域要用来建地铁 这些区
  • 【vscode运行nodemon报错解决方法】

    看这篇文章的都是使用 vscode 的开发者吧 都遇到 nodemon app js 这种命令报错吧 话不多说 我来帮你解决这个问题 nodemon app js 1 如果你运行 nodemon 命令报的错是这个的话 那么恭喜你 看对文章了
  • c++中c_str()的用法详解

    转载地址 http blog csdn net u013682388 article details 39547773 cpp view plain copy 标准库的string类提供了三个成员函数来从一个string得到c类型的字符数组

随机推荐

  • 前端开发弄懂了这些shell命令就足够了

    最新内容我会即时在github更新 建议在github阅读 1 set命令 set通过选项来开关shell的不同特性 每个特性都对应一个选项 每个特性都有两种配置方式 1 一种是通过 set e 和 set e 这种形式 即直接指定选项 2
  • 【web nodejs】node-sass离线方式安装

    前言 npm命令可以很方便的从npm库中安装依赖的类库 实际开发时 操作是非常简单的 但是如果网络不好或受限制的话 可以通过离线安装 一安装 1 查看服务器的node版本 把下面的脚本添加到package json scripts prei
  • chart.js使用学习

    chart js是用JavaScript编写的基于Canvas的开源图表库 其官网 文档及源码地址请见参考文献1 3 本文开始学习该图表库的使用方法 本文主要介绍chart js的安装及使用示例 安装 根据参考文献2 chart js有几种
  • SOJSONV5解密,SOJSON.V5解密方法,SOJSONV5解密分析

    首先 JS加密只要给浏览器能运行就是可逆的 只是难度和时间问题 如果一个加密他有规则 那么他就是可以系统化可逆 我们来分析下 sojson v5 sojsonv5解密 使用者较多 知名企业都在使用 证明这个加密工具还是值得信奈的 JS加密
  • mybatis——example文件形式——多表联查

    mybatis example文件形式 多表联查 并且每个表中都有同样的id不能识别问题解决 方法名称 orderListByStatus mapper xml文件中写法
  • 酷炫的python日志库-loguru

    Loguru是一个python的日志库 比logging更简单 好用 功能丰富 GitHub Delgan loguru Python logging made stupidly simple 安装 pip install loguru 特
  • asp.net2.0学习历程 菜鸟到中级程序员的飞跃

    asp net2 0学习历程 菜鸟到中级程序员的飞跃 如果你是一个菜鸟或者自认为初学者那么本文非常适合你 不能说这30本书就是最佳组合 但是可以说这个组合不差 本人曾博览群书 很多书重复 很多书讲的不适用 这些书都是目前书店可以买到的 达到
  • 创建Springboot+vue3项目

    项目概述 创建springboot项目 加入mybatis plus支持 1 加入依赖代码 2 创建数据库实例 3 yml文件的配置 4 编写测试代码 5 测试结果 创建vue项目 报错 错误一 错误二 错误三 项目概述 后端 Spring
  • javaweb知识点总结

    JavaWeb JDBC 简介 JDBC就是使用Java语言操作关系型数据库的一套API 快速入门 0 创建工程 导入驱动jar包 mysql connector java 5 1 48 jar 1 注册驱动 Class forName c
  • 贪吃蛇游戏(java)(全注释)

    没想到发的第一篇关于java的博客会是这个 写作业用来练手 顺道就搬上来了 代码肯定不最优的 欢迎大家一起来探讨 先搬个效果图 然后结构 一共分成4个部分 Define包下有蛇 食物和成绩数据的类 主要包括他们的初始化和像蛇的移动之类的东西
  • 决策树(Decision Tree)-机器学习ML

    参考 1 统计学习方法 李航 2 https baike baidu com item E5 86 B3 E7 AD 96 E6 A0 91 10377049 fr aladdin 3 http www jianshu com p 6eec
  • qt 手动设置控件的位置

    QT中的Layout用着很不错 但有时候你想指定控件绝对位置 用以下红色代码就可以了 chanel1 new QPushButton tr 通道1 chanel1 gt setGeometry rect x 200 rect y 10 10
  • HTTP协议与HTTPS协议的区别

    一 HTTP和HTTPS的基本概念 1 HTTP 是互联网上应用最为广泛的一种网络协议 是一个客户端和服务器端请求和应答的标准 TCP 用于从WWW服务器传输超文本到本地浏览器的传输协议 它可以使浏览器更加高效 使网络传输减少 2 HTTP
  • 在数组中寻找和为目标值的 N 项(算法)

    这类问题可以使用递归 动态规划 或者回溯的方式完成 下面我将使用递归来完成这个算法的实现 递归函数 用于在数组中寻找 n 项之和等于目标值的组合 function findNSum nums target n startIndex curr
  • Java代码块的基本使用

    概念 在Java中 使用 括起来的代码被称为代码块 局部代码块 位置 方法中定义 特点 执行完就会在内存中消失 作用 限定变量的生命周期 及早释放 提高内存利用率 public static void main String args in
  • Java导出zip压缩包

    使用Java导出zip压缩包 压缩包中包含一个文件夹和一个文件 其中文件夹包含另一个文件 代码 package com sunshuo start import java io File import java io FileOutputS
  • uboot启动第二阶段——C语言

    1 给全局变量gd分配内存 详情参考 uboot中重要的全局变量 gd 2 计算重定位的代码长度 armboot start word start monitor flash len bss start armboot start 要重定位
  • h5ai搭建自己的文件分享程序

    h5ai搭建自己的文件分享程序 最近使用网盘分享一些资料 但是却被删除 现在感觉还是放在自己的服务器上比较放心 今天就介绍下安装h5ai这个目录程序 他可以把对应目录下的文件和文件夹全部显示在web页面上 只需点击即可下载对应的资料 h5a
  • vue——Props属性和Data属性概述

    利用Props可以进行组件之间数据传递 类似于React的Props Props 父组件向子组件传递数据 动态props 子组件向父组件传递了数据 子组件向子组件传递数据 Data 使用data data选项 数据 computed 声明式
  • 深度学习中常用的损失函数

    文章目录 一 什么是损失函数 二 分类任务损失 1 0 1 loss 2 熵与交叉熵loss 3 softmax loss及其变种 4 KL散度 5 Hinge loss 6 Exponential loss与Logistic loss 三