intro
刚看完《Circle Loss: A Unified Perspective of Pair Similarity Optimization》,随手写了一个overview。
一句话总结这篇paper干了什么事情---- "an unified perspective of learning with class-level labels and learning with pairwise-level labels".
如作者所陈述,这份研究主要有两个贡献:
- 提供了一个统一的视角,通过数学分析统一了分类问题的损失函数和配对问题的损失函数。
- 提出circle loss。
过去,针对class-level label,默认用softmax-CrossEntropy计算损失;针对pairswise-level label,默认用triplet loss计算损失。
现在,针对这两种情况,都可以用一种损失函数,即circle loss。实践表明,circle loss的效果比上面两者都秀。
circle loss API
变量说明
输入:
K个类内相似度, L个类间相似度
输出:
损失值
超参数:
scale factor: $gamma$ 建议值256
relaxation factor: m 建议值0.25
-
within-class相似度:(s^{i}_{p})
-
between-class相似度:(s^{j}_{n})
-
权重(alpha^{i}_{p}) = relu((m+1-s^{i}_{p}))
-
权重(alpha^{j}_{n}) = relu((m+s^{j}_{n}))
-
(margin_{p}) = 1 - m
-
(margin_{n}) = m
circle loss正向计算公式
(L_{circle} = log[ 1 + sum_{i=1}^{K}exp(- gamma * alpha^{i}_{p} * (s^{i}_{p} - Delta_{p})) * sum_{j=1}^{L}exp(gamma * alpha^{j}_{n}) * (s^{j}_{n} - Delta_{n}) ])
为何这样设计?
we expect (s_{p}) → 1 and (s_{n}) → 0.
circle loss对(s^{i}_{p})和(s^{n}_{j})求导公式:
(frac{partial L_{circle}}{partial s^{i}_{p}}) = Z * (frac{exp(gamma * ((s^{i}_{p})^{2}-(m)^{2}))}{sum_{k=1}^{K}exp(gamma * ((s^{k}_{p})^{2}-(m)^{2}))}) * (gamma * (s_{p}^{i}+m))
(frac{partial L_{circle}}{partial s^{j}_{n}}) = Z * (frac{exp(gamma * ((s^{j}_{n}-1)^{2}-(m)^{2}))}{sum_{l=1}^{L}exp(gamma * ((s^{l}_{n}-1)^{2}-(m)^{2}))}) * (gamma * (s_{p}^{j}-1-m))
(s^{i}_{p})和(s^{j}_{n})计算方法
class labeled
计算过程以单样本为单位
(w_{i}) 最后一层权重矩阵的第i个向量。
x 最后一层的输入。
类内相似度:
(sim_{p}) = cosine_similarity(x, (w_{y}))
(sim_{n}) = cosine_similarity(x, (w_{i}))
如果是n分类问题,那我们总共有n-1个(sim_{n}),1个(sim_{p})
pair-wise labeled
计算过程以batch为单位
输入:
x 目标特征向量
y 与x同类别的特征向量 / 与x不同类别的特征向量
输出:
x的类内相似度,类外相似度
相似度有两种计算方法:
-
dot_similarity 即 sim(x,y) = (x * y)
-
cosine_similarity 即 sim(x,y) = (frac{x*y}{|x|*|y|})