神经网络中的损失函数

news2024/11/25 0:52:17

在《神经网络中常见的激活函数》一文中对激活函数进行了回顾,下图是激活函数的一个子集——

e51bb1b4675819c671ec5f424bf2b51c.png

而在神经网络领域中的另一类重要的函数就是损失函数,那么,什么是损失函数呢?

损失函数是将随机事件或其有关随机变量的取值映射为非负实数以表示该随机事件的“风险”或“损失”的函数,用于衡量预测值与实际值的偏离程度。在机器学习中,损失函数是代价函数的一部分,而代价函数是目标函数的一种类型。在应用中,损失函数通常作为学习准则与优化问题相联系,即通过最小化损失函数求解和评估模型。

c167cb59927fb0ae14807750c460b182.jpeg

这里简要回顾一些常见的损失函数及其简明用例。为了便于理解,将损失函数分为两类:面向分类的损失函数和面向回归的损失函数。 为了便于不同损失函数的比较,常将其表示为单变量的函数,在回归问题中这个变量为y−f(x),在分类问题中则为yf(x)。

面向分类的损失函数

对于二分类问题,y∈{−1,+1},损失函数常表示为关于yf(x)的单调递减形式。yf(x)被称为margin,最小化损失函数也可以看作是最大化 margin 的过程,任何合格的分类损失函数都应该对 margin<0 的样本施以较大的惩罚。

Cross Entropy Loss 损失函数

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

交叉熵(cross-entropy,CE)刻画了两个概率分布之间的距离,更适合用在分类问题上,因为交叉熵表达预测输入样本属于某一类的概率。

Cross Entropy loss损失函数,或负对数损失,衡量输出为0到1之间的概率值的分类模型的性能,常用于二分类和多分类问题中。交叉熵损失随着预测的概率值远离实际标签而增加。一个完美的模型将会是0损失,因为预测的值将会匹配实际的值。

对二分类,交叉熵损失的公式如下:

dbc00483d21edcc96768c5f315011196.jpeg

在多分类任务中,经常采用 softmax 激活函数+交叉熵损失函数,因为交叉熵描述了两个概率分布的差异,然而神经网络输出的是向量,并不是概率分布的形式。所以需要 softmax激活函数将一个向量进行“归一化”成概率分布的形式,再采用交叉熵损失函数计算 loss。

对于多分类,交叉熵损失的公式如下:

da32bc3e97cb27a12557ac0efd33501d.png

Focal Loss 损失函数

Focal loss 损失函数是为了解决 one-stage 目标检测中正负样本极度不平衡的问题,是一个密集目标检测的损失函数。在训练深层神经网络解决目标检测和分类问题时,这是最常见的选择之一。

49320821574d37bcfa8928256b8761d5.jpeg

Focal loss损失函数是基于二分类交叉熵的,通过一个动态缩放因子,可以动态降低训练过程中易区分样本的权重,从而将重心快速聚焦在那些难区分的样本。那些样本有可能是正样本,也有可能是负样本,但都是对训练网络有帮助的样本。

387c7d1074817d760bd940f671f34633.png

Focal loss损失函数计算一个动态缩放的交叉熵损失,如果其中的比例因子衰减为零,作为正确的类的置信度增加。

Polyloss 损失函数

Cross-entropy loss损失函数和 focal loss损失函数是深层神经网络分类问题训练中最常用的选择。然而,一般来说,一个好的损失函数可以采取更加灵活的形式,应该为不同的任务和数据集量身定制。

可以将损失函数视为多项式函数的线性组合,并通过泰勒展开来近似函数。在多项式展开下,Focal Loss是多项式系数相对于Cross-entropy loss的水平位移。如果垂直修改多项式系数,则得到了Polyloss的计算公式:

a370a1ce9a80c970b8040ae0c3ec228e.png

Polyloss是Cross-entropy loss损失函数的一种广义形式。

Hinge Loss 损失函数

Hinge loss损失函数通常适用于二分类的场景中,可以用来解决间隔最大化的问题,常应用于著名的SVM算法中。

Hinge 损失函数是一个凸函数,擅长“最大余量”分类,因此许多机器学习中常用的凸优化器都可以利用它。

