当前位置: 首页 > 编程日记 > 正文

旷视提Circle Loss,统一优化视角,革新深度特征学习范式 | CVPR 2020

作者 | 旷视研究院

本文是旷视 CVPR 2020的被收录论文解读第。它提出用于深度特征学习的Circle Loss,从相似性对优化角度正式统一了两种基本学习范式(分类学习和样本对学习)下的损失函数。通过进一步泛化,Circle Loss 获得了更灵活的优化途径及更明确的收敛目标,从而提高所学特征的鉴别能力;它使用同一个公式,在两种基本学习范式,三项特征学习任务(人脸识别,行人再识别,细粒度图像检索),十个数据集上取得了极具竞争力的表现。

深度特征学习有两种基本范式,分别是使用类标签和使用正负样本对标签进行学习。使用类标签时,一般需要用分类损失函数(比如 softmax + cross entropy)优化样本和权重向量之间的相似度;使用样本对标签时,通常用度量损失函数(比如 triplet 损失)来优化样本之间的相似度。

这两种学习方法之间并无本质区别,其目标都是最大化类内相似度()和最小化类间相似度()。从这个角度看,很多常用的损失函数(如 triplet 损失、softmax 损失及其变体)有着相似的优化模式:

它们会将  和  组合成相似度对 (similarity pair)来优化,并试图减小( )。在(  )中,增大  等效于降低  。这种对称式的优化方法容易出现以下两个问题,如图 1 (a) 所示。

图 1:降低 () 的常用优化方法与新提出的降低 (  ) 的优化方法之间的对比

优化缺乏灵活性

 和  上的惩罚力度是严格相等的。换而言之,给定指定的损失函数,在  和  上的梯度的幅度总是一样的。例如图 1(a)中所示的 A 点,它的  已经很小了,可是,  会不断受到较大梯度。这样现象低效且不合理。

收敛状态不明确

优化 (  ) 得到的决策边界为  (m 是余量)。这个决策边界平行于  维持边界上任意两个点(比如  和  )的对应难度相等,这种决策边界允许模棱两可的收敛状态。比如,  和  都满足了  的目标,可是比较二者时,会发现二者之间的分离量只有 0.1,从而降低了特征空间的可分性。

简介

为此,旷视研究院仅仅做了一项非常简单的改变,把 (  ) 泛化为 (  ),从而允许  和  能以各自不同的步调学习。

具体来讲,把  和  分别实现为  和  各自的线性函数,使学习速度与优化状态相适应。相似度分数偏离最优值越远,加权因子就越大。如此优化得到的决策边界为  ,能够证明这个分界面是 (  ) 空间中的一段圆弧,因此,这一新提出的损失函数称之为 Circle Loss,即圆损失函数。

