『深度概念』度量学习中损失函数的学习与深入理解


0. 概念简介

度量学习(Metric Learning),也称距离度量学习(Distance Metric Learning,DML) 属于机器学习的一种。其本质就是相似度的学习,也可以认为距离学习。因为在一定条件下,相似度和距离可以相互转换。比如在空间坐标的两条向量,既可以用余弦相似度的大小,也可以使用欧式距离的远近来衡量相似程度。

一般的度量学习包含以下步骤:

  1. Encoder编码模型:用于把原始数据编码为特征向量(重点如何训练模型
  2. 相似度判别算法:将一对特征向量进行相似度比对(重点如何计算相似度,阈值如何设定

基于深度学习的度量学习算法中,可以分为两个流派:

  1. 网络设计派:代表孪生神经网络(Siamese network)
  2. 损失改进派:代表 xx-softmax

本文介绍重点是损失改进派,是最近发展迅速,应用广泛的方法。

在人脸识别与声纹识别这种度量学习算法中,算法的提高主要体现在损失函数的设计上,损失函数会对整个网络的优化有着导向性的作用。可以看到许多常用的损失函数,从传统的softmax loss到cosface, arcface 都有这一定的提高。

无论是SphereFace、CosineFace还是ArcFace的损失函数,都是基于Softmax loss来进行修改的。

Base line Softmax loss
各种延伸的算法 Triplet loss, center loss
最新算法 A-Softmax Loss(SphereFace),  Cosine Margin Loss, Angular Margin Loss, Arcface

1.Softmax loss

这就是softmax loss函数,表示全连接层的输出。在计算Loss下降的过程中,我们让 的比重变大,从而使得log() 括号内的数更变大来更接近1,就会 log(1) = 0,整个loss就会下降。

其中W和b就是分类层参数,其实就是最后学习到的分类中心,对应下图就是每种颜色对称轴,各种颜色点的集合就是x=encoder(row),就是分类层前面一层的输出。

下面图如何理解呢?倒数第二层输出不应该是很多维吗?

形象的理解:当做是一个球体,但是为了可视化方便,把球给压扁了。就成为了二维的图像。(个人理解)

如何操作?应该通过降维方法。

这样如何完成分类的?

我们知道,softmax分类时取的是最大那类(argmax),只要目标那一类大于其他类就可以了。反映在图上,每个点与各类中心的距离(W与b决定),距离哪个中心最近就会分成哪一类。

可以发现,Softmax loss做分类可以很好完成任务,但是如果进行相似度比对就会有比较大的问题

(参加[深度概念]·Softmax优缺点解析)

  • L2距离:L2距离越小,向量相似度越高。可能同类的特征向量距离(黄色)比不同类的特征向量距离(绿色)更大

  • cos距离:夹角越小,cos距离越大,向量相似度越高。可能同类的特征向量夹角(黄色)比不同类的特征向量夹角(绿色)更大

总结来说:

  1. Softmax训练的深度特征,会把整个超空间或者超球,按照分类个数进行划分,保证类别是可分的,这一点对多分类任务如MNIST和ImageNet非常合适,因为测试类别必定在训练类别中。
  2. 但Softmax并不要求类内紧凑和类间分离,这一点非常不适合人脸识别任务,因为训练集的1W人数,相对测试集整个世界70亿人类来说,非常微不足道,而我们不可能拿到所有人的训练样本,更过分的是,一般我们还要求训练集和测试集不重叠。
  3. 所以需要改造Softmax,除了保证可分性外,还要做到特征向量类内尽可能紧凑,类间尽可能分离。

这种方式只考虑了能否正确分类,却没有考虑类间距离。所以提出了center loss 损失函数。(paper)

2. Center loss

center loss 考虑到不仅仅是分类要对,而且要求类间有一定的距离。上面的公式中表示某一类的中心,表示每个人脸的特征值。作者在softmax loss的基础上加入了,同时使用参数来控制类内距离,整体的损失函数如下:

3. Triplet Loss

三元组损失函数,三元组由Anchor, Negative, Positive这三个组成。从上图可以看到,一开始Anchor离Positive比较远,我们想让Anchor和Positive尽量的靠近(同类距离),Anchor和Negative尽量的远离(类间距离)。

表达式左边为同类距离 ,右边为不同的类之间的距离。使用梯度下降法优化的过程就是让类内距离不断下降,类间距离不断提升,这样损失函数才能不断地缩小。

上面的几个算法都是比较传统老旧的,下面说一下比较新的算法。


4. L-softmax

前面Softmax loss函数没有考虑类间距离,Center loss函数可以使类内变得紧凑,但没有类间可分,而Triplet loss函数比较耗时,就产生了一下新的算法。

L-softmax函数开始就做了比较精细的改动,从softmax 函数log里面的转化到。L-softmax函数不仅希望类间距离拉的更大,还能够把类内距离压缩的更紧凑。

把其中的cosθ改成了cos(mθ),

m倍θ起到了增加 margin 的效果,让类内距离更加紧凑,同时类间距离变大。m越大类间距离就越大,因为在(0, π)区间cos函数单调递减,m越大 cos(mθ)趋向于0。

5. SphereFace(A-Softmax)

A-softmax 是在 L-softmax 函数上做了一个很小的修改,A-softmax 在考虑 margin时添加两个限制条件:将权重W归一化 ,b = 0。这使得模型的预测仅取决于 W 和 X 之间的角度。

6. CosFace

cosface的loss函数如下:

上式中,s为超球面的半径,m为margin。

7. ArcFace

对比arcface和cosface这两个函数,发现arcface是直接在角度空间中最大化分类界限,而cosface是在余弦空间中最大化分类界限,这样修改是因为角度距离比余弦距离在对角度的影响更加直接。

分类的决策边界如下:

arcface算法流程如下:


References:

[1] https://blog.csdn.net/jningwei/article/details/80641184

[2] https://blog.csdn.net/u012505617/article/details/89355690

『深度概念』度量学习中损失函数的学习与深入理解相关推荐

  1. 『深度概念』一文读懂Octave Convolution(OctConv)八度卷积

    RyanXing Multimedia Processing & Computer Vision. Paper | Octave Convolution(OctConv) 论文:Drop an ...

  2. 深度学习中的表示学习_Representation Learning

    一.深度学习网络的表达方式汇总及模型分类方法 人的大脑会对眼睛捕捉到的外界事物进行逐级抽象,逐渐提取出抽象的语义信息,以便为人脑所理解.深度学习从这一科学发现得到启发,通过网络的权值来捕捉外界输入模式 ...

  3. 模型汇总-12 深度学习中的表示学习_Representation Learning

    我们在前面的<模型汇总_9 深度学习网络的表达方式汇总及模型分类方法>这篇文章中,指出了深度学习中常用的三种表示数据的方式,即局部表达.稀疏表达和分布式表达.深度学习强大建模和知识抽取的能 ...

  4. 深度学习核心技术精讲100篇(八)-keras 实战系列之深度学习中的多任务学习(Multi-task learning)

    多任务学习(Multi-task learning)简介 多任务学习(Multi-task learning)是迁移学习(Transfer Learning)的一种,而迁移学习指的是将从源领域的知识( ...

  5. 深度学习中的强化学习和对抗学习

    在人工智能中,有两个十分重要的内容,第一就是机器学习,第二就是深度学习.正是由于机器学习与深度学习,人工智能才能够帮助我们做出更多的事情.其实,深度学习也是有分类的.深度学习可以分为两种,一种是强化学 ...

  6. 深度学习中的多任务学习(一)

    任务学习-Multitask Learning概述 Reference https://blog.csdn.net/u010417185/article/details/83065506 1.单任务学 ...

  7. 蒙特卡洛树搜索算法实现_蒙特卡洛树搜索实现实时学习中的强化学习

    蒙特卡洛树搜索算法实现 In the previous article, we covered the fundamental concepts of reinforcement learning a ...

  8. 『深度应用』NLP机器翻译深度学习实战课程·零(基础概念)

    0.前言 深度学习用的有一年多了,最近开始NLP自然处理方面的研发.刚好趁着这个机会写一系列NLP机器翻译深度学习实战课程. 本系列课程将从原理讲解与数据处理深入到如何动手实践与应用部署,将包括以下内 ...

  9. 『深度应用』OneFlow快速上手指南

    现实中没有复杂的系统 --<极简主义>范式一:事情其实很简单 0.引子 为什么会有写这篇文章? 1.这不是一篇广告文,笔者不是大V,没人联系写稿,请放心食用. 2.这不是一片解析文,笔者水 ...

最新文章

  1. Hinton团队CV新作:用语言建模做目标检测,性能媲美DETR
  2. 张继平院士:40年北大数学路 | 北大黄金一代是如何培养的
  3. linux c 线程的创建、线程等待、线程终止、线程分离
  4. mysql数据库对时间的函数吗_mysql 数据库 时间函数
  5. 国产数据库建模工具,看到界面第一眼,良心了! ​
  6. JSR 365更新:深入CDI 2.0
  7. 冲刺阶段(二)第五天 5月16日
  8. java火焰纹章攻略女神之剑_《火焰纹章风花雪月》白云之章-女神再生仪式图文攻略...
  9. 石头剪刀布代码android,微信小程序源码解说:石头剪刀布(附源码下载)
  10. UIView - CAGradientLayer
  11. [转] Linux应用层的定时器Timer
  12. pb中的tounicode 函数_历年高考数学的必考热点三角函数,2020高考生,你会了吗?...
  13. Google最新算法 - 人肉搜索引擎
  14. 一个很好用的JS在线格式化工具
  15. 基于FileOpen的PDF文档加密
  16. Java8 CompletableFuture(2)回调函数 thenApply thenAccept thenRun
  17. 百度智能云服务器BCC实例在线配置变更
  18. 用JLINK烧写U-boot到Nand Flash中
  19. 引用 面向对象 String类(6)
  20. nodejs fs模块

热门文章

  1. ICC 图文学习——LAB3:Placement 布局
  2. JavaSE学习笔记-08
  3. css篇-盒子模型理解
  4. 细说上帝视角游戏的快速创建
  5. 微信小程序:使用canvas 生成图片 并分享
  6. Entity Framework Core系列教程-3为现有数据库生成实体模型
  7. C#与产电PLC以太网通讯,C# For LS PLC Ethernet Communication,产电PLC以太网通讯,上位机与PLC通讯C#,LG PLC以太网通讯
  8. ImportError: DLL load failed while importing qhull:问题解决
  9. iPhone快速切换表情输入法
  10. CSS 3之文字样式