3a63e51c9af256a5e239807c89508515.png

Hinge 损失函数将与分类边界之间的差值或距离纳入成本计算。即使新的观察结果被正确分类,如果决策边界的差距不够大,它们也会受到惩罚,损失呈线性增加。

Generalized End-to-End Loss 损失函数

Generalized End-to-End 损失函数(简称GE2E)用于说话人验证的广义端到端损失函数。

说话人验证是指验证输入的一段语音是否属于一个特定音箱的任务,这里有两个概念:enrollment utterance和verification utterance,前者可以理解为预留的“声纹”,而后者则是用于验证的语音。进一步细分为两种任务:text-dependent speaker verification (TD-SV)和text-independent verification (TI-SV)。TD-SV对用于验证的语音的内容有一定的限制,一个比较常见的例子是Siri,这个时候需要说出一个固定的句子“Hey, siri”。相反,TI-SV则不对语音的内容有任何限制。

GE2E 使说话人验证模型的训练比tuple-based end-to-end (TE2E) loss 损失函数更有效率,具有收敛速度快、实现简单等优点。

4be50e5f5f653be71b31269e80598885.png

GE2E会使得网络在更新参数的时候注重于那些不容易被区分开的数据,且不需要在训练之前进行示例选择。此外,GE2E Loss不需要初始阶段的示例选择。

Additive Angular Margin Loss 损失函数

Additive Angular Margin Loss(AAM)主要用于人脸识别,但也在语音识别等其他领域得到了应用。

利用深层卷积神经网络(DCNN)进行大规模人脸识别的特征学习面临的主要挑战之一是如何设计合适的损失函数来提高识别能力。中心损失惩罚了深部特征与其在欧氏空间中相应的类中心之间的距离,以实现类内紧凑性。假设最后一个完全连通层中的线性映射矩阵可以用来表示角度空间中的类中心,并以乘法的方式惩罚深层特征及其相应权重之间的角度。一个流行的研究方向是将预留边缘纳入已建立的损失函数,以最大限度地提高人脸的可分性。

AAM Loss(ArcFace)由于与超球面上的测地距离精确对应,获得了具有清晰几何解释(优于其他损失函数)的高度区分特征。ArcFace 的性能始终优于最先进的技术,并且可以轻松实现,计算开销可以忽略不计。

bb64403cab7240bc6974485e1be115e7.png

具体来说,提出的弧面 cos (θ + m)基于 L2归一化权重和特征,直接最大化角(弧)空间的决策边界。

Triplet Loss 损失函数

Triplet Loss最初用于学习同一人在不同姿势和角度下的人脸识别。Triplet Loss是机器学习算法的一种损失函数,其中一个参考输入(称为锚)与一个匹配输入(称为正值)和一个非匹配输入(称为负值)进行比较。

考虑训练神经网络识别人脸的任务(例如进入高安全区域)。每当一个新的人加入到人脸数据库时,训练有素的分类器就必须重新训练。这可以通过将问题作为一个相似性学习问题而不是一个分类问题来避免。这里,网络被训练(使用对比度损失)输出一个距离,如果图像属于一个已知的人,这个距离是小的,如果图像属于一个未知的人,这个距离是大的。但是,如果我们想输出最接近给定图像的图像,我们希望了解一个排名,而不仅仅是相似性。在这种情况下使用了三重损失。

d6d5639eba42ae5872c911bdc39a188d.png

其中d 表示距离函数,一般指在Embedding下的欧式距离计算。很显然,Triplet-Loss是希望让a和p的距离尽可能小,而a和n的距离尽可能大。

在训练中使用Triplet loss的一个重要选择就是我们需要对负样本进行挑选,称之为负样本选择或者三元组采集。选择的策略会对训练效率和最终性能结果有着重要的影响。一个明显的策略就是:简单的三元组应该尽可能被避免采样到,因为其loss为0,对优化并没有任何帮助。

InfoNCE Loss 损失函数

InfoNCE Loss损失函数是基于对比度的一个损失函数,是由NCE Loss损失函数演变而来的。

