0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

表示学习中7大损失函数的发展历程及设计思路

深度学习自然语言处理 来源:圆圆的算法笔记 作者:Fareise 2022-07-08 14:23 次阅读

表示学习的目的是将原始数据转换成更好的表达,以提升下游任务的效果。在表示学习中,损失函数的设计一直是被研究的热点。损失指导着整个表示学习的过程,直接决定了表示学习的效果。这篇文章总结了表示学习中的7大损失函数的发展历程,以及它们演进过程中的设计思路,主要包括contrastive loss、triplet loss、n-pair loss、infoNce loss、focal loss、GHM loss、circle loss。

1. Contrastive Loss

Dimensionality Reduction by Learning an Invariant Mapping(CVPR 2006)提出contrastive loss,模型中输入两个样本,经过相同的编码器得到两个样本的编码。如果两个样本属于同一类别,则优化目标为让两个样本在某个空间内的距离小;如果两个样本不属于同一类别,并且两个样本之间的距离小于一个超参数m,则优化目标为让两个样本距离接近m。损失函数可以表示为:

b2c16bd0-e8a5-11ec-ba43-dac502259ad0.png

Contrastive Loss是后面很多表示学习损失函数的基础,通过这种对比的方式,让模型生成的表示满足相似样本距离近,不同样本距离远的条件,实现更高质量的表示生成。

2. Triplet Loss

FaceNet: A unified embedding for face recognition and clustering(CVPR 2015)提出triplet loss,计算triplet loss需要比较3个样本,这3个样本分别为anchor、position和negtive。其目标为让anchor和positive样本(类别相同)的距离尽可能近,而和negtive样本(类别不同)的距离尽可能远。因此triplet loss设计为,让anchor和positive样本之间的距离比anchor和negtive样本要小,并且要小至少一个margin的距离才不计入loss。

b31439dc-e8a5-11ec-ba43-dac502259ad0.png

b3366f34-e8a5-11ec-ba43-dac502259ad0.png

3. N-pair Loss

Improved Deep Metric Learning with Multi-class N-pair Loss Objective(NIPS 2016)提出N-pairLoss。在之前提出的contrastive loss和triplet loss中,每次更新只会使用一个负样本,而无法见到多种其他类型负样本信息,因此模型优化过程只会保证当前样本的embedding和被采样的负样本距离远,无法保证和所有类型的负样本都远,会影响模型收敛速度和效果。即使多轮更新,但是这种情况仍然会导致每轮更新的不稳定性,导致学习过程持续震荡。

为了解决这个问题,让模型在每轮更新中见到更多的负样本,本文提出了N-pair loss,主要改进是每次更新的时候会使用多个负样本的信息。N-pair loss可以看成是一种triplet loss的扩展,两个的关系如下图,当我们有1个正样本和N-1个负样本时,N-pair loss的计算方式:

b3501f74-e8a5-11ec-ba43-dac502259ad0.png

b3677444-e8a5-11ec-ba43-dac502259ad0.png

扩大负样本数量的问题在于,原来每个batch内只需要计算N*3个样本,现在需要计算N*(N+1)个样本,运算量大幅度提高,难以实现。为了解决这个问题,文中提出将一个batch内不同样本的负样本数据共享,这样只需要计算3*N个样本的embedding即可,实现了效率提升。

b38b6188-e8a5-11ec-ba43-dac502259ad0.png

4. InfoNceLoss

Representation learning with contrastive predictive coding(2018)提出infoNce loss,是对比学习中最常用的loss之一,它和softmax的形式很相似,主要目标是给定一个query,以及k个样本,k个样本中有一个是和query匹配的正样本,其他都是负样本。当query和正样本相似,并且和其他样本都不相似时,loss更小。InfoNCE loss可以表示为如下形式,其中r代表temperature,采用内积的形式度量两个样本生成向量的距离,InfoNCE loss也是近两年比较火的对比学习中最常用的损失函数之一:

b3b6b7ca-e8a5-11ec-ba43-dac502259ad0.png

相比softmax,InfoNCE loss使用了temperature参数,以此将样本的差距拉大,提升模型的收敛速度。

5. Focal Loss

Focal Loss for Dense Object Detection(2018)提出Focal Loss,最开始主要是为了解决目标检测中的问题,但是在很多其他领域也可以适用。Focal Loss解决的核心问题是,当数据中有很多容易学习的样本和较少的难学习样本时,如何调和难易样本的权重。如果数据中容易的样本很多,难的样本很少,容易的样本就会对主导整体loss,对难样本区分能力弱。

