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