NCE是基于采样的方法,将多分类问题转为二分类问题。以语言模型为例,利用NCE可将从词表中预测某个词的多分类问题,转为从噪音词中区分出目标词的二分类问题,一个类是数据类别 data sample,另一个类是噪声类别 noisy sample,通过学习数据样本和噪声样本之间的区别,将数据样本去和噪声样本做对比,也就是“噪声对比(noise contrastive)”,从而发现数据中的一些特性。

Info NCE loss是NCE的一个简单变体,它认为如果你只把问题看作是一个二分类,只有数据样本和噪声样本的话,可能对模型学习不友好,因为很多噪声样本可能本就不是一个类,因此还是把它看成一个多分类问题比较合理。

816405a3bdbc56fc5fd2dfee68f05460.png

InfoNCE 代表噪声对比估计,是一种用于自我监督学习的对比损失函数,使用分类交叉熵损失来识别一组不相关的噪声样本中的正样本。InfoNCE Loss是为了将N个样本分到K个类中,而不是NCE Loss的二分类或者交叉熵损失函数的完全分类。

Dice Loss 损失函数

Dice 损失函数来源于 Sørensen-Dice系数,这是一个发展于1940年代的统计方法,用来衡量两个样本之间的相似性。Dice系数的值越大意味着这两个样本越相似。

Dice Loss常用于语义分割问题中,对于二分类分割问题,真实分割标签只有0,1两个值。对于多分类分割问题,Dice Loss是直接优化F1 score而来的,是对F1 score的高度抽象。

2016年,Milletari 等人将其引入计算机视觉社区,用于三维医疗图像分割。为了防止分母项为0,一般我们会在分子和分母处同时加入一个很小的数作为平滑系数,也称为拉普拉斯平滑项。Dice Loss有以下主要特性:

  • 有益于正负样本不均衡的情况,侧重于对前景的挖掘;

  • 训练过程中,在有较多小目标的情况下容易出现振荡;

  • 极端情况下会出现梯度饱和的情况。

99c761fc668c8400c4256fadeb75d684.png

从集合论的角度来看,DSC是两个集合之间重叠的度量。例如,如果两个集合 A 和 B 完全重叠,Dice系数 的最大值为1。否则,Dice系数开始减小,如果两个集合完全不重叠,则 Dice系数的最小值为0。

9cb63f07ac69b19005dd9245123bc4f3.jpeg

因此,DSC 的范围在0-1之间,越大越好。因此,我们可以使用1-DSC 作为骰子损失,以最大限度地提高两个集之间的重叠。

Margin Ranking Loss 损失函数

顾名思义,Margin Ranking Loss损失函数主要用于排名问题,也应用于对抗网络中。Margin Ranking Loss计算输入为 X1、 X2以及包含1或 -1的标签张量 y 的损失。当 y 的值为1时,第一个输入将被假设为较大的值,并将排名高于第二个输入。类似地,如果 y =-1,第二个输入将被排序得更高。

39f07e7b1dc9fc2d285ca23bc6e31570.png

Margin Ranking Loss 计算一个标准来预测输入之间的相对距离。这不同于其他损失函数,例如 MSE 或交叉熵,它们学习直接从一组给定的输入进行预测。

Contrastive Loss 损失函数

鉴于学习不变映射的降维需求,对比损失是一个交叉熵的替代损失函数,它可以更有效地利用标签信息。

在孪生神经网络(siamese network)中,其采用的损失函数是contrastive loss,这种损失函数可以有效的处理孪生神经网络中的paired data的关系,形式上并不一定是两个Net,也可以是一个Net两个Out。

a7f5911e9c94bc2f04004bf91a63a100.jpeg

在嵌入空间中,同一类的点簇被拉在一起,同时推开不同类的样本簇。Contrastive以网络的输出为正样本,计算网络到同类实例的距离,并与网络到负类实例的距离进行对比。对比损失计算正例(同类的例子)和负例(不同类的例子)之间的距离。因此,如果正面例子被编码(在这个嵌入空间中)到相似的例子中,而负面例子被进一步编码到不同的表示中,那么损失可以预期是低的。

Multiple Negative Ranking Loss 损失函数

句表示领域中的核心其实是隐性的规定负例,例如只有锚定语句和一个正例,同一批次中的其他语句则为负例,或者指定一组锚定语句、正例、困难负例,同一批次的其他语句皆为负例等,使用的损失函数主要是Multiple Negative Ranking Loss,数学上的表达式为:

