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大损失函数的发展历程,核心思路都是通过对比的方式约束模型生成的表示满足相似样本距离近,不同样本距离远的原则。 审核编辑:郭婷

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

    关注

    45

    文章

    3584

    浏览量

    134110

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

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

收藏 人收藏

    评论

    相关推荐

    【每天学点AI】前向传播、损失函数、反向传播

    在深度学习的领域中,前向传播、反向传播和损失函数是构建和训练神经网络模型的三个核心概念。今天,小编将通过一个简单的实例,解释这三个概念,并展示它们的作用。前向传播:神经网络的“思考”过程前向传播
    的头像 发表于 11-15 10:32 463次阅读
    【每天学点AI】前向传播、<b class='flag-5'>损失</b><b class='flag-5'>函数</b>、反向传播

    RNN的损失函数与优化算法解析

    RNN的损失函数 RNN(循环神经网络)在处理序列数据的过程损失函数(Loss Function)扮演着重要的角色,它可以测量模型在训练
    的头像 发表于 11-15 10:16 192次阅读

    语义分割25种损失函数综述和展望

    语义图像分割,即将图像的每个像素分类到特定的类别,是许多视觉理解系统的重要组成部分。作为评估统计模型性能的主要标准,损失函数对于塑造基
    的头像 发表于 10-22 08:04 115次阅读
    语义分割25种<b class='flag-5'>损失</b><b class='flag-5'>函数</b>综述和展望

    直径测量工具的发展历程

    关键字:直径测量,工业直径测量设备,线性尺量器,光电测径仪, 直径测量工具的发展历程是一个悠久且不断创新的过程,它随着科学技术的进步而不断演变。以下是直径测量工具发展历程的详细概述:
    发表于 10-10 16:55

    Type-C接口的发展历程

    Type-C连接器,全称为USB Type-C接口,自其诞生以来,便以其独特的优势迅速在各类电子设备普及,成为当前最为流行的连接标准之一。其发展历程不仅见证了技术的不断进步,也反映了市场需求的变化和行业标准的统一趋势。
    的头像 发表于 09-02 10:58 1186次阅读

    简述socket编程的常用函数

    Socket编程是一种基于TCP/IP协议的网络编程技术,它允许应用程序通过网络进行通信。在Socket编程,有许多常用的函数,它们用于创建、配置、连接、发送和接收数据等操作。以下是对这些常用函数
    的头像 发表于 08-16 10:49 276次阅读

    NAND闪存的发展历程

    NAND闪存的发展历程是一段充满创新与突破的历程,它自诞生以来就不断推动着存储技术的进步。以下是对NAND闪存发展历程的详细梳理,将全面且深
    的头像 发表于 08-10 16:32 1089次阅读

    AI大模型的发展历程和应用前景

    随着人工智能技术的飞速发展,AI大模型逐渐成为研究与应用领域的热点。AI大模型,顾名思义,是指具有巨大参数量的深度学习模型,这些模型通过学习海量的数据,能够在自然语言处理、计算机视觉、自主驾驶等多个
    的头像 发表于 07-03 18:20 1080次阅读

    PLC的发展历程

    最初的简单控制器发展成为现代工业自动化领域中的智能化系统。本文将详细介绍PLC的发展历程,包括其起源、发展阶段和现代阶段,并探讨PLC在工业自动化领域中的应用和未来的
    的头像 发表于 06-14 10:15 2241次阅读

    光伏逆变器的发展历程

    光伏逆变器的发展历程可以追溯到20世纪70年代末期,随着光伏电池的发展和应用,人们开始意识到将其应用于实际电力系统中所面临的难题,光伏逆变器因此应运而生。
    的头像 发表于 05-06 17:01 642次阅读

    PyTorch激活函数的全面概览

    为了更清晰地学习Pytorch的激活函数,并对比它们之间的不同,这里对最新版本的Pytorch的激活函数进行了汇总,主要介绍激活
    的头像 发表于 04-30 09:26 497次阅读
    PyTorch<b class='flag-5'>中</b>激活<b class='flag-5'>函数</b>的全面概览

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

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

    verilog函数和任务对比

    在verilog函数和任务均用来描述共同的代码段,并且在模式内任意位置被调用,提高代码效率,让代码更加的直观,提高代码可读性。但是在实际使用的过程函数和任务也存在诸多的不同,下
    的头像 发表于 02-12 18:43 856次阅读

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

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

    深入了解Excel的SUMIF函数

    Excel是一款广泛应用于办公和数据分析的软件,在众多的内置函数,SUMIF函数是一个非常重要且常用的函数之一。本文将详尽地介绍SUMIF函数
    的头像 发表于 11-30 16:41 2166次阅读