本文大多数知识来源于此文:https://blog.csdn.net/fire_light_/article/details/79592804
triplets
设左一的图为
Anchor(参考点),左二为Negative(反例),右一为Positive(正例),这三张图片构成一个三元组(triplet),其中A和P的欧式距离可能很大,A和N的欧式距离可能很小。
triplet Loss
什么是Triplet Loss呢?顾名思义,也就是根据三张图片组成的三元组(Triplet)计算而来的损失(Loss)。
其中,三元组由Anchor(A),Negative(N),Positive(P)组成,任意一张图片都可以作为一个基点(A),然后与它属于同一人的图片就是它的P,与它属于同一人的图片就是它的N。
Triplet Loss的学习目标可以形象的表示如下图:
网络没经过学习之前,A和P的欧式距离可能很大,A和N的欧式距离可能很小,如上图左边,在网络的学习过程中,A和P的欧式距离会逐渐减小,而A和N的距离会逐渐拉大。
也就是说,网络会直接学习特征间的可分性:同一类的特征之间的距离要尽可能的小,而不同类之间的特征距离要尽可能的大。
意思就是说通过学习,使得类间的距离要大于类内的距离。
损失函数为:
其中,左边的二范数表示类内距离,右边的二范数表示类间距离,α是一个常量。优化过程就是使用梯度下降法使得损失函数不断下降,即类内距离不断下降,类间距离不断提升。
hard triplets
理论上说,为了保证网络训练的效果最好,我们要选择hard positive
以及hard negative
来作为我们的三元组
因此,hard triplets应该是满足类内距离最大化并且类间距离最小化的三元组。