8cb328b8f87bb49180cc08908e6294d0.png

这个丢失函数可以很好地训练嵌入,以便在检索设置中使用正对(例如 query,relevant _ doc) ,因为它将在每批 n-1负文档中随机抽样。性能通常随着批量的增加而提高。

在高效句子嵌入问题中,使用Multiple Negative Ranking Loss 损失函数训练的模型具有一定的优势。

面向回归的损失函数

回归问题中y和f(x)皆为实数∈R,因此用残差 y−f(x)来度量二者的不一致程度。残差 (的绝对值) 越大,则损失函数越大,学习出来的模型效果就越差(这里不考虑正则化问题)。

dc98e3653afb787338a21d7c511ab944.png

MAE 或 L1 Loss 损失函数

顾名思义,平均绝对误差(Mean Average Error,MAE) 取实际值和预测值之间绝对差的平均和,也叫做“L1 损失函数”。它在一组预测中衡量误差的平均大小,而不考虑误差的方向。如果也考虑方向,那将被称为平均偏差(Mean Bias Error,MBE),它是残差或误差之和,其损失范围也是0到∞。

6c8cca5b2080bb5b499717f1e24bf7e5.png

由于存在异常值(与其他数据非常不同的值) ,回归问题可能有本质上不是严格高斯的变量。在这种情况下,平均绝对误差将是一个理想的选择,因为它没有考虑到异常值的方向(不切实际的高正值或负值)。

L1损失函数用于最小化误差,是以绝对误差作为距离。L1不受离群值的影响,因此,如果数据集包含离群值,则 L1更可取。另外,其收敛速度快,能够对梯度给予合适的惩罚权重,而不是“一视同仁”,使梯度更新的方向可以更加精确。

MSE 或 L2 Loss 损失函数

均方差(Mean Squared Error,MSE)是实际值和预测值之间的平方差的平均值,是最常用的回归损失函数,也叫做“L2 损失函数”。MSE是目标变量与预测值之间距离平方之和。

c0b38bab587b0d796bb29a294a142b98.png

L2损失函数用来最小化误差,也是比 L1更优先的损失函数。但是,当数据集中存在异常值时,L2的性能不会很好,因为平方差会导致更大的错误。

简而言之,使用L2更容易求解,但使用L1对离群点更加鲁棒。

Huber Loss 损失函数

Huber Loss 是一种将 MSE 与 MAE 结合起来,取两者优点的损失函数,也被称作 Smooth Mean Absolute Error Loss(Smooth L1 损失)。Huber Loss 也是回归中使用的一种损失函数,它对数据中的异常值不如误差平方损失那么敏感。它具有对异常点不敏感和极小可微的特点,使得损失函数具有良好的性质。

当误差较小时,利用 Huber Loss的 MSE 部分,当误差较大时,利用 Huber 损失的 MAE 部分。引入了一种新的超参数 δ,它告诉损失函数从 MSE 到 MAE 的切换位置。在损失函数中引入 δ 项,使 MSE 向 MAE 的转变趋于平滑。Huber 损失函数描述了由估算过程产生的损失 F Huber 损失分段定义损失函数:

99f0f42fee97b99ad83b0fdbecda3f19.png

这个函数是二次函数,具有相等的值和斜率的不同部分在两个点 ‖ a ‖ = δ 变量 a 通常指的是残差,即观测值和预测值之间的差值 A = y-f (x) 因此,前者可以扩展到:

90f74b767f81de686d029ea1cbfb5059.png

总之,Huber Loss 增强了MSE的离群点鲁棒性,减小了对离群点的敏感度问题。当误差较大时 ,使用MAE可降低异常值影响,使得训练更加健壮。其下降速度介于MAE与MSE之间,弥补了MAE在Loss下降速度慢的问题,而更接近MSE。

小结

在神经网络中,损失函数是神经网络的预测输出与实际输出之间差异的度量,计算当前输出和预期输出之间的距离。这是一种评估如何建模数据的方法,提供了神经网络表现如何的度量,并被用作训练期间优化的目标。损失函数越小,一般就代表模型的鲁棒性越好,正是损失函数指导了模型的学习。

