zoukankan      html  css  js  c++  java
  • Circle Loss: A Unified Perspective of Pair Similarity Optimization

    Circle Loss: A Unified Perspective of Pair Similarity Optimization

    本文从一个统一的角度来看待 成对的 相似度 优化问题 (Pair Similarity Optimization),这个问题的目的是让不同类别之间的相似度 (S_n) 尽可能小,让同一类别的相似度 (S_p) 尽可能大;

    统一两类损失函数

    • 目前大部分的损失函数,以经典的粗分类损失函数 Softmax Cross Entrophy 和 细分类损失函数 Triplet Loss 为例子,其优化方法是可以统一起来用 (S_n)(S_p) 表示,然后去减小 ((S_n) - (S_p)), (S_n)越小,(S_p)越大,上式也就越小

    1. 粗分类代表:Softmax 交叉熵损失函数

    [operatorname{softmax}left(mathrm{y}_{i} ight)=mathrm{y}_{i}^{prime}=frac{e^{mathrm{y}_{i}}}{sum_{j=1}^{n} e^{mathrm{y}_{i}}} ]

    --------------------------------------------------------------------------------

    [H(p, q)=-sum_{x} p(x) log q(x) ]

    ---------------------------------------------------------------------------------

    [L_{ce}= -sum_{i} mathrm{y_i} log frac{e^{mathrm{y}_{i}}}{sum_{j=1}^{n} e^{mathrm{y}_{i}}} ]

    ---------------------------------------------------------------------------------

    softmax 交叉熵损失的特点:

    • 对于目标分数的梯度为 (p_y-1),为负数,
      • 梯度回传使得目标分数逐渐增加,与onehot中的 1 的差距越来越小
    • 对于非目标分数的梯度为 (p_i),为正数,
      • 梯度回传使得非目标目标分数逐渐减小,与onehot中的 0 的 差距越来越小
    • (p_y-1 =- sum_{i eq y}{p_i}),正样本的梯度与所有其他负样本的梯度之和是等值反向的
    • 所有的梯度之和为0,可以看到,回传的正负梯度是平衡的

    2. 细分类代表:Triplet Loss

    • 细分类相对于粗分类来说,其类别急剧增加;比如说人脸识别,就存在着好几十亿个类别,这样类别数就远大于特征的数目;这样子如果再使用softmax交叉熵来处理的话,对算力的需求就急剧增大了;而且softmax交叉熵在处理这类细微差别的效果也不好,因此就需要新的损失函数;
    • FaceNet提出了 triplet loss,其目的是构造了一个三元组,使得同一类别的差距尽可能小,然后不同类别的差距尽可能大

    [L_{triple} = max[d(x^a, x^+) - d(x^a, x^-) + margin, 0] ]

    当 L 趋向于0时,(d(x^a, x^+) < d(x^a, x^-)),也就是说,同一类样本的距离是小于其与不同样本的距离的,即,使得同一类别的相似度尽可能大,不同类别的相似度尽可能小;

    • (max(x, 0))函数又可以通过 (log(1+e^x))来拟合

    [L_{triple} = log (1+e^{d_p - d_n +m}) ]

    2.1 triple loss流程:

    image.png
    image.png
    image.png
    image.png


    3.两类损失的统一

    粗分类和细分类的损失是可以统一起来的,其统一的损失公式如下

    [egin{aligned} mathcal{L}_{u n i} &=log left[1+sum_{i=1}^{K} sum_{j=1}^{L} exp left(gammaleft(s_{n}^{j}-s_{p}^{i}+m ight) ight) ight] \ &=log left[1+sum_{j=1}^{L} exp left(gammaleft(s_{n}^{j}+m ight) ight) sum_{i=1}^{K} exp left(gammaleft(-s_{p}^{i} ight) ight) ight] end{aligned}]

    对于粗分类来说,softmax可以分解为:类内(onehot 为1的,只有一个) + 类外(某一类和其他类组成,N-1 个)

    再来看松弛变量 (gamma)(有的论文里面叫 温度 T),为什么需要 (gamma),举例说明:
    ------------------------------------------------------------------
    x = [1 2 3 4]
    softmax(x) = [0.0321 0.0871 0.2369 0.6439]

    从这个例子来看,本来1和4只差4倍,通过指数函数的放大作用,Softmax后的结果相差大约20倍。这样看,Softmax起到了近似 one-hot max 的作用,但 0.6439 其实也不算靠近1,近似效果不佳。
    -----------------------------------------------------------------
    x放大十倍
    x = [10 20 30 40]
    softmax(x) = [9.36e-14 2.06e-9 4.54e-5 1.00]
    ------------------------------------------------------------------
    x = [0.1 0.2 0.3 0.4]
    softmax(x) = [0.2138 0.2363 0.2612 0.2887]
    ------------------------------------------------------------------

    • 温度项控制着 Softmax 的 smooth 程度, (gamma) 越大,则 Softmax 越接近one-hot max, (gamma) 越小,则近似效果越差。那么只要我们引入这一项,并将 (gamma) 设置得足够大,是不是就能解决问题了呢?

    • 其实没那么容易,注意到这个 (gamma) 是施加在所有的分数 z 上的,所以这是对分数的一个线性变换,由于 z 本身就是通过一个内积层(全连接层)得到的,线性-线性还是线性,所以这个 (gamma) 在优化过程中会被融合进前边的内积层,只要进行充分的训练,是不会产生什么实际的影响的。

    • 于是就可以动态的设置 (gamma),根据当前分数 z 的大小动态地设置 (gamma) ,就像炼丹一样,随时把控火炉的温度,

    相似度加权,优化更加灵活

    1. 相似度加权

    • 当前的损失函数的优化是不灵活的,对于上面一点指出的 ((S_n - S_p)),损失进行梯度回传的时候对于 (S_n)(S_p) 的梯度是等值反向的;这就存在一个问题,(S_n)(S_p) 的优化不是完全同步的,也就说(S_n)(S_p) 分别与其各自的最优点的距离是不一样的
    • 因此,不能以完全相同的梯度对二者进行更新,离最优点近的应该要小火慢熬,离最优点远的应该大火猛煮
    • 于是,本文提出对 (S_n)(S_p) 进行加权,而其权重的大小是应该与他们和最优点的距离是成正相关的,也就是说,越接近最优点,其权重应该越小,对应回传的梯度也因为乘以了这个梯度变得更小;反之,其权重就应该越大,使得回传的梯度也越大;

    于是给每个相似度增加了一个权重 (alpha_n, alpha_p)

    [egin{aligned} mathcal{L}_{ ext {circle}} &=log left[1+sum_{i=1}^{K} sum_{j=1}^{L} exp left(gammaleft(alpha_{n}^{j} s_{n}^{j}-alpha_{p}^{i} s_{p}^{i} ight) ight) ight] \ &=log left[1+sum_{j=1}^{L} exp left(gamma alpha_{n}^{j} s_{n}^{j} ight) sum_{i=1}^{K} exp left(-gamma alpha_{p}^{i} s_{p}^{i} ight) ight. end{aligned}]

    其中

    [left{egin{aligned} alpha_{p}^{i} &=left[O_{p}-s_{p}^{i} ight]_{+} \ alpha_{n}^{j} &=left[s_{n}^{j}-O_{n} ight]_{+} end{aligned} ight.]

    与最优点的距离越近,这个权重就越小,与最优点的距离越远,这个权重就越大

    2. Margin

    • 对于没有权重的损失函数,(S_n)(S_p)是对称的,在(S_n)上附加一个正的margin 相当于 对 (S_p) 施加一个负的 margin,因此最后面就只需要一个margin就够了

    [egin{aligned} mathcal{L}_{u n i} &=log left[1+sum_{i=1}^{K} sum_{j=1}^{L} exp left(gammaleft(s_{n}^{j}-s_{p}^{i}+m ight) ight) ight] end{aligned}]

    • 而现在增加了权重后,(S_n)(S_p)就不是对称的了,因此这里需要2个margin

    [mathcal{L}_{c i r c l e}=log left[1+sum_{j=1}^{L} exp left(gamma alpha_{n}^{j}left(s_{n}^{j}-Delta_{n} ight) ight) sum_{i=1}^{K} exp left(-gamma alpha_{p}^{i}left(s_{p}^{i}-Delta_{p} ight) ight) ight] ]

    这个地方说 期望 (s_p^i > Delta_p)(s_n^i < Delta_n) 不明白;??????
    -------------------------------------------------------------

    • 以二分类为例,将权重代入统一的损失函数,可以得到:

      [left(s_{n}-frac{O_{n}+Delta_{n}}{2} ight)^{2}+left(s_{p}-frac{O_{p}+Delta_{p}}{2} ight)^{2}=C ]

      [C=left(left(O_{n}-Delta_{n} ight)^{2}+left(O_{p}-Delta_{p} ight)^{2} ight) / 4 ]

      是一个关于 (S_n),(S_p)的圆,这也就是为什么这篇文章叫做 circle loss的原因
      ---------------------------------------------------------
    • 可以看到,这样子 circle loss就存在5个超参数,太麻烦,于是作者进行了简化:
      (O_p = 1+m, O_n = -m, Delta_p = 1-m, Delta_n = m)
      于是,决策边界可以改为:

    [left(s_{n}-0 ight)^{2}+left(s_{p}-1 ight)^{2}=2 m^{2} ]


    Cicle Loss的优点:

    image.png

      1. Balanced optimization on (S_n), (S_p)
      • 如上图 A(S_n=0.8, S_p = 0.8),其中 (S_p)离最优点1已经很接近了,但是(S_n)离最优点0还有很远,
      • 而如图(a)所示,triplet loss 无论对(S_n)还是(S_p)的梯度都还很大,这是不应该的
      • 但circle loss,如图 (c) 所示,可以看到,c_左,(S_n)离最优点很远,其梯度很大;同时,c_右,(S_p)离最优点已经很近了,所以其梯度比较小,这是符合逻辑的
        --------------------------------------------------------
      1. Gradually-attenuated gradients
      • 一般的梯度在收敛前都基本保持不变,直到收敛时其梯度陡降,可以看到,图(a),triplet loss的决策面是几乎垂直的;而且B点相比与A点来说更加接近决策边界,但是他们优化时的惩罚力度是相同的,这也是不应该的
      • 而从图(c)来看,在初始远离最优点时其梯度比较大,然后慢慢接近最优点时其梯度是逐渐减低的
        ------------------------------------------------------
      1. A (more) definite convergence target
      • triple loss的决策边界是平行 (S_n - S_p=m)的,这样边界线上的任意一个点都可能被看作是最优点
      • 而circle loss 是圆形的分界面,其最优点就只有一个
        image.png

    消融实验

    1. 权重的加入,对不同的 (gamma),性能比较稳定
      image.png

    2. (S_p, S_n) 的变化
      image.png

    可以看到,circle loss的 (S_p)增加得比SM-softmax更快,最后的拟合效果也更好。

  • 相关阅读:
    Java实现 蓝桥杯 历届试题 连号区间数
    Java实现 蓝桥杯 历届试题 连号区间数
    Java实现 蓝桥杯 历届试题 连号区间数
    Java实现 蓝桥杯 历届试题 连号区间数
    Java实现 蓝桥杯 历届试题 连号区间数
    Java实现 蓝桥杯 历届试题 大臣的旅费
    Java实现 蓝桥杯 历届试题 大臣的旅费
    Java实现 蓝桥杯 历届试题 大臣的旅费
    Java实现 蓝桥杯 历届试题 大臣的旅费
    Navicat查询哪些表有指定字段名
  • 原文地址:https://www.cnblogs.com/qiulinzhang/p/12661973.html
Copyright © 2011-2022 走看看