为了解决这个问题,Focal Loss根据模型对每个样本的打分结果给该样本的loss设置一个权重,减小容易学的样本(即模型打分置信的样本)的loss权重。在交叉熵的基础上,公式可以表示如下:

b3d558d8-e8a5-11ec-ba43-dac502259ad0.png

b41f579e-e8a5-11ec-ba43-dac502259ad0.png

b44595c6-e8a5-11ec-ba43-dac502259ad0.png

其中pt表示,当label为1时模型的预测值,当label为0时1-模型的预测值。通过对这个loss公式的分析可以看出,对于label为1的样本,且模型预测值接近1,这个时候该样本分类正确且容易预测,则第一项权重接近0,显著减小了这种易分类样本的loss权重。当label为0,模型预测值接近1时,属于预测错误,loss的权重也是接近1的,对该样本的loss基本没有影响。

6. GHM Loss

在Focal Loss中强制让模型关注难分类的样本,但是数据中可能也存在一些异常点,过度关注这些难分类样本,反而会让模型效果变差。Gradient Harmonized Single-stage Detector(AAAI 2019)提出了GHM Loss,

首先分析了一个收敛的目标检测模型中,所有样本梯度模长的分布情况。梯度模长衡量了一个样本对模型梯度的影响大小(不考虑方向),反映了一个样本的难以程度,g越大模型因为此样本需要更新的梯度越大,预测难度越大。基于交叉熵和模型输出,梯度模长g定义如下:

b469321a-e8a5-11ec-ba43-dac502259ad0.png

b49ddbdc-e8a5-11ec-ba43-dac502259ad0.png

一个收敛的目标检测模型的梯度模长分布如下,简单样本(即g很小的样本)占绝大多数,这部分样本是我们希望减小其loss权重的;同时还有很多难样本,它们的g非常大,这部分可以被视作异常点,因为它们的梯度不符合大多数样本,对于这部分极难样本也应该减小权重。

b4c0313c-e8a5-11ec-ba43-dac502259ad0.png

为了同时减小易学习样本和异常点样本的权重,文中引入了梯度密度的概念(GD),衡量单位梯度模长的样本密度。这个梯度密度用来作为交叉熵loss中的样本权重,公式如下:

b4f887d0-e8a5-11ec-ba43-dac502259ad0.png

上面右侧的图对比了各种loss对不同梯度模长样本的影响情况,可以看到GHM对于简单样本和困难样本都进行了一定的loss抑制,而Focal Loss只能对简单样本进行loss抑制,普通loss对这两类样本都没有抑制作用。

7. Circle Loss

Circle Loss: A Unified Perspective of Pair Similarity Optimization(CVPR 2020)提出circle loss,从一个统一的视角融合了class-level loss和pair-wise loss。这两种优化目标,其实都是在最小化sn-sp,其中sn表示between-class similarity,即不同类别的样本表示距离应该尽可能大;sp表示within-class similarity,即相同类别的样本表示距离尽可能小。因此,两种类型的loss都可以写成如下统一形式:

b5231888-e8a5-11ec-ba43-dac502259ad0.png

基于sn-sp这种loss存在的问题是,优化过程中对sn和sp的惩罚力度是一样的。例如下面左图中,A点的sn已经很小了,满足要求了,而sp还不够大,sn-sp这种优化方法让sn和sp的更新幅度相同。而更好的方法是多更新一些sp,少更新一些sn。此外,这种loss在优化过程中也会导致模棱两可的情况,导致收敛状态不明确。例如T和T'这两个点,都满足给定margin的情况下的优化目标,但却存在不同的优化点。

b54a1e4c-e8a5-11ec-ba43-dac502259ad0.png

为了解决这个问题,circle loss在sn和sp分别增加了权重,用来动态确定sn和sp更新的力度,实现sn和sp以不同步调学习,circle loss的公式如下。当sn或sp相似度结果距离各自的最优点较远时,会以一个更大的权重进行更新。同时,在这种情况下loss不再是对称的,需要对sn和sp分别引入各自的margin。

b57cc478-e8a5-11ec-ba43-dac502259ad0.png

8. 总结

损失函数是影响表示学习效果的关键因素之一,本文介绍了表示学习中7大损失函数的发展历程,核心思路都是通过对比的方式约束模型生成的表示满足相似样本距离近,不同样本距离远的原则。 审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编码器
    +关注

    关注

    41

    文章

    3360

    浏览量

    131537

原文标题:表示学习中的7大损失函数梳理