【参考资料与关联阅读】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/661880.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网络安全学术顶会——CCS '22 议题清单、摘要与总结(上)

注意&#xff1a;本文由GPT4与Claude联合生成。 按语&#xff1a;ChatGPT在计算机领域的翻译质量还是欠缺一些&#xff0c;翻译出来的中文有的不够自然&#xff0c;经常完全按照英文的表达方式来&#xff0c;导致中文特别长&#xff0c;很绕。GPT4的翻译效果相对ChatGPT效果要好…

第38步 深度学习图像识别:VGG19建模(Tensorflow)

基于WIN10的64位系统演示 一、写在前面 &#xff08;1&#xff09;预训练模型和迁移学习 预训练模型就像是一个精心制作的省力工具&#xff0c;它是在大量的数据上进行训练&#xff0c;然后将学习到的模型参数保存下来。然后&#xff0c;我们可以直接使用这些参数&#xff0…

gitlab_ci.yml展示单元测试报告 (FREE)

CI/CD 流水线通常包含验证您的代码的测试作业。 如果测试失败&#xff0c;流水线将失败并通知用户。处理合并请求的人必须检查作业日志并查看测试失败的地方&#xff0c;以便可以修复它们。 您可以将作业配置为使用单元测试报告&#xff0c;极狐GitLab 会显示有关合并请求的报…

一种实现Spring动态数据源切换的方法 | 京东云技术团队

1 目标 不在现有查询代码逻辑上做任何改动&#xff0c;实现dao维度的数据源切换&#xff08;即表维度&#xff09; 2 使用场景 节约bdp的集群资源。接入新的宽表时&#xff0c;通常uat验证后就会停止集群释放资源&#xff0c;在对应的查询服务器uat环境时需要查询的是生产库…

SegNeXt:重新思考语义分割中卷积注意力设计

论文链接&#xff1a;https://arxiv.org/abs/2209.08575 github&#xff1a; https://github.com/Visual-Attention-Network/SegNeXt 参考视频&#xff1a;【翻译成中文带你读】SegNext论文逐行精读&#xff0c;30分钟就能快速了解其奥秘&#xff01;-人工智能/深度学习/计算…

Triton教程---存储代理

Triton教程—存储代理 存储库代理使用在加载或卸载模型时运行的新功能扩展了 Triton。 您可以在加载模型时引入自己的代码来执行身份验证、解密、转换或类似操作。 测试版&#xff1a;存储库代理 API 是测试版质量&#xff0c;并且会针对一个或多个版本进行非向后兼容的更改。…

牛客网 2023 最新 “Java 面试八股文+各大厂的面试真题“出炉,面面俱到,太全了

一转眼 2023 年已经过了大半了&#xff0c;不知道你金三银四上岸了&#xff0c;还是等着秋招呢&#xff1f;大家从 Boss 直聘上或者其他招聘网站上都可以看到 Java 岗位众多&#xff0c;Java 岗位的招聘薪酬天差地别&#xff0c;人才要求也是五花八门。而很多 Java 工程师求职过…

css3 grid 布局

特别声明&#xff1a;这篇博客转载于阮一峰老师&#xff0c;转载是为了方便日后复习&#xff0c;实在写的太棒了。 目录 一、概述 二、基本概念 2.1 容器和项目 2.2 行和列 2.3 单元格 2.4 网格线 三、容器属性 3.1 display 属性 3.2grid-template-columns 属性&#x…

[Studio3T]无限试用

新建文本文件 echo off ECHO 重置Studio 3T的使用日期...... REG DELETE "HKEY_CURRENT_USER\Software\JavaSoft\Prefs\3t\mongochef\enterprise" /f RMDIR /s /q %USERPROFILE%\.3T\studio-3t\soduz3vqhnnja46uvu3szq-- RMDIR /s /q %USERPROFILE%\.3T\studio-3t\L…

数字电路基础---触发器

数字电路基础---触发器 触发器&#xff08;Flip-Flop&#xff09;也是数字电路中的一种具有记忆功能的逻辑元件。触发器对脉冲边沿敏感的存储单元电路&#xff0c;它只在触发脉冲的上升沿&#xff08;或下降沿&#xff09;瞬间改变其状态。在数字电路中可以记录二进制数字信号“…