由图 1(a) 可知,降低 (  ) 容易导致优化不灵活(A、B、C 相较于   和   的梯度都相等)以及收敛状态不明确(决策边界上的 T 和 T' 都可接受);而在 Circle Loss 所对应的图 1 (b) 中,减小 (  ) 会动态调整其在  和 上的梯度,由此能使优化过程更加灵活。

对于状态 A,它的  很小(而  已经足够小),因此其重点是增大  ;对于 B,它的  很大 (而  已经足够大),因此其重点是降低  。此外,本文还发现,圆形决策边界上的特定点 T (圆弧与45度斜线的切点)更有利于收敛。因此,Circle Loss 设计了一个更灵活的优化途径,通向一个更明确的优化目标。

Circle Loss 非常简单,而它对深度特征学习的意义却非常本质,表现为以下三个方面:

1、统一的(广义)损失函数。从统一的相似度配对优化角度出发,它为两种基本学习范式(即使用类别标签和使用样本对标签的学习)提出了一种统一的损失函数;

2、灵活的优化方式。在训练期间,向  或  的梯度反向传播会根据权重  或  来调整幅度大小。那些优化状态不佳的相似度分数,会被分配更大的权重因子,并因此获得更大的更新梯度。如图 1(b) 所示,在 Circle Loss 中,A、B、C 三个状态对应的优化各有不同。

3、明确的收敛状态。在这个圆形的决策边界上,Circle Loss 更偏爱特定的收敛状态(图 1 (b) 中的 T)。这种明确的优化目标有利于提高特征鉴别力。

统一的相似性优化视角

深度特征学习的优化目标是最大化  ,最小化  。在两种基本学习范式中,采用的损失函数通常大相径庭,比如大家熟知的 sofmax loss 和 triplet loss。

这里不去在意相似性计算的具体方式——无论是样本对之间的相似性(相似性对标签情况下)还是样本与类别代理之间的相似性(类别标签情况下)。本文仅仅做这样一个假设定义:给定特征空间中的单个样本 x,假设与 x 相关的类内相似度分数有 K 个,与 x 相关的类间相似度分数有 L 个,分别记为  和   。

为了实现最大化  与最小化  的优化目标,本文提出把所有的  和  两两配对,并通过在所有的相似性对上穷举、减小二者之差,来获得以下的统一损失函数:

这个公式仅需少量修改就能降级得到常见的 triplet 损失或分类损失,比如得到 AM-Softmax 损失:


或 triplet 损失:

Circle Loss:自定步调的加权方式

暂先忽略等式 (1) 中的余量项 m 并对  和  进行加权,可得到新提出的 Circle Loss:

再定义  的最优值为  ,s_n  的最优值为  ; 。当一个相似性得分与最优值偏离较远,Circle Loss 将分配较大的权重,从而对它进行强烈的优化更新。为此,本文以自定步调(self-paced)的方式给出了如下定义:

类内余量和类间余量

不同于优化 (  ) 的损失函数,在 Circle Loss 中,  和  是不对称的,本文为其各自定义了余量  和  ,这样可得到最终带余量的 Circle Loss:

通过推导决策边界,本文进一步分析 ∆_n 和 ∆_p。为简单起见,这里以二元分类的情况进行说明,其中决策边界是在  处得到。根据等式 (5) 和 (6) ,可得到决策边界:

其中  。

Circle Loss 有 5 个超参数,即  、  、  、  和  。通过将  ,  ,  ,  。可将等式 (7) 约简为:

基于等式 (8) 定义的决策边界,可对 Circle Loss 进行另外一番解读。其目标是优化  和  。参数 m 控制着决策边界的半径,并可被视为一个松弛因子。

换句话说,Circle Loss 期望   且  。因此,超参数仅有 2 个,即扩展因子  和松弛因子  。

优势

Circle Loss 在   和  上的梯度分别为:

图 2(c) 在二元分类的实验场景中可视化了不同 m 值设置下的梯度情况,对比图 2(a) 和 (b) 的triplet 损失和 AMSoftmax 损失的梯度,可知 Circle Loss 有这些优势:在 s_n 和 s_p 上能进行平衡的优化、梯度会逐渐减弱、收敛目标更加明确。

图 2:损失函数的梯度:(a)三重损失;(b)AMSoftmax 损失;(c)新提出的 Circle 损失

上图的可视化结果表明,triplet 损失和 AMSoftmax 损失都缺乏优化的灵活性。它们相对于  (左图)和  (右图)的梯度严格相等,而且在收敛方面出现了陡然的下降(相似度配对 B)。比如,在 A 处,类内相似度分数  已接近 1 ,但仍出现了较大的梯度。此外,决策边界平行于  ,这会导致收敛不明确。

相对而言,新提出的 Circle Loss 可根据相似性得分与最优值的距离,动态地为相似度分数分配不同的梯度。对于 A(  和  都很大),Circle Loss 的重点是优化  ;对于 B,因为  显著下降,Circle Loss 会降低它的梯度,并因此会施加温和的优化。

Circle Loss 的决策边界是圆形的,与  直线有着明确的切点,而这个切点将成为明确的收敛目标。这是因为,对于同样的损失值,该切点具有最小的类间-类间差距,是最容易维持的。

实验

本文在三个特征学习任务(人脸识别,行人再识别,细粒度图像检索)上,对 Circle Loss 进行了全面评估,结果如下:

表 1:使用不同主干网络和损失函数在 MFC1 数据集上得到的识别 rank-1 准确度(%)

表 2:使用 ResNet34 主干网络在 LFW、YTF 和 CFP-FP 上的人脸识别准确度

表 3:在 IJB-C 1:1 验证任务上的真实接收率(%)比较

表 4:在行人再识别任务上的 Circle 损失的评估,这里报告了 R-1 准确度(%)和 mAP(%)

表 5:在 CUB-200-2011、Cars196 和 Stanford Online Products 上与当前最佳结果的比较,这里报告的是 R@K(%)

可以看到,在上述三个任务中,Circle Loss 都表现出非常强的竞争力。在人脸上,采用分类模式,Circle Loss 超过了该领域先前的最好方法(如AM-Softmax,ArcFace);在细粒度检索中,采用样本对学习方式,Circle Loss 又媲美了该领域先前的最高方法(如Multi-Simi)。

值得一提的是,以往这两种范式下的损失函数形式通常大相径庭,而 Circle Loss 则使用完全一样的公式获得了上述表现,且每个参数都具有较好的可解读性。

下面这个关于收敛状态分析的实验,则进一步揭示了Circle Loss的优化特性。

图 3:Circle Loss收敛状态分析

图 3 在 (  ) 坐标中展现收敛前后的相似性状态,本文关注两种状态:

首先,是绿色散布点代表的收敛后状态;

其次,是蓝色累积点反映的通过决策面时瞬间的分布密度。

图3(a) 中的 AMSoftmax 和(b)中的 Circle Loss 具有相切的决策面,可以看到,收敛后,Circle Loss 的收敛状态更紧密。而且,这些状态都是从一个相对狭小的通道通过决策面并最终收敛的。

当对Circle Loss使用 (c) 中更优的参数,这个现象更为明显。该观察从实验角度验证了图 1中,对 Circle Loss 倾向一个特定收敛状态 T 的猜测和理论分析。

原文还有更多深入的实验来分析重要超参的影响、训练全过程相似性的变化过程。论文进行CVPR 2020 oral presentation及交流之前,可先前往https://arxiv.org/pdf/2002.10857.pdf 一睹为快。

结论

本文对深度特征学习做出了两项深刻理解。第一,包括 triplet 损失和常用的分类损失函数在内的大多数损失函数具有统一的内在形式,它们都将类间相似度与类内相似度嵌入到相似性配对中进行优化。第二,在相似度配对内部,考虑各个相似度得分偏离理想状态的程度不同,应该给予它们不同的优化强度。

将这两项理解联合起来,便得到 Circle Loss。通过让每个相似性得分以不同的步调学习,Circle Loss 赋予深度特征学习的更灵活的优化途径,以及更明确的收敛目标;并且,它为两种基本学习范式(样本对和分类学习)提供了统一的解读以及统一的数学公式。

在人脸识别、行人再识别、细粒度的图像检索等多种深度特征学习任务上,Circle Loss 都取得了极具竞争力的性能。

论文链接:

https://arxiv.org/abs/2002.10857

【end】◆精彩推荐◆推荐阅读生物学的机器学习:使用K-Means和PCA进行基因组序列分析COVID-19接下来如何突变?学习Python,这22个包怎能不掌握?华为 P40 “一胞三胎”,最贵价10854元字节跳动武汉招聘 2000 人,距离大厂 Offer,你还差这篇 Java 干货!| 原力计划用Java开发自己的Kubernetes控制器,想试试吗?人人都能读懂的「以太坊2.0分片设计」你点的每个“在看”,我都认真当成了AI

相关文章:

收藏好玩的网站

1.输名字出照片 http://turnyournameintoaface.com/?name2.看google页面可以做成这样http://mrdoob.com/projects/chromeexperiments/google_gravity/3. 有趣的在线人脸变动物(川剧中有变脸,其实你也可以滴!)http://youwild.org/…

GDB 格式化结构体输出

set print address set print address on 打开地址输出,当程序显示函数信息时,GDB会显出函数的参数地址。系统默认为打开的, show print address 查看当前地址显示选项是否打开。 set print array set print array on 打开数组显示&#xff…

Kinect For Windows V2开发日志九:侦测并绘制人体骨架

简介 在上一篇《侦测、追踪人体骨架》里&#xff0c;介绍了关节点的使用办法&#xff0c;这一篇记录将关节点与OpenCV结合的绘图方法。 代码 #include <iostream> #include <opencv2\imgproc.hpp> #include <opencv2\calib3d.hpp> #include <opencv2\high…

拨号连接或 ××× 连接的错误代码列表

本文列出了在使用Windows 2000、Windows XP 或 Windows Server 2003 作为客户机&#xff0c;建立拨号连接或 连接时可能收到的错误代码。注意&#xff1a;只有在尝试连接到正运行Windows 2000 或更高版本的路由和远程访问服务器时&#xff0c;才会看到编号高于 900 的错误代码…

“程序员数学不行,干啥都不行!”高级开发:90%都是瞎努力!

之前有很多读者留言向我们反馈&#xff1a;数学不好做算法优化&#xff0c;每次遇到不一样的问题就不会了&#xff0c;要是赶上面试基本就凉凉了。平时很难搞懂像数据结构、算法、复杂的语句等等&#xff0c;因为这些核心原理都是数学。而且光会基础数学远远不够&#xff0c;还…

Redis源码分析--lookupKey函数查看value值

lookupKey函数查看value值 robj *lookupKey(redisDb *db, robj *key) {dictEntry *de dictFind(db->dict,key->ptr);if (de) {robj *val dictGetVal(de);/* Update the access time for the ageing algorithm.* Dont do it if we have a saving child, as this will t…

PHP获取时间排除周六、周日的两个方法

//方法一&#xff1a; <?php $now time(); //指定日期用法 $now strtotime(2014-01-08) ; $day 3600*24; $total 12;$days array() ;for ($i2;$i<$total;$i) {$timer $now$day*$i;$num date("N",$timer)-2; //周一开始if($num>-1 and $num<3){if(c…

SMS2003 SP3+SQL Server2000 SP4部署(下)

<?xml:namespace prefix o />SMS2003 SP3SQL Server2000 SP4部署(下)<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />E.SMS2003安装在berlin上放入SMS2003光盘镜像&#xff0c;选择SMS2003出现SMS2003安装向导&#xff…

redis源码分析--zslRandomLevel位运算解析

与&运算 0376的二进制就是1111 1110&#xff0c;二进制的与运算规则是&#xff0c;只有两个数同时为1时&#xff0c;则结果才为1&#xff0c;只要有一个数为0&#xff0c;则结果就为0。比如1&11; 1&00; 0&10; 0&00;因此把一个字符与二进制1111 1110进行与…

从零开始构建:使用CNN和TensorFlow进行人脸特征检测

作者 | Shubham Panchal译者 | 孟翔杰来源 | DeepHub IMBA出品 | AI科技大本营&#xff08;rgznai100&#xff09;人脸检测系统在当今世界中具有巨大的用途&#xff0c;这个系统要求安全性&#xff0c;可访问性和趣味性&#xff01;今天&#xff0c;我们将建立一个可以在脸上绘…

scope重定义

.directive(myAttr, function() {return {restrict: E,scope: {customerInfo: info},template: Name: {{customerInfo.name}} Address: {{customerInfo.address}}<br> Name: {{vojta.name}} Address: {{vojta.address}}}; }); directive中的几个属性&#xff1a; restric…

基于轮廓调整的SOTA实例分割方法,速度达32.3fps | CVPR 2020

作者 | VincentLee来源 | 晓飞的算法工程笔记介绍实例分割是许多计算机视觉任务中的重要手段&#xff0c;目前大多数的算法都采用在给定的bbox中进行pixel-wise分割的方法。受snake算法和Curve-GCN的启发&#xff0c;论文采用基于轮廓的逐步调整策略&#xff0c;提出了Deep sna…

Redis运行流程源码解析

原文作者&#xff1a;凡趣科技 pesiwang 原文地址&#xff1a;http://blog.nosqlfan.com/html/4007.html 本文分析源码基于 Redis 2.4.7 stable 版本。 概述 Redis通过定义一个 struct redisServer 类型的全局变量server 来保存服务器的相关信息&#xff08;比如&#xff1a…

2010年5月blog汇总:OpenExpressApp、其他

OpenExpressApp 信息系统开发平台OpenExpressApp &#xff0d; 框架待完善工作事项信息系统开发平台OpenExpressApp &#xff0d; 报表模块支持ReportObjectView信息系统开发平台OpenExpressApp &#xff0d; 从compositewpf到MEF信息系统开发平台OpenExpressApp &#xff0d; …

注意!Linux glibc再曝漏洞,可导致Linux软件劫持

2019独角兽企业重金招聘Python工程师标准>>> glibc是GNU发布的libc库&#xff0c;即c运行库。它是Linux系统中最底层的API&#xff0c;几乎其它运行库都会依赖于glibc。 近日&#xff0c;Google和Red Hat的安全人员发现GNU C Library (glibc)中存在严重的安全漏洞&a…

redis常用命令参考

操作Redis数据库 下面我们来简单的操作一下数据库。在实例开启的情况下&#xff1a; 1、插入数据 redis 127.0.0.1:6379> set name wwl   OK 设置一个key-value对。 2、查询数据 redis 127.0.0.1:6379> get name   "wwl" 取出key所对应的value。 3、删除键…

Script:收集UNDO诊断信息

以下脚本可以用于收集Automatic Undo Management的必要诊断信息&#xff0c;以sysdba身份运行: spool Undo_Diag.out ttitle off set pages 999 set lines 150 set verify off set termout off set trimout on set trimspool onREM REM ----------------------------------…

又要头秃?2020年七大AI编程语言大盘点

作者 | Claire D译者 | 苏本如&#xff0c;编辑 | 伍杏玲来源 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;人工智能已成为我们日常生活不可或缺的一部分&#xff0c;它被广泛地应用到几百种实际场景中&#xff0c;极大地便利人们的工作和生活。随着近年来的发展&…

I.MX6 bq27441 driver hacking

/************************************************************************** I.MX6 bq27441 driver hacking* 声明&#xff1a;* 本文主要是记录对电池计量芯片bq27441芯片驱动注册过程进行代码跟踪。** 2016-2-…

PHP5.5的一点变化

之前一直使用eAccelerator&#xff0c;参考&#xff1a;PHP安装eAccelerator 注意PHP5.5以后暂时不能使用eAccelerator 原因&#xff1a;其中一个我知道的是eAccelerator中使用了&#xff1a; php_register_info_logo(EACCELERATOR_VERSION_GUID, "text/plain", (un…

虚拟机的操作系统的安装

虚拟机的操作系统的安装启动虚拟机进入下一步&#xff0c;按Enter键开始安装。按F8许可协议选则C创建分区再按C&#xff0c;将未划分的分区划分按ENTER继续&#xff0c;选择NTFS文件系统格式化磁盘分区写上姓名和单位&#xff0c;单击下一步直接点击关闭<?xml:namespace pr…

2020,国产AI开源框架“亮剑”TensorFlow、PyTorch

「AI技术生态论」 人物访谈栏目是CSDN发起的百万人学AI倡议下的重要组成部分。通过对AI生态专家、创业者、行业KOL的访谈&#xff0c;反映其对于行业的思考、未来趋势的判断、技术的实践&#xff0c;以及成长的经历。 2020年&#xff0c;CSDN将对1000人物进行访谈&#xff0c;形…

Centos下部署Solr 搜索引擎

一、环境准备&#xff1a;系统环境&#xff1a;centos 6.5tomcat 7.0.47jdk-7u9solr-4.7.0首先将软件包上传到/tmp目录下1、 jdk安装[rootsvn-server /]# cd /tmp/ [rootsvn-server /]#tar zxvf jdk-7u9-linux-x64.tar.gz[rootsvn-server /]#mv jdk1.7.0_09 /u…

Redis源码分析-TCMalloc

redis很多地方都在调用zmalloc函数 zmalloc在这里定义zmalloc.c void *zmalloc(size_t size) {void *ptr malloc(sizePREFIX_SIZE);if (!ptr) zmalloc_oom_handler(size); #ifdef HAVE_MALLOC_SIZEupdate_zmalloc_stat_alloc(zmalloc_size(ptr));return ptr; #else*((size_t…

让AI训练AI,阿里和浙大的“AI训练师助手”是这样炼成的

不久前&#xff0c;人力资源社会保障部发布了一种炙手可热的新职业&#xff1a;AI训练师。没想到&#xff0c;浙江大学与阿里安全的人工智能训练师马上创造出一个 “AI训练师助手”&#xff0c;高效打造AI深度模型&#xff0c;应对海量应用场景的增加&#xff0c;让AI训练模型面…

用 Navicat for Oracle 管理 Oracle10g/11g 数据库

Navicat for xxx 是一个优秀的数据库管理客户端&#xff0c;有 MySQL、Oracle 等版本。建议大家最好用 Enterprise 版本&#xff0c;功能全面一些&#xff0c;但较之于免费的 Lite 版&#xff0c;企业版可是要花银子买的。 安装 Navicat for Oracle 后&#xff0c;首先需要建一…

借一个同事的经历,谈一谈程序员的成长

一个很久之前的同事&#xff0c;今天找我&#xff0c;想让我帮他推荐下&#xff0c;去我们公司来工作&#xff0c;因为认识很久&#xff0c;就和他说了说公司的现状&#xff0c;也询问了一下他的状况&#xff0c;寒暄几句&#xff0c;让他下周等面试。 这位同事是之前一起做游戏…

select,epoll,poll比较

select&#xff0c;poll&#xff0c;epoll简介 select select本质上是通过设置或者检查存放fd标志位的数据结构来进行下一步处理。这样所带来的缺点是&#xff1a; 1 单个进程可监视的fd数量被限制 2 需要维护一个用来存放大量fd的数据结构&#xff0c;这样会使得用户空间和内…

华为开发者大会HDC.Cloud技术探秘:云搜索服务技术实践

搜索是一个古老的技术&#xff0c;从互联网发展的第一天开始&#xff0c;搜索技术就绽放出了惊人的社会和经济价值。随着信息社会快速发展&#xff0c;数据呈爆炸式增长&#xff0c;搜索技术通过数据收集与处理&#xff0c;满足信息共享与快速检索的需求。基于搜索技术&#xf…

从今天开始,自己做SEO。

1.购买了一点黑链。开始优化之路。 2.更改了关键词&#xff0c;描述。 3.整理了友情链接。 4.购买了VPS服务器&#xff1a;点击查看 转载于:https://www.cnblogs.com/zq535228/archive/2010/06/09/1754986.html