文章出处:【微信号:zenRRan,微信公众号:深度学习自然语言处理】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    制冷剂的发展历程发展趋势

    一、制冷剂的发展历程 在民用空调、工业制冷,制冷剂作为制冷系统不可或缺的工质,一直发挥着重要作用。从历史上看,制冷剂的发展可以分为四个阶
    发表于 03-02 17:52

    对象检测边界框损失函数–从IOU到ProbIOU介绍

    目标检测损失函数的选择在目标检测问题建模中至关重要。通常,目标检测需要两个损失函数,一个用于对象分类,另一个用于边界框回归(BBR)。
    的头像 发表于 01-24 10:50 1104次阅读
    对象检测边界框<b class='flag-5'>损失</b><b class='flag-5'>函数</b>–从IOU到ProbIOU介绍

    一键解锁!晶体管结构工艺发展历程

    一键解锁!晶体管结构工艺发展历程
    的头像 发表于 12-07 09:48 317次阅读
    一键解锁!晶体管结构工艺<b class='flag-5'>发展</b><b class='flag-5'>历程</b>

    C语言printf函数学习笔记

    printf 应该是学习C语言的第一个函数,我们都知道它是用于字符串格式化输出的。但是它的用法你真正了解了吗?
    的头像 发表于 11-24 11:15 541次阅读
    C语言printf<b class='flag-5'>函数</b>族<b class='flag-5'>学习</b>笔记

    汽车大灯发展历程:从乙烯块到激光灯

    电子发烧友网站提供《汽车大灯发展历程:从乙烯块到激光灯.doc》资料免费下载
    发表于 11-01 09:30 0次下载
    汽车大灯<b class='flag-5'>发展</b><b class='flag-5'>历程</b>:从乙烯块到激光灯

    ARM学习历程分享

    该文档为ARM学习历程(入门版)的总结文档,是很不错的参考资料哦
    发表于 09-25 07:50

    一文理解IGBT的发展历程

    它在半导体领域崭露头角,成为现代技术发展不可或缺的重要组成部分。为了更好地理解IGBT的发展历程,让我们深入探索这一激动人心的故事。
    发表于 09-05 10:15 595次阅读

    keras常用的损失函数Losses与评价函数Metrics介绍

    损失函数(loss function)是用来衡量预测值和真实值差距的函数,是模型优化的目标,所以也称之目标函数、优化评分函数。这是机器
    发表于 08-18 06:31

    机器学习发展历程中不同时期的标志性事件有哪些

    机器学习发展历程中不同时期的标志性事件有哪些 机器学习是人工智能领域的一个重要分支,随着数据科学和计算能力的不断提升,机器学习在过去几十年里
    的头像 发表于 08-17 16:30 1023次阅读

    机器学习发展历程

    机器学习发展历程:机器学习发展现状、机器学习发展前景
    的头像 发表于 08-17 16:30 1209次阅读

    半导体制备工艺的发展历程及种类特性

    半导体工艺的发展历程几乎与现代电子工业的发展历程一致。早在20世纪40年代,贝尔实验室的研究人员发明了第一个点接触式晶体二极管,标志着半导体技术的诞生。
    发表于 06-08 09:30 423次阅读
    半导体制备工艺的<b class='flag-5'>发展</b><b class='flag-5'>历程</b>及种类特性

    PyTorch教程-12.1. 优化和深度学习

    在 SageMaker Studio Lab 中打开笔记本 在本节中,我们将讨论优化与深度学习之间的关系以及在深度学习中使用优化的挑战。对于一个深度学习问题,我们通常会先定义一个 损失
    的头像 发表于 06-05 15:44 354次阅读
    PyTorch教程-12.1. 优化和深度<b class='flag-5'>学习</b>

    智能配电系统在水务行业的发展历程及应用案例

    本文首先回顾了智能配电系统在水务行业的发展历程,并对其应用现状进行了分析,进而展望了智能配电系统在水务行业的发展趋势。
    发表于 05-19 16:47 0次下载
    智能配电系统在水务行业的<b class='flag-5'>发展</b><b class='flag-5'>历程</b>及应用案例

    深度学习基础知识(5)

    上一节中说到,需要求使损失函数最小的权重和偏置,高中数学中,求函数的极值就是使函数导数为0的点。
    的头像 发表于 05-16 18:24 547次阅读
    深度<b class='flag-5'>学习</b>基础知识(5)

    深度学习基础知识(4)

    神经网络的学习:从训练数据中自动获取最优权重的过程,是使损失函数的值最小的权重参数。
    的头像 发表于 05-16 17:30 510次阅读
    深度<b class='flag-5'>学习</b>基础知识(4)