crfclust.bdb过大

有套11204集群环境&#xff0c;现场反馈/u01使用率100%&#xff0c;数据库无法使用了&#xff0c;本以为是aud文件太多导致的&#xff0c;查看后发现是crfclust.bdb多大了&#xff0c;有100多G了 [roothydb1 hydb1]#du -sh crfclust.bdb 101G crfclust.bdb [roothydb1 hydb…

31个最佳 JavaScript 片段

这里有 20 个有用的 JavaScript 片段&#xff0c;可以在您处理项目时为您提供帮助&#xff1a; 1.获取当前日期和时间&#xff1a; const now new Date(); 2. 检查变量是否为数组&#xff1a; Array.isArray(variable); 3.合并两个数组&#xff1a; const newArray array1.co…

学习svg 基本使用

一.实例展示 1.鼠标移动 <svg width"34px" height"34px" viewBox"0 0 34 34" version"1.1" xmlns"http://www.w3.org/2000/svg" dcindex"189"><g id"画板" stroke"none" stroke-wi…

机器学习-学习总结

1.课程整体目录&#xff1a; 2.课程地址 飞桨AI Studio - 人工智能学习与实训社区 2.1 回归 2.1.1线性回归和逻辑回归的联系和区别 【ML】线性回归和逻辑回归的联系和区别_逻辑回归和线性回归的区别_机器不学习我学习的博客-CSDN博客 2.1.2 线性回归和逻辑回归重要公式推导…

自然语言处理: 第三章NPLM(Neural Probabilistic Language Mode)

理论基础 NPLM的全称是"Neural Probabilistic Language Model"&#xff0c;即神经概率语言模型。这是一种基于神经网络的语言模型&#xff0c;用于生成自然语言文本。最早是由Bengio 在2003年的A Neural Probabilistic Language Model一文中提出来的&#xff0c; NP…

卖家必读,深入了解亚马逊,速卖通,temu测评补单方式的各种利弊

大部分人对补单的认识还停留在刷好评、信誉上&#xff0c;事实上&#xff0c;信誉等级和好评仅是补单的目标之一&#xff0c;不是目标的全部。 对于一个真正的老手来说&#xff0c;补单真正的目的是提升自己宝贝的权重和搜索排名。因为信誉等级和好评相对来说比较简单。 我们试…

从零开始 Spring Boot 43:DI 注解

从零开始 Spring Boot 43&#xff1a;DI 注解 图源&#xff1a;简书 (jianshu.com) Spring 通过注解实现 DI&#xff08;依赖注入&#xff09;&#xff0c;本文详细讨论这些注解。 Autowired Autowired是 Spring 定义的注解&#xff0c;属于包org.springframework.beans.fac…

【无标题】AI+电力、大模型主题人工智能师资培训班重磅招募中

大语言模型热度空前&#xff0c;诸如文心一言、ChatGPT 等已经能够与人对话互动、回答问题、协助创作&#xff0c;逐渐应用于人们的工作和生活&#xff0c;也引发了社会热议。人工智能赋能新型电力系统下新能源发电、变电、调度、配网、安监、营销、基建以及企业经营管理等领域…

强化学习从基础到进阶-案例与实践[1]:强化学习概述、序列决策、动作空间定义、策略价值函数、探索与利用、Gym强化学习实验

【强化学习原理项目专栏】必看系列&#xff1a;单智能体、多智能体算法原理项目实战、相关技巧&#xff08;调参、画图等、趣味项目实现、学术应用项目实现 专栏详细介绍&#xff1a;【强化学习原理项目专栏】必看系列&#xff1a;单智能体、多智能体算法原理项目实战、相关技巧…

MySQL数据库的高级操作

数据表高级操作 一、克隆表&#xff0c;将数据表的数据记录生成到新的表中方法一方法二 二、清空表&#xff0c;删除表内的所有数据方法一方法二 三、创建临时表四、创建外键约束&#xff0c;保证数据的完整性和一致性。1、外键的定义2、主键表和外键表的理解3、MySQL中6种常见…