1 Triplet loss

        Triplet Loss,即三元组损失,其中的三元是Anchor、Negative、Positive。

        通过Triplet Loss的学习后使得Positive元和Anchor元之间的距离最小,而和Negative之间距离最大。( 其中Anchor为训练数据集中随机选取的一个样本,Positive为和Anchor属于同一类的样本,而Negative则为和Anchor不同类的样本。)

        换句话说,通过学习后,使得同类样本的positive样本更靠近Anchor,而不同类的样本Negative则远离Anchor。

1.2 目标函数

1.2.1 函数符号解释

||。。。|| 欧氏距离
Positive元和Anchor之间的欧式距离度量
Negative和Anchor之间的欧式距离度量
α Positive元和Anchor之间的欧式距离   和   Negative和Anchor之间的欧式距离  之间的最小差距
式子最后的“+”

“[。。。]”内的值大于零的时候,就取“[。。。]”内的值

“[。。。]”内的值小于零的时候,就取0

——>

A-N距离大于A-P距离+N 0
A-N距离小于A-P距离+N 这个距离

 1.3 margin取值

        triplet loss 目的就是使 loss 在训练迭代中下降的越小越好,也就是要使得 Anchor 与 Positive 越接近越好,Anchor 与 Negative 越远越好。

        当 margin 值越小时,loss 也就较容易的趋近于 0,于是AP距离不需要拉的太近,AN距离不需要拉的太远,就能使得 loss 很快的趋近于 0。——>这样训练得到的结果,不能够很好的区分和Anchor相似&和Anchor不同的图像。

        当margin越大时,就需要使得网络拉近 AP距离,拉远 AN距离。如果 margin 值设置的太大,很可能最后 loss 保持一个较大的值,难以趋近于 0 。

        因此,设置一个合理的 margin 值很关键,这是衡量相似度的重要指标。

        换言之,margin 值设置的越小,loss 很容易趋近于 0 ,但很难区分相似的图像。margin 值设置的越大,loss 值较难趋近于 0,甚至导致网络不收敛,但可以较有把握的区分较为相似的图像。

1.3.1 为什么要加margin

我们希望 A和P的距离越近越好,A和N的距离越远越好,于是如果没有margin的话,我们希望:

 但是这会导致一个问题,就是平凡解:

 于是我们加了margin 来避免平凡解:

 也即:

 

1.4 Triplet 梯度       

 

 

 参考文献:Triplet Loss及其梯度_jcjx0315的博客-CSDN博客

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