zoukankan      html  css  js  c++  java
  • circle loss:统一softmax CrossEntropy loss 和 triplet loss / 2020

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

  • 相关阅读:
    django 的操作
    numpy 初步学习
    django orm 多对多操作
    selenium 安装chrome 以及chromedriver
    配置uwsgi + nginx
    ubuntu安装 anaconda
    django ---手动删除数据库
    前端(六)之盒模型显隐、定位与流式布局思想
    前端(五)之display 总结与浮动
    前端(四)之精灵图与盒模型布局
  • 原文地址:https://www.cnblogs.com/dynmi/p/14032144.html
Copyright © 2011-2022 走看看