0. Abstract
本文提供了在deep feature learning的成对相似度优化的视角,(是去找对么?)旨在最大化类内相似性 s p s_p sp并且最小化类间相似性 s n s_n sn。 让同一类的更紧凑,让不同类的更分开。这和我们之前的描述换个说法而已,本质都一样。
但是,他们说大多数loss functions,就好比如:
the softmax cross entropy loss
和the triplet loss
是把正样本和负样本嵌入成相似对,(怎么还能把正负样本放到一起形成相似对?)然后寻求去减少两者的距离。不太对啊, 感觉应该让
s
n
−
s
p
s_n-s_p
sn−sp越来越大才好。
作者怎么得出这个结论的,数学依据是啥? 应该先去弄懂单个 s n 或 者 s p s_n或者s_p sn或者sp
之前the softmax cross entropy loss(在Introduction里面还写到了他的variants)
和the triplet loss
的问题在于这种优化方式不够灵活,因为在every single similarity score
的惩罚强度都被限制为是等同的。完全没懂这话说了个什么意思
这种优化方式是不灵活的,因为每个相似度得分的惩罚强度
限制为相等.
我们的直觉是,如果相似性评分偏离最佳值,则应予以强调。什么样子算是偏离最佳值
。最后,我们简单re weight
调整权重每个相似性each similarity to 突出这欠优的相似性分数。
为此,我们只需将每个相似度重新加权即可突出显示未优化的相似性得分。
数学上怎么表示相似性得分,另外,啥样算是欠优。给我的感觉就是更有针对性了,因为未优化的得到强调。
为啥叫Circle loss呢?
因为是圆形的决策边界。
对两个基本的深度特征学习paradigms范式
有着统一的公式,即
- learning with class-level labels 使用类级别标签
- pair-wise labels 使用成对标签 这种监督我还不太熟悉
Circle loss具有两个基本的深度特征学习范例的统一公式,即使用类级标签和成对标签进行学习。 从分析上来说, 我们表明,圆损失为实现更明确的收敛目标提供了一种更灵活的优化方法,与优化 s n − s p s_n-s_p sn−sp的损失函数相比。
1. Introduction
holds a similarity optimization view(什么意思?)
能解决两种范式
- learning from data with class-level labels.
- from data with pair-wise labels.
对于前者,是在优化样本和权重向量之间的相似性,也就是优化
x i x_i xi和 W W W之间的相似性
对于后者,是用一个metric loss function(去刻画去度量),也就是衡量样本之间。
代表着,代表着,代表着,
s
p
s_p
sp代表属于同一类的样本之间的相似性,也就是说是多于一个个体的一种距离,而不是单个个体。
从他们要去优化相似性的角度分析,
下面这段文字的描述很不清晰,容易把相似性和样本的符号相互混淆。
为啥有这么个公式
s
n
−
s
p
s_n-s_p
sn−sp?
不就是应该直接让 s n s_n sn越小, s p s_p sp越大就好了么?
为了同时,为了让数学上更简洁合理,所以,去让 s n − s p s_n-s_p sn−sp越小。应该是相似性都是正数的前提下,因为只有 s n s_n sn越小, s p s_p sp越大才能使得 s n − s p s_n-s_p sn−sp越小。所以,说白了就是达到的目地一样,只是数学上的写法不一样而已。这也是为啥上面写到增加后者就是相当于在减少前者。
这就是为啥有了这么个公式? s n − s p s_n-s_p sn−sp
这种形式的优化公式叫做对称优化
但这种简单改写还存在问题,作者自己提到了:
We argue that this symmetric optimization manner is prone to the following two problems 我们认为这种对称优化方式容易出现以下两个问题
- lack of flexibility for optimization
- Ambiguous convergence status
1.1 lack of flexibility for optimization
说的感觉是,因为只是让
s
n
s_n
sn变小,
s
p
s_p
sp变大,但是,但是,但是,没有给出程度,都是以系数1变大变小的感觉。说白了,就是幅度相同,给定具体的loss function
, 对
s
n
s_n
sn,
s
p
s_p
sp的梯度具有相同的幅度。这是我的解读。
意思是图1(a)中的A已经在负样本相似性
s
n
s_n
sn上很小了,但是,还保持以很大梯度对
s
n
s_n
sn进行惩罚。这是不充分的,也是不合理的。
这段没看懂。他们说之前的不灵活,怎么不灵活了,因为A,B,C都对
s
n
s_n
sn,
s
p
s_p
sp有着相等的梯度。。。怎么在下图看出来的?
看箭头的话,感觉就好像是这种情形下红色的点都在直线上(而且是正对的位置),所以距离都相等。而后者是到圆形的顶点,所以,距离不相等。收敛状态也是模糊的,T和T撇都能被认为收敛了(模糊的,歧义的)。
1.2 Ambiguous convergence status
优化那个对称优化 s n − s p s_n-s_p sn−sp会lead一个决策边界。然后这个决策边界会allows模糊,也就是T和T撇.
这种模糊吧,会使得特征空间的可分性得到折扣。
综上,他们觉得:different similarity scores should have different penalty strength.
偏得多惩罚就多,偏得少越靠近惩罚得就少。怎么看出来啥样偏得多,啥样偏得少?
于是,他们引入了两个加权因子
,得到
α n s n − α p s p \alpha_ns_n-\alpha_ps_p αnsn−αpsp 这样的话就允许 s n s_n sn和 s p s_p sp以不同的节奏来学习。
我们然后实现 α n \alpha_n αn, α p \alpha_p αp作为线性函数,w.r.t. s n s_n sn和 s p s_p sp 从而make the learning pace 自适应 to the optimization status.
The farther a similarity score deviates from the optimum, the larger the weighting factor will be.
相似性评分偏离最佳值的距离越远,加权因子将越大。
这种优化导致decision boundary
α
n
s
n
−
α
p
s
p
=
m
\alpha_ns_n-\alpha_ps_p=m
αnsn−αpsp=m , 从而产生一个圆形空间。为什么这么弄的话,就会产生一个圆形呢,
这就是为啥他们管这个叫Circle loss
的原因。
intrinsically 本质地
reshapes the characteristics
Circle loss
重塑特征,重塑了深度特征学习:
A unified loss function
怎么和之前的softmax系列统一From the unified perspective
flexible optimization
灵活的优化definite convergence status
有限的收敛状态
similarity pair optimization
1.3 贡献
1.3.1 a unified loss function
为两个基本的学习范式
提供统一的loss function.
learning with class-level labels
基于cross-entropy那些learning with pair-wise labels
基于多元组那些
1.3.2 flexible optimization
在训练中,反向传播的梯度将会被放大,被添加的加权因子放大。那些欠优化
的similarity scores将会有更大的weighting factors
, 然后consequentially(结果,结果的)就会得到更大的梯度。看图,然后说A,B,C上的优化各自不相同。
1.3.3 definite convergence status 确定的收敛状态
在这个圆形的决策边界上,Circle loss偏爱一个特定的收敛状态,也就是T,而不再和T撇混淆。它设定了明确的优化目标并有利于可分离性
以上面的图为例子的话,我们推测,A,B,C三者的加权因子就应该不同,离得远的加权多。
2. A unified Perspective 一个统一的视角
应该是讲如何把softmax, 以及基于softmax的改进和triplet这种多元组的都统一到一块。
然后的话,告诉我们如果是用余弦相似性去度量的,那么就是希望相同类别样本的余弦相似度趋向于1,然后不同类别样本的余弦相似度趋向于0。
他们把用标签的叫做基于代理(proxy
), 把不用标签的叫做non-proxy
的pair-wise
. 怎么在数学上面改写的啊?
举例子,比如说,给定一个样本 x x x, 那么针对他而言,在特征空间里就有跟他同类的很多样本,相应就有很多positive相似性分数, 同理, 也有很多negative相似性分数。有了上述理论,然后他们提出一个新的公式:
别看这个公式复杂,其实也就是在It iterates through every similarity pair to reduce 对称优化
。
迭代着去reduce那个对称优化,固定一个遍历剩下另外的,怎么避免重复,在于每次固定的都是前者,然后后者都换都被遍历,这样就没有重复。而他们意思有了上面这个公式的话,加以很小的modification
我们就可以把两种范式统一。
以2
为底的对数的单调性如下:
单调递增的。所以如果是要让对称优化
越小,那就是去最小化上面式子中的
L
L
L. 所以,相当于作者的贡献是提出一种新的LOSS函数从而实现对对称优化
的实现。核心依据在于以2为底的对数是单调递增的
2.1 Given class-level labels
论文里写的啊这可是,we calculate the similarity scores between
x
x
x and weight vector, 我们计算余弦相似性分数:为啥说是
x
x
x和权重向量,因为:
l o g i t = w T ∗ x = s ∗ c o s ( θ ) logit=w^T*x=s*cos(\theta) logit=wT∗x=s∗cos(θ)
当s成为常数的时候,
c
o
s
(
θ
)
=
w
T
∗
x
cos(\theta)=w^T*x
cos(θ)=wT∗x. 这就是为啥去计算样本和权重矩阵中权重向量的相似性。这是因为logit就是这个。这也是为啥作者说we calculate the similarity scores between x and weight vector w in the classification layer.
这是什么意思? 为什么特别的以后,negative 样本相似性和positive样本相似性就直接是数值除以模
,因为严格意义上讲,余弦相似度就是这么回事的。
而论文中
N
−
1
N-1
N−1和
N
N
N的意思就是:那个样本
x
x
x只属于某一类啊,那么剩下的
N
−
1
N-1
N−1都是别的类的权重向量或者标签,因此,有了下面的描述:
上面这两个公式没有什么特别的,只是说,similarity是得点积
除以向量长度(模)
。 有了上述的写法以后,公式1
可以变形(退化为,degenerate
)为AM-softmax
, 而这个AM-softmax刚好是softmax cross-entropy loss
的一个很重要的变种:
写到这里就能看出来,这越来越和softmax-based
长相的函数接近了。
然后如果用内积替换余弦相似度,就能把这个式子,退化为softmax cross-entropy loss
2.2 Given pair-wise labels
我们同样遵循上面的思路和理念,得到下面两个式子:
这有啥的,之前是和权重向量去比较,现在是样本向量之间直接比较,同样采用余弦相似度去比较。然后居然公式1
就能退化为triplet loss with hard mining
. 还借助了极限的思想:
如果是让
L
u
n
i
L_{uni}
Luni最小,那么,就是让对称优化对最小,因此,
l
o
g
2
e
x
p
(
那
一
串
)
log_2^{exp(那一串)}
log2exp(那一串)中exp(那一串)就得小,怎么突然变成max
开头了,我以为应该是min
开头。还有就是会对这块这个加号感到困惑。此外就是我们知道了,不光有triplet loss的hard mining
还有别的loss的soft mining
.
Lifted-Structure loss
N-pair loss
Multi-Similarity loss
上面这些loss是去:
conduct soft hard mining among samples
22 就是Facenet
.
2.3 Gradient Analysis
就是说公式2和3
是公式1
在某些时候的特列,而这公式2
和公式3
就是证实确实softmax
,triplet loss
, softmax-based
的这些情况可以被公式1
框架所统一。
列举了1,2,3点,然后,还再次强调了,之前的对称优化
方式不好,还是说了一些关于inflexibility
和ambiguous convergence
的证据。
然后又说了,怎么在第三节给出一个更好的优化manner
来facilitate higher flexibility
.
3. A New Loss Function
3.1 Self-paced Weighting
不同程度的Weighting, 也就是允许each similarity score以他的自己的pace来学习,取决于他当前的优化状态。先把公式1
里面的m
忽视掉,然后把公式1
提出的统一的loss function转化为提出的Circle loss
.
得知道怎么从公式1
写成这个的。就是利用了不同程度权重的对称优化对
替换了下而已。也就是利用下面这个玩意:
α n s n − α p s p \alpha_ns_n-\alpha_ps_p αnsn−αpsp 这样的话就允许 s n s_n sn和 s p s_p sp以不同的节奏来学习。
确实是,论文里也如下陈述到了:
这样做的好处在于:
在训练的过程中,对于后者的梯度,会被非负的加权因子作用,然后再反向传播给之前的余弦相似性。这样一来的话,就能起到一个作用,那就是:当一个相似性分数偏离他的最优值( O n O_n On或者 O p O_p Op)太远的时候,他就会get a large weighting factor so as to get effective update with large gradient.
最后,to this end, 告诉你两个加权因子怎么定义的:
原来这个加号是cut-off at zero
的操作啊。
Discussion
Re-scaling
the cosine similarity under supervision is a common practice in modern classification losses.意思是,像之前的cosface啥的也都会re-scale
余弦相似性。也就是下面式子里面的
s
s
s进行的操作:
l o g i t = w T ∗ x = s ∗ c o s ( θ ) logit=w^T*x=s*cos(\theta) logit=wT∗x=s∗cos(θ)
通常情况,all the similarity scores share an equal scale factor. 当然了,当我们在一个classsification loss function里考虑the softmax value as the probability of a sample beloning to a certain class时候
这种equal re-scaling是自然而然的。 相反地,Circle loss是在re-scaling
之前用一个独立的加权因子来乘以每个each similarity score. 然后就是又说了一下,allows more flexible optimization. 此外,就是
Besizes the benefits of better optimization, another significance of such a re-weighting(or re-scaling) strategy is involved with the underlying interpretation.
这也说明了,之前的那些loss的原理解释就是:以一个大的概率把一个样本分到他的target class
, 在Circle loss
里呢,取而代之的是,
it holds a similarity pair optimization perpective, which is compatible with two learning paradigms.
3.2 Within-class and Between-class Margins
这个好像和之前的那些loss路子不太一样,之前没见过给Margins
分门别类啊。在之前的SphereFace
和CosFace
,都是adding a margin来强迫优化。
S
n
S_n
Sn和
−
S
p
-S_p
−Sp在对称位置,如果这么正负分着看的话,就是让他们两个都小,负的
S
p
S_p
Sp小的话,同样还是
S
p
S_p
Sp大。
因为他们在对称位置,那么作用给
S
n
S_n
Sn的正的margin
和作用给
S
p
S_p
Sp的负的margin
在给的margin
大小上,数值大小上是相等的。因此,就只是需要一个a single margin m
. 而在Circle loss里,
S
n
S_n
Sn和
S
p
S_p
Sp在非对称的位置,自然地,他们需要各自的margin
:
上面式子是在公式4
的基础上引入margin
后改写得到的。
上面两个数学符号是各自的margin
,是这是和之前的那些loss不同的地方,这个分为within-class和between-class的margin. 接下来就是分析下这两个margin和各自余弦相似度的大小关系。
意思是在公式6
里面expects 所有的positive余弦相似度都大于正margin, 所有的negative余弦相似度都小于负margin. 也就是让
S
n
S_n
Sn小,让
S
p
S_p
Sp大。
此外就是还有结合二分类情形来更详细说明decision boundary在哪里。
然后就是在结合公式5
以后,改写后得到了决策边界如下:
此外,还说了公式7
表明that the decision boundary is the arc of a circle
. 圆形的arc是什么鬼。然后告诉了圆心的位置和圆的半径:
对于Circle loss而言,具有5个超参数,但通过建立间接的数学关系,可以把超参数的数量减少:
相继地,公式7
里面的决策边界也会变成:
有了公式8
, 我们就有了另外一种intuitive的对Circle Loss
的解释和理解。它旨在将
S
n
S_n
Sn向0优化,将
S
p
S_p
Sp向1优化,然后m
控制着决策边界的弧度,然后可以被看作是一个relaxation factor
. 换句话说,Circle loss
期待:
到这里就把超参数又简化成只有两个:一个m
和一个尺度缩放的因子。Section 4.5
里面会分析两个超参数对实验结果的影响。
3.3 The Advantages of Circle Loss
先给出了Circle loss
对
S
n
S_n
Sn,
S
p
S_p
Sp的梯度表达,之前的softmax-based
是对哪个变量求的梯度啊?
with respect to which variable? Circle loss这块是with respect to S n S_n Sn, S p S_p Sp.
无非又是重复复述了能更好更灵活的优化,明确的收敛目标什么的。
Balanced optimization
简单概括为:动态惩罚项强度,分配更大梯度。Gradually-attenuated gradients
逐渐衰减的梯度,刚开始时候相似性离最优解偏得远,然后此时梯度也大。随着训练,梯度变小了,elaborating 柔和的优化。这就是为啥叫自动衰减的梯度。A more definite convergence target
Circle loss是圆形的决策边界,而且是T时候收敛,而不是T撇时候收敛。更明确,然而,之前的呢,every point on the decision boundary is of the same difficulty to reach.
程序部分
别人的程序
这个就相当于我自己的label_list
。
不对不对,严谨地说应该是相当于经过convert_to_tensor
转化的labels(而且是eager张量)
而不是label_list
.
感觉最奇怪的就是这个,不知道为啥有这个,也不知道这个和我自己的哪个对应。
给我的感觉是:
因为一共有8个样本。为啥这块有个25
维度,因为这是个25分类问题。25分类问题,
以都是都是2个,而且2类的列子,去看这个y_pred
是不是整体加起来等于1
或者某些维度上等于1
。
严谨去计算,0.9487579+0.4314134+0.8212745+0.54438496
也确实不等于1
啊。
难道是在确定一个样本后,然后这个样本在25类的概率和加起来是1?
参考文献
https://blog.csdn.net/bitcarmanlee/article/details/82320853
如果是软分类中的,取到每个类别的概率的话,那应该每个数值都是大于0的啊。
这么来看的话,y_pred
或者说至少这里的y_pred
不是经过softmax layer
的输出层。
验证了,就算是多分类(10分类),这某个样本属于10类的概率加和也不是1。足以说明,这可能压根就不是概率。
[[0,8],
[1,1],
[2,3],
[3,3],
[4,2],
[5,9],
[6,5],
[7,1],
[8,2]]
就是给出一个batch里每个样本和类别(类别真实标签)的良好对应。
我以为他给的y_pred
是和我之前CE的prediction
一样呢,
然而,我自己本来的prediction
也不是(batch_size,类别数)啊。那他们这个y_pred
到底对应的啥?
这是scatter
的结果。
没弄清楚的就是为啥上面这个就是positive的膜,再往下看看,把Negative
也看了然后再说:
通过检查pos
和neg
的对角线以上的部分,我们知道确实两者互为0和1互换。
Qianjinhao
的labels.expand和下面TinyZeaMays
的最后得到的结果是一样的,说明只是殊途同归。
我们可以把意义相同的但是变量名不同的从头捋一下然后就知道label矩阵
怎么形成的了。
自己的程序
综上,我怀疑的那个zhen8838
的
合作者的代码:
这块这个相似矩阵是(None,512)也就是, 进而看看sn和sp是啥?
相似矩阵都是(batchsize内部类别数,batchsize内类别数)
注意:batch_size内类别数目
是区别于总类别数目的。
然后zhen8838的呢?没有相似矩阵,而是直接拿出sn和sp
one_hot
对应用的circle loss
, 里面进而用到的是:
tf.nn.softmax_cross_entropy_with_logits(labels=y_true, logits=y_pred)
但是之前的utils
的CE用的跟这个不完全一样,而是
tf.nn.sparse_softmax_cross_entropy_with_logits