查看原文
其他

前沿重器[8] | CV研究启发语义相似和表征

机智的叉烧 CS的陋室 2022-08-24
 

【前沿重器】


栏目主要给大家分享各种大厂、顶会的论文和分享,从中抽取关键精华的部分和大家分享,和大家一起把握前沿技术。具体介绍:仓颉专项:飞机大炮我都会,利器心法我还有


往期回顾

之前在小布助手的文章(原文来自OPPO互联网技术:基于深度学习的短文本相似度学习与行业测评,我的记录在:前沿重器[7] | 小布助手登顶百度千言短文本相似度的秘诀)里,其实能注意到一个细节,就是在损失函数的设计上借鉴了人脸识别的一些技术思路,尤其是损失函数这块。仔细想,人脸识别的核心需求是要求给定一张人脸,快速从录入的库里找到与之接近的人脸并识别是否是该人,库里的人脸千千万,快速识别就成为一个很有挑战性的难题,这个就和语义表征非常相似,而他们的秘诀之一,就是这个损失函数,在人脸识别等相关领域里,在损失函数上的确有很多语义相似度可以借鉴的思路。

懒人目录:

  • 常规操作
  • 调整与演化
  • smooth和margin参数
  • 回过头来看文本表征

常规操作

比较经典的,对于二分类,假设有两个类,我们可以这么认为分到这两者的概率分别就是:

损失函数就是用softmax构造的损失函数了,也就是大家喜闻乐见的下面这个公式:

这里上面的公式大家都比较熟悉了,下半个公式则是将其进行转化成角度的形式。

对决策平面,有

调整与演化

a-softmax

特殊的,我们把归一化为1,偏置项设为0即可得到一个特殊的结果:

这是asoftmax论文中提到的modified softmax loss(SphereFace: Deep Hypersphere Embedding for Face Recognition)。这点看来其实和上面的sotfmax相比并没有非常突出的区别,在asoftmax的论文中提出了一个有意思的观点,就是分类决策,如果只是用一个平面(空间上就是划分的空间,角度实质上就是),平面以下平面以上就是两个类,会导致类间的划分其实不够远,而类内空间也太大,相似度计算非常不合理,这个不符合人脸识别要求每同一个人的人脸要集中分布在一个空间,而不同人的人脸分布在空间里尽可能远的这个要求,因此希望让这个二分类的决策平面被拉开,从而拉开不同人人脸的差距。于是他们希望分类下,可以这么做:

当且仅当才会被认为属于1类,当且仅当才会被认为属于2类。

结合上面就会被修改为:

直观的,角度上增加了为一个m,我们可以看到是这么一个模式:

还是比较明显的,让判断正负类的时候增加一定障碍,此时类内会更加聚合而类间则会更加分割。

am-softmax

而am-softmax则在a-softmax的基础上做了一些新的变化,在增大类间差异、缩小类内差异的路上更进一步。为了更好地讨论,次数我们把公式调整一下:

时其实就是a-softmax,而作者承认了a-softmax的这种增加间隔的手段,但是认为用乘的方式增加不如用加的方式好,于是有:

这个操作首要好处就是反向的时候更简单(直接就被干掉了)。直观的可以用这个图来表示:

到这里其实我有两个疑问:

  • 加性间隔和乘性间隔到底哪个好,为什么。
  • 加性间隔的m在cos的括号内和括号外有什么区别。

这两个问题其实都在论文的3.2.2里面详细提到了,简单总结下:

  • 乘性间隔会随着角度增加间隔增大,但其实这个间隔的大小不应该受角度本身影响。
  • m在cos内部会导致求导需要用反三角函数,求导就复杂了。

arcface

上面am-softmax中提到了m放cos里面还是外面的问题,arcface的作者就来battle了,认为应该放里面,并且花了一小节的内容来和上面两个方案进行了PK,包括数值模拟和图像的形式,这里给出图像形式的对比结果:

当然了,最终还是效果为王了,不过对比起来真要说有多好好多少,不见得,不过好是真的好:

smooth和margin参数

先来看看arcface最终给的公式:

仔细看论文的同学可以发现,尤其是arcface的论文里出现了一个s参数,另外从a-softmax开始就多了一个参数m,这就是smooth和margin两个参数,我们一个一个来讨论,这里不得不提一位知乎大佬的两篇文章:

  • smooth的讨论:https://zhuanlan.zhihu.com/p/49939159
  • margin的讨论:https://zhuanlan.zhihu.com/p/52108088

先来谈smooth,,即超参,在公式上,改变的是余弦的值域,原来我们经过归一化等手段得到了这个余弦,他的值域就是,超参的出现实质上就是让这个范围变大,那么变大的意义何在呢,来看知乎的王峰大佬的实验结果:

随着s变小,每一个类内的元素会类的中心靠拢,但是我们发现即使是s非常小了,类之间仍会存在很多“骑墙派”,此时的准确就很模糊,另一方面随着s增大,类的置信度是会普遍变高,但是间隔就会变得比较大了。

此时就需要间隔,也就是上面花了很大篇幅提到的margin来进行调整了,我们只要调整超参,这个会很大程度上约束了类间距,一旦增加了m之后,我们会得到这个效果:

此时我们能够感受到smooth和margin两个参数的关系,这有利于我们理解这里面一些超参的作用。

回过头来看文本表征

上面提到的资料其实都是从CV,尤其是人脸识别等研究课题中出现的有关度量学习的工作,最终的实验应用在了CV的多个任务中,那么作为NLP里面的一个比较有代表性的任务——文本表征&相似度,考虑两个任务的相似性,我们是不是也可以考虑借鉴呢。上一期我们谈及了向量表征和向量召回,在向量召回技术逐步成熟的情况下,能更好地把文本表征好,成为一个更为重要的思路,交互特征想必依旧是提升语义相似度效果的一个方向,但是回归,度量学习、表征学习这方面的技术,我们是可以从CV角度借鉴开始做更深入的研究的,冲准确率本身不错,但是只冲准确率是有问题的。

甚至更进一步,在2020年CVPR中旷世的一篇论文:Circle Loss: A Unified Perspective of Pair Similarity Optimization(没看完,ING),对很多分类任务与匹配任务进行了一个统一化的探讨。语义匹配的过程,我们希望通过海量的样本构造出一个空间,语义相似的样本能在接近的位置,语义不相似的样本能举例足够远,类如果是固定的、可枚举的,其实就可以降级为一个分类问题,不固定、不可枚举的则是一个语义匹配问题了,在这一系列的工作启发下,我们可以在CV巨人的肩膀上看到一些思路,能尽快跳出bert本身,跳出几块固有积木本身,甚至跳出深度学习本身,去思考更多优化我们当前方案的方式,这应该是一名开发者也好,科研者也好应该具备的视角。

参考文献:

  • asoftmax:SphereFace: Deep Hypersphere Embedding for Face Recognition
  • 有关asoftmax的推导:https://www.cnblogs.com/heguanyou/p/7503025.html
  • am-softmax:Additive Margin Softmax for Face Verification
  • Arc-face:ArcFace:Additive Angular Margin Loss for Deep Face Recognition
  • smooth的讨论:https://zhuanlan.zhihu.com/p/49939159
  • margin的讨论:https://zhuanlan.zhihu.com/p/52108088
  • 文末提到的circle-loss:Circle Loss: A Unified Perspective of Pair Similarity Optimization

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存