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|}\)