前沿重器[8] | CV研究启发语义相似和表征
【前沿重器】
栏目主要给大家分享各种大厂、顶会的论文和分享,从中抽取关键精华的部分和大家分享,和大家一起把握前沿技术。具体介绍:仓颉专项:飞机大炮我都会,利器心法我还有。
往期回顾
之前在小布助手的文章(